Python

RNNとは?Pythonでの実装方法と一緒に見ていこう!

ウマたん
ウマたん
当サイト【スタビジ】の本記事では、ディープラーニングを時系列にも対応させたRNN(リカレントニューラルネットワーク)について解説していきます。RNNの仕組みや応用場面と一緒にPythonでの実装をしていきます。これからの応用が期待される領域なんですよー!

こんにちは!

消費財メーカーでデジタルマーケター・データサイエンティストをやっているウマたん(@statistics1012)です!

自然なコミュニケーションができるようになることは、真の人工知能を実現するために非常に重要。

ディープラーニングの日進月歩の進化により、数年前と比較して飛躍的に言語処理能力が上がっています。

ロボたん
ロボたん
一昔前まで使い物にならなかったGoogle翻訳もだいぶ精度よくなってきてるもんなー!
ウマたん
ウマたん
その裏にはディープラーニング領域の発展が隠されているんだよー!

そんな自然言語処理の世界で現在使われている最先端技術の基となっているのがRNN(Recurrent neural network)。

この記事では、そんなRNNについて徹底的に見ていきます!

ウマたん
ウマたん
Pythonの勉強はこちらをチェック!
Python 勉強
【入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【スタビジ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...

RNNとは

RNNとはディープラーニングの一種で、Recurrent neural networkの頭文字を取った手法です。

まずは、RNNの概要、そして仕組みについて見ていきましょう!

RNNの概要

通常のディープラーニングでは、時系列要素のあるデータを上手く扱えないという欠点があります。

通常のディープラーニングでは時系列要素はなくシンプルにいくつかの同列要素のインプットに対して重みパラメータを変化させて出力を調整します。

よくある図ですが、イメージはこんな感じ。

3層構造のニューラルネットワーク

通常のディープラーニングの説明は割愛しますので、知りたい方は以下の記事を見てみてください!

【入門】ディープラーニングとは?仕組みとPythonでの実装を見ていこう!当サイト【スタビジ】の本記事では、ディープラーニングの仕組みやPythonでの実装方法について解説していきます。ディープラーニングってなんとなくブラックボックスなイメージがあるかもしれませんが、実はシンプルなアルゴリズムなんですよー!...

そんなディープラーニングの構造に対して、時系列要素を加えて順番を考慮しようよというのがRNNの考え方。

時系列処理はテキストの文脈を読み取る上で非常に重要です。

例えば英語で、he said “I’m () ” という文章があった時、()の中身を当てるのは相当難しい。

ロボたん
ロボたん
I’m the king of the world!!じゃない??
ウマたん
ウマたん
おっとぉ!それはタイタニックの有名なシーン、ディカプリオが叫ぶセンテンスだね!

ロボたんの戯言は置いておいて、正直可能性は無限大にあって分かりません。

しかし、その後ろにこんな文脈があったらどうでしょう?

Tom came home, and he said “I’m () “.

()の中にどのような文章が入るかほとんどの人が分かると思います。

おそらくTom came home, and he said “I’m home “でしょう。

このようにテキストの文脈からワードを推論するのは周りの文脈が非常に重要なんです。

それを実現できるのがRNNと考えてください。

※現在の最新手法にはほぼRNNは使われていません。もっと高度な手法が使われていますが、考え方の基本となっているのはRNNです。

RNNの仕組み

RNNの概念が分かったところでRNNの仕組みについて見ていきましょう!

文脈を読み取るモデルが作りたい!しかし通常のディープラーニングでは難しそうです。

ロボたん
ロボたん
通常のディープラーニングではなぜ難しいの?
ウマたん
ウマたん
実は、現状のモデルでもある程度推論はできるんだけど時系列要素を持たせることができないんだ

実は、現状のディープラーニングのモデルでワードを推論することも可能。

それがword2vecと呼ばれる手法です。聞いたことのある人もいるかもしれませんが、word2vec自体もそれなりに強力な手法です。

簡単にどんな手法か見ていきましょう!

word2vecでは前後関係からのみワードを推論します。

つまりTom () home, and he said “I’m home”とあった場合、Tomとhomeの間に入るワードがcameであるという教師データを与えて学習するというもの。

大量のセンテンスを学習させることでモデルの精度を上げていきます。

この時、ワードをベクトル変換するためword2vecと呼ばれています。

