前回の学習で「畳み込みニューラルネットワーク(CNN)」について説明してきました。
今回は「再帰型ニューラルネットワーク(RNN)」について学んでいきます。
「再帰型ニューラルネットワーク(RNN)」は、音声や自然言語などの系列データを扱うことができるニューラルネットワークです。
「畳み込みニューラルネットワーク(CNN)」に並び、ディープラーニングの中でも研究と技術への応用が進んでいる手法です。
このブログは底辺フリーランサーがG検定を取得して人生を好転させようとする日記です。
目次
再帰型ニューラルネットワーク(RNN)

Young athlete is texting on the phone on a blurred background.
再帰型ニューラルネットワーク(RNN)は、内部に再帰構造を持っているニューラルネットワークです。
再帰型ニューラルネットワーク(RNN)はこの構造によって、情報を一時的に記憶できるようになりました。
そのため理論上、過去のすべてをの入力データを扱えます。
再帰型ニューラルネットワーク(RNN)は、音声認識や自然言語処理に利用されています。
代表的な再帰型ニューラルネットワーク(RNN)として、「ジョーダンネット」や「エルマンネット」があります。
ジョーダンネット:入力層は入力信号を処理する入力ユニットと、直前の出力層の状態を入力とする文脈ユニットとで構成されています。
エルマンネット:入力層は入力信号を処理する入力ユニットと、直前の中間層の状態を入力とする文脈ユニットで構成されています。
再帰型ニューラルネットワーク(RNN)の問題と解決
代表的な再帰型ニューラルネットワーク(RNN)は、内部に再帰構造をもっているため勾配消失問題が起こりやすい特徴がありました。
この問題を解決するために、さまざまな方法が提案されています。
ここからは、勾配消失の問題を解決するための手法を紹介します。
LSTM
この問題を解決するために生まれたのがLSTMです。
LSTMは代表的な再帰型ニューラルネットワーク(RNN)の中間層ユニットをメモリと「メモリ・セル」「入力ゲート」「忘却ゲート」の3つのゲートを持つLSTM blockに置き換えています。
系列データでも勾配を消失せずに学習することを実現しています。
GRU
GRUは、LSTMを簡略化させた手法です。
再帰型ニューラルネットワーク(RNN)の学習は、時間をさかのぼって反映するBPTT(Backpropagation Through Time)法が使われています。
双方向RNN(Bidirectional RNN)
一般的な再帰型ニューラルネットワーク(RNN)では、過去から未来の情報のみを使って学習します。
双方向RNN(Bidirectional RNN)は、未来から過去への情報も同時に学習することによって精度を向上させています。
双方向RNN(Bidirectional RNN)は、文章の推敲や機械翻訳、フレーム補完などに利用されます。
RNN Encoder-Decoder
ディープラーニングを利用することで、「機械翻訳」「音声認識」「キャプション生成」の精度が向上しました。
RNNに「エンコーダEncoder」「デコーダDecoder」を提案したことが精度向上の理由です。
系列データを入力として得て、系列データを出力するモデルのことを、「sequence-to-sequence」と呼びます。
「RNN Encoder-Decoder」はこのモデルの一つです。
「機械翻訳」「音声認識」「キャプション生成」は系列データを入力として得て、系列データを出力することから「sequence-to-sequence」が使われています。
エンコーダは英語の単語系列を受け取り、エンコーダから出力された系列をデコーダに渡します。
その後、デコーダはエンコーダから出力された系列と1つ前に出力した単語の情報を入力として受け取ってから、次の単語を出力します。
この際に、精度を改善させるために「アテンション」という仕組みも設けられています。
「アテンション」は、エンコーダのパラメータを利用してデコーダにて、どの単語にフォーカスするべきかを決めます。
再帰型ニューラルネットワーク(RNN)の現状
2018年にGoogleが発表した「BERT」は、多様なベンチマークでこれまでの記録を上回る結果を残しています。
「SQuAD」というスタンフォード大学が提供している約10万個の質問応答のデータセットでは、人間を上回る精度を記録しています。
すでにこの分野では、人間の能力を人工知能が上回っていることを意味します。
自己符号化器(Autoencoder)
自己符号化器(Autoencoder)は、次元圧縮やニューラルネットワークの事前学習にも利用されています。
ここからは、自己符号化器(Autoencoder)について詳しく解説していきます。
自己符号化器(Autoencoder)の手法
自己符号化器(Autoencoder)は出力が入力に近づくようにニューラルネットワークを学習させる手法。
データの特徴獲得や次元圧縮が可能です。
2層の自己符号化器(Autoencoder)は、単層のニューラルネットワークとそれを反転させて作った2層のネットワークで構成されています。
入力層、中間層、出力層が並んでいますが、中間層が入力層や出力層よりも少ない特徴を持っています。
最初のネットワークで符号化(エンコード)をおこない、次のネットワークで複合化(デコード)をおこなっています。
このときに、入力データがなるべく出力データに近づくように学習します。
結果として、中間層が次元を削減した入力データの特徴を抽出しています。
活性化関数に恒等写像を用いた3層の自己符号化器の結果は、主成分分析で得られる結果と実質的には同様になります。
自己符号化器(Autoencoder)は、多層のネットワークを使うことで、主成分分析ではできない非線形な特徴の抽出や次元圧縮もできるようになりました。
勾配消失問題の自己符号化器(Autoencoder)による解決方法
自己符号化器(Autoencoder)を用いた事前学習によって、勾配消失問題を解決できます。
教師ありの順伝播ニューラルネットワークでは、勾配消失の問題がありました。
自己符号化器(Autoencoder)を用いた事前学習をおこなうために、対象の多層ネットワークを1層ずつ単層ネットワークに分割します。
その後、入力層側から順に、分割された単層ネットワークを自己符号化器(Autoencoder)として学習をおこないます。
自己符号化器(Autoencoder)として学習した単層ネットワークを積み重ねたものを「積層自己符号化器」と呼びます。
自己符号化器(Autoencoder)を用いて、事前学習をすることによって、勾配消失が起こりにくくなります。
積層自己符号化器の出力
積層自己符号化器を積み重ねるだけでは、出力することはできません。
そのため、出力に「シグモイド関数」か「ソフトマックス関数」などを足すことでネットワークを完成させます。
この時に追加した出力層の重みを学習するために、ネットワーク全体で学習をおこないます。
既存の学習モデルを再学習する方法のことを「ファインチューリング」と呼びます。
深層強化学習
ディープラーニングは強化学習への応用もおこなわれています。
ここからは、「強化学習」から「深層強化学習」までを紹介していきます。
強化学習では乗り越えられなかったジレンマは、深層強化学習によって乗り越えられています。
このプロセスを頭に入れていく必要があります。
強化学習とは
強化学習では、思考錯誤をくり返して得られる報酬の総和である価値を最大化する行動を学習します。
強化学習は、行動に対して報酬を得るという点では教師あり学習に似ていますが、報酬の総和である価値を最大化するという点では異なります。
強化学習には、「エージェント」「環境」「行動」「報酬」が与えられます。
エージェントは現在の環境を観測して次の行動を選択します。
一度行動を起こせば環境から報酬を得られます。
Q学習
Q学習は強化学習の代表的な手法の一つです。
Q学習では、その行動を取ったら得られる報酬を推定することによって、可能な行動の中から最も状態行動価値(ある状態においてある行動を取った時の価値)の値Qが高い行動を選択することができます。
強化学習において次の行動を決めるときに、探索と利用のジレンマが問題になります。
探索は多くの情報を集めるように行動し、利用は今持っている情報を元にして最大の報酬が得られる行動を取ろうとします。
しかし、最大報酬を得るためには、報酬が一時的に下がることを許容して、最大報酬が得られると考えられる行動以外の選択をして探索する必要があります。
最大報酬が得られると考えられる行動以外を選択して探索しすぎると、報酬が増えない状況が続いてしまいます。
これを、「探索と搾取のジレンマ」と呼びます。
深層強化学習
「深層強化学習」の有名な手法としてDQNがあります。
DeepMindが開発したDQNは、強化学習において行動価値関数の関数近似に畳み込みニューラルネットワーク(CNN)を用いた方法です。
ボルツマンマシンと深層生成モデル
これまでに学習してきたように、ディープラーニングの応用では「畳み込みニューラルネットワーク(CNN)」「再帰型ニューラルネットワーク(RNN)」「自己符号化器(Autoencoder)」「深層強化学習」以外でも画像生成の利用はおこなわれています。
ここでは「ボルツマンマシン」「深層生成モデル」である「GAN」「VAE」を学習していきます。
ボルツマンマシン
ボルツマンマシンは、ジェフリー・ヒントン達によって1985年に提案された確率的に動作するニューラルネットワークのことです。
ネットワークの動作に温度の概念を取り入れています。
深層生成モデル
生成モデルは訓練データを学習して、それらのデータと似たような新しいデータを生成することができるモデルです。
ディープラーニングを利用した生成モデルである深層生成モデルには「GAN(Generative Adversarial Network,敵対的生成ネットワーク)」や「VAE(Variational Autoencorderl),変分自己符号化器」があります。
GAN(Generative Adversarial Network,敵対的生成ネットワーク)
GAN(Generative Adversarial Network,敵対的生成ネットワーク)は、「画像生成器(Generator)」と「画像識別機(Discriminator)」という2つのニューラルネットワークで構成されています。
画像生成器(Generator)によって入力されたノイズから訓練データと同じようなデータを生成し、画像識別機(Discriminator)はデータが訓練データなのか画像生成器から生成されたものなのか識別します。
この2つのネットワークを交互に競合させることで、画像生成器から本物のデータに近い偽物データを生成することを可能にします。
GANは、生成したイメージを演算操作する機能も持っています。
例えば、人間の画像でも以下のような偽画像を生成できます。
「メガネをかけた男性」-「メガネをかけていない男性」+「メガネをかけていない女性」=メガネをかけた女性
ちなみに、FacebookのAI研究所所長のヤン・ルカンは、GAN(Generative Adversarial Network,敵対的生成ネットワーク)を、「機械学習において、この10年で最も面白いアイデア」と紹介してます。
VAE(Variational Autoencorderl,変分自己符号化器)
VAE(Variational Autoencorderl,変分自己符号化器)は、自己符号化器の潜在変数部分に確率分布を導入した手法。
まとめ
ディープラーニングによってこれまでにできなかった画像の認識や自然言語、音声の認識を可能にしました。
内部構造が複雑化しているので覚えることはたくさんありますが、学んでいくと日常生活で応用されているAIを思い出せて楽しくなります。
ここまでが「ディープラーニングの基礎」でした。
次回からは「ディープラーニングの研究分野」を学習していきます。
これまでの学習については以下の記事を参考にしてください。