はじめに
以下の論文
[1]A. Baevski, et. al. "wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations"
のまとめ。
journal等は不明。
-
github:
https://github.com/pytorch/fairseq/tree/main/examples/wav2vec#wav2vec-20
pytorch/fairseq 全体はMITライセンスか?
既に多くの解説があると思うので、要となる事前学習に関してだけザックリまとめ。
概要
- 音声認識のモデル
- 事前学習で大量の音声を用いた教師なし学習を行うことで、本学習時のラベル付き音声データを減らすことができる
手法
学習の手順
1)巨大なラベルなしの音声データを使って教師なしで事前学習をする
2)それをfine-tuneして教師ありで学習する
の 2 step。
事前学習時のモデルのネットワーク構造
事前学習時のネットワーク構造は以下。
1)図中の下部から音声データ $\mathcal{X}$ を入力する
2)それをCNNでlatent $\mathcal{Z}$ に変換する
3)latentを量子化して $\mathcal{Q}$ とする
4)一方でlatentの一部をmaskしてtransformerに入力し、context representations $\mathcal{C}$ を得る。
このcontext representationsは q を表すように学習する。
5)maskをした部分からのcontext representations と 量子化 $q \in \mathcal{Q}$ とでlossを計算する。
mask部分に対応する q とは一致するようにlossを計算し、一方でそれ以外の q とは一致しないようにlossを計算する。(詳細は後述)これにより、全体の意味を考えながら q を推定するように学習されるだろう。
事前学習時のloss
事前学習時lossは Contrastive Loss と Diversity Loss の2つからなる。
\mathcal{L} = \mathcal{L}_m + \alpha \mathcal{L}_d \tag{2}
Contrastive Loss
先述の「モデルのネットワーク構造」における5)。
${\bf c}_t$: context representations の中でmaskされる時間 t に対応するもの
${\bf q}_t$: latentを量子化したもののうち、maskされる時間 t に対応するもの
${\bf \tilde{q}} \in {\bf Q}_t$: 全ての時間におけるlatentを量子化したもの
$sim({\bf a}, {\bf b}) = {\bf a}^T {\bf b} / | {\bf a} | | {\bf b} |$: 両ベクトル間のコサイン類似度
として
\mathcal{L}_m = - \log \frac{\exp( sim({\bf c}_t, {\bf q}_t)/ \kappa )}{\sum_{\tilde{{\bf q}} \sim {\bf Q}_t} \exp (sim({\bf c}_t, \tilde{\bf q})/ \kappa )} \tag{3}
とする。
まず右辺は negative logなので、真数部分が1に近ければlossは0に近くなり、真数部分が0に近ければlossはプラスの無限大となる。
真数部分はsoftmax的なものなので、分子は分母に含まれる。
分子が最大化し、分母のうちの分子以外の部分が最小化すれば、真数は1となり、lossは0となる。
つまり、分子に対応する t 時の量子化した値 q と対応する t 時のcontext representation ${\bf c}_t$ とのコサイン類似度が1に近くなり、かつそれ以外のペアのコサイン類似度が遠くなれば、真数部分は 1 に近くなり、lossは0に近くなる。
分母の「t-1時の量子化した値とは異なって欲しい」という部分がキモか?真数分子部分のみ最大化させることを考えると、transformerが前時刻の z を量子化するだけというバカな学習をすれば、t-1時のlatentを量子化したものをt時のcontext representationとして返す。さらに入力が音なので、t時とt-1時の波形は似てる -> t時のlatentとt-1時のlatentは似てる -> t時の量子化とt-1時の量子化が似てる、のであればそれでも成立しそう。
なので「前時刻の z を量子化するだけというバカな学習」は行わず、頑張ってmask以外の部分からcontextを考えて、mask部分の context representationを推定するようになるだろう。
Diversity Loss
これに関してはよくわかってないが、こちらのサイト
https://towardsdatascience.com/wav2vec-2-0-a-framework-for-self-supervised-learning-of-speech-representations-7d3728688cae
のFig 5 においてV entriesを均等に利用するため、V方向に均質したい。
そうすると codebook $p_g$ はV方向でsoftmaxをとっているので確立であるため、エントロピーを最大化することを意味する。これを全てのG方向の p に対して行う。つまり
\mathcal{L}_d = \frac{1}{GV} \sum^G_{g=1} -H(\bar{p}_g) = \frac{1}{GV} \sum^G_{g=1} \sum^V_{v=1} \bar{p}_{g,v} \log \bar{p}_{g,v} \tag{4}