3章 ニューラルネットワーク

また、『ゼロから作るディープラーニング』の勉強まとめ。

 

 

パーセプトロンには長所短所があり、長所は「多層化すれば複雑な関数を表現できるだけの可能性を秘めている」ということ、短所は「そのパラメータを設定するには人手が必要である」ということだ。そしてニューラルネットワークは、その短所を解決するための手法である。

 

パーセプトロンは「ステップ関数」を活性化関数に採用しているが、活性化関数をほかのものにすれば、ニューラルネットワークが実現できる。よく利用されるものに、シグモイド関数がある。

 

シグモイド関数はステップ関数と比較すると、「滑らかさ」が大きく異なるが、この要素がニューラルネットワークの学習において重要である。そして「0か1か」のステップ関数に対して、シグモイド関数は「0.731」などの実数を返す。

 対して共通項としては、入力が小さければ「0」に近い出力を、逆に入力が大きければ「1」に近い出力をする、というように信号の重要性が高い場合には大きな値を、低ければ小さな値を出力する。

 そして、どんなに入力信号が小さかろうが、大きかろうが、出力信号を0から1の間に収められる。

 

ReLU(Rectified Linear Unit)関数は、入力が0を超えていれば入力値をそのまま出力し、0以下ならば0を出力する関数で最近主に利用されるようだ。

 

出力層の設計

 ニューラルネットワークは分類問題と回帰問題の両方に用いられる。どちらの問題に用いるかで出力層の活性化関数は異なる。回帰問題では恒等関数、分類問題ではソフトマックス関数を一般的に用いる。

 

ソフトマックス関数実装上の注意

 ソフトマックス関数では入力によって指数関数の値が容易に大きくなり、コンピューターの計算の限界、オーバーフローを起こす原因となりえる。それを踏まえた実装をする必要がある。

 

ソフトマックス関数

ソフトマックス関数の重要な特徴として、出力は0から1.0の間の実数になり、その総和は必ず1になるという点。そしてこの特徴のおかげで出力を「確率」として解釈できる。

 ニューラルネットワークのクラス分類では、一般的に出力が一番大きなクラスだけを認識結果とする。そして、ソフトマックス関数では指数関数を用いるために、各要素は単調増加するだけであり、出力層のソフトマックス関数を省略可能である。

 

・出力層のニューロンの数

 出力層のニューロンの数は解くべき問題に応じて適宜決定する必要がある。

 

・前処理

 機械学習では(他でもそうだろうが)正規化などの前処理が重要になってくる。識別性能の向上や学習の高速化などに貢献する。

 

バッチ処理

 数値計算を扱うライブラリでは大きな配列の計算への最適化が行われており、バッチ処理によって配列をまとめることで処理時間を短縮できる。またニューラルネットワークの計算において、データ転送がボトルネックになる場合にも、バッチ処理によってバス帯域の負荷を軽減できる。

 

 

 

あとは躓いたけど、振り返ってみればバカだったなと思う些末な部分。

 

・3章のp73でインポートする「dataset.mnist」はオライリーGitHubからインストールしなければならない。当たり前だ。そして「issues」にも挙がっているが、ディレクトリを直接指定してやらなければならなかった。

・p76の「init_network」関数で「open」関数を用いる際にも、ディレクトリを直接指定してやらねばならなかった。これは他のエラーも出ていたので、自分だけかもしれない。

 

 

 

 

 

 

 

 

参考文献

 『ゼロから作るディープラーニング』斎藤康毅 著