目次
はじめに
てくますプロジェクトでは、てくますゼミと呼ばれる輪読会を隔週で開催しています。
少人数であーだこーだ議論しながら、考える楽しさを分かち合う、ゼミのようなコミュニティです。主に、AIなどの「IT × 数学」領域について学習しています。
現在は「ゼロから作るDeep Learning② 自然言語処理編」という本を読み進めています。
今回は本書第5回の輪読会ということで、5章を読み進めました!
本記事では、今回の勉強会で学んだことをざっくりと紹介していきます。
学習内容
CBOWモデルの課題
以下の英文を考えます。
Tom was watching TV in his room.
Mary came into the room.
Mary said hi to (?).
(?)にはTomが当てはまります。
CBOWモデルにおいてこの正しい答えを得るためには、18個も前に登場するTomを記憶しておかなければなりません。
そのためにはCBOWモデルのコンテキストサイズを20などの大きい値にする必要があります。しかし、CBOWモデルの中間層では単語ベクトルの和が求められるので、コンテキストの単語の並びが無視されます。(?)の隣の単語と20個離れた単語が、同列に扱われるのは良くないでしょう。
CBOWモデルの枠組みで上記のような問題を考えるのは難しいです。
この問題を解決するべく、5章では新しくRNNと呼ばれる手法を学びます。
RNNとは
RNNはRecurrent Neural Network(再帰ニューラルネットワーク)の略です。
Recurrentには循環という意味があります。循環するニューラルネットワークとはどういう意味でしょうか?
下の図(発表者が作成したスライド)の通り、RNNレイヤでは出力が次の入力に使われます。
RNNレイヤが展開され横に複数並んでいるのは各時刻に対応すると考えてください。
各時刻の入力は、その時刻の入力 \(x_t\) と一つ前の時刻の出力 \(h_{t-1}\) です。
そして、その時刻の出力 \(h_t\) は、\(h_t=tanh(h_{t-1}W_h+x_{t}W_x+b)\) によって求められます。 ここで、\(W_h\) と \(W_x\) はそれぞれ重み行列で、各時刻で共通です。
このように一つ前の時刻の出力を次の時刻の入力に使うことによって、時系列データに対応できるようになっています。
Truncated BPTT
RNNにおける誤差逆伝播法はBPTTと呼ばれます。
非常に長い時系列データを考えた時、BPTTには計算量や勾配消失の課題があります。
この課題に対処するため、横軸(時間軸)方向のネットワークを定めた長さで切り分け、切り分けたネットワークに対し、BPTTを行うことを考えます。この手法のことを、Truncated BPTTと呼びます。
Truncated BPTTのポイントは、順伝播は繋げたまま、逆伝播は切断するという点です。このことで全体の繋がりを維持したまま、ブロック単位で逆伝播を行うことができます。
最後に
本には、理論のより詳細や実装について書かれていますが、記事に書くのはここまでとします。
今回は初めて発表する方もいたのですが、素敵な発表でした。輪読会の発表者は準備が大変。でもその分、とても価値あることだと信じています。
さて、これまで扱ってきたニューラルネットワークにループ経路ができ、時系列データの学習も行えるようになりました! 次回はゲート付きRNNについて学びます。
では、またね!