SAMPLERNN: AN UNCONDITIONAL END-TO-END NEURAL AUDIO GENERATION MODEL

SAMPLERNN: AN UNCONDITIONAL END-TO-END NEURAL AUDIO GENERATION MODEL

Abstract
 条件なしでオーディオ信号を一度に作る手法を提案する。我々のモデルは階層構造中で自己回帰マルチレイヤパーセプトロンというメモリの少ないモジュールと、ステートフルなrnnを組み合わせて、長い系列の信号に含まれる変化をとらえることができる。

1. Introduction
  オーディオの生成はチャレンジングなタスクだ。この難しさの理由の一つは、信号の次元と意味レベルの不一致だ。スピーチ生成では、スピーチに対応した発言の生成に興味がある。低サンプリングの16khzでも、一ワードに平均6000信号も付くなくてはいけない。
 伝統的に高次元の生音源はスペクトラルや特徴に圧縮されてきた。
 この論文では、オーディオデータの依存モデルをRNNでモデル化する。RNNはよく研究されているが、依存の幅が長時間にわたる場合うまくいかないことが知られている。
 この論文では、end-to-endの条件なしのオーディオ生成モデルを提案する、扱いやすい形で。我々のモデルは異なる時間クロックの時は異なるモジュールを利用する(WaveNetでは一定だった)ので、異なるレベルの抽象化をフレキシブルにできる。
 貢献は以下だ。
1. RNNでメモリを効率化して頑張ります。
2. 上記の効果を色々調べました。
3. データセットで結果を見ました。

2. Sample RNN Model
 SampleRNNを提案します。これはオーディオの密度モデルだ。SampleRNNは過去のサンプルで条件づけて、Xの確率をモデル化します。
 P(X) = Σi,T p(xi+1 | x1, ..., xi)
 RNNは以下の式で定義される。
 ht = h(ht-1, xi = t)
    p(xi+1|x1,...,xi) = Softmax(MLP(ht))
 Hはメモリセルで、GRUとか、LSTMとかで使われる。しかし、生オーディオの処理は異なるスケールの情報が入り組んでいるため、難しい。
 SampleRNNはモジュールの階層構造を用いて、この問題を解決する。各階層構造は、異なる時間の解像度を持つ。一番低いモジュールは、各サンプルを処理し、高い階層のモジュールは長い時間を処理する。各モジュールは、下のモジュールに依存する。一番下のモジュールはサンプルレベルの予測を出力する。全体はend-to-endで学習する。

2.1 Frame-Level Modules
 各サンプルで処理するよりも、高い階層のSampleRNNのモジュールは、重なってない、FS(Frame Size)のサンプルを処理する。各レベルのモジュールは、それまで履歴を要約し、下のジュールへ伝えていく。
 上の階層で条件づけるフレームの変数の数は固定長の隠れ状態ht(k)で表現される。tは格段の時間に関係する。RNNは各時刻tでメモリの更新をする、ひとつ前の状態と現在の入力をもって。この入力はk=Kでは単純なフレームだが、それ以外では、状態ベクトルと、高い階層のベクトルと、入力フレームになる。
 よって、異なるモジュールは異なる解像度の処理をすることになる。我々は下の階層に入力する前に、各ベクトルcをr(k)のベクトルへ更新する必要がある、これを、線形写像でやる。
 ここで、段kのフレームレベルの式をだす。kは省略する。
 まとめた分のhをアップサンプリングしてcにして、入力に渡す。

2.2 Sample-Lelvel Module
 一番低いモジュール(k = 1)は、FS(1)上の分布samplexi+1に渡る分布を出力する。ci(k=2)と同様に先行して、一番近くの高いモジュール(情報をエンコードしている、そのフレームの事前を)。FS(1)は通常小さな値で、近くのサンプルに相関があるから、モデル化しやすく、MLPでいく。eiはxiを表現することを保証し、埋め込みレイヤを通ったあとに、。。(ダメだ難しい。。。)ソフトマックスでいく?

2.2.1 Outoput Quantization
 サンプルレベルのモデルはq通りの離散の確率を算出する
 GMM使うより、こっちのSoftMaxの方がよかったです。
 また、量子化して出力しています。入力も量子化した方が結果がよかったです。

2.2.2 Conditionally Independent Sample Output
 サンプルレベルの自己回帰モデルの重要度を示すため、これを、Multi-SoftMaxに置き換えてみた。出力依存cだけにしてみた。でもこれはすごく悪かった。

2.3 Truncated BPTT
 短い長さで切っても意外と学習できたよ。

 

 

メモ
 Fig1, ??やりたいことはわかるけど、なんかタスクの全体像が見えないなー。 
 低い(low  )モジュール(k = 1):入力が上からのアップサンプリング
 高い(high)モジュール(k = K):入力が各サンプル
 生成モデルの話をしてるのかなー。そう。
 実装を見ないと細かいところがわからないなー。
 まぁでもそんなに、長い系列を扱うわけじゃないから、そんなに気にしなくてもいいかなー.自己回帰系の生成モデル使うだけでもいいかも。

 

その他
 https://www.jstage.jst.go.jp/article/jasj/74/7/74_387/_pdf
 https://qiita.com/icoxfog417/items/f170666d81f773e4b1a7

 

単語
at a time:一度に
stateful:状態変化を保持するシステム
discrepancy:不一致
utterances:言葉
tractable:扱いやすい
density:密度
tier:ひな段
exclusive:排他的
preceding:先行する