"0"からAI~ふらっとどうぞ~

自分は独学でゼロからAIについて学んでいる学生です。このブログは主にAIやネットワークの基本を理解できるようにブログという形で分かりやすくアウトプットしたものです。AIについて学びたいなと思っている方。ぜひこのブログで勉強して見てください!またある程度AIについて知識がある方も何かをを得るヒントにしてくてくれれば幸いです。Twitterアカウントもあるので是非フォローお願いします!

AIを支える活性化関数

みなさん、こんにちは。今日も張り切っていきましょう。

 

今日は「活性化関数」について取り上げます。

「活性化関数」とはニューロンを興奮させる関数のことで

ニューロンの入力と重みをかけそこにバイアスを足したものをこれに代入してました。

 

「活性化関数」おかげでニューラルネットワークが複雑な表現をすることができて

精度の高い認識能力を発揮できるのした。

 

「??」な人は下のブログを読んで見てくださいな。

zawapython.hatenablog.com

今回は活性化関数の図とそれらについて軽く説明していきます。

 

グラフはanacondaで作りました・・・

スクリプトは今回は貼っていないのでご了承ください・・

では見ていきましょう!!

 

~今日の内容~

No.1~ステップ関数No.2~恒等関数

No.3~シグモイド関数No.4~Tanh

No.5~ReLUNo.6~Leakly ReLU

No.7~ソフトマックス関数

今日の参考文献 

 

 

No.1~ステップ関数

f:id:zawapython:20190120215940p:plain

 

ステップ関数を用いるとニューロンの出力を正例(+1)か負例(0)で

表現することができます。つまり・・

 

データを二種類に分類することができるのです。

 

この関数はニューラルネットワーク

起源でもある単純パーセプトロンに使われていました。

 

単純パーセプトロンとは複数の入力から1つの出力を行う神経の伝達方式を

単純にモデル化したものです。隠れ層は存在しません。

 

我々のニューロンも複数の樹状突起から入力(電気信号)を受けて電位が上昇し、

閾値に達すると次のニューロンに伝達しましたね。しかし

 この関数はグラフのように1か0でしかニューロンが表現することができず

0.3のような0と1の中間の状態を表現できないのです。

 

 

No.2~恒等関数

f:id:zawapython:20190119195430p:plain

 恒等関数は入力をそのまま素直に出力値として返す直線の関数です。

中学校で習うようなy=xです。

 

恒等関数は教師あり学習の回帰問題によく使われます

というのも出力の範囲自体に制限がなく、連続的な値を取るため

連続値を予測する(=過去のデータから未来のデータを予測をする)ような

回帰問題に利用されるのです。回帰問題の例としては「売り上げを予測したい」

「株価を予測したい」など挙げられますね。

また、ニューラルネットワークの出力層の活性化関数として使われ

後述するシグモイド関数・ソフトマックス関数も利用されます。

 

No.3~シグモイド関数

f:id:zawapython:20190119192819p:plain

シグモイド関数は 0〜1を滑り台のようなS字の曲線です。

ステップ関数とは違い0~1の値も取ることができます。

この関数は迷惑メールの判定やデータを適切なクラスに分類するような

分類問題に使われていました。

 

シグモイド関数閾値というものを設定して(普通は閾値は0.5)

閾値を超えるとオッケー、超えないとダメみたいな感じで

データを2つに分類することができるのです。

 

またニューラルネットワークの活性化関数として使われていたのです。

 

しかし・・ネットワークが次第に深くなるにつれてニューラルネットワーク

での誤差が上手く伝播せず学習が進まない原因がこの関数だったのです。

実はこのシグモイド関数が勾配消失問題の原因であったのです。

(勾配消失問題については今後お話しできればなと)

  

No.4~tanh関数

f:id:zawapython:20190119192909p:plain

パッと見かっこよさそうな名前ですね。

名前はハイパボリックタンジェント関数と言います。

 シグモイド関数とちょっとだけ似ていますが、こちらの関数は-1.0~1.0

の間を滑る曲線です。この関数はシグモイド関数を改良してできた関数です。

 

この関数を用いることでシグモイド関数と比べて誤差が伝播しやすくなり

シグモイド関数を使った時よりもニューラルネットワークの精度は

高くなりなりました。

  

No.5~ReLU関数

f:id:zawapython:20190119193116p:plain

これまたパッと見かっこいい名前ですね。

ランプ関数と言います。

 

最近のディープラーニングの隠れ層の活性化関数としてよく使われています

弱点は入力が0未満だと 出力が0になってしまい学習が進まなくなる

(このことをdying ReLUという)が起こりうることです。

 

No.6~Leaky ReLU関数

f:id:zawapython:20190119193301p:plain

 これはランプ関数を改良したもので0未満の直線をよく見てください。

若干傾いている・・・

これにより入力が0未満であっても出力が0にならなくなり

dyingReLUを回避することができるようになりました。

 

No.7ソフトマックス関数

f:id:zawapython:20190121205752p:plain

この関数は分類問題において二種類以上の分類を行いたいときや

先ほど話したようにディープラーニングの出力層の活性化関数

として利用されます。

この関数を出力層に置くと入力したデータが用意した枠でどのくらいの確率なのか

表現することが可能になります。例えば

入力データをAかBかCに分類したい時、Aである確率は10%、Bである確率は5%

Cである確率は85%という形で表現されるのです。

 

参考文献

 

色々な関数を見ていきましたがいかがでしたか?

活性化関数それぞれには得意なこと不得意なことがあります。

状況に応じて使い分ける必要があります。

 

当ブログはAmazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。