今日からはLPCネットの性能評価メインで。まずは簡単な音源で色々動かしてみよう。
簡単な音源として薄紅先頭10secとサマーマジック先頭10secを用意した。 ネットワーク構成はとりあえずレイヤー数2, レイヤーあたりパラメータ数8, ブロックサイズ8192, 学習率0.9
音源 \ 手法 | レイヤー数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だった。実装調査必須
- エンコードがやけに早いので全く同じことはないと思っているが、、、今こそ見るべきか。