シリーズml-05 ニューラルネットワーク
TRANSCRIPT
Ver. 1.0, 2017-08-11
森下功啓
1
更新履歴
• 2017-08-11 Ver. 1.0 release
• 2017-08-19 シリーズ番号振り直し
2
Series Index
ML-01 機械学習の概要
ML-02 機械学習におけるデータの前処理
ML-03 ランダムフォレストによる自動識別
ML-04 機械学習の性能の定義と一般的な性能向上策
ML-05 ニューラルネットワーク
ML-06 ニューラルネットワークによる線形回帰
ML-07 ニューラルネットワークによる非線形回帰
ML-08 ニューラルネットワークを用いた識別・分類 ーシングルラベルー
ML-09 ニューラルネットワークを用いた識別・分類 ーマルチラベルー
ML-10 ニューラルネットワークで画像識別
ML-11ニューラルネットワークのチューニングの基本
3
ニューロン
• 人の認知性能はニューロンのネットワークが実現している
• ニューロンはシナプスで信号を伝える
• シナプスの刺激量が一定を超えると、ニューロンは発火(電気的に励起)し、刺激を伝達する
• 刺激の強さはシナプスによる(受容体の数や神経伝達物質の量)
4
http://www.gifu-nct.ac.jp/elec/deguchi/sotsuron/ieiri/img9.gif
神経細胞同士の結合
ニューロンのモデル化
結合係数でシナプスの数や受容体の数を表現する
5
𝑥0
𝑥1
𝑥2
𝑥3
𝑤0
𝑤1
𝑤2
𝑤3
𝑦
結合係数
出力
入力
*シナプスの結合の強さ=結合係数の大きさ**シナプスの数=結合係数の数
***ユニットには が入力される𝑧 =
𝑘
𝑤𝑘𝑥𝑘
ユニット
𝑦をどう与えるか?→活性化関数
𝑦を求める関数を活性化関数(Activation)という。活性化関数は複数提案されており、ここではその代表例としてシグモイド関数(sigmoid)を示す。
6
ቊ𝑦 ≈ 1, 𝑧 > threshold:𝜃
𝑦 ≈ 0, 𝑒𝑙𝑠𝑒
𝑧 =
𝑘
𝑤𝑘𝑥𝑘
𝑦 = ℎ(𝑧) =1
1 + exp(−𝑧 + 𝜃)
y =1
1 + exp(−𝑧), (𝜃 = 0)
バイアス項
発火
活性化関数の種類
7http://www.procrasist.com/entry/2017/01/12/200000
ニューラルネットワークの基本構造
8
入力データ
出力データ
中間層 出力層入力層
*中間層は複数あっても良いが、多層になると学習が進みにくいという特徴がある。*中間層のユニット数は自由に調整できるが、多すぎても少なすぎてもダメだ。
(隠れ層)
バイアス項のためのユニット
9
入力データ
出力データ
中間層(隠れ層)
出力層
入力層
1
1
𝑤0,10
𝑦1
𝑦2
𝑦3
𝑥1
𝑥2
𝑥3
𝑥4
*𝜃を常に1を出力する
ユニットで置き換える。Layer 𝑖 + 1のユニット𝑗に
対するバイアス項からの入力は𝑤0,𝑗
𝑖 となる。𝑤0,20
𝑤0,11
𝑤0,21
𝑤0,31
Layer 0
Layer 2
Layer 1
Unit 1
Unit 2
Unit 1
Unit 3
Unit 2
Unit 1
Unit 2
Unit 3
Unit 4
Unit 0
Unit 0
𝑤𝑘,𝑗𝑖
Layer 𝑖のUnit 𝑘からUnit 𝑗への結合係数
値の入出力を数式で表してみた
10
𝑿 = (1, 𝑥1, ⋯ , 𝑥𝑛)𝑇= ( 𝑋0, ⋯ , 𝑋𝑛)
𝑇
𝑧𝑗𝑖 = 𝑾𝑗
𝑖 ∙ 𝒀𝑖−1z of unit 𝑗 at Layer 𝑖
𝑾𝑗𝑖 = (𝑤0,𝑗
𝑖−1, ⋯ , 𝑤𝑢𝑖−1,𝑗𝑖−1 )𝑇Weight vector of unit 𝑗 at Layer 𝑖
Layer 𝑖のユニット数は𝑢𝑖output of unit 𝑗 at Layer 𝑖
𝒀𝑖 = (𝑦0𝑖 , ⋯ , 𝑦
𝑢𝑖𝑖 )𝑇output vector at Layer 𝑖
input vector
Layer 𝑖
Unit 𝑗
・・・
𝑤0,𝑗𝑖−1
𝑤𝑢𝑖−1,𝑗𝑖−1
内積
𝑦𝑗𝑖
重み係数
活性化関数
output vector at Layer 0 𝒀0 = 𝑿
Relationship of 𝑛 and 𝑢𝑖 𝑛 + 1 = 𝑢0
ここで、𝑛は特徴ベクトルの次元数である。
𝑖は添え字。指数ではないので注意
𝑦𝑗𝑖 = ൞
1.0 (𝑗 = 0)
ℎ 𝑧𝑗𝑖 (𝑗 ≥ 1, 𝑖 ≥ 1)
𝑋𝑗 (𝑛 ≥ 𝑗 ≥ 0, 𝑖 = 0)
ℎ𝑧𝑗𝑖
Irisの識別を行う例
11
中間層(隠れ層)
出力層入力層
がくの長さ
がくの幅
花弁の長さ
花弁の幅
セトサ
バーシクル
バージニカ
*入力層に入れる値はN(0, 1)に正規化しておく
0.0~1.0
0.0~1.0
0.0~1.0
正解がセトサなら、上から[1,0,0]の出力が理想的
学習:結合係数の修正
12
中間層(隠れ層)
出力層入力層
がくの長さ
がくの幅
花弁の長さ
花弁の幅
*誤差関数で求めた誤差を各𝑤で微分し、傾きの大きさに応じて結合係数を修正する。修正方法は最適化アルゴリズム(Optimization)による。ここで、出力層から入力層に向けて順に結合係数を修正する方法を誤差逆伝搬法といいう。
0.5
0.3
0.7
出力
1.0
0.0
0.0
正解
誤差あり
誤差あり
誤差あり
修正
修正
修正
修正
最適化アルゴリズムの種類
13
ニューラルネットワークでは、学習過程において勾配降下法などを用いて出力誤差を縮小させていく
最適化アルゴリズム別の誤差収束の様子(created by https://twitter.com/alecrad)
↓山の高さが誤差の大きさを表している。誤差最小を目指して、計算を繰り返す。アルゴリズムによって、最小を目指す方法が異なる。
14
ちなみに、誤差関数の起伏が明らかであれば、最初から最小になる結合係数をセットすればいいじゃないかという質問がよ
くあります。
えー、前ページの誤差の等高線は自明ではありません。計算で求める必要があります。
結合係数が少なければ全探索的に総当たりで計算してもいいかもしれません。ですが、単純な3層のモデルであっても
最低でも10^10オーダーの計算が必要でしょう。
実用的なネットワークにおいては、解を得るまでに何年かかるか分かりません。
故に、結合係数は乱数で初期化した上で、誤差の勾配を基に誤差を縮小させる方向で修正するのです。
Deep Learning
15
多層(20層とか100層)のニューラルネットワークをDeep Neural Network、一般的にDeep Learningと呼んでいる。
層の数が増えると調整項目が減ったり、表現力が増えたりと良いことが起こるのだが、標準的なニューラルネットワークだと勾配消失問題により実用上4〜5層程度が限界だった。
Deep Learningでは最適化アルゴリズムや活性化関数やAuto Encoderやプーリング層や畳み込み層やDropout層などの工夫
によってこれをクリアした。
16