読者です 読者をやめる 読者になる 読者になる

Michael NielsenのNeural Networks and Deep Learningを読んで、覚えておきたいと思ったこと

機械学習

Michael Nielsen著のオンライン書籍Neural Networks and Deep Learningを読んで、
覚えておきたいと思ったことのメモ。

ゼロから作るディープラーニングのネタ元は、 CS231nとばかり思っていたけど、
今となっては、真のネタ元はこのオンライン書籍だと確信している。
言い回しとか、コード例とかが瓜二つ。

こちらの書籍、なんと有志がプロジェクトを作って日本語訳を勧めているそう。
ぜひ翻訳参加してみたい。

ch.1 ニューラルネットワークを用いた手書き文字認識

パーセプトロンが2層になるとはどういうこと?

一層目のパーセプトロンは入力に重みをつけて、単純な判断をしている。 二層目のパーセプトロンは第一層のパーセプトロンよりも複雑で、抽象的な判断を下しているといえそう。

バイアスの意味とは?

バイアスはパーセプトロンが1を出力する傾向の高さを表す量だとみなせる。 あるいは、生物学の例えを使えば、バイアスとは、パーセプトロンというニューロンが発火する傾向の高さを表すといえる。

なぜ誤差関数を使うのか?

なぜ誤差関数を導出するのか?
結局のところ、われわれが知りたいのはどれだけの画像がネットワークによって正しく分類されたかではないのか?
分類が成功した回数を最大化せずに、誤差間薄を最小化するのはなぜ?

その理由は分類の正解数が、ネットワークの重みとバイアスのなめらかな関数にならないことにある。 重みとバイアスに小さな変更を加えても、正解数が変化することがほとんどないため、コストを改善するのに重みとバイアスをどう変更したら良いかわからない。 代わりに誤差関数のような滑らかな関数を用いた場合、重みとバイアスに対してどう微小に変更を加えれば改善できるかが簡単にわかるようになる。 これが誤差関数の最小化を用いる理由であり、2次コストの最小化をした後で初めて分類の精度を調べることにする。

オンライン学習(逐次学習)とは?

オンライン学習とは、ニューラルネットワークの一回の学習を一つの訓練入力で行うこと。
人間とおなじ方法。

ch.2 逆伝播の仕組み

誤差逆伝播法を構成する美しい4つの式

以下の4つの式を覚えておくと、 ニューラルネットに施すテクニックの理由や、その影響を説明できるようになる。

出力層での誤差 {\delta^{L}} に関する式

{
\delta_{j}^{L} = \frac{\partial C}{\partial a_{j}^{L}} \sigma'( z_{j}^{L} )
}

誤差 {\delta^{l}} での誤差 {\delta^{l+1}} に関する式
(直観的には誤差をネットワークとは逆方向に伝播させている)

{
\delta^{l} = ((w^{l+1})^{T} \delta^{l+1}) \odot \sigma'(z^{l})
}

任意のバイアスに関するコストの変化率の式

{
\frac{\partial C}{\partial b_{j}^{l}} = \delta_{j}^{l}
}

任意の重みについてのコストの変化率の式

{
\frac{\partial C}{\partial w_{jk}^{l}} = a_{k}^{l-1} \delta_{j}^{l}
}

ch.3 ニューラルネットワークの学習の改善

どうやったら交差エントロピーを最初に思いつくのか?

二乗和誤差の勾配計算の際に、 {\sigma'(z)} の項が、学習の速度低下を引き起こしていた( {\sigma} があると、勾配消失しやすいため)。 {\sigma'(z)} の項が初めからないような、勾配の式から出発し積分することで交差エントロピー誤差の式を導出した。

交差エントロピーは何を意味するのか?

驚きの尺度。 出力が期待通りだとあまり驚かないし、期待していないものだと強く驚く。

正規化項はなぜバイアスを含まないのか?

{
C = - \frac{1}{n} \sum_{xj} y_{j}\ln aj^{1}+ (1-y_{j}) \ln (1 - a_{j}^{L}) + \frac{\lambda}{2 n} \sum_{w} w^{2}
}

この正規化項にバイアスを含まない。 その理由は、もし、バイアスが大きくなっても、重みが大きくなったときのように、入力に対するニューロンの感受性が高まるわけではないから。 だから、大きなバイアスのために、訓練データのノイズを学習してしまうのではないかと心配する必要はない。 同時に、大きなバイアスを許すことで、ニューラルネットワークはより柔軟に振る舞えるようになる。 特に大きなバイアスを許すことで、ニューロンの出力が容易に飽和できるようになる。 時に、この性質が望ましい場合がある。

重みが小さいことの意味

ニューラルネットワークの大部分で小さな重みをもつとする。 重みが小さいということは、ランダムな入力を変化させてもニューラルネットワークの振る舞いが大きくは変わらないことを意味する。 そのため、正規化されたニューラルネットワークでは、データに含まれる局所的なノイズの効果を学習しづらくなっている。 その代わり、正規化されたニューラルネットワークは訓練データの中で繰り返し観られるデータの特徴に反応する。

対照的に、大きな重みを持つニューラルネットワークは、入力の小さな変化に敏感に反応してその振る舞いを大きく変えてしまう。 そのため、正規化されていないニューラルネットワークは、大きな重みを使って、訓練データのノイズに関する情報を沢山含んだ複雑なモデルを学習してしまう。

要するに、正規化されたニューラルネットワークは訓練データに頻繁に現れるパターンに基づいた比較的シンプルなモデルを構築する。 そして、訓練データが持つノイズの特異性を学ぶことに対して耐性をもつ。

ch.4 ニューラルネットワークが任意の関数を表現できることの視覚的証明

ニューラルネットワーク(NN)のUniversal approximator theoremは, NNによる関数の近似性を示すもので,NNの強力さを物語る.

ただし,以下の2点の注意点がある.

1. ニューラルネットワークは任意の関数を完全に計算できるわけではない.

そうではなく,好きなだけ近い近似関数を得られるということ 隠れ層のニューロンを増やすことで近似の精度を上げられる.

計算したい関数f(x) とepsilon > 0が与えられたとして, 十分な数の隠れ層のニューロンを用いると,出力g(x)が|g(x)-f(x) < epsilon|を任意の入力xに対して満たすNNを常に見つけられることをuniversal approximator theoremは示している.

2. 近似できる関数は連続関数に限る

不連続な関数は,NNを用いた近似は一般的には不可能

重みやバイアスを増やすとはどういうことなのか.

活性化関数をsigmoidととると,

  • 重みの操作
    • wを増やすと,ステップ関数に近づく.
    • wを増やすと,勾配が0の関数に近づく

  • バイアスの操作
    • バイアスを増やすとグラフが左へ移動する
    • バイアスを減らすとグラフが右へ移動する