-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_RNNEncoderDecoder
- 戻る(ニューラルネットワーク、言語処理(AI))
- 一般的なフツーのニューラルネットワーク
- 順伝播型ニューラルネットワーク(FNN)(ニューラルネットワークの該当節を参照)
- ディープニューラルネットワーク(DNN)(ニューラルネットワークの該当節を参照)
- 畳み込みニューラルネットワーク(CNN)
-
再帰型ニューラルネットワーク(RNN)
- 長短期記憶ニューラルネットワーク(LSTM)
- RNN Encoder-Decoder(Sequence-to-Sequence)
- 生成モデル(機械学習の理論の該当節を参照)系の
ニューラルネットワーク
- 一般的なフツーのニューラルネットワーク
再帰型ニューラルネットワーク(RNN)の該当節で説明した通り。
-
RNN EncDecとはRNN Encoder-Decoderの事で、ココでは
- AIcia Solid Projectで紹介されていた論文中のRNN EncDecに付いての説明。
- コレはゼロつく2のRNN Encoder-Decoder
(LSTM + Peeky)とは少々異なる。
-
入出力
-
入力
翻訳前embedding単語列(x1, x2, ... ,xi) -
出力
- 翻訳後embedding単語[確率]列(P(y1), P(y2), ... ,P(yi))
- この確率分布(p(yi))から(BEAM searchで)単語(yi)を選ぶ。
-
-
Encoder:
GRU(長短期記憶ニューラルネットワーク(LSTM)の該当節を参照)を使用して、- 文(x1, x2, ... ,xi)を意味ベクトルCへ変換。
- 意味ベクトルCは一番最後の再帰段階の隠れ状態(C = Sn^(e))
-
Decoder:
GRU(長短期記憶ニューラルネットワーク(LSTM)の該当節を参照)を使用して、-
確率分布を出して単語を選ぶ。
-
P(yi) = P(yi|yi-1, Si^(d), C)
P(yi):単語の確率, yi-1:前の単語, Si^(d):隠れ状態, C:意味ベクトル-
RNN層にはどの再帰の段階でも意味ベクトルCと隠れ状態(Si^(d))を入力する。
-
一番最初の再帰段階のRNN層への入力は[BOS]で、隠れ状態は、例外的に意味ベクトルCを指定する。
-
RNN層の出力を出力層(Affine変換+Softmax
(ニューラルネットワーク(推論)の該当節を参照))で
単語の確率分布(p(yi))にして単語(yi)を選ぶ。 -
二番目以降の再帰段階のRNN層への入力は前段で選択した単語(yi-1)
-
一番最後の再帰段階のRNN層→出力層からの最終的な出力は[EOS]
-
-

出典:https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778
Attention については言語処理(AI)の該当節も参照。
-
論文中は、AttentionではなくAlign(softalign / softsearch)(?)
-
これは、機械翻訳で単語の対応関係を表す情報を「Align」と呼ぶため。
-
Attentionとは、
-
注意表現を学習する仕組み。
-
Attentionとは簡単に言うと、
- 注意の英単語である Attentionからきている。
- 従来の意味ベクトルではなく、入力単語への参照を追加した文脈を加味した単語ベクトル。
-
「時間の重み」の概念をネットワークに組み込んだもの。
- 近年、Attention機構を追加することにより精度が向上したモデルも多い。
- Attentionの重みによってどの時間の入力を重視しているか確認することが可能。
-
-
機構
2層のNNを使って 「入力単語」「隠れ状態(今まで何書いた?)」のベクトルから注目する単語を選んで足す。-
LSTMなどで使用されているゲート機構に似ている。
- 必要な情報は強調し、不必要な情報は目立たなくする。
- より良い注意表現を学習できれば膨大な情報から
注意を向けるべき情報に焦点を当てて処理をすることが可能になる。
-
Enc-Dec、Seq2Seqの問題は
- 「本質」の意味ベクトルが固定次元なので長い系列の場合、意味が入り切らない点。
- 実際に、機械翻訳タスクで
長文では単語数が増えるに連れて精度が下がって行く。 - この問題を解決するために、Attentionは固定次元の意味ベクトルに入力系列への参照を追加した。
-
機械翻訳タスクでは、文中の単語の意味を理解する時に、
文中のどの単語に注目すれば良いかを表すスコアとなる。- 入力単語~出力単語、どれに対応しているか?(対応付けの良さ)の重みを計算する。
- 入力の各単語のベクトルの重みを足して、出力が注意を向けるべき情報を入力から得る。
- 例えば英語でitが出て来たら、その単語だけでは翻訳できない。
itを含む文章中のどの単語にどれだけ注目すべきかというスコアを表す。
-
-
種類
以下の種類があるが、ココでは、Source-Target Attentionについての説明になる。-
Source-Target Attention
- 2つの文中の単語間の関係性を算出するAttention機構
- Key・ValueとQueryが異なる2つの文から生成される。
-
Self-Attention(自己アテンション)
- 同一の文中の単語同士の関係性を捉えるAttention機構
- Key・ValueとQueryが同一の文から生成される。
-
-
RNN searchとはsoftsearch(つまりAttention)を実装したRNN EncDecで、ココでは
- AIcia Solid Projectで紹介されていた論文中のRNN searchに付いての説明。
- コレはゼロつく2のAttentionを実装したRNN EncDec
(LSTM + Encoder側もBidirectional
(長短期記憶ニューラルネットワーク(LSTM)の該当節を参照)ではない)とは少々異なる。
-
入出力
-
入力
翻訳前embedding単語列(x1, x2, ... ,xi) -
出力
- 翻訳後embedding単語[確率]列(P(y1), P(y2), ... ,P(yi))
- この確率分布(p(yi))から(BEAM searchで)単語(yi)を選ぶ。
-
-
Encoder:
Bidirectional な GRU(いずれも 長短期記憶ニューラルネットワーク(LSTM)の該当節を参照)を
使用し、- 文(x1, x2, ... ,xi)の前後の文脈を加味して単語をベクトル化(Annotation)。
- コレは→方向と←方向の2つのベクトル(→hj, ←hj)をconcatして縦ベクトルに変換したもの(hj)。
- ←方向のEncoderの一番最後の再帰段階の単語ベクトルを
Decoderの最初の隠れ状態として使用する(S0^(d) = ←h1)。

