深層学習_自然言語処理
Word2vec(2013年)
次元の呪いを回避する目的や単語ベクトルの空間に意味を与えるため、単語を分散表現に変換する方法の1つとして、Word2vecである。
埋め込み行列を獲得するため方法として、CBOW(Continuous Bag-of-words)とSkip-gramが用意される.
・CBOW:前後の単語からある単語を予測するためのNN周辺の単語から対象となる1単語を予測するモデル
・skip-gram:ある単語が与えられたときに、その周辺の単語を予測するためのNN対象となる1単語から周辺単語を予測するモデル.skip-gramはCBOWより計算コストが高いが、得られる埋め込み行列の質が良い.
入力層側の重みWinを単語埋め込み行列として利用する.
負例サンプリングによる計算の軽量化である.
出力層では、すべての語彙を対象して、Softmax関数と交差エントロピー誤差関数を計算する.
コーパスの中から単語の出現頻度に基づいてサンプリングする
GNMT(2016年) paper
工夫点:
・LSTMレイヤの多層化
・双方向LSTM層
・Skip Connection
・複数GPUでの分散学習
・予測の高速化(量子化)
GNMTデータ並列は、重みの更新は非同期で実行される.
RNNを用いた言語モデル
Seq2seq
RNNを用いたEncoder-Decorderモデルの一種で、機械翻訳に使われる.
機械翻訳タスクで、入力は複数の単語から文章まで、それぞれの単語はone-hotベクトルで表現される.
入力である文章を時系列の情報を持つ特徴量へとエンコードする関数である.
def encode(words, E, W, U, b): hidden_size = W.shape[0] h = np.zeros(hidden_size) for w in words: e = E.dot(W) h = _activation(W.dot(e) + U.dot(h) + b) return h
エンコーダとデコーダがつながって、エンコーダの計算が終わると、エンコーダの最後の隠れ状態がデコーダの1時刻目の隠れ層に伝わる.
ただし、長い系列のデータを学習す時、エンコーダの初期に入力された情報がデコーダまで伝わりづらくなる問題に対して、Global-Attentionが導入される.
デコーダの対象時刻の隠れ層の出力とエンコーダの各時刻の隠れ層の出力から重みベクトルatを算出し、重みベクトルとそれをかけて、Ctを得て、デコーダの計算で利用される.
Attention
Q,K,V
Soft-Attention : softmax関数で確率分布を求めてその確率分布を用いて重みつき平均を求める方法である.
Hard-Attention: softmax関数で確率分布を求めてその確率分布に従って抽出された1点だけを得る方法である.<コード>
デコーダの隠れ状態のサイズ Nx H
h.reshape(N,1,H).repeat(T, axis=1)
アテンションの重みは N X Nとなる.
H方向に合計np.sum(t, axis=2)
Transformer(2017年)
Attention:
従来の畳み込み層や回帰結合層より優れた点として、
①Attentionを使用すると各要素同士がどれほど反応したかを数値化して可視化することできる.
②Attentionは依存関係を学習するのは得意だが、回帰結合層の一種ではない.
③入力層と出力層のすべてがネットワークでつながっているため、長い系列であっても依存関係を学習できる.
④Attentionは並列に計算できるので回帰結合層より計算がはやい.
1.Self-Attention:同じ情報源から計算するもの、同じ文章内の単語間の関係をとらえる. 一つの分散表現をKey, Value, Queryの三つに分割して獲得する.
2.Source-Target-Attention: keyとValueがエンコーダ側の情報、Queryがデコーダ側の情報で分ける。2つの系列間の対応関係をとらえる. 二つ分散表現を使用し、一つkeyとValue、残りQuery
3. Multi-head-Attention:複数個のスケール・ドットプロダクト・アテンションを並列に配置したもの
①エンコーダでのMulti-head attentionでは、QueryとKeyとValueはすべて直前のエンコーダの出力から伝わってくる.(self attention)
②デコーダ
・1つ目はSelf attentionだが、予測すべき単語の情報が予測時に利用されないようにするためにマスクがかけられる.マスクがかけられた場所の値は、Softmax関数に入力される前に -∞に置き換えられる.
・2つ目はMulti-head attentionでは、keyとValueはエンコーダ、Queryはデコーダから伝わってくる.
RNNの再帰的処理やWaveNet畳み込みが存在しないため、系列順序の情報を知るため、Position embeddingを導入し、単語の順序の情報を埋め込まれるベクトルで、単語埋め込みベクトルに加えられる.
BERT(2019年) paper
Bidirectional Encoder Representations from Transformers
[事前学習] 教師なし学習
①単語マスク問題をとくことで、局所的な特徴を捉える.
②次の文かどうかを予測する問題を解くと、大域的な特徴を捉える.
[ファインチューニング] 教師あり学習
Token embeddings :単語の違いを表す情報
Segment embeddings:文の違いを表す情報
Position embeddings: 単語の順序を表す情報
特徴:
- Transformer のエンコーダー部分を使っている
- 新しいタスクに対してファインチューニングが必要
- 双方向Transformer
- 文の中のどの位置の単語もマスクされる可能性があり、マスクした前の単語も後ろの単語にも注目する必要がある
GPT-n(2020年) paper
特徴
- Transformerのデコーダー部分を使っている
- ファインチューニングをしない
- 単一方向の Transformer
- 常に次の単語を予測するため、双方向ではない
WaveNet(2016年) Googleにより提案音声処理paper
- pixelCNNアーキテクチャに基づく音声生成モデルである.
- 同時確率分布の数式は、各音声サンプルがtより前のすべての時刻ステップにおける音声サンプルによって条件付けられること.
- WaveNetではコーザル畳み込み(causal convolution)とダイレイト畳み込み (dilated conv)を組み合わせたものを用いる.
- コーザル畳み込み:
過去の時刻ステップだけを用いて畳み込み.
モデルがデータの時間順序を破らないことを保証できる再帰結合を持たないため、RNNを訓練する場合よりも計算が高速になる.
画像処理も同等な手法にマスク畳み込みがある.受容野を広くには、多くの層/大きな畳み込みフィルタが必要.
- ダイレイト畳み込み:
少ないパラメータで広い範囲の畳み込み受容野を広げるため使う.フィルタとの積を取る相手の間隔をあける畳み込みのこと.
フィルタを適用する入力データの場所を数ステップずつスキップし、フィルタをその長さに比べて長い領域に適用する.
(拡大度Dilationは、出力層に向かうほど大きくなる)
メル尺度
CTC
機械翻訳の精度指標BLEUsがある.BLEUでは機械翻訳が参照翻訳より短い場合にペナルティを与え、参照翻訳より長い場合はペナルティを与えないBPを用いてること.
[例]
機械翻訳と参照翻訳がある. n=2のn-gramで分割した時のmodified n-gram precisionは10/17である.
機械翻訳の精度を算出するとき、よくn=1~4におけるmodified n-gram precisionの値の対数加重平均とBPを用いる.機械翻訳の精度を加重平均ではなく対数加重平均で評価するメリットとして、
機械翻訳の妥当性と流暢性を考慮した安定的な評価ができる.nは指数的に小さいなる傾向があるため、対数加重平均をとってスコアを平坦化する.nが小さい時のスコアは妥当性、nが大きい時のスコアは流暢性を評価している.
BLEUではmodified n-gram precisionを計算しているが、c>rの時、modified n-gram precisionの値は小さくなり、実質的にペナルティとなっている.