こんなイメージ

word2vec

1つのワードから前後を予測するタイプもあり、それぞれCBOWモデルとskip-gramと呼ばれます。

さてさて、しかしこのword2vecでは前後関係のみの推論になり、文意全体を読み解くのは非常に難しいです。

そこで登場するのがRNNの考え方。

今までのディープラーニングでは、それぞれのインプットがそれぞれの中間層に与えられていましたが、RNNでは同一の中間層を用いて再帰的にインプットが行われます。

再帰的という部分がReccurentと言われるゆえんです。

こんなイメージ

rnnの概念

同じレイヤーh1を用いているのがミソです。

これにより前のワードの情報をレイヤに記憶させ後続へとつなぐことができます。

RNNの改善手法と応用場面

メモ

RNNは同じレイヤに情報を再帰させることで時系列要素をレイヤに記憶させることに成功していました。

しかしRNNも万能ではありません。

ここでは、RNNの欠点と改善手法・応用ケースについて見ていきましょう!

RNNの欠点と改善手法

そんなRNNですが、実はいくつかの欠点があるんです。

それは時系列要素を繋いでいくことで勾配が爆発もしくは消失してしまうこと。

ディープラーニングでは重みパラメータを勾配法で計算するため勾配の値が非常に重要です。

通常のディープラーニングでも初期値を正しく与えないと勾配消失や勾配爆発が起きますが、RNNでも起きやすい。

そこを改善しなくてはいけません。

勾配爆発に関しては、勾配クリッピングという方法が一般的です。

勾配クリッピングでは、勾配がある閾値を超えた場合勾配をルールに従って修正する方法。

そして勾配消失に関しては、LSTMと呼ばれる手法が一般的に用いられます。

LSTMはLong short term memoryの略で、長い記憶も短い記憶も継続させます。

シンプルに言うとLSTMでは通常の勾配とは別に記憶用の記憶セルを作り伝播させていきます。

詳しくは以下の書籍を参考にしてみてください。

created by Rinker
オライリー・ジャパン
¥3,960
(2020/10/24 23:51:45時点 Amazon調べ-詳細)

ここでおさえておきたいのは、RNNを改善した最新の手法はあるが基本的な考え方は同じということ。

そして便利なことにPythonを使えば、最新の手法でもフレームワークで実装できるということ。

RNNの応用場面

さて、そんなRNNは現実世界のどのような場面に応用されているのでしょうか?

どのようなことができるのでしょうか?

そんなRNNですが、どのような応用場面があるのでしょうか?

Google翻訳

RNNの考え方の延長線上に時系列データを別の時系列データに変換する「seq2seq」があります。

それにより、Google翻訳のような日本語の文意を読み取り英語に変換するというアプリケーションが開発されています。

自動応答

流行りのチャットボットや音声AIなども同じくseq2seqをベースにしています。

ある質問に対して自然な回答をすることは完璧なAIを作り出す上で日々研究されている分野です。

画像→テキスト変換

現在の技術では、非常に高い精度で画像データをテキストデータに変換することができます。

neural image caption(引用元:Google-“Show and Tell: A Neural Image Caption Generator“)

これを見るとかならの高精度で画像データを読み取りテキスト変換することが出来ていることが分かります。

ロボたん
ロボたん
わー!ほんとだ!こんなに高精度なのか!ディープラーニングってすごいなー!
ウマたん
ウマたん
ディープラーニングのポテンシャルは無限大なんだ!

RNNを実際にPythonで実装してみよう

PC

さて、RNNの概況について理解できたところで実際にPythonを使って実装していきましょう!!

使うデータセットはKaggleのホームページが落とせる航空会社の乗客数データ!

1949年から1960年までの月別乗客数がデータとして入っています。

149行2列のシンプルなデータセット。

モデル構築は以下のサイトを参考にしています。

1変数の時系列データを基に過去のデータから未来の値を予測します。

この時、tflearnというライブラリを使ってRNN(正確にはLSTM)を実装していきます。tflearnはkerasと似たようなライブラリでディープラーニングの実装が感覚的に容易にできます。

実際にモデルを構築していきましょう!

最終的な評価はRMSE(Root Mean Square Error)で算出しています。

細かい実装ポイントについて見ていきましょう!

