「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る([[ニューラルネットワーク]]、[[言語処理(AI)]]) --一般的なフツーの[[ニューラルネットワーク]] ---[[順伝播型ニューラルネットワーク(FNN)>ニューラルネットワーク#mcd402f7]] ---[[ディープニューラルネットワーク(DNN)>ニューラルネットワーク#ge448516]] ---[[畳み込みニューラルネットワーク(CNN)]] --[[再帰型ニューラルネットワーク(RNN)]] ---[[長短期記憶ニューラルネットワーク(LSTM)]] ---RNN Encoder-Decoder(Sequence-to-Sequence) --[[生成モデル>機械学習の理論#p3f4e303]]系の[[ニューラルネットワーク]] ---[[自己符号化器(AE:オートエンコーダ)]] ---[[テキスト生成系(Transformer系)]] ---[[敵対的生成ネットワーク(GAN)]] *目次 [#g3f5c3af] #contents *概要 [#pe33e681] [[コチラ>再帰型ニューラルネットワーク(RNN)#ye7bfc6b]]で説明した通り。 *詳細 [#z88ba65f] **[[機械翻訳]]での利用 [#pb1ed8f6] ***RNN EncDec [#h871aa88] -RNN EncDecとはRNN Encoder-Decoderの事で、ココでは~ --[[AIcia Solid Project>#r5eddee7]]で紹介されていた論文中のRNN EncDecに付いての説明。 --コレは[[ゼロつく2>#ub0d1e19]]のRNN Encoder-Decoder([[LSTM>長短期記憶ニューラルネットワーク(LSTM)]] + Peeky)とは少々異なる。 -入出力 --入力~ 翻訳前embedding単語列(x1, x2, ... ,xi) --出力 ---翻訳後embedding単語[確率]列(P(y1), P(y2), ... ,P(yi)) ---この確率分布(p(yi))から(BEAM searchで)単語(yi)を選ぶ。 -Encoder:~ [[GRU>長短期記憶ニューラルネットワーク(LSTM)#reea7d9e]]を使用して、 --文(x1, x2, ... ,xi)を意味ベクトルCへ変換。 --意味ベクトルCは一番最後の再帰段階の隠れ状態(C = Sn^(e)) -Decoder:~ [[GRU>長短期記憶ニューラルネットワーク(LSTM)#reea7d9e]]を使用して、 --確率分布を出して単語を選ぶ。 --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>ニューラルネットワーク(推論)#b77bdfd7]])で単語の確率分布(p(yi))にして単語(yi)を選ぶ。 ---ニ番目以降の再帰段階のRNN層への入力は前段で選択した単語(yi-1) ---一番最後の再帰段階のRNN層→出力層からの最終的な出力は[EOS] |#ref(Encoder-Decoder.png,left,nowrap,イメージ,50%)| |https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778| ***[[Attention>言語処理(AI)#qc74fd48]]の概要 [#oc99a385] -論文中は、AttentionではなくAlign(softalign / softsearch)(?) -これは、機械翻訳で単語の対応関係を表す情報を「Align」と呼ぶため。 -Attentionとは、 --注意表現を学習する仕組み。 --Attentionとは簡単に言うと、 ---注意の英単語である Attentionからきている。 ---従来の意味ベクトルではなく、入力単語への参照を追加した文脈を加味した単語ベクトル。 --「時間の重み」の概念をネットワークに組み込んだもの。 ---近年、Attention機構を追加することにより精度が向上したモデルも多い。 ---Attentionの重みによってどの時間の入力を重視しているか確認することが可能。 -機構~ 2層のNNを使って 「入力単語」「隠れ状態(今まで何書いた?)」のベクトルから注目する単語を選んで足す。 --[[LSTM>長短期記憶ニューラルネットワーク(LSTM)]]などで使用されているゲート機構に似ている。 ---必要な情報は強調し、不必要な情報は目立たなくする。 ---より良い注意表現を学習できれば膨大な情報から~ 注意を向けるべき情報に焦点を当てて処理をすることが可能になる。 --[[Enc-Dec、Seq2Seq>#h871aa88]]の問題は ---「本質」の意味ベクトルが固定次元なので長い系列の場合、意味が入り切らない点。 ---実際に、[[機械翻訳]]タスクで長文では単語数が増えるに連れて精度が下がって行く。 ---この問題を解決するために、Attentionは固定次元の意味ベクトルに入力系列への参照を追加した。 --[[機械翻訳]]タスクでは、文中の単語の意味を理解する時に、~ 文中のどの単語に注目すれば良いかを表すスコアとなる。 ---入力単語~出力単語、どれに対応しているか?(対応付けの良さ)の重みを計算する。 ---入力の各単語のベクトルの重みを足して、出力が注意を向けるべき情報を入力から得る。 ---例えば英語でitが出て来たら、その単語だけでは翻訳できない。~ itを含む文章中のどの単語にどれだけ注目すべきかというスコアを表す。 -種類~ 以下の種類があるが、ココでは、Source-Target Attentionにについての説明になる。 --Source-Target Attention ---2つの文中の単語間の関係性を算出するAttention機構 ---Key・ValueとQueryが異なる2つの文から生成される。 --Self-Attention(自己アテンション) ---同一の文中の単語同士の関係性を捉えるAttention機構 ---Key・ValueとQueryが同一の文から生成される。 ***RNN search [#ree0369e] -RNN searchとはsoftsearch(つまりAttention)を実装した[[RNN EncDec>#h871aa88]]で、ココでは~ --[[AIcia Solid Project>#r5eddee7]]で紹介されていた論文中のRNN searchに付いての説明。 --コレは[[ゼロつく2>#ub0d1e19]]のAttentionを実装した[[RNN EncDec>#h871aa88]]([[LSTM>長短期記憶ニューラルネットワーク(LSTM)]] + Encoder側も[[Bidirectional>長短期記憶ニューラルネットワーク(LSTM)#xbfd6b86]]ではない)とは少々異なる。 -入出力 --入力~ 翻訳前embedding単語列(x1, x2, ... ,xi) --出力 ---翻訳後embedding単語[確率]列(P(y1), P(y2), ... ,P(yi)) ---この確率分布(p(yi))から(BEAM searchで)単語(yi)を選ぶ。 -Encoder:~ [[Bidirectional>長短期記憶ニューラルネットワーク(LSTM)#xbfd6b86]] な [[GRU>長短期記憶ニューラルネットワーク(LSTM)#reea7d9e]]を使用し、~ --文(x1, x2, ... ,xi)の前後の文脈を加味して単語をベクトル化(Annotation)。 --コレは→方向と←方向の2つのベクトル(→hj, ←hj)をconcatして縦ベクトルに変換したもの(hj)。 --←方向のEncoderの一番最後の再帰段階の単語ベクトルをDecoderの最初の隠れ状態として使用する(S0^(d) = ←h1)。 |#ref(Attention_RNN_Search1.png,left,nowrap,イメージ,50%)| |https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778| -Decoder:~ [[GRU>長短期記憶ニューラルネットワーク(LSTM)#reea7d9e]]を使用して、 --確率分布を出して単語を選ぶ。 --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>ニューラルネットワーク(推論)#b77bdfd7]]~ ・単語を選択するsoftmaxの前にsinglemaxoutを通す([[Bidirectional>長短期記憶ニューラルネットワーク(LSTM)#xbfd6b86]]だから?) ---ニ番目以降の再帰段階のRNN層への入力は前段で選択した単語(yi-1) ---一番最後の再帰段階のRNN層→Attention層→出力層からの最終的な出力は[EOS] --C → Ci は、従来の意味ベクトルではなく、入力単語への参照を追加した文脈を加味した単語ベクトル。~ 再帰セルに2層のNNを重ね(Attention機構、Align(softalign / softsearch))、どの単語に注目するか以下の計算を行い決定する。 |#ref(Attention_RNN_Search2.png,left,nowrap,イメージ,50%)| |https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778| ***[[Attention>言語処理(AI)#qc74fd48]]の計算 [#efa6e9c6] -Attention の基本は query と memory(key, value) ~ Attention とは query によって memory(key, value) から必要な情報を選択的に引っ張ってくること。 -[[KVS>NoSQL - KVS型]]が語源になっているが実際の仕組みは全然違う。 --[[KVS>NoSQL - KVS型]]ではMemoryをKey・Valueの対で構成し、MemoryからKeyに対応したValueを返す。 --AttentionではQueryとKeyの類似度(内積)を[[Softmax>ニューラルネットワーク(推論)#b77bdfd7]]で重み(Attention_Weight)に変換し、 --この重み(Attention_Weight)とVのdot積=加重和がCi(文脈を加味した単語ベクトル)になる。 -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>ニューラルネットワーク(推論)#b77bdfd7]]にかけて合計1になるように正規化して重み(Attention_Weight)に変換する。 ---ベクトルの内積は同方向の場合は大きくなり、直行する場合は0になり、反対方向の場合はマイナスになる。 ---ゼロつく2では、hWのWは使用しないで、そのまま、生のhを使用している。hsもhsWとすベキ的な情報もある。 --この重み(Attention_Weight)とhs(V)のdot積=加重和がCi(文脈を加味した単語ベクトル)になる。 ---hj(Encoderの単語ベクトル)* 重み(Attention_Weight) ---上記のすべてベクトルを足し合わせるとCiになる。 --Ciとhを使って出力層で計算する。 |#ref(Attention_RNN_Search0.png,left,nowrap,イメージ,70%)| |#ref(Attention_RNN_Search3.png,left,nowrap,イメージ,50%)| |#ref(Attention_RNN_Search4.png,left,nowrap,イメージ,50%)| |#ref(Attention_RNN_Search5.png,left,nowrap,イメージ,50%)| |#ref(Attention_RNN_Search6.png,left,nowrap,イメージ,50%)| |https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778| **[[ロボティクスでの利用>人工知能(AI):ロボティクス#o2f748d6]] [#s6d9d533] *参考 [#k9e4c67e] -深層学習についてのレポート(RNN編)~ -深層学習についてのレポート(RNN編)(LLM編)~ https://www.osscons.jp/joho108j0-537/#_537 **[[ゼロつく2>言語処理(AI)#s380107d]] [#ub0d1e19] **Qiita [#mab5d9d6] -ta2bonn~ https://qiita.com/ta2bonn/ --Attentionを理解するためにRNN、Word2Vec、LSTM、Seq2Seq、Attentionの順に整理してみた~ https://qiita.com/ta2bonn/items/c645ecbcf9dabd0c4778 **YouTube [#j8a7799c] ***[[AIcia Solid Project>再帰型ニューラルネットワーク(RNN)#u8f2a523]] [#r5eddee7]