ゼロから作るDeep Learning(4日目)

こんにちは、筋肉めがねです。

 

少しだけ筋トレの話をしてみましょう。トレーニングをする目的は人それぞれありますよね。体重を落としたい、という人もいれば、現状を維持したい、もしくは筋肥大を目指す、という人もいますよね。僕は筋肥大を目指してトレーニングをしているのですが、その時に大事なのは、筋繊維を破壊した後に適切な栄養を補給する事なんですよね。それで、例えばジムに着いた時に、プロテインがない、という事に気づいた時のショックといったら。。という事で、プロテインは常に切らさずストックを持っておきたいものです。

 

それでは、本日も「ゼロから作るDeep Learning」を進めていきましょう。

本日は3章の続きですね。

 

前の記事では、「単層パーセプトロンとニューラルネットワークの違いは活性化関数にある。」という事に触れましたね。 

f:id:KinnikuMegane:20181006180023j:plain

では、活性化関数とは何なのか。上図のh()の事なんですが、これって何なのと。本書には、入力信号の総和を出力信号に変換する関数、とありますね。ふむ。そして活性化関数には、大きくステップ関数とシグモイド関数がある、と。なるほど。

ステップ関数は、ある閾値を境にして、出力値が変わるもの。そして、単層パーセプトロンはステップ関数を活性化関数として使っていると。そして、ニューラルネットワークはシグモイド関数を活性化関数として使っていると。

 

先ずは、ステップ関数について、理解してみましょうか。 

ここで数式を書いて説明するんでなくて、別のアプローチで理解してみましょう。

 

という事で、ドラゴンボールの話をしてみましょう。

皆さん、ドラゴンボールを見ましたか。男の子であれば、一度はかめはめ波の練習をした事があるのでは、と思います。そして、孫悟空の筋肉を見て思う事は、あれは優にベンチプレス120kgを挙げれる体だよな、と。

 

それで、孫悟空の得意技ですが、みなさんご存知の元気玉ですね。

 

Wikipediaから一部抜粋すると、元気玉とは、人間、動物、草、木など周囲のあらゆる生物からの元気と呼ばれる微量なエネルギーだけでなく、太陽、大気、物のエネルギーにいたるまで、あらゆるエネルギーを集め攻撃エネルギーに変えて放つエネルギー弾。威力は絶大だが元気を集めるのに時間がかかり、その間は全くの無防備になるのが欠点。

 

そう、あらゆる存在からエネルギーを集めて、それを統合する(入力の総和)という点で、孫悟空はステップ関数、そして、孫悟空が自分で決めた閾値に元気の総和が到達しない間は、元気玉という出力を放出できない。また、元気の総和が閾値を超えたと孫悟空が判断したら、その元気の総和を元気玉という形に変換し、(入力信号の総和を出力信号に変換する)一気に出力する、という点で、孫悟空はステップ関数。そう、孫悟空そのものがステップ関数だったんですね。次にドラゴンボールを見られる際には、「孫悟空はステップ関数である。」という事を頭の片隅に置きながら見てみると、また違った楽しみ方ができるかもしれません。

 

では、シグモイド関数とは何なのか。 元気玉の例を使って理解しようとするならば、それは、孫悟空が閾値というものを設けずに、状況に応じて、入力された元気の総和を、元気玉として出力できる、そんなイメージです。

 

よし、シグモイド関数をNumPyとMatplotlibを使って描画してみましょう。

 

シグモイド関数

f:id:KinnikuMegane:20181006191945p:plain

シグモイド関数はexponentialのeを使った関数で、入力(x軸)に対してとても滑らかな出力(y軸)である事が分かります。 

 

ついでに、ステップ関数を描画してみましょう。

f:id:KinnikuMegane:20181006192216p:plain

入力の総和がある閾値を超えるまでと超えた後で、全く出力される値が異なる事が分かりますね。

 

ステップ関数、シグモイド関数は両者ともに非線形な関数です。非線形な関数である事がとても重要で、何でかというと、線形関数は、単純にインプットを数倍し、それをそのまま出力するんですね。という事は、複数の層が重なる事の利点がないんですよね。なぜならy = axを、y = b(ax)とする事は、y = cxとして最初から設定しておけば解決する話なので。だから、非線形な関数を活性化関数として使う事がとても重要なんですね。そして、両者で大きく異なる部分は「滑らかさ」ですね。そう、ニューラルネットワークでは、「学習する」というプロセスにといて、この「滑らかさ」がとても重要になってくるんです。

 

えっ、ドラゴンボールよりも、はじめからグラフを書いてくれた方が分かりやすい?それは、ご愛嬌ということで。それでは、次回は多次元配列について、そして実際に複数のニューラルネットワークを自分で作ってみましょう。 

 

それでは、本日は以上でございます。