ここでは、データセットを時系列モデルに適した形に変形する関数と、学習データ予測データに分ける関数を作っています。

ここが実際にRNN(LSTM)モデルを構築している部分。

ちなみに初回モデル構築は問題ないですが、再度パラメータを変えて処理を回そうとするとJupyter notebookではエラーをはいてしまうので、7行目に初期化するような記述を入れています。

これだけでRNNが実装できちゃうんです!簡単!

この時、RMSEは0.10079201となりました。それなりに良い予測ができてる!

ちなみに層を増やしてみると・・・

RMSEは0.16051404に悪化してしまいました・・・

簡易的なデータセットに複雑なモデルで当ててもあまり意味がなさそう。

ちなみに過学習を防ぐためにDropoutなどのパラメータで調節することも可能です!

ロボたん
ロボたん
こんなに簡単なの!?すごい!
ウマたん
ウマたん
ディープラーニングもだいぶ身近になったよねー!

RNNについて勉強する方法

Check

さて、ここまでRNNについて徹底的に見てきました。

ロボたん
ロボたん
RNNの可能性は非常に感じるけど、どのように勉強していったらいいのー?
ウマたん
ウマたん
良質な情報自体は書籍から学べるよ!だけど本腰入れて勉強するならプログラミングスクールも視野に入れておいた方がよいかも!

正直、書籍ベースで非常に深い部分まで突っ込んで学ぶことが可能です。

先ほども紹介しましたが、RNNまわりを勉強するなら以下の書籍が圧倒的にオススメです!

created by Rinker
オライリー・ジャパン
¥3,960
(2020/10/24 23:51:45時点 Amazon調べ-詳細)

有名どころですが、もしディープラーニングの基本から勉強したいのであれば以下の書籍を読むとよいでしょう!

こちらは画像認識の話がメインです。

ただ、書籍だけでメンターサポートがないとなかなか進めるのが難しいと思うのでその場合はプログラミングスクールを活用するとよいでしょう!

僕の場合はテックアカデミーで書籍も使いながらメンターサポートいただいて学習を進めました!

テックアカデミー本体のカリキュラムは微妙なので期待しない方がいいですが、メンターサポートは充実しているので自分でメンターの人に要望を出しながらガツガツ進められる人にはオススメ!

AIコースを見てみる無料体験を見てみる

他のプログラミングスクールもあわせてオススメを以下の記事で紹介しています!

AI機械学習 プログラミングスクール
AI(人工知能)・機械学習が学べるプログラミングスクールおすすめ7選!【データサイエンティストが厳選】当サイト【スタビジ】の本記事では、現役のデータサイエンティストがAI(人工知能)や機械学習を学ぶのにオススメなオンラインプログラミングスクールを紹介していきます。社会人として働きながら通えるスクールもありますので、ぜひ参考にしてあなたにピッタリのコースを見つけてくださいね!...

RNN まとめ

RNNはこれからも進化を続ける分野であり、まさに音声AIの領域は世界のIT企業GAFAが凌ぎを削っている部分。

人間と同等レベルの思考・会話が出来る日も遠くはないでしょう。

それが実現した未来はどんな世界になるのでしょうか。

ロボたん
ロボたん
AIの実現はそう遠くないと言われているけど本当にあるのかなー??
ウマたん
ウマたん
そこは色んな専門家が議論を重ねている領域だから難しいよね・・

当サイトでもシンギュラリティ(AIが人間を超えるタイミング)について言及している記事がありますのでよければ目を通してみてください!

シンギュラリティ(技術特異点)が来ないと思う理由を2つの観点から論じる当サイト【スタビジ】の本記事では、シンギュラリティについて論じていきたいと思います。シンギュラリティは人工知能が人間の知能を超えるタイミングとされ1説によると2045年に来ると言われています。果たして本当にシンギュラリティは来るのでしょうか来ないのでしょうか?...

ディープラーニングを使って、世界を変えていきましょう!

ディープラーニングの勉強法については以下の記事でまとめています!

【初心者向け】ディープラーニングの学習ロードマップまとめ当サイト【スタビジ】本記事では、ディープラーニングの学習方法について詳しくまとめていきます!ディープラーニングは難しいと思われがちですが、アルゴリズムは意外とシンプルで実装自体も非常に簡単なんです!Pythonでの実装もおこなっていきますよー!...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!