先月末からちょっと忙しくなって以来、当ブログも更新が滞ってしまいました。隙間時間を見つけてちょっとずつでも進めて行こう、投稿して行こうと書いた矢先にこれじゃぁいかんいかん。という事でこちらの読書・実践シリーズも進めて行こうと思います。
今回からは3章『ニューラルネットワーク』。1章2章の様に章を丸ごと1エントリで、というには厳しそうなボリュームと難易度っぽいので小分けにしつつ取り組んでみたいと思います。
読書メモ
- ニューラルネットワーク:適切な重みパラメータをデータから自動で学習出来る。
3-1.パーセプトロンからニューラルネットワークへ
- 入力層/中間層(隠れ層)/出力層で構成されている。
- 活性化関数(activation function):入力信号の総和を出力信号に変換する関数。
3-2.活性化関数
- 活性化関数は『ステップ関数』『階段関数』と呼ばれている
- そのためパーセプトロンでは『ステップ関数を使っている』等と言われる
- シグモイド関数(sigmoid function):ニューラルネットワークで良く用いられる関数の1つ。
- ステップ関数:階段状に値が切り替わる事から『階段関数』とも呼ばれる。
3-2-5.シグモイド関数とステップ関数の比較
- 何が違う?→滑らかさが違う。シグモイドの方が滑らか。
- この『滑らかさ』がニューラルネットワーク学習において重要な意味を持つ。
- パーセプトロンでは0か1、ニューラルネットワークでは連続的な実数値。
- 例えるならば"ししおどし(パーセプトロン)“と"水車(ニューラルネットワーク)"。
- 両者の共通点:入力信号が重要ならば大きい値を、そうでなければ小さい値を出力。また、値の大小に関わらず出力信号の値を0〜1の間に押し込める。
3-2-6.非線形関数
- シグモイド・ステップ両関数の特徴でもある。
- 言い換えると、"線形関数は活性化関数に用いてはならない"、らしい。
3-2-7.ReLU関数
- 入力が0を超えていればその値を、0以下ならば0を出す。
実践記録
各関数の実行を確認するコードをnumpy, matplotlibをインポートして実装しています。
ステップ関数及びシグモイド関数を実行するとそれぞれ以下の様なグラフが描画されます。
率直な感想としては、色々な関数があってそれぞれに何らかの特徴がある、というのは分かったけどこれがどういう所で使われてどういう風に役立つのか、という部分に関しては全くもってピンと来ていない、というのが読了後の感想ですw numpyとかmatplotlibとかを幾らか触っていれば手応え的なものもあったりするのかなぁ。まぁこの分野はそもそも何も分かっていないので、まずは『一回通してやってみる』『そして○○が分からないという事が分かった』というレベルを目指すべく進めて行こうかなと思います。
当エントリの理解の助けになりそうな参考リンク: