Contrastive Learning of General-Purpose Audio Representations
arxiv: https://arxiv.org/abs/2010.10915
Github: https://github.com/google-research/google-research/tree/master/cola
実装はtensorflow
許して
Qiitaにあるような丁寧な全訳記事ではなく、かいつまんでまとめただけです
summary
- Google Research Paris が出した音声版 self-supervised learning
- 同じclipから切り出したsampleをpositive, ほかのclip から切り出したsampleをnegative としてcontrastive learningする。シンプル。
- fine-tuning して使えばいい性能が出た。
- 重みは公開されてない*1
論文内容
contrastive
手法は非常にシンプル。同じclipから切り出したサンプルをpositive sample, ほかのclip から切り出したサンプルをnegative sampleとしてcontrastive learning します。
contrastive learning についてはわかりやすい記事があったので紹介しておきます。参照してください。翻訳記事を書く予定はありません。
このシンプルなサンプリング手法には以下の利点があります。
- ただcropするだけなので、画像などで行われているような 「augmentation の探索」をする必要がない
- 同じ(ミニ)バッチ内の他のclipはすべてnegative sampleになるので、多様な組み合わせが用意できる(さらにshuffleもいれている)
- どれがnegative sampleかを決めるために余分な計算を必要としない
- バッチ内で完結するのでメモリにも優しい
目的関数
目的関数はmulti-class cross entropy
これによって複数のnegative distractorを用いることができます。
s()はsimilarity. コサインではなくbilinear similarity 。私は重み付けの内積という理解をしています→参考。 bilinear similarityを選んだ理由は、「そっちの方が性能いいから」ということらしいです。論文中でも比較実験がされてます。
ネットワーク
ネットワーク構造は、EfficientNet-B0をEncoderに使って、特徴表現hを得たあと、h をprojection head (ただの全結合層) に入力して得たz について、agreementをとる、という構造。
agreementは要はcontrastive learning のことだと思います。
pre-trainしたencoderを他のタスクに使うときは、hまでのネットワークを用います。projection headやgは使いません。理由について明確に述べられてませんが、projection head で次元が減る分情報量が減るからみたいです。実際にgを抜かしたら性能いいよ、って言ってる人もいます。
その他
入力
log-compressed mel-filterbanks
事前学習時のパラメータ
事前学習時は batch_size = 1024, learning_rate = 10^-4, epochs=500, optimizer = Adam, を用いてます(公式のコードのデフォルト値とは違うので注意)。
感想
Contrastive learningもaudioも初めてだったんですが、シンプルな内容でよかったです。
憶測
何かとはやりのself-supervisedをやってみたい。音声界隈のビッグデータセットであるAudioSetとcontrastive learningでpre-trainしたものがまだない。的な感じで着手されたのではないでしょうか。自然な流れだと思います。
脚注
*1:なんでやねーん!もし公開されてたら教えてください