AIを支える活性化関数
みなさん、こんにちは。今日も張り切っていきましょう。
今日は「活性化関数」について取り上げます。
「活性化関数」とはニューロンを興奮させる関数のことで
ニューロンの入力と重みをかけそこにバイアスを足したものをこれに代入してました。
「活性化関数」おかげでニューラルネットワークが複雑な表現をすることができて
精度の高い認識能力を発揮できるのした。
「??」な人は下のブログを読んで見てくださいな。
今回は活性化関数の図とそれらについて軽く説明していきます。
グラフはanacondaで作りました・・・
スクリプトは今回は貼っていないのでご了承ください・・
では見ていきましょう!!
~今日の内容~
No.1~ステップ関数
ステップ関数を用いるとニューロンの出力を正例(+1)か負例(0)で
表現することができます。つまり・・
データを二種類に分類することができるのです。
この関数はニューラルネットワークの
起源でもある単純パーセプトロンに使われていました。
単純パーセプトロンとは複数の入力から1つの出力を行う神経の伝達方式を
単純にモデル化したものです。隠れ層は存在しません。
我々のニューロンも複数の樹状突起から入力(電気信号)を受けて電位が上昇し、
この関数はグラフのように1か0でしかニューロンが表現することができず
0.3のような0と1の中間の状態を表現できないのです。
No.2~恒等関数
恒等関数は入力をそのまま素直に出力値として返す直線の関数です。
中学校で習うようなy=xです。
恒等関数は教師あり学習の回帰問題によく使われます。
というのも出力の範囲自体に制限がなく、連続的な値を取るため
連続値を予測する(=過去のデータから未来のデータを予測をする)ような
回帰問題に利用されるのです。回帰問題の例としては「売り上げを予測したい」
「株価を予測したい」など挙げられますね。
また、ニューラルネットワークの出力層の活性化関数として使われ
後述するシグモイド関数・ソフトマックス関数も利用されます。
No.3~シグモイド関数
シグモイド関数は 0〜1を滑り台のようなS字の曲線です。
ステップ関数とは違い0~1の値も取ることができます。
この関数は迷惑メールの判定やデータを適切なクラスに分類するような
分類問題に使われていました。
シグモイド関数に閾値というものを設定して(普通は閾値は0.5)
閾値を超えるとオッケー、超えないとダメみたいな感じで
データを2つに分類することができるのです。
またニューラルネットワークの活性化関数として使われていたのです。
しかし・・ネットワークが次第に深くなるにつれてニューラルネットワーク
での誤差が上手く伝播せず学習が進まない原因がこの関数だったのです。
実はこのシグモイド関数が勾配消失問題の原因であったのです。
(勾配消失問題については今後お話しできればなと)
No.4~tanh関数
パッと見かっこよさそうな名前ですね。
名前はハイパボリックタンジェント関数と言います。
シグモイド関数とちょっとだけ似ていますが、こちらの関数は-1.0~1.0
の間を滑る曲線です。この関数はシグモイド関数を改良してできた関数です。
この関数を用いることでシグモイド関数と比べて誤差が伝播しやすくなり
シグモイド関数を使った時よりもニューラルネットワークの精度は
高くなりなりました。
No.5~ReLU関数
これまたパッと見かっこいい名前ですね。
ランプ関数と言います。
最近のディープラーニングの隠れ層の活性化関数としてよく使われています。
弱点は入力が0未満だと 出力が0になってしまい学習が進まなくなる
(このことをdying ReLUという)が起こりうることです。
No.6~Leaky ReLU関数
これはランプ関数を改良したもので0未満の直線をよく見てください。
若干傾いている・・・
これにより入力が0未満であっても出力が0にならなくなり
dyingReLUを回避することができるようになりました。
No.7ソフトマックス関数
この関数は分類問題において二種類以上の分類を行いたいときや
先ほど話したようにディープラーニングの出力層の活性化関数
として利用されます。
この関数を出力層に置くと入力したデータが用意した枠でどのくらいの確率なのかを
表現することが可能になります。例えば
入力データをAかBかCに分類したい時、Aである確率は10%、Bである確率は5%
Cである確率は85%という形で表現されるのです。
参考文献
色々な関数を見ていきましたがいかがでしたか?
活性化関数それぞれには得意なこと不得意なことがあります。
状況に応じて使い分ける必要があります。