memory(LSTM)の存在感が増してきています。Voiceの基盤技術をはじめとした最先端の分野でも利用されていますが、その登場は1995年とそのイメージとは裏腹に歴史のあるモデルでもあります。ところがLSTMについて使ってみた記事はあれど、詳しく解説された日本語文献はあまり見当たらない。はて、どういうことでしょうか。本記事ではLSTMの基礎をさらいつつ、一体全体LSTMとは何者なのか、LSTMはどこに向かうのか、その中身をまとめて追っていこうと思います。実装とか華々しいものはないんですが、お付き合いください。Networksの解説も付けました(第4部)。本記事は以下のように構成されています。最初の2つが基礎、それ以降は少し込み入った事例になります。お好きなところからどうぞ。あと、長いところは太字を読めばだいたいなんとかなります。本記事は可能な限りわかりやすく説明したつもりですが、通常のニューラルネットワークの誤差逆伝播法による学習について知っているとスムーズです。本題に入る前に、時系列データの定義を簡単に述べておきましょう。x_Tのように並んでいるデータのことを言います。このデータの添え字は通常tで表されますが、このtはデータの種類によって若干意味合いが異なります。時系列データの代表例として音声の波形、動画、文章(単語列)などがありますが、音声の波形なら一定の時間間隔(数ms)でのサンプル時間になりますし、文章なら単語を前から並べたときの番号になります。映像認識などが挙げられます。分量の都合で、ここで詳細を述べるのは避けますが、(1)の文章生成ならば、「今までの単語列を入力として、もっともらしい次の単語を予測する」ことをLSTMが担います。正しい文章を繰り返しLSTMに覚えさせる(重みベクトルを更新する)ことで、このLSTMは"this"の後に"is"が来るようなルールを「事実上」学習します。このシチュエーションにおいては、入力と出力の形式は共に同じです。一方で、(2)の音素・音声認識の場合、「今までの音声波形(orその特徴量)を入力として、その時点で発話されている音素を予測する」タスクになります。この場合、入力の波形と出力の音素列の形式に直接の関係性はありません。data)に対するモデル、あるいは構造(architecture)の1種です。memory(短期記憶)という神経科学における用語から取られています。blockと呼ばれるメモリと3つのゲートを持つブロックに置き換えることで実現されています。dependencies)を学習可能であるところにあります。その最も単純な一例を以下に示します。)例えば、上図のような入力系列を受け取り、次のステップの入力を予測するような学習器を考えます。$が続き、その後最初の$x$または$y$が出現する」というものです。この系列を正しく学習するためには、最初の要素の情報を少なくとも$p$ステップ維持する機能を持つようにNNの重みを更新する必要があります。dependencies)には対応できるのですが、1000ステップのような長期の系列は学習することができませんでした。LSTMはこのような系列に対しても適切な出力を行うことができます。97]の結果を示します。97]より引用)上記の実験では100ステップのdelayを学習させていますが、既存のRNN(RTRL、BPTT法を用いた学習)が全く成功していない一方、LSTMでは短い学習時間で確実に学習できています。背景:Hochreiterの勾配消失問題(91年)LSTMの構造に深入りする前に、LSTMが考案される前にHochreiterが指摘した勾配消滅(爆発)問題について述べる必要があります。Gradient)を用いたアルゴリズムでした。このような勾配を逆方向(時間をさかのぼる方向)に伝播させるアルゴリズムは、多くの状況において「爆発」または「消滅」することがあり、結果として長期依存の系列の学習が全く正しく行われないといいう欠点が指摘されてきました。Hochreiterは自身の修士論文(91年)において、時間をまたいだユニット間の重みの絶対値が指定の(ごくゆるい)条件を満たすとき、その勾配はタイムステップtに指数関数的に比例して消滅または発散することを示しました。これはRNNだけではなく、勾配が複数段に渡って伝播する深いニューラルネットにおいてもほぼ共通する問題でした。LSTMはこの問題に対する有効な対処法の1つとして発明され生き残ってきた、という背景があります。単体のユニット$u$から$v$への誤差の伝播について解析してみましょう。ステップ$t$における任意のユニット$u$で発生した誤差が$q$ステップ前のユニット$v$に伝播する状況を考えます。すると、誤差は以下に示すような係数でスケールします。m\end{array}の時、スケール係数は発散し、その結果としてユニット$v$に到着する誤差の不安定性により学習が困難になります。m\end{array}の時、スケール係数はqに関して指数関数的に減少します。上式の状況はRNNにおいて頻発し、正しい学習を妨げてきました。この議論は容易に全ユニットの誤差の伝播についても拡張することができます。94]で扱われています。第2部:LSTMの構造と学習LSTMは一見複雑で得体のしれない物体に見えますが、その構造は決して難しすぎるものではありません。複数回の拡張に伴い様々なバージョンが混在しています。15]に従い、次の4つの代表形に分けて紹介します。Blockの構造を示します。オリジナルのLSTMは、上節の勾配消滅問題を強く意識した構造をしています。1つ1つの要素を見ていきましょう。入力層の出力及び中間層の1ステップ前の(RNNのループ部)の出力は、それぞれ3か所に同時に入力として供給されます。実線が入力層の出力、点線が中間層の1ステップ前の出力を表します。Gate)」と呼ばれ、入力値及びメモリセル内の状態(State)の制御に使用されます。out}$と乗算されたのち加算され、各ゲートの活性化関数を通します。下図の活性化関数の色はその種類を表しており、2つのゲートに関しては常にシグモイド関数が使われます。(CEC)CECは、誤差消滅問題に対応するために導入された非常にシンプルなアプローチです。1.0を満たせば、事実上無限時間であっても誤差は正しく伝播します。0\end{align}という重み係数1(線形)による和によって簡単に表現されます。これがCECのミソです。入力ゲートと出力ゲートの意味CECが誤差消失問題を解決することはわかりました。同時に導入された入力ゲートと出力ゲートはどのような意味を持つのでしょうか。これは、定性的な分析から導き出すことができます。conflict)一般のRNNを考えたとき、ユニット$i$からの入力は、重み$w_{ji}$を与えられてユニット$j$に入力されます。誤差逆伝播法を用いる場合誤差信号がユニットを遡り、必要な場合重み$w_{ji}$を更新します。ところが、時系列データを学習する場合$w_{ji}$は次の矛盾する重み更新を同時に受ける場合があります。ユニットjを活性化されることによる入力信号の伝達ユニットiからの無関係な入力によってユニットjの値が消去されることを防ぐ入力信号の保護1.は例えば、先の例に挙げた系列において、$x$が入力されたことを示す情報を次々に未来のユニットに伝達するために$w_{ji}$の値を大きくする場合を指します。a_{p-1}$といった無関係な入力を受けてユニットの値が更新されても困るので、2.のように$w_{ji}$の値を小さくしたい場合もあります。従来型のRNNではこのような矛盾する重み更新が頻発し、学習を遅らせる主要な要因となっていました。そこで、LSTMでは入力ゲートを導入し、追加の重みパラメタを持たせることで、「前のユニット(1つ前の時間のユニット)の入力を受け取るか否か」を判断させるようにしました。することで必要に応じて誤差信号の伝播をゲート部で止め、必要な誤差信号だけが適切に伝播するようにゲートを開いたり閉じたりするのです。これが入力ゲートと呼ばれたる由縁です。conflict)出力ゲートも入力ゲートと同様に、以下の理由による重みの衝突を防ぐために導入されています。ユニット$j$の情報が重み$w_{kj}$に従いユニット$k$に出力を行うことを考えると、次の2つの衝突が起きます。ユニットkを活性化されることによる出力信号の受信ユニットjからの無関係な出力によってユニットkの値が消去されることを防ぐ出力信号の保護ここまでが第一世代LSTMの概要になります。他にもRNNにまつわるさまざまなとその対処が述べられているのですが、それについては元論文や次の記事を参照してください。Gateの導入(99年)さて、複数の時系列タスクにおいて目覚ましい成果を上げた初代LSTMですが、内部メモリセルの更新は線形で、その入力を貯め込む構造であったため、例えば、入力系列のパターンががらりと変わったとき、セルの状態を一気に更新する術がありませんでした。Gate)が導入されました。忘却ゲートは、誤差信号を受け取ることで、一度メモリセルで記憶した内容を一気に「忘れる」ことを学習します。することで、状態遷移が起こり、今までの記憶が不必要になった時点で素早くセルを初期化することを可能にしました。g(net_{c_j}(t))のように書き表すことができます。99]の解説を発見したので、併せて参照ください。Connectionの導入(00年)忘却ゲートを導入して一見完成に見えたLSTMですが、ゲートの制御に関して次の致命的な問題を抱えていました。そもそも、3つの制御ゲートの役割は、「メモリセルの内容を書き換えるか/忘れるか/出力するか」ということにありました。ところがこれまでのLSTMでは、そのゲートの制御はLSTMの外側と呼べる(1)入力層の出力(2)中間層の1ステップ前の出力をベースとして行われており、制御対象であるメモリセル自身の内部状態は制御に利用されていない状態でした。0$)場合メモリセルの真の状態は隠ぺいされてしまいます。connectionと呼ばれる接続をメモリセルから各ゲートに流し込むことで解決を図りました。下図の青い矢印に注目してください。Functionは、性能に明確な影響を及ぼさないという理由で排除されることがあります。現在はこのバージョンが事実上LSTMの標準形とみなされていますが、タスクによって細かい修正は適宜行われています。補足:chainerはどのLSTMを使っている?(15/12/14時点)PFI発のNNフレームワークであるchainerには1行で追加できる非常に便利なLSTMが提供されていますが、このLSTMはどのバージョンにあたるのでしょうか?実装を見てみましょう:見ると、chainerのLSTMは99年版の忘却ゲート付きのLSTMを採用しているようです。Connectionは導入されていません。BPTTではなく、01年時点での方法であるBPTT法とRTRL法のミックスになっています。Connectionの導入によるパフォーマンスには大きな影響はないとされていますが、使用にあたってはやや注意が必要と思われます。BPTTによる学習(05年)LSTMの構造は00年にひとまずの完成を見ましたが、その学習方法は昔ながらの手法であるRTRL法とBPTT法を混合し、時間方向への誤差逆伝播には一部の変数の勾配しか使用しないという、やや特殊な学習方法でした。TIme)法の枠組みに沿って統一的に定式化することでより明快で実装しやすいものになりました。次節では05年バージョンに沿ってLSTMの具体的な数式を見ていきます。LSTMの順伝播計算さて、長々と説明を書いてきてようやくLSTMを定式化できるようになりました。00年版の図を見ながら式を見ていってください。tanh(x)\end{align}後半の式の計算には前半の式の計算結果が要る場合があるので計算順には注意が必要です。multiplication(要素ごとの積)を意味します。connectionへの入力は、入力・忘却ゲートに関しては1ステップ前、出力ゲートのみ現在のステップの状態が供給されるところにも注意してください。最適化したい重みは15変数になります。いう2つの理由がありますが、これも丁寧に数式を追っていけば難しくありません。LSTMの中身は忘れて、ステップ(時間)tにおける入力$x_t$、出力$y_t$を考えましょう。y^t}$が与えられます。x^t}$を計算して入力層へ遡ります。?^t$を計算するには、順伝播の時にその中身を伝播させたすべての接続からの誤差信号の和を計算していきます。式を見ていきましょう。\\\end{align}式だけではなんともわかりにくいですね。c^t$に絞って見てみましょう。中央のメモリセルに向かって、5か所の赤い矢印が進んできています。これが順伝播させた項からやってきた$c^t$への誤差信号です。未来のセル自身からの誤差となります。計算済みの各デルタは次の操作によって計算されます。通常の乗算を通るたびにその項で乗算(例えば、第1項の$o^t$)非線形関数を通るたびにその微分を乗算(例えば、第1項の$h'(c^t)$)あとは簡単ですね。式を追っていけばわかると思います。forのいずれかが入る)。o^t\end{align}ふー長かった。$\times$は外積を表します。)で学習することを考えましょう。すると、以下のパラメータの設定が必要になります。15]の詳細な分析を少しだけかじって紹介します。ノイズ添加以外の2つについて、列毎(パラメータ毎)に見てみましょう。15]より引用)まず、学習率の設定は何においても重要になります。データセットによって大きく傾向が異なりますが、予測誤差が一気に改善する特異な地点が存在することがわかります。論文中ではまず高い学習率(1程度)から始めて、性能の改善が停止するたびに10で割る大雑把な探索が推奨されています。一方で、隠れ層の数については非常にわかりやすい傾向が出ています。期待通り、隠れ層の数を増やせば増やすほど性能は改善しますが、そのトレードオフとして実行時間が増加します。図表に示されてはいませんが、モーメンタムの値は今回の解析では値の設定による性能の変化はなかったと報告されています。BPTTの打ち切りステップ数についての言及はこの論文ではありませんでしたが、直感的には獲得したい長期依存の長さとタスクの実行時間とのバランスを取るのが標準的な戦略だと思われます。Cliping)LSTMはゲートの導入によって勾配「消滅」問題に対応しましたが、厳密には勾配「爆発」問題には対応していませんでした。constraint)を設け、ミニバッチの学習毎に大きくなりすぎた勾配のノルムを補正するという方法が取られるようになりました。LSTM)における勾配爆発問題が起こる必要条件がリカレント重み行列$W_{rec}$の最大の特異値にあることを証明し、その明快な回避方法として以下のアルゴリズムに従う勾配クリッピングを正式に提案しました。保証すればよいということです。13]ではthresholdの値についても緩い提案を行っており、多数の更新が行われたときの重み$W_{\star}$のノルムの平均を観察することを推奨しています。彼らは、得られた平均の0.5倍~10倍の値を設定することで(収束速度の差はあれど)大よそ収束すると報告しています。興味深いのは、この提案はBPTT法によって学習する一般のRNNに適用できる勾配消失/爆発問題への対処法を提示しているということです。興味のある方は原論文を参照ください。15]の分析ではLSTMのどの部分が性能向上に寄与しているかの仔細な分析を行っています。その手法自体は明快で、入力/忘却/出力ゲート・活性化関数・peepholeなど8種類の要素をそれぞれ取り除いた場合の性能低下を計算し、比較することで実現しています。忘却ゲート、出力時の活性化関数の排除による性能低下が最も大きい音楽・言語モデリングにおいては入力ゲートの排除、入力時の活性化関数の排除による影響も大きいことが主に示されています。06]これは概要のみを述べるに留めます。詳しくは機械学習プロフェッショナルシリーズの『深層学習』などを参照してください。LSTMには、1つの入力に対して必ず1つの出力があるという強い制約があります。音声認識などでは、(1)音声信号の系列数と(2)取り出したい音素の系列数は全く異なります。音声認識のように出力の区切りが事前知識から得にくい場合は単純な方法では解決できません。Classification(CTC)法です。CTC法は、目標出力ラベル(例えば、"a","i","u"など)に加えて空白ラベル"_"を導入し、出力したい系列("aui")に対して同義の長い冗長な入力("a____u___i__")を対応させることで入力の長さと出力の長さの整合性を取ります。素朴に計算すると計算量が非常に大きくなりますが、HMM(隠れマルコフモデル)の前向き・後ろ向きアルゴリズムと同様のアプローチでこの問題を解決しています。learningと呼ばれる方法があり、入力文の単語数と出力の単語数が一致していなくても対応できるような学習法がよく使われています(後述)。第3部:応用事例から見るLSTMとその派生アーキテクチャ95年時点で既に洗練されたアーキテクチャを持っていたLSTMですが、限られたマシンパワーに加えてNN冬の時代にぶち当たって当時はあまり注目されませんでした。実タスクに適用されはじめるのは登場から10年経った05年ごろからになります。more...など多くの領域・企業で利用されています。これらの学習器の多くはLSTMをそのまま使ってはいません。blockの改変や積み上げが容易ということがあります。そのため、タスクに応じてLSTMの派生形ともいえる様々な形態が存在します。そのうちのいくつかを眺めてみましょう。13]SchmidhuberらはLSTMの初期の応用例の1つとして「フレーム単位音素認識」を選択しました。これは、先のCTC法において指摘した「入力長と出力長の不一致」を認めつつ、まずはフレーム毎の予測を行ってみようという現在の水準から見るとやや難易度の低いタスクです。LSTM(BLSTM)と呼ばれる方法で解決しました。BLSTMの発想は至って単純です。LSTMは、通常「現在までの入力から未来の出力を予測する」モデルですが、これに「未来の入力から過去の出力を予測する」逆方向のモデルを考え、その出力を同一の出力層に統合します。下図にBLSTMの模式図を示します。13]より引用)この構造の効用は明快です。前提として「認識前にすべての系列情報が手に入っている」という条件がありますが、その分増したコンテクストをより明快に掴むことができます。05]では、有名なコーパスであるTIMITコーパスを用いて184発話を訓練、BLSTM、LSTM、RNNに関して比較を行いました。その結果を以下に示します。05]より引用、赤丸・青丸は筆者注)この論文では僅差となっていますが、RNNに対してLSTM、それもBLSTMの方が結果が高いと出ています。この数字をどう捉えるかは難しいところですが、論文中ではLSTMの方が学習速度が速く、訓練データに対する適応度はRNNを大きくしのいでいた(つまり、データ量を増やせば精度がさらに上がる)ことを僅差の理由として挙げています。この時点ではまだ音声認識の主流モデルであったHMMとの比較はなされていませんが、近年はHMMを大きく凌ぐ成果が多数出ています。14]LSTMの応用事例として最も面白いのはやはり機械翻訳だと思われます。Sutskeverらは、今までのLSTMの視点に留まらない新しい学習の枠組みを考えました。上で紹介したCTC法は、確かに入力と出力の長さが違うような一般的な問題設定の解決をもたらしました。強い制約として、入力列と出力列の順番に単調な順序関係を要求するという性質がありました。英語と日本語の語順が異なるのは周知のとおり、機械翻訳の問題はCTC法では解決されませんでいた。14]より引用)上図はRNNを時間展開したような模式図です。中央の四角がLSTMを表すと考えて差支えありません。翻訳元の言語ABCを入力して、翻訳元の文章の表現を一括学習します。そののちにこのLSTMは翻訳先の言語の「次の単語」を予測するタスクを解きます。予測した結果は次のステップの入力として供給されます。することで、機械翻訳のような、入力と出力の長さ及びその語順すらも異なるようなモデルを効率よく学習することができるようになりました。本モデルではLSTMを多段に(4層)積み上げています。することで、文章間の短い相関関係、長い相関関係を別々のレイヤーで掌握することができると考えられています。LSTM)発想は現在ではごく当たり前に用いられています。結果として、本論文のモデルは従来のモデルの最高性能に匹敵する結果(翻訳の良さの指標であるBLEUで36.5)をたたき出しました。機械翻訳については以下の記事で実装まで含めて非常にわかりやすく紹介されているので、詳しくは以下を参照ください。Networkと言えば、3層の多層パーセプトロンに対して、4層以上の多数の層を組み合わせたフィードフォワードネットワークのことを指すことが多いようです。画像認識分野においては、性能向上を目的として、Alexnet(8層、2012年)、VGGNet(16または19層、2014年)、GoogLeNet(22層、2014年)、と年を追うごとにその層数を増加させてきました。層をやみくもに増やせば学習精度が向上するわけではなく、緻密なアーキテクチャの構築によって層数の増加、精度向上が図られました。RNNを振り返ってみましょう。RNNそのものの構造は自己への閉ループを1つ持つだけの単純な構造をしていますが、これを時系列方向に展開するとその総数は時系列の長さ$T$に比例します。多くの時系列データは1000ステップ以上の長期のステップを扱うわけなので、素朴には昔ながらのRNNの方が深い層数を扱っていると言えます。LSTMは、解釈によっては非常に深い層数のネットワークともとれるRNNに対して勾配が消失しない方法を考え、深いネットワークにおける問題を克服しました。今年、そんなLSTMにインスパイアされたようなモデルが立て続けに提案されました。LSTMからいったん離れて、これらのモデルを見ていきましょう。Networks(以下、HN)は、LSTMの重要な要素技術であるゲートを導入することで100層以上の深いネットワークを学習可能であることを示しました。著者にはLSTMの生みの親であるSchumidhuberが入っており、LSTMの影響を強く受けています。下図にHNの1レイヤーの構造を示します。W_H)この変換Hは通常の非線形変換でも、CNNにおける畳み込み、リカレント構造などでも構いません。Gateの2つのゲートを新たに導入し、以下のような計算を行います。gateは未変換の入力をどれだけ運ぶかを表します。簡単のために、論文中では$C=1-T$として、学習時には$H$と$T$2つの変換の最適化を行うことで学習します。T、C共に非線形のシグモイド関数による変換を挟んで、0~1の間の数値を取るようになっています。通常、深いネットワークの重みを変更したい場合、100層なら100層先まで順番に重みを変化させていくしかありません。すると、少ない層数の時と比べて必ずその伝播は遅くなり、層数の増加につれてその影響は深刻になります。Highway"を用意することでHNでは高速な情報の伝播を実現しました。Networksの初期化と学習HNの学習は非常にシンプルです。-3など)を与えておきます。Gate(恒等変換)の方に初期の重要度を与えることを意味し、これにより初期の誤差が速く浅い層に伝播するとされています。最適化はシンプルにSGD(確率的勾配降下法)及びmomentum(モーメンタム)を使用していますが、1000層のネットワークでも破たんすることなく学習したとされています。特筆すべきは深いネットワークにおけるその収束の速さで、下図からは20層以上のネットワークにおいて高速に、よく汎化していることが確認できます。2015で優勝を飾った最新のモデルです。Setにおいてエラー率3.57%を叩き出しました。そのネットワークが152層にも及んでいることが判明し、大きなインパクトを与えました。このモデルの中身を見てみましょう。Newtorks(ResNet)の発想はHNのそれと非常に似ています。その中身はHNよりさらにシンプルな構成となっています。HNではゲートの開閉により変換を挟んだ出力と無変換の出力の土合を調整したのに対し、ResNetでは各レイヤーにレイヤーの変換を飛び越すような恒等変換を加算します。以下にその模式図を示します。ResNetのレイヤーは、入力として$x$を受け取り、出力として恒等変換された$x$と変換が施された$H(x)$の和である$x+H(x)$が返されます。そのため、ある変換$H(x)$を学習することは、所望の出力$F(x)$と入力$x$の残差(Residual)を目的の値に近づけることと解釈することができます。Functionと呼んでいます。problemを解決する突破口となります。DNNは、NNの層を増やし段階的に特徴を取り出すことによって圧倒的な表現力を達成してきましたが、層を追加するにつれ、その学習は難しくなります。現在ではそのような認識は当たり前に見えますが、理想的には深いネットワークは浅いネットワークの上位互換であるべきです。それが達成できないのか。problem"という現象が発見されました。この問題は、深いネットワークが、余計な(これ以上の精度向上を望めない)レイヤーに関して恒等写像を学習するのが難しいという状況を引き起こすことで起こります。非線形変換を組み合わせるDNNでは、恒等写像を再現する方がかえってネックになっていたのです。そこでResNetでは恒等写像を学習する過程を非常に簡単に行う方法を考えました。入力そのものとの残差を取るのです。すると、今まで$H(x)=x$となるような最適化が必要だったところ、$H(x)=0$を学習するだけで済むようになりました。ネットワーク全体としては必ずしも恒等写像を学習することが目標ではありませんが、この変換によってネットワーク全体の最適化が容易になったと報告されています。Networksの構成と学習ResNetの構成もHNの構成と同様、GoogLeNetなどと比べると非常にすっきりしています。Normalization)を用意したうえで、それらを合計の層数によって数を変えて構成しています。152層のアーキテクチャを示しています。Functionの具体形は以下のようになります。15]より引用)RNの学習においても最適化にはSGD(+荷重減衰、モーメンタム)が使われています。Adagrad、Adam、RMSPropなどの半自動制御より細やかな手動制御の方がやはり精度向上に寄与するようです。最終的に、ILSVRC2015においては152層(!)のモデル単体でtop-5エラー率4.49%(この時点で既存のモデル全てを上回る)、異なる深さの6つのモデルのアンサンブルで冒頭のエラー率3.57%を達成しています。このモデル自体がRNNの最適化にヒントを得たかどうかは全く定かではありませんが、先行的に行われたRNNの解析によって得られた知見が現在のDNNに還元されている面は否定できないと思われます。第5部:汎用コンピュータとしてのLSTM上節で、RNNは真に深いネットワークであるという解釈を紹介しましたが、LSTMの生みの親であるSchmidhuberはさらに突っ込んで、「RNNは汎用コンピュータである」という旨の発言をしています。RNNは可変長の入力を受け取るため、原理的に任意のプログラムを入力することができます。RNNは内部に重み(状態)を持ち、次々に入ってくる入力に応じてその重み(状態)を変化させる、強く解釈すれば自己の状態を変える作業を行っています。これは命令を受けて内部状態(メモリ)を書き換えるノイマン型コンピュータと同じであると考えることができます。迷路探索などのタスクにRNN(+強化学習)を用いる研究は90年代より為されていましたが、近年は観念的な話に留まらず、実際にRNNやLSTMに命令(Instruction)を解釈・実行させ、汎用性が求められると思われるタスクを解決する取り組みが多数行われています。今回はその中から新しめの事例を1つ紹介します。15]この論文では、数字列のコピー、複数桁の数字の足し算、数値の掛け算などの簡単なタスクを、入力列の周りを適当に探索して、計算そのものに留まらず計算に至るまでの走査自体も同時に学習するという挑戦的な設定で解くことを目指しています。Examplesまず、システムはControllerと呼ばれる制御機能を持ったユニットを中心に構成されます。Unit)などのNNが配置されています。Tape:ある場所の数字を受け取った後、数字またはNOP(Φ)を出力するの3つから成ります。Tapeの現在の値を読み取った後、次のどこのマスに移動するかを判断し、同時に数字またはNOPを出力します。Aという制御と出力を同時に行う必要があります。本論文ではこれらの制御と出力の学習を誤差逆伝播法と強化学習のアンサンブルで行っています。制御(Action)の学習...出力シンボルが正解であるとき1、不正解であるとき0の報酬を得て強化学習を行う(注:正解は入力列に「埋め込まれている」)出力(Output)の学習...正解と出力シンボルの確率(softmax)とのクロスエントロピー誤差を用いて誤差逆伝播法を行うこのタスクは非常に難しく、例えば3つの数列の足し算などになるとControllerはどこを動き回ればよいのかまったくわかりません。本論文では今日強化学習で広く使われているQ-Learningを改良することで、これらのタスクを「数列の長さ・問題の複雑さとは関係なく、かつ初見の問題も解けるように」多大なる苦労を以て解決しています(やはり相当苦しかったようで、直接的な正解ではないが、ヒントとなるような知識をQ-Learningの実行時に与えています)。Controllerの部品には200または400個のユニットを持つLSTMが用いられ、LSTMはある特定のアルゴリズムを表すオートマトンを構成するようなメモリ付きのプロセッサとしての役割を果たしています。これは音声認識などで用いられたときの使い方と似ているようで、その目的は大きく異なっています。Learningが脚光を浴びた直接のきっかけは「猫の概念を学習した」などでおなじみの画像認識分野でした。画像認識に比べRNNによる汎用コンピューティングはさらに難しく、教師となるデータを単純に与えただけではうまくいきません。09]と呼ばれる簡単な問題から難しい問題を徐々に覚えさせるというアプローチが本論文をはじめ同様のタスクで用いられています。3つの数列の足し算であれば、最初のタスクは「1桁の3つの数字の足し算」になります。モデルがうまくそれらの問題を探索・計算できるようになったところで2桁、3桁と徐々に問題の複雑度を上げていきます。これも一筋縄ではいかず、ある特定の長さの問題に特化してしまうという過学習の特殊形に陥る事例が数多く見られました。RNNは汎用コンピュータへの道筋となるか?この論文に留まらず、今現在も多数のRNN(+強化学習)を用いた汎用学習モデルが研究されています。現在はまだ地味に見えますが、数年後に驚くような成果を以て我々の前に現れるかもしれません。間違えてはいけないのは、人間が期待するような様々な問題に対して適切な応答を返す汎用性、あるいは創造性は、適当に多くのデータを与えただけでは達成されないということです。RNN・LSTMを使えば簡単に文章を生成できますが、そのような出力自体には何ら意味はなく、真に汎用的な出力が行われているかどうか慎重な検証が必要となります。Learningの詳細については以下を参照してください。14]登場から20年が経ち、上で紹介したようにLSTMがどのような性質を持つのか、どのようなタスクに使えるのか、徐々にその性能が見えてくるようになりました。Unitと呼ばれるLSTMを簡略化したモデルを提案しています。GRUの構造は以下の通りです。Gateの2つのゲートによってメモリセルの中身の維持・出力を制御しています。GRUは機械翻訳のタスクにおいて、LSTMと遜色のない性能を出したことが報告されています。15]においてBengioらのチームはGRUとLSTM、どちらが良いのかどうか判断するべく性能比較を行いました。もどかしいことに、この報告ではLSTMとGRUとの間に明確な優劣をつけることはできなかったとされています。LSTMそのものの解析は進みましたが、LSTMとそれ以外の構造の比較はこれからの課題となりそうです。最後に、LSTMの限界について簡単にコメントしたいと思います。目覚ましい性能を見出してきました。LSTMの重大な欠点としてLSTMの構造自体からは、どのような問題が解けるのか・なぜ解けない問題があるのか判断できないことが挙げられます。Learningによる機械翻訳モデルでは、LSTMが文章の内部表現を獲得していることは示唆されましたが、木構造などによる人間が理解可能な分析は非常に難しくなっています。LSTMを使うときはこの欠点を理解したうえで使う必要があります。まとめLSTMは時系列データに対する強力な予測モデルであるHochreiterの勾配消失問題を解決し、長期の時系列を学習可能になった現在LSTMは単体での使用に留まらず、双方向、複数段の組み合わせによってその表現力を拡大しているRNNベースで、任意のアルゴリズムを学習させる研究も始まっているLSTM以外の有効なアーキテクチャの分析が始まっているが、モデルの構造自体の評価は未だ難しいLSTMは強力なモデルだが、やみくもに動かしても意味のある出力を得ることは不可能に近い、緻密な問題設定が必要LSTMの活躍はまだ始まったばかりです。今後の動きに注目していきましょう。おわりに結構頑張って書きました。