リカレントニューラルネットワーク_RNN (Vol.17)

 2018.05.15  株式会社システムインテグレータ

はじめに

前回は、畳み込みニューラルネットワーク(Convolutional neural network)について説明しましたが、大鵬と言えば柏戸(ふるっ)、ルパン三世と言えば銭形警部、そしてCNNと言えばRNNです。ということで今回はリカレントニューラルネットワーク(Recurrent Neural Network)について解説します。CNNとの違い、どのような用途に向いているか、RNNの仕組みなどを理解しておきましょう。 

畳み込みニューラルネットワーク

CNN(Convolutional neural network)と比較するために、前回のおさらいしておきましょう。図1はSemantic Scholarで公開している数字を画像認識するCNNのブロック図です。Input(入力層)の28×28ピクセルの画像(数字の5)が、Feature Extraction(特徴抽出)プロセスでConvolution(畳み込み)とSub-Sampling(プーリング)を繰り替えしながら、Feature maps(特徴マップ)が小さくたくさんになっていきます。そして、最後にFully Connected Layerで全結合してOutputs(出力層)で5である信頼性が95%という具合にClassification(分類)されている構成よくわかりますね。 

 CNNの構造 

図1:CNNの構造 

引用ページ: Semantic Scholar
https://www.semanticscholar.org/paper/Memristor-crossbar-deep-network-implementation-on-a-Yakopcic-Alom/59d7c6c1e0b761aed209b2acbc2a181db29860c7

これら一連の処理は、上流から下流に流れるのでフィードフォワード(順伝搬型)ニューラルネットワークと呼ばれています。画像認識など静的な(時間の要素のない)場合に適しています。誤差は逆伝搬してフィルタを変えますが、元画像から特徴を抽出してゆく信号は遡ることがありません。 

リカレントニューラルネットワーク

一方、RNN(Recurrent Neural Network)は、ある層の出力が遡って入力される再帰結合を持つリカレント(再帰型)ニューラルネットワークです(図2)。自分の出力をもう一度自分に食わせる、そんなややこしい構造を持つネットワークなのですが、なぜ、このような処理をする必要があるのでしょうか。 

順伝搬NNと再帰型NN  
図2:順伝搬NNと再帰型NN 


その鍵は時系列可変長です。前回学んだ画像の文字がマルかバツか判断するCNNは、固定長の静止画を畳み込み処理するだけでした。しかし、例えば自然言語処理(NLP)などの領域では、時間の概念が必要となり、入出力のデータサイズも可変となります。例をあげて説明しましょう。 

あなたはTV番組でどちらが「麻里ちゃん通」なのかAIと勝負することになりました。相手は麻里ちゃんを学習済のAIなので、早押ししないと勝てないかも知れません。さて、図3のような問題が流れてきました。「麻里ちゃんの」「好きな」。ここではまだ解答がわかりませんが、すでに頭の中は激しく回転していて続く言葉として「人は誰か」とか「食べ物はなに」「場所はどこ?」などが浮かんでいます。 

 言語は時系列 

図3:言語は時系列 
 

続く音声の「ケーキは」まで聞いたとき、AI野郎が勢いよくボタンを押しました(しまった、わかっていたのに…)。そして、自信たっぷりに「チーズケーキ」と答えたのです。 

この流れを時系列でみてみましょう。時点(t-1)で「麻里ちゃんの」、時点(t)で「好きな」と聞き、時点(t+1)で「ケーキは」ときたから問題文の意図が理解できたわけです。この人間なら当たり前のことが、順伝搬NNでは少し難しいのです。なぜなら、「ケーキは」だけだと文の意図が読み取れないので、その前の「麻里ちゃんの」や「好きな」を記憶しておく必要があり、それを可能にする構造が再帰型なのです。 

リカレントニューラルネットワークの展開図

時間軸に展開して説明しましょう。図4は再帰型構造を時系列に展開したモデルです。問題文は4つの文節からなるので、4ステップのニューラルネットワークに展開できます。時点(t)の時の隠れ層には、入力層からの「好きな」と前ステップからの「麻里ちゃんの」という2つの入力があり、これを組み合わせ計算します。続く時点(t+1)で、入力層からの「ケーキは」と前ステップ隠れ層からの「麻里ちゃんの×好きな」を組み合わせ、「あ、わかったぞ」とAIはピンポーンしたわけです。 

lights.png通時的誤差逆伝搬(Back propagation Through time)

組み合わせるって簡単に言っていますが、実際は2つの入力の重みを考慮した数学的な行列計算です。前回マルという記号を判別するのにも苦労したように、人間が頭の中で自然とできている処理がAI君は結構大変なのです。AIがかしこくなる仕組みは、誤差逆伝搬(Back propagation)で重みを調整するからでしたね(Vol.5参照)。RNNの学習法も同じく逆伝搬による重み調節なのですが、前ステップからの情報も加わるために特別に通時的誤差逆伝搬(BPTT)と呼ばれています。


RNNの展開図 

図4:RNNの展開図 

あれ、その麻里ちゃんがやってきました。 

「入力層と隠れ層はイメージ湧いたけど、出力層には何が出力されるの?」 

