DEEP LEARNING: AI-Anesth 2

Multilayer Perceptron Networkの構築
MLPClassSaturnをもう少し詳しく解析してみる。

まず、Neural Networkの構造を描いてみる。2個のInputニューロンと2個のOutputニューロン、間に20個の隠れ層Neuronという構造である。

2個のInputニューロンから20個の隠れ層ニューロンへの重みw1, w2が20個x2=40個、隠れ層ニューロンのバイアス値b1-20がそれぞれニューロンごとで合計20個、ここまでで合計60個のパラメータ。次に隠れ層20個から2個のOutputニューロンへの重みw3が20個x2=40個と、Output層のバイアス値b2がそれぞれのOutputニューロン(b21, b22)にあり、合計2個で、隠れ層からOutput層には合計42個のパラメータ。全部合わせて総計102個の重み係数+バイアスパラメータとなる。
MultiLayerNetworkクラスのインスタンスであるmodelに、params()関数を与えると102個のパラメータが単純な横一列の配列で戻される。paramTable()関数を使えば、グループごと[w1:20個、w2:20個、b1-20:20個、w3:20個、b21, b22]にまとめられて戻される。
以下のようにコードを修正するとコンソールにパラメータ中間値が出力され、パラメータ変化を分析できる。

上記のコンソール出力は以下の通り:

パラメータ初期値、中間値、最終値をエクセルに取り込んで、パラメータの変化をグラフにしてみると以下の通り:





このようにザビエルの初期値で選ばれた重み係数は、初期値からあまり変化していないが、バイアス値はゼロから始まり大きく変化していることがわかる。重みの初期値は、一般的にはガウス分布からランダムに生成したものを初期値とし、バイアス初期値はゼロとするのが通常のようだ。
重みの初期値はその後の学習に大きく影響する。
以下のようにconvolution層でもいろいろな方法がある。
http://arakan-pgm-ai.hatenablog.com/entry/2017/09/02/003000
ーーーーーーーーーーーーーーーーーーーーーーーー
Uniform:-1.0?1.0の一様乱数で初期化
UniformAffineGlorot:一様乱数にXavier Glorot提案の 係数をかけて初期化
Normal:平均0.0、分散1.0であるガウス乱数で初期化
NormalAffineHeForward:ガウス乱数にKaiming He提案の係数をかけて初期化(Forward Case)
NormalAffineHeBackward:ガウス乱数にKaiming He提案の係数をかけて初期化(Backward Case)
NormalAffineGlorot:ガウス乱数にXavier Glorot提案の 係数をかけて初期化(デフォルト)
Constant:全ての要素を一定値(1.0)で初期化
ーーーーーーーーーーーーーーーーーーーーーーーー
上記のうち、説明に「Xavier Glorot提案」と書かれている種類が「Xavierの初期値」と呼ばれるもの。 「ザビエXavierの初期値」は層のノードの数によって、作用させる係数を変化させる。たとえば、前層から渡されるノード数がn個であるときには、標準偏差√nで割る。