-- Views
April 16, 26
スライド概要
東北大学で2023年に開講していた「パターン認識論」のスライドです
本資料では、深層学習が多数の中間層を持つニューラルネットワーク(DNN)として注目される背景を説明し、3層から7層までの構造や非線形関数の重ね合わせによる表現力向上を示しています。誤差逆伝搬法による重み更新の仕組みを復習し、勾配消失問題とその原因を具体例で示したうえで、シグモイド・tanh・ReLU・Leaky ReLU・Swish などの活性化関数の特性と改善効果を比較しています。出力層ではシグモイドと Softmax の違い、微分式、クロスエントロピーと二乗誤差のコスト関数の比較を解説し、確率的解釈や学習の安定性を論じています。最後に、MNIST 手書き数字認識を題材に、MLP の層数・ユニット数・活性化関数を変えて実験する演習手順とデータ分割の注意点を提示し、Python・R・Weka での実装方法を紹介しています。
I'll be writing programs, papers, and ramblings.
パターン認識論 第11回 伊藤 彰則 1
深層学習(Deep Learning) ◦多くの中間層を持つニューラル ネットワーク ◦高い識別性能・近似性能を持つこ とから近年注目されている 2
復習:3層NN 1 1 x1 x2 x3 x4 入力層 (1) 11 w h1(1) g1(1) ( 2 ) h1( 2) g ( 2) 1 w11 中間層 出力層 3
復習:3層NN ◦第k層の第iユニットの入力と出力 (0) i = xi (k ) i = w g g h (k ) ji ( k −1) j j g (k ) i = f (h ) (k ) i 1 (など) f ( x) = −x 1+ e 1 x1 x2 x3 x4 (1) 11 w (1) 1 h (1) 1 g 4
復習:誤差逆伝搬学習 (Back Propagation) ◦重みの学習 (𝑙) (𝑙) (𝑙) (𝑙−1) 𝑤𝑖𝑗 ← 𝑤𝑖𝑗 − 𝜌𝜀𝑗 𝑔𝑖 ◦出力層の誤差 (2) (2) (2) 𝜀𝑗 = (𝑔𝑗 − 𝑏𝑗 )𝑓’(ℎ𝑗 ) ◦中間層の誤差 (1) 𝜀𝑗 (2) (2) (2) = 𝜀𝑘 𝑤𝑗𝑘 𝑓’(ℎ𝑗 ) 𝑘 5
復習:誤差逆伝搬学習 (Back Propagation) 教師信号 + (2) 𝜀𝑗 g i( 2) = f (hi( 2 ) ) hi( 2 ) (2) (2) = (𝑔𝑗 − 𝑏𝑗 )𝑓’(ℎ𝑗 ) + (1) i h 𝑏𝑖 (2) 𝑔𝑗 − 𝑏𝑗 1( 2 ) 2( 2 ) 3( 2 ) 4( 2 ) (1) (2) (2) (2) 𝜀𝑗 = 𝜀𝑘 𝑤𝑗𝑘 𝑓’(ℎ𝑗 ) 𝑘 6
Deep Neural Network ◦中間層がたくさんあるNN 3層 7層 7
DNNはなぜよい(と思わ れる)のか ◦任意の関数を近似する能力は3層 NNで十分 ◦ただし中間層のユニット数がいくらで も多くてもよく、しかも学習ができれ ば ◦実際には難しい 8
DNNはなぜよい(と思わ れる)のか ◦多層NNの場合 ◦非線形関数を重ねて使うことで、少な いユニット数で高い表現力が得られる (うまく学習できれば) 9
例 1 ◦次のようなデー タの識別 -1 -2 -3 data$y 0 ◦これは難しそう -2 -1 0 1 2 data$x 10 3
例 -2 -1 0 1 data$x N=3 2 3 1 -3 -2 -1 data$y 0 1 0 -3 -2 -1 data$y -1 -2 -3 data$y 0 1 ◦3層NNによる識別 -2 -1 0 1 data$x N=5 2 3 -2 -1 0 1 2 3 data$x N=10 11
多層にしたら 0 -1 -3 -2 data$y ◦中心からの距離と、 距離からの識別を直 列のNNでやったら? 1 ◦ちょっと卑怯に -2 -1 0 1 2 data$x この辺で特徴抽出をしている 12 3
結果 -1 -2 -3 ◦この例はデータの構 造を人手で与えたが、 実際は特徴が自動的 に発見されることが 期待される data$y 0 1 ◦中間層が実質5ユ ニットでこんな結果 が得られる -2 -1 0 1 2 data$x 13 3
DNNの問題点 ◦勾配消失(vanishing gradient) ◦NNの学習法(BP法)は最急降下法 (Gradient descent)の一種 ◦ 各レイヤーの各ユニットで、誤差を最小に する方向に重みを変化させる ◦ 変化量を非線形関数の微係数と入力の誤差 の総和に比例させる ◦活性化関数にsigmoidなどを使う場合、 ネットワークの層が深くなると、重み の学習が困難になる 14
Vanishing Gradient例 ◦例:6層NNの中間4層のアクティ ベーションの変化 [X. Glorot&Y. Bengio, 2010] 15
Vanishing Gradient + (1) 𝜖𝑖 1( 2 ) 2( 2 ) 3( 2 ) 4( 2 ) hi(1) 2 2 = 𝜖𝑘 𝑤𝑖𝑘 𝑘 𝑓 ′ ℎ𝑖 1 特定の部分以外で は0に近い レイヤーが深くなるとだんだ ん小さくなる (𝑙) (𝑙) 𝑙 (𝑙−1) 𝑤𝑖𝑗 ← 𝑤𝑖𝑗 − 𝜌𝜖𝑗 𝑔𝑖 重みのアップデートが起きにくい 16
0.0000 0.0 0.0005 0.2 -10 -5 0 x 元の関数 5 10 0.6 0.0015 sigmoid'(x) 0.0010 0.4 sigmoid(x) 0.0020 0.8 0.0025 1.0 活性化関数の工夫 1 シグモイド関数 1+exp(−𝑥) -10 -5 0 x 5 10 微分 17
活性化関数の工夫 0.06 0.02 0.04 tanh'(x) 0.0 -0.5 0.00 -1.0 tanh(x) 0.5 0.08 1.0 0.10 𝑒 𝑥 −𝑒 −𝑥 tanh関数 tanh 𝑥 = 𝑥 −𝑥 𝑒 +𝑒 -10 -5 0 5 10 -10 -5 0 x x 元の関数 微分 5 10 18
0.000 0 0.002 2 -10 -5 0 5 x 元の関数 10 6 0.006 ReLU'(x) ReLU(x) 0.004 4 0.008 8 0.010 10 活性化関数の工夫 ランプ関数 max(0, 𝑥) -10 -5 0 5 10 x 微分 19
活性化関数の工夫 10 ランプ関数 min(0, 𝑥) 0 2 4 ReLU(x) 6 8 Rectified-Linear Unit (ReLU) -10 -5 0 5 10 x 元の関数 20
使用例 MNIST手書き数字DB認識 ◦中間2層(128-64), シグモイド出力 74% 94% 21
その他の活性化関数 Leaky ReLU SoftPlus Swish 𝑥 0.001𝑥 log(1 + 𝑒 𝑥 ) 𝑥 1+exp(−𝑥) 10 8 2 0 2 0 -10 -5 0 x 5 10 4 Swish 6 6 4 SoftPlus 6 4 2 0 Leaky ReLU 8 8 10 10 𝑥≥0 𝑥<0 -10 -5 0 5 10 -10 -5 0 5 x x 22 10
出力層の活性化関数 オリジナル:sigmoid ◦0/1の出力を近似(識別向き) 0/1 各出力ユニットの 出力は独立 0/1 0/1 23
出力層の活性化関数 Softmax出力 exp ℎ𝑖 ◦𝑔𝑖 = σ 𝑗 exp ℎ𝑗 hi gi = exp hi j exp hj どれかの出力だ けが1に近くなる それ以外は0に近 い 総和は1 (確率近似) 24
出力の微分 exp ℎ𝑖 ◦𝑔𝑖 = σ 𝑗 exp ℎ𝑗 exp ℎ𝑖 exp ℎ𝑗 𝜕𝑔𝑖 ◦ 𝜕ℎ𝑗 =− σ𝑗 exp ℎ𝑗 2 = −𝑔𝑖 𝑔𝑗 (𝑖 ≠ 𝑗) exp ℎ𝑖 σ𝑗 exp ℎ𝑗 − exp ℎ𝑖 𝜕𝑔𝑖 ◦ = 2 𝜕ℎ𝑖 σ exp ℎ 𝑗 2 = 𝑔𝑖 (1 − 𝑔𝑖 ) 𝑗 𝜕𝑔𝑖 ◦まとめて = 𝑔𝑖 (𝛿𝑖𝑗 − 𝑔𝑗 ) 𝜕ℎ𝑖 25
Softmaxと誤差逆伝播 𝜕𝑔𝑖 ◦ = 𝑔𝑖 (𝛿𝑖𝑗 − 𝑔𝑗 ) 𝜕ℎ𝑗 𝜕𝑔𝑖 ◦ヤコビ行列 J = 𝜕ℎ𝑗 ◦誤差ベクトル 𝒆 ◦入力側での誤差 𝝐 = J𝒆 26
Softmaxと誤差逆伝播 ◦ シグモイド出力 ◦ 𝜖𝑖 = 𝑔𝑖 − 𝑏𝑖 𝑓′(ℎ𝑖 ) = 𝑔𝑖 − 𝑏𝑖 𝑔𝑖 1 − 𝑔𝑖 + hi gi = f (hi ) i = ( gi − bi ) f ' (hi ) ◦ Softmax出力 ◦ 𝜖𝑖 = 𝑔𝑖 σ𝑗 𝑔𝑗 − 𝑏𝑗 (𝛿𝑖𝑗 − 𝑔𝑗 ) ◦ ある出力ユニットの逆伝播誤差に他の出力ユ ニットが影響 27 bi
コスト関数 出力側で小さくしたいもの ◦これまでは二乗誤差を考えた ◦ 𝐿 = σ𝑖 𝐿𝑖 1 ◦ 𝐿𝑖 = σ𝑘 𝑛 𝑔𝑖 𝑘 − 𝑏𝑖 𝑘 2 ◦出力が(0,1)の場合にはこれ以外のコ スト関数もありうる 28
クロスエントロピー 出力のエントロピーを最小化 ◦𝐿 = σ𝑖 𝐿𝑖 1 ◦ 𝐿𝑖 = − σ𝑘 𝑛 (𝑘) (𝑘) 𝑏𝑖 log 𝑔𝑖 + (𝑘) 1 − 𝑏𝑖 log (𝑘) 1 − 𝑔𝑖 (𝑘) ◦𝑏𝑖 = 1のときは前半のみ (𝑘) ◦𝑏𝑖 = 0のときは後半のみ 29
コストの比較 クロスエントロピー b=1 b=0 2 1 0.2 0.4 Cost 0.6 3 b=0 0 0.0 Cost 0.8 b=1 4 1.0 二乗誤差 0.0 0.2 0.4 0.6 x 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 x 30
コストと誤差 ◦二乗誤差の場合 + ◦出力側 𝑔𝑖 − 𝑏𝑖 1 ◦ 二乗コスト𝐿 = 2 𝜕𝐿 ◦ = 𝑔𝑖 − 𝑏𝑖 𝜕𝑔𝑖 𝑔𝑖 − 𝑏𝑖 2 hi gi = f (hi ) i = ( gi − bi ) f ' (hi ) ◦クロスエントロピーの場合 ◦コスト L = 𝑏𝑖 log 𝑔𝑖 + 1 − 𝑏𝑖 log(1 − 𝑔𝑖 ) 𝜕𝐿 𝑏𝑖 1−𝑏𝑖 𝑏𝑖 −𝑏𝑖 𝑔𝑖 −𝑔𝑖 +𝑏𝑖 𝑔𝑖 𝑏𝑖 −𝑔𝑖 ◦ = − = = 𝜕𝑔𝑖 𝑔𝑖 1−𝑔𝑖 𝑔𝑖 1−𝑔𝑖 𝑔𝑖 (1−𝑔𝑖 ) 31 bi
コストと誤差 ◦二乗誤差の場合 𝜕𝐿 ′ ◦𝜖𝑖 = 𝑓 ℎ𝑖 𝜕𝑔𝑖 = 𝑏𝑖 − 𝑔𝑖 𝑔𝑖 (1 − 𝑔𝑖 ) ◦クロスエントロピーの場合 𝜕𝐿 ′ ◦𝜖𝑖 = 𝑓 ℎ𝑖 𝜕𝑔𝑖 𝑏𝑖 −𝑔𝑖 = 𝑔𝑖 1 − 𝑔𝑖 𝑔𝑖 1−𝑔𝑖 = 𝑏𝑖 − 𝑔𝑖 + hi gi = f (hi ) i = gi − bi 32 bi
演習 ◦MNIST手書き数字を多層ニューラ ルネットワークで認識してみよう ◦mnist.csvかmnist.arff ◦ Wekaを使う場合はarffのほうが使いやす い ◦ PythonやRではCSVのほうが楽 ◦ラベルは1列目(label) ◦入力は2~785列目(28×28を1列に 並べている) 33
演習 ◦中間層が1層以上あるニューラル ネット(Multi-Layer Perceptron, MLP)を使って文字を認識する ◦中間層の層数、各層のユニット数、活 性化関数などを変えて実験してみる ◦どの設定が最も高性能か? 34
演習 ◦注意点 ◦ データを学習と評価(できれば学習と検 証と評価)に分ける ◦ 元データは数字順に並んでいるので、例えば 「上から8割が学習」としてはいけない ◦ ランダムに分割する ◦ 学習データで学習、検証データでハイ パーパラメータ選択(層数、隠れユニッ ト数、活性化関数)、評価データで最終 評価 35
演習 ◦実行手段について ◦PythonやRで書いてもよい ◦ PythonだとPyTorchやKerasなど ◦ RではTorch for RかKeras ◦Wekaでも実行可能 ◦ 手順は別紙参照 36