今日からはLPCネットの性能評価メインで。まずは簡単な音源で色々動かしてみよう。

簡単な音源として薄紅先頭10secとサマーマジック先頭10secを用意した。 ネットワーク構成はとりあえずレイヤー数2, レイヤーあたりパラメータ数8, ブロックサイズ8192, 学習率0.9

LPCNetの学習による圧縮率寄与
音源 \ 手法 レイヤー数1, パラメータ数8でLD法で設定 LD法で設定 ゼロから学習 LD法初期値から学習
薄紅先頭10sec 65.16 64.33 64.07 63.81
サマーマジック先頭10sec 59.08 58.35 57.87 57.75

Python版でも見ていたが、LD(Levinson-Durbin)で初期値設定して学習すると、(ロスがより下がり)圧縮率がよくなっている。LD初期値から学習すると、LD初期値と比べ学習により0.5%ほどの改善が見受けられる。案外高い。 試しにゼロから(パラメータ全部0)から学習してみたら、LD法を設定するだけよりは良いがLD法+学習には敵わない感じ。観察したこと:

  • 学習時間: 10秒のファイルに30秒かかる。
  • 学習: 学習率を高めにとったほうがより小さくなっているが、たまに谷を乗り越えてしまって悪化している。
    • SGDよりMomentumのほうが断然早い。しかし慣性項を大きくしてしまうとやはり谷を乗り上げるケースがたまに見受けられる。
    • AdaGradもSGDより早い。全体的に安定している。しかし学習率高めのMomentumよりは遅い。
    • 学習終了を判断する閾値は 1e-8 程度でまあOKか。

他に思ったことは、

  • 構成がまだ2層のみ。もっと深くする
    • Pythonでは2層が平均的に良いという結果だったが、実際に圧縮するとどうか?
  • ロス変えるとどうなるか気になる。まずL2。他にはエントロピーロス。
    • これも前試したかもしれないけど、L2よりL1ロスのほうが圧縮率が高い。
  • Monkey's AudioがそういえばCNNだった。実装調査必須
    • エンコードがやけに早いので全く同じことはないと思っているが、、、今こそ見るべきか。