2015年8月9日日曜日

Deep Learning のフレームワーク Chainer を使った画像分類 その3

前回記事: Deep Learning のフレームワーク Chainer を使った画像分類 その2

最初から: Deep Learning のフレームワーク Chainer を使った画像分類 その1

ネットワーク内伝搬手順の定義

train_mnist.py 51-56行目

# Neural net architecture
def forward(x_data, y_data, train=True):
    x, t = chainer.Variable(x_data), chainer.Variable(y_data)
    h1 = F.dropout(F.relu(model.l1(x)),  train=train)
    h2 = F.dropout(F.relu(model.l2(h1)), train=train)
    y = model.l3(h2)

    return F.softmax_cross_entropy(y, t), F.accuracy(y, t)

このforward関数はこの後、train_mnist.py内82, 102行目で直接参照し実行される。実行時、第一引数 x_data には画像データが指定され、第二引数 y_data には分類の答えのデータが指定される。

forward関数内ではまず、引数 x_data と y_data 両方をchainer.Variable()で包み込み、追跡可能としている(→chainer.Variable)。x_data はl1〜l3層を通り、最終的に変数 y となる。l1〜l2を通る際、relu関数を使った活性化とドロップアウトがなされる。

活性化関数とは、ユニットが受け取る入力u=w1x1+w2x2+w3x3+w4x4+bより出力zを生成する関数f。z=f(u)。活性化関数は古くは出力が0~1に収まる、ロジスティックシグモイド関数あるいはロジスティック関数と呼ばれるが使われてきたが、近年では入力が0以上であれば出力もそれに従って増加する(0以下の場合は0となる)正規化線形関数(Rectified linear function)がより良い結果が得られ、また計算量が小さいためよく用いられている1。この関数をもつユニットはReLU(Rectified Linear Unit)と呼ばれる1

ドロップアウトとは学習時にネットワークの自由度を強制的に小さくし、過適合を避ける方法の1つ。具体的には学習時に出力層以外の層のユニットについて決まった割合pで選出しその他を無効化する。pは層ごとに異なる値を指定しても構わない2。過適合(=過剰適合, 過学習)とは訓練後にネットワークの性能をテストした際に、パラメータ更新回数を増やすにつれ、テストの誤差が大きくなってしまう状態3

forward関数は最終的に、多クラス分類の誤差関数(損失関数, loss function, とも呼ばれる4)である交差エントロピー式の算出結果と、このミニバッチの分類の正確さを返却(return)する。

1参考: 岡谷2015 p.10-11, 2岡谷2015 p.31, 3岡谷2015 p.28, 4岡谷2015 p.15

次回、Optimizerとは何か、学習と学習結果の評価手順を紐解く。→Deep Learning のフレームワーク Chainer を使った画像分類 その3

参考書籍

  • 岡谷貴之(2015)『深層学習』(機械学習プロフェッショナルシリーズ)講談社

0 件のコメント:

コメントを投稿