Chainerと読む「深層学習」-vol.2
「深層学習 (機械学習プロフェッショナルシリーズ) 」をChainerのコードと交えて読み進めようという趣旨。
こんにちは。Chainerがバージョンアップして
サンプルコードのネットワークの定義方法が変わりました。
pythonのclassの使い方を少し理解した気がします。
今回は第2章の順伝播型ネットワーク(FFNN)です。
Chapter2 順伝播型ネットワーク
2.1 ユニットの出力
順伝播型ネットワーク(以降:FFNN)の出力は線形結合となっていて
上の式のように入力xに重みwをかけて、バイアスbを足す。
これをchainerではchainer.linksのLinear関数で表す。
import chainer.links as L u1 = L.Linear(4, 1) # (2.1a) u2 = L.Linear(4, 1) # (2.1b) u3 = L.Linear(4, 1) # (2.1c) u = L.Linear(4, 3) # (2.3a)
Linear関数を詳しく説明すると、
class chainer.links.Linear(in_size, out_size, wscale=1, bias=0, nobias=False, initialW=None, initial_bias=None)
Linear(入力素子数, 出力素子数, 重みの標準偏差, バイアスの初期値, バイアスの有無, 重みの指定, バイアスの指定)
といった引数ががあり、重みやバイアスの初期値が渡されていない場合は、重みは正規分布、バイアスは0となる。
2.2 活性化関数
活性化関数はシナプスの役割をしていて、特定の値で発火する。単調または非線形関数が主に使われている。
これをchainerではchainer.functionsに用意されている。
import chainer.functions as F z = F.sigmoid(u) # ロジスティックシグモイド関数 z = F.tanh(u) # 双曲線正接関数 z = F.relu(u) # 正規化線形関数
他にも様々な活性化関数が用意されている。
2.3 多層ネットワーク
図2.4(a)をchainerで表してみよう。
入力をx, 出力をyとすると
# まずは各層を定義する。 u2 = L.Linear(4, 3) u3 = L.Linear(3, 2) # 次に繋げる x = [x1, x2, x3, x4] z2 = relu(u2(x)) z3 = sigmoid(u3(z2)) y = z3
という感じになる。
2.4 出力層の設計と誤差関数
正解ラベルの型
chainerでは問題の種別によって、
正解ラベル(本書だと望ましい出力d)の型を整える必要があります。
回帰の場合、正解ラベルをnumpy.float32型
分類の場合、正解ラベルをnumpy.int32型
にする必要がある。変換方法はdという配列に対して
d = d.astype(numpy.float32) # 回帰 d = d.astype(numpy.int32) # 分類
誤差関数
誤差関数は活性化関数と同様にchainer.functionsに用意されていて、
yをネットワークの出力、dを望ましい出力にすると
loss = F.mean_squared_error(y, d) loss = F.softmax_cross_entropy(y, d)
と表すことができる。
次回は確率的勾配法です。
github.com
- 作者: 岡谷貴之
- 出版社/メーカー: 講談社
- 発売日: 2015/04/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る