人工知能(AI)に関するお役立ち資料
[RELATED_POSTS]

お、そう来ましたか。確かに時点(t)で出力層って何が出力されているのでしょうか。わかっていたつもりで分かっていなかったかもです。う~ん、いつもながらシンプルな疑問ほど難しい…。 

実は、この答えはAIが何を目的に学習したかによって異なります。今回のモデルは、”問題文の意図”を出力するテキスト解析(Text Analytics)としてトレーニングしている想定です。時点(t)では「麻里ちゃんの好きな人を尋ねる」のか「麻里ちゃんの好きな場所を問う」のか文意がまだわからず、どの候補も信頼度が低い状態です。そして時点(t+1)で出力層に「麻里ちゃんの好きなケーキを問う問題」という候補ができ、その信頼度が閾値を超えたからAI野郎はボタンを押したのです。 

普通に、問題文の意図ではなく、文章全体を予想するモデルでもいいでしょう。時点(t)では、「麻里ちゃんの好きな〇〇」という候補が多すぎて判断つかなかったものが、時点(t+1)までくれば、後ろに「なんですか?」をくっつけた「まりちゃんの好きなケーキはなんですか?」という候補が浮上します。つまり、①文章全体を想定出力する②文章の意図を読み取る③意図と正解を学習(Classification)した分類器で解答を導き出す、というような3ステップの処理になります。ただし、この場合、疑問文になると分かっていないので、「チーズケーキ」という候補を選んでしまう可能性も大きいので、クイズ専用に学習したモデルには負けます。     

別の目的ならどうでしょうか。例えば、感情分析(Emotion Recognition)なら、時点(t+1)「麻里ちゃんの好きなケーキは」までで「ジョイ」という感情が0.8出力され、時点(t+2)まで来ると0.3くらいに落ちる感じです(Google Cloud Natural Languageで試したらこんな感じでした)。機械翻訳(Machine Translation)はどうでしょうか。時点(t+1)では"Mari's favorite cake is" と出力され、時点(t+2)で"What is Mari's favorite cake?"と疑問文に変化して出力されます(こちらはGoogle Cloud Translationで試してみました)。  

ちなみに、ネットなどでは、次に来る単語を予測出力するという例で説明していることが多いようです。まあ、将棋の「次の一手名人」のような設定ならそういう出力もアリだと思いますが、正直、文章生成(deep Writing)のような実用イメージしか湧かなかったので麻里ちゃんに登場してもらいました。 

「なるほど、そうなんだ。さすがねぇ~。あ、でも、今はチーズケーキよりも、モンブラン派なんだけどなぁ…。」 

(ふふ、褒められてうれぴー。僕はもちろん知っていますよ)。AI君は、自然言語理解(NLU)は優れていたのですが、学習データが古くて分類(Classification)の精度がイマイチだったのです。AI君が間違えた後、僕はゆっくりボタンを押してクールに「モンブラン」と答えたのでした!(^^)! 

lights.png人生は、リカレントでない方がいい場合もある

実は、将棋の「次の一手」は、これまでの手順にとらわれずに、その局面だけを見て最前手を見つけ出す方がいいです。とかく、人間は”前の手の顔を立てて”とか”勢いで”とかを重視して手を選びがちなのですが、AI君がそんな要素を全く無視して最強手段を出すようになってから、人間もそれを見習うように変わりつつあります。

小さな嘘をついてしまったから大きな嘘をつく、ああ言ったからそれを正当化する発言をしてしまう、そんなふうに過去に引きずられて悪い方向に行ってしまうこともあるので、リカレントも時には考えものです。え、なにって。はい、全くの余談でした(^^)

リカレントニューラルネットワークが使われる技術分野

リカレントNNが、時間とともに次々と入ってくる、長さも決まらないのデータを処理するのに向いていることは理解できました。では、具体的にどのようなところに使われているのかみてみましょう。 

 リカレントニューラルネットワークが使われる技術分野 

図5:リカレントニューラルネットワークが使われる技術分野 

・自然言語処理(Natural Language Processing) 

代表的な適用分野は自然言語処理(NLP)です。自然言語理解(NLU:Natural Language Understanding)という言葉もよく使われますので合わせて覚えておきましょう。NLPはいかにも人間らしい分野で、図5に示すさまざまな用途の総称でもあります。 

・テキスト分析(Text Analysis) 

テキスト(文章)を読んで、〇〇を出力する処理です。〇〇のところは目的に応じていくつかあります。図6は、それらの例です。機械翻訳なら英文、感情分析なら感情と度合い、タグ付けなら「麻里ちゃん」と「ケーキ」が出力されていますね。入力が音声の場合は、普通は音声認識(Speech to Text)でいったんテキストにした後で処理しますが、感情分析のようにそれに加えて声のトーンなど音声情報も使って処理する場合もあります。  

テキスト分析は、社内ドキュメントに自動タグ付けしてドキュメント検索を楽にするとか、ネット上の技術情報を自動的にスクレイピングするなどに役立ちます。また、感情分析も、コールセンターのお客が怒っているかとか、従業員で鬱予備軍がいないか、などさまざまな用途で使われつつあります。 

