seq2seq(シークエンス・トゥー・シークエンス)
Y(t+1) = F(Y(t), x(t))
「このように書きましたが、実は Y(t) のままだと不十分です」
「不十分って、どういうことなの」ミアが尋ねる。
「Y(t)に入るのは、具体的には”吾輩”とか”猫”という単語です。UTF-8文字コード体系では、それぞれ6バイト、3バイトの文字コードにすぎません」
「そうね」
「そこで、例えば100個ほどの実数からなる隠れ層ベクトル h(t) を導入して Y(t) の代わりをさせます。学習の余地を与えていると言ってもいいでしょう」
h(t) =f(U・x(t)+W・h(t-1) + b)
y(t) =g(V・h(t) + c)
「f(). g() はある種の関数です。 U,V,W は行列です。 U・x(t) は行列と ベクトルx(t) の積です。行列とベクトルの積は、以下のように計算します」
「『総和』を表すΣでの表記もいちばん右に書いてあります。 i のところを順に 1,2 として足し算しているだけです。下の段は、具体的な数字を入れた計算例です」
「このように、直前の隠れ状態 (h(t-1)) を利用して次の隠れ状態 (h(t)) を計算するネットワークを、リカレント・ニューラル・ネットワーク(RNN)と呼びます」
「リカレント、自分自身に戻って来るということだな」
「そうです。ただし、従来のRNNでは、長い系列を学習するときに、遠い過去の情報をうまく保持・利用することが難しい場合がありました。」
「そこで、LSTM(Long short-term memory)という『記憶セル』が提案されました。1997年のことです」
「LSTMは効果的に記憶することができましたので、2017年頃まで盛んに利用されました」
「なんだか、急にゴチャゴチャしてきたな。」
「あ、LSTMの式を憶える必要はありません。これは先の方で Attention という技法を紹介するために説明しています」
「ここでLSTMについて覚えておいてほしいのはふたつだけです
・LSTMは h(t)=F(x(t), h(t-1)), y(t) = G(h(t)) という形をしているということ
・ h(t)を計算するには h(t-1) が事前に計算されていなければならない
ということです」
「それは、わかるわ。式を見ればね」
「それはよかった。ともかくもLSTMという『計算セル』はこのようなものです。知識を学習する場所はWf,Ufなどの行列の中にあるウェイト・パラメーターです。では、機械翻訳にもどりましょう」
「あと、ところどころに出て来る
σ(W*x(t)+U*h(t-1) + b)
のσ()のなかの式を 『affine変換』 といいます。数学の 『アフィン変換』から来ています」
σは、シグモイドという活性化関数です。これは0から1まで、ゆるやかに単調増加する関数で、後ほどグラフをお見せします。
「ニューラルネットワークを使った機械翻訳の方式の一つに、エンコーダー・デコーダー型のモデルがあります」
「エンコーダーに『吾輩は猫である』と入れると、デコーダーから『I am a cat.』と出てくるわけです」
「真ん中にある h がLSTMの隠れ状態ということ」エレナが尋ねる。
「そのとおりです。エンコーダーの中身は、このようになっています」
「LSTMが入っているわね」とミアが言う。
「そうです、幾つもLSTMが書かれていますが、実は1つのLSTMしかありません。何回も同じLSTMで計算しています」
「で、最後の h、『吾輩は猫である』だったら h(6) をデコーダーに渡すのね」
「そうです、そうです。で、デコーダーの中はこうなっています」
「エンコーダーに似ていますが、LSTM自身の1時刻前の出力、画面では★ですが、それを入力にしています。Affine という箱は隠れ層ベクトルを『I』、『cat』などの文字に戻しているところです」
「あと、<eos> というのは文章の終わりを示す記号です。同じように文章の始まりを示す記号に<bos>や<sos>などもあります」
「そして、機械の解答と、正解と突き合わせて、その差を元にしてバックプロパゲーションしてLSTMのなかのウェイト行列のパラメーターを修正しているのね」
「そのとおりです。仕組みは同じです。最初の解答は★〇※▼二十〇<eos>などと、意味不明の文字列ですが、学習が進むと I am a cat. と返すようになります」
「このエンコーダーとデコーダーを組み合わせた翻訳機には、いくつかの種類がありますが、代表的なものが、seq2seq<シークエンス・トゥー・シークエンス>です。2010年代の機械翻訳などに使われていました」