出典:https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778
-
Decoder:
GRU(長短期記憶ニューラルネットワーク(LSTM)の該当節を参照)を使用して、-
確率分布を出して単語を選ぶ。
-
P(yi) = P(yi|yi-1, Si^(d), Ci)
P(yi):単語の確率, yi-1:前の単語, Si^(d):隠れ状態, Ci:文脈を加味した単語ベクトル-
RNN層にはどの再帰の段階でも隠れ状態(Si^(d))を入力する。
-
一番最初の再帰段階のRNN層への入力は[BOS]で、
隠れ状態は、例外的に←方向のEncoderの一番最後の再帰段階の単語ベクトルを指定する
(S0^(d) = ←h1)。 -
RNN層の出力をAttention層→出力層で単語の確率分布(p(yi))にして単語(yi)を選ぶ。
・Ciとhを使って計算したhj^tをAffine変換+Softmax
(ニューラルネットワーク(推論)の該当節を参照)
・単語を選択するsoftmaxの前にsinglemaxoutを通す(Bidirectionalだから?) -
二番目以降の再帰段階のRNN層への入力は前段で選択した単語(yi-1)
-
一番最後の再帰段階のRNN層→Attention層→出力層からの最終的な出力は[EOS]
-
-
C → Ci は、従来の意味ベクトルではなく、入力単語への参照を追加した文脈を加味した単語ベクトル。
再帰セルに2層のNNを重ね(Attention機構、Align(softalign / softsearch))、
どの単語に注目するか以下の計算を行い決定する。
-

出典:https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778
Attention については言語処理(AI)の該当節も参照。
-
Attention の基本は query と memory(key, value)
Attention とは query によって memory(key, value) から必要な情報を選択的に引っ張ってくること。 -
KVSが語源になっているが実際の仕組みは全然違う。
-
KVSではMemoryをKey・Valueの対で構成し、
MemoryからKeyに対応したValueを返す。 - AttentionではQueryとKeyの類似度(内積)をSoftmax
(ニューラルネットワーク(推論)の該当節を参照)で
重み(Attention_Weight)に変換し、 - この重み(Attention_Weight)とVのdot積=加重和が
Ci(文脈を加味した単語ベクトル)になる。
-
KVSではMemoryをKey・Valueの対で構成し、
-
Q、K、V
-
Query Q
decoderのRNNセルから出力される情報:Si-1^(d) = h -
Key K
encoderから連動される単語ベクトル(hj)のリストで行列(hs) -
Value V
encoderから連動される単語ベクトル(hj)のリストで行列(hs)(何気にKと同じ)
-
-
計算方法
-
hs(memory(K, V))はhj(Encoderの単語ベクトル)のリストで行列
-
h(= Si^(d))とhs(K)のdot積=内積(hW・hs)(Wは重み)で
類似度(入力と出力の関係)を計算し、
この類似度をSoftmax(ニューラルネットワーク(推論)の該当節を参照)に
かけて合計1になるように正規化して重み(Attention_Weight)に変換する。- ベクトルの内積は同方向の場合は大きくなり、直交する場合は0になり、反対方向の場合はマイナスになる。
- ゼロつく2では、hWのWは使用しないで、そのまま、生のhを使用している。
hsもhsWとすべき的な情報もある。
-
この重み(Attention_Weight)とhs(V)のdot積=加重和が
Ci(文脈を加味した単語ベクトル)になる。- hj(Encoderの単語ベクトル)* 重み(Attention_Weight)
- 上記のすべてベクトルを足し合わせるとCiになる。
-
Ciとhを使って出力層で計算する。
-





出典:https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778
人工知能(AI):ロボティクスの該当節を参照。
- 深層学習についてのレポート(RNN編)(LLM編)
https://www.osscons.jp/joho108j0-537/#_537
言語処理(AI)の該当節を参照。
-
ta2bonn
https://qiita.com/ta2bonn/- Attentionを理解するためにRNN、Word2Vec、LSTM、Seq2Seq、Attentionの順に整理してみた
https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778
- Attentionを理解するためにRNN、Word2Vec、LSTM、Seq2Seq、Attentionの順に整理してみた
再帰型ニューラルネットワーク(RNN)の該当節を参照。
移行メモ
- 図とその出典 URL は、元の PukiWiki では1列の表として組まれていたため、 画像を並べたうえで出典行を下に書き出した。
- 「ニ番目以降」(カタカナのニ)は「二番目以降」に、 「にについての説明」は「についての説明」に、 「直行する場合」は「直交する場合」に、 「すベキ的な情報」は「すべき的な情報」に正した。
Tags: 移行, 人工知能, 深層学習, ニューラルネットワーク, RNN, Seq2Seq, Attention, 機械翻訳
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。