テキスト分析や音声処理  

図6:テキスト分析や音声処理 

・機械翻訳(Machine Translation) 

2016年にGoogle翻訳の精度が飛躍的に向上したのは、エンジンをディープラーニングに切り替えたからです。翻訳は、入力と出力で言語の長さが異なりますが、元の言語の理解と変換言語の文章生成という2つにリカレント技術が大活躍しています。  

・音声認識(Speech to Text) 

日本でもAmazon EchoやGoogle Homeなどのスマートスピーカーが発売されましたね。私も両方使っていますが、その音声認識精度の高さにはいつも関心しています(といいつつ、以前からブログをGoogleの音声入力で書いていましたが…)。音声認識は入力が可変長の音声で、出力も可変長のテキストです。単なる音の文字化ではなく、文脈をきちんと理解しているからこそ高い精度で変換できるのです。  

・画像分析(Image Analysis) 

前回説明した画像認識(Image Recognition)はCNNで処理しました。でも、画像を見て何をしているのか説明するような場合は、CNNにRNNを組み合わせて使います。例えば、麻里ちゃんがおいしそうにモンブランを食べている写真をインプットすると、最初にCNNで画像認識した後、認識した「1人の女性」「ケーキ」「食べている」などのタグを使ってRNNが「1人の女性がケーキを食べている」というように説明してくれます。こうした技術はネット上にアップされた写真の自動説明付けなどに応用されつつあります。 

・動画分析 

静止画でなく動画の分析はどうでしょうか。前回のマルを認識するAIで説明しましょう。今回はマルという文字の全体がわからず、図7のように上からスキャンして1/3ずつ画像が渡されて、それをCNNで認識するとします。時点(t+1)のとき、真ん中の画像しか渡されないより、時点(t)の画像も渡してもらう方が的確に判断できますね。こんな感じで動画の場合は、前の映像との連続した情報で判断する必要がありますのでリカレントNN向きです。この技術を使って、ネット上の写真(静止画)だけでなく、動画もタグ付けされている例を見かけます。 

 動画分析 

図7:動画分析 

・チャットボット(Chat bot) 

チャットボットは、話しかけられた言葉から意図を理解して、テキストや音声で適切な応答を行います。いろいろな自然言語理解の技術を組み合わせた1階層上位の技術ともいえます。「ああ言えば、こう言う」というのは親子喧嘩の決まり文句ですが、botもそんなフロー作成を基本としています。でも、言い方を変えても意図をきちんと理解できる柔軟性があり、そのあたりが第2次AIブームのエキスパートシステムから進化しているところです。botの利用範囲はかなり広く、ECサイトの接客ロボだったり、社内システムに対する指示(会話型UI)だったり、いろいろな面で使われつつあります。  

・パーソナルアシスタント(Personal Assistant) 

パーソナルアシスタントも上位階層の技術です。チャットボットが単なる会話のやり取りなのに対し、こちらは会話以外にメンバー全員のスケジュールを見て会議室を予約してくれたり、タクシー(米国だとUBER)の手配をしてくれたり、よりインテリジェントなイメージでしょうか。こうした上位層での応用には、さらにいろいろな技術が組み合わさって使われていますが、人間とのインターフェースに関わる自然言語理解が活躍しています。 

まだまだ、適用分野はありますが、このくらいにしておきます。リカレントという言葉の意味、なぜ、再帰型構造を持つ必要があるか、どんな分野に使われているか、麻里ちゃんは実はモンブランが好き、などを理解していただければ十分です。

まとめ

リカレントニューラルネットワークは、過去を記憶して利用する技術です。これがずらずらと長い文章だったと想像してください。記憶する範囲が大きくなると、勾配(過去のどの情報がどれくらい影響を及ぼすか)が複雑になり過ぎて伝えるべき誤差が消滅したり(勾配消失問題)、記憶したものをどう生かすかという計算量も爆発的に増えます。そのため、リカレントNNは記憶する範囲をちょっと前までに限定していて、それ以前のものは切り捨てています。このことを打ち切り型通時的逆伝搬(Truncated Back propagation Through time)とも言います。 

でも、現実社会では、もう少し前までの情報を使わないとうまくいかないものもあります。そのためRNNを改良する形で登場したのがLSTM(Long Short-Time Memory)という技術で、日本語では長・短期記憶ユニットと呼ばれています。次回は、このLSTMについて解説しますのでお楽しみに。 

梅田弘之 株式会社システムインテグレータ :Twitter @umedano


RELATED POST関連記事


RECENT POST「AI技術をぱっと理解する(基礎編)」の最新記事


AI技術をぱっと理解する(基礎編)

ディープラーニングと機械学習の違い (Vol.5)

AI技術をぱっと理解する(基礎編)

畳み込みニューラルネットワーク_CNN(Vol.16)

AI技術をぱっと理解する(基礎編)

LSTM 〜Long Short-Term Memory〜(Vol.18)

AI技術をぱっと理解する(基礎編)

敵対的生成ネットワーク_GAN (Vol.19)

リカレントニューラルネットワーク_RNN (Vol.17)