俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

E資格対策振り返り(深層学習-ゲート付きRNN-LSTM)

E資格(JDLA Deep Learning for ENGINEER 2019 #2)対策として学習した深層学習の分野のうち、ゲート付きRNNのひとつLSTM(長短期記憶- Long short-term memory)を振り返ります。

LSTM(長短期記憶- Long short-term memory)

1.LSTMとは何か

系列を扱うシンプルなRNNでは、入力に同じ処理を繰り返すために、伝播する勾配が1より大きい場合は発散(勾配爆発)してしまい、1より小さい場合は0(勾配消失)してしまう欠点があります。

LSTMは、その欠点を補うための手法になります。

ゲートという、データを通過させる程度を決めるノードがあり、水道の蛇口のような役割を果たし、過去の情報をどこまで影響させるかを調整します。

調整には、シグモイド関数が使われます。

といっても、なかなかわかりづらいので、順を追って振り返っていきたいと、思います。 

2.LSTM全体像

LSTMの全体像は以下の図のような構成となっており、過去の情報を記憶しておく記憶セル(C)とデータを通過させる程度を決める三つのゲートで構成されます。

f:id:kanriyou_h004:20200130235054p:plain

では、構成要素を順に見ていきたいと思います。

3.入力ゲート(𝒊)

記憶セルに入力する要素を弱める程度を決めるゲートになります。
以下の式で程度が決まります。

f:id:kanriyou_h004:20200131000109p:plain

入力(f:id:kanriyou_h004:20200131000154p:plain)と、一つ前の出力(f:id:kanriyou_h004:20200131000249p:plain)に、それぞれ重みをかけたものにバイアスを足して、最後にシグモイド関数で、0~1に閉じ込めます。

このことによって、入力する要素を何割減にするかが決まります。

4.入力する要素(𝒈)

入力する要素は、入力(f:id:kanriyou_h004:20200131000154p:plain)と一つ前の出力(f:id:kanriyou_h004:20200131000249p:plain)に重みをかけて、バイアスを足したものになります。

f:id:kanriyou_h004:20200201001258p:plain
入力ゲートとは違い、活性化関数にシグモイド関数ではなく双曲線正接関数(tanh)を使い、正負に広がりを持った分布になります。

 5.忘却ゲート(𝒇)

記憶セル(𝐶𝑡)に入力する記憶セル過去の記憶(𝐶𝑡−1)を忘れる程度を決めるゲートになります。 
以下の式で程度が決まります。

f:id:kanriyou_h004:20200201001455p:plain

入力ゲートと同様、入力(f:id:kanriyou_h004:20200131000154p:plain)と、一つ前の出力(f:id:kanriyou_h004:20200131000249p:plain)に、それぞれ重みをかけたものにバイアスを足して、最後にシグモイド関数で、0~1に閉じ込めます。

6.記憶セル(𝐶𝑡)

過去の記憶を蓄積する値となります。入力ゲートで弱められた入力(g・i)と、忘却ゲートで忘れられた過去の記憶(𝐶𝑡1・f)を足し算することで求められます。

f:id:kanriyou_h004:20200201001835p:plain

この記憶セルの内容が出力に伝わることで過去の情報を引き継いでいきます。

7.出力ゲート(𝒐)

記憶セル(𝐶𝑡)の内容を出力(ℎ𝑡)に反映する程度を決めるゲートになります。 
以下の式で程度が決まります。

f:id:kanriyou_h004:20200201095424p:plain
入力ゲート、忘却ゲートと同様に、入力(f:id:kanriyou_h004:20200131000154p:plain)と、一つ前の出力(f:id:kanriyou_h004:20200131000249p:plain)に、それぞれ重みをかけたものにバイアスを足して、最後にシグモイド関数で、0~1に閉じ込めます。

8.出力する要素(ℎ𝑡)

最後に、 記憶セルの内容を双曲線正接関数(tanh)で変換した後、出力ゲートの値(出力する程度)をかけて出力を計算します。

f:id:kanriyou_h004:20200201095137p:plain

 

以上が、LSTMの振り返りになります。

全体像を一度に把握しようとすると、なかなかに難解なのですが、一つ一つの構成要素はそんなに難しくはないので、順に追いかけて理解を進めました。

これからE資格を受験される方の参考になれば幸いです。

 

2019年8月31日(土)にE資格を受験して、合格しました!

E資格対策として勉強の進め方や、参考書などをまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

oregin-ai.hatenablog.com 

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

 【E資格対策に使った参考書】