567 Views
August 13, 23
スライド概要
機械学習や音声認識に関する書籍を執筆しています。
7. 限界は破れるか(2) - ニューラルネットワーク - ⼊⼒ 1 出⼒ 教師信号 誤差 7.1 ニューラルネットワークの構成 7.2 誤差逆伝播法による学習 7.3 ディープニューラルネットワーク 荒木雅弘: 『フリーソフトでつくる 音声認識システム(第2版)』(森北 出版,2017年) スライドとJupyter notebook サポートページ
7.1 ニューラルネットワークの構成 (1/7) 誤差評価に基づく学習の限界 複雑な境界となるデータの学習においては、線形識別面では性能向上に限界がある 誤差評価に基づく方法で非線形識別面の学習は可能だが、どのような非線形関数にするか を事前に設計する必要がある 誤差の小さい任意形の識別面を学習することはできないか → ニューラルネットワーク ネットワークの構造を工夫して、特徴抽出も学習の対象とすることはできないか → ディープニューラルネットワーク
7.1 ニューラルネットワークの構成 (2/7) ニューラルネットワークの基本的なアイディア ニューロンとよばれる神経細胞がシナプス結合を介して信号を伝達する神経細胞の計算メ カニズムをモデル化 入力された電気信号の重み付き和の値によって、各ニューロンの活性/非活性が決まる
7.1 ニューラルネットワークの構成 (3/7) 閾値論理ユニットによるニューロンのモデル化 wT x = 0 という特徴空間上の識別面を表現(w, x は d + 1 次元) → パーセプトロン(データが線形分離可能なときのみ学習可能) 1
7.1 ニューラルネットワークの構成 (4/7) 活性化関数を閾値関数からシグモイド関数に差し替え 入力の重み付き和を0~1の値に変換 入力が正例である確率とみなせる データが線形分離不可能でも勾配降下法により誤差最小の線形識別面が学習可能 1
7.1 ニューラルネットワークの構成 (5/7) フィードフォワード型ニューラルネットワーク 入力 → 隠れ層 → 出力層とユニットを階層状に結合することで非線形識別面を実現 多クラス識別の出力層には活性化関数として softmax 関数を用いる 隠れ層の出力の重み付き和を、大小の順序を変えずに0~1、かつすべて足して1に変換 1 ⼊⼒ 隠れ層 出⼒層
7.1 ニューラルネットワークの構成 (6/7) フィードフォワード型ニューラルネットワークによる非線形識別面の実現 線形識別関数の重み付き和で非線形識別関数を近似 隠れ層1で得 られる識別⾯ 隠れ層1 出⼒層 隠れ層2 隠れ層2で得 られる識別⾯ 2つの識別⾯の 重み付き和で得 られる識別⾯
7.1 ニューラルネットワークの構成 (7/7) ニューラルネットワークによる非線形識別面の実現 隠れ層のユニット数を増やすと、より複雑な非線形識別面が実現可能 デモ: https://playground.tensorflow.org/ HIDDEM LAYER:1, neurons:4, Activation:Sigmoid, DATA:Exclusive or, Noise:0
7.2 誤差逆伝播法による学習 7.2.1 誤差逆伝播法の名前の由来 出力と教師信号の差から計算された誤差が、出力層から入力側へ逆方向に伝わる ⼊⼒ 1 出⼒ 教師信号 誤差
7.2.2 結合重みの調整アルゴリズム (1/4) 特定のデータ xp に対する二乗誤差 c 1 J(w) ≡ ∑(gi (xp ) − bi )2 2 i=1 勾配降下法による誤差 J の最小化 w を J の勾配の逆方向へ一定量だけ動かすことを繰り返して最適解へ収束させる ρ : 学習係数 ∂J(w) w ←w−ρ ∂w ′
7.2.2 結合重みの調整アルゴリズム (2/4) 学習対象の重み ある階層の j 番目のユニットと1階層下の i 番目のユニットとの重み wij の調整を考える 着⽬している層の 番⽬のユニット 1階層下のユニット 1階層上のユニット
7.2.2 結合重みの調整アルゴリズム (3/4) ユニット j の内部の計算 学習データ xp が入力されたときのユニット j への入力の重み付き和 wij : ユニット i からユニット j への結合重み、gip : ユニット i の出力 hjp = ∑ wij gip i ユニット j の出力 f : 活性化関数 gjp = f (hjp )
7.2.2 結合重みの調整アルゴリズム (4/4) 学習データ xp が入力されたときの出力層における誤差の定義 glp : 出力層の l 番目のユニットの出力、blp : クラス l の教師信号 Jp ≡ 1 ∑(glp − blp )2 2 l 重み wij の調整式 ′ wij ∂Jp ← wij − ρ ∂wij
7.2.3 調整量を求める (1/4) 調整量の計算 合成関数の微分の公式を使う ∂Jp ∂Jp ∂hjp = ∂wij ∂hjp ∂wij ∂hjp 右辺第2項は ∂w ij = ∂ ∑i wij gip ∂wij = gip 右辺第1項を εjp とおいて、合成関数の微分の公式を適用 εjp ∂Jp ∂Jp ∂gjp ∂Jp = ⋅ = ⋅ f ′ (hjp ) = ∂hjp ∂gjp ∂hjp ∂gjp
7.2.3 調整量を求める (2/4) ∂Jp の計算 ∂gjp ユニット j が出力層の場合 ∂Jp = gjp − bjp ∂gjp ユニット 誤差 j が中間層の場合 Jp への影響は、1階層上のユニット k への影響の和 ∂Jp ∂Jp ∂hkp ⋅ =∑ = ∑ εkp wjk ∂gjp ∂h ∂g kp jp k k 活性化関数の微分 シグモイド関数の場合: f ′ (hjp ) = f (hjp )(1 − f (hjp )) = gjp (1 − gjp )
7.2.3 調整量を求める (3/4) ここまでの計算のまとめ 誤差の変化量 εjp (gjp − bjp )gjp (1 − gjp ) 出力層 ={ (∑k εkp wjk )gjp (1 − gjp ) 隠れ層 重みの修正式 ′ wij wij − ρ(gjp − bjp )gjp (1 − gjp )gip 出力層 ←{ wij − ρ(∑k εkp wjk )gjp (1 − gjp )gip 隠れ層
7.2.3 調整量を求める (4/4) 誤差逆伝播法(確率的勾配降下法) 1. ネットワークの重みを小さな初期値に設定 2. 全データに対する学習を1エポックとし、エポック数だけ以下繰り返し 1. データの順番をシャッフル 2. 個々のデータ xp に対して 1. ネットワークの出力を計算 2. 出力層から順に誤差項 ε の計算 εjp = { (gjp − bjp )gjp (1 − gjp ) 出力層 (∑k εkp wjk )gjp (1 − gjp ) 隠れ層 3. 重みの更新 ′ wij ← { wij − ρ(gjp − bjp )gjp (1 − gjp )gip 出力層 wij − ρ(∑k εkp wjk )gjp (1 − gjp )gip 隠れ層
7.2.4 過学習に気をつけよう ニューラルネットワークの学習の特徴 過学習 ニューラルネットワークは非線形識別面を学習することができるので、学習データに対する誤識別 率を限りなく 0 に近づけることができる そのような識別面は、未知データに対して誤識別率が高いことが多い 学習データに特化しすぎた識別面が学習される現象を過学習とよぶ 学習の不安定性 一般に誤差関数が複雑な形となり、極小値が複数存在して、極小値 最小値となることが多い = どのような極小値で学習が停まるかは初期値に依存するので、初期値によっては学習がうまくい かないことがある
7.3 ディープニューラルネットワーク ディープニューラルネットワーク ニューラルネットワークの隠れ層を多層にすることで性能の向上を目指したもの 多階層にすることで、特徴抽出の処理も学習の対象とすることができる 問題に特化したネットワーク構造を導入することもできる
7.3.1 勾配消失問題とは 多階層における誤差逆伝播法の問題点 入力層に近づくにつれて調整量が小さくなる勾配消失が生じる ⼊⼒層 隠れ層 出⼒層 調整量
7.3.1 勾配消失問題とは 勾配消失のシミュレーション デモ: https://playground.tensorflow.org/ HIDDEM LAYER:6, neurons:4, Activation:Sigmoid, DATA:Gaussian, Noise:30
7.3.2 多階層学習における工夫 事前学習法 深層学習の初期ではネットワーク全体の学習に先立って、オートエンコーダ(誤差逆伝播法 による自己の情報の再現)による重みの初期値設定が行われた ⼊⼒層 隠れ層1 ⼊⼒層 隠れ層1 ⼊⼒層 の複製 誤差逆伝播法による学習 調整対象 (a) 事前調整対象 の重み (b) オートエンコーダによる 再現学習 ⼊⼒層 隠れ層1 調整済み 隠れ層2 調整対象 (c) 1階層上の事前調整 隠れ層1 の複製
7.3.2 多階層学習における工夫 活性化関数の工夫 勾配消失の原因はシグモイド関数の微分が最大でも0.25であることが大きい 微分してもあまり小さな値にならない活性化関数を用いることで事前学習が不要になった 例) ReLU(rectified linear unit) ReLU (x) = max(0, x) 入力が正の場合、微分値が1となり勾配消失が起こりにくい 入力が負の場合、ユニットの出力が0となり学習対象のパラメータ削減に寄与する 1 1 0 (a) rectified linear 関数 1 0 (b) (a) の導関数 1
7.3.2 多階層学習における工夫 過学習の回避 ドロップアウト : ランダムに一定割合のユニットを消して学習を行う 下層2つのユニットが活性化 (出⼒=1)したときのみ、こ のユニットも活性化させたい 通常の学習 ドロップアウト 学習時 0.9 0.1 重みが偏る可能性 =汎⽤性の低下 1.0 1.0 ⽚⽅だけでもなるべく正解に 近づこうとする =汎⽤性の向上 認識時 0.5 学習した重みを 0.5 倍
7.3.3 特化した構造をもつニューラルネットワーク (1/3) 畳み込みニューラルネットワーク (CNN): 画像認識に適する 入力画像に対して畳み込みとプーリングを繰り返し、最後は密結合層で識別を行う フィルタ適⽤による 特徴抽出 窓範囲内の最⼤値抽出に よる特徴位置のぼかし 3 ⼊⼒層 出⼒層 畳み込み層 プーリング層 N回繰り返し 2次元配列を1次元 に並べ直して結合 密結合 ネットワーク
7.3.3 特化した構造をもつニューラルネットワーク (2/3) リカレントニューラルネットワーク (RNN): 時系列信号認識や自然言語処理に適する 隠れ層の出力を次の時刻の入力に結合することで、前方の系列の情報を保持する 出⼒層 出⼒層 隠れ層 隠れ層 ⼊⼒層 ⼊⼒層 (a) リカレントニューラルネットワーク (b) 帰還路を時間⽅向に展開
7.3.3 特化した構造をもつニューラルネットワーク (3/3) Transformer: 機械翻訳や言語生成モデルに適する 隠れ層の出力計算に入力の他の部分との関係を考慮するSelf-attentionを用いる BERT, GPT などの事前学習モデルに使われる 出⼒単語 feed forward ⽂脈を反映させた 単語のベクトル feed forward feed forward cross-attention self-attention self-attention + + 回繰り返し 位置情報 回繰り返し ⽂脈に依存しない 単語のベクトル 出⼒結果の単語を1つずつ追加 Transformer エンコーダ Transformer デコーダ
まとめ ニューラルネットワークの構成 ニューラルネットワークは誤差を最小にする確率的勾配降下法の枠組みで非線形識別面を 学習できる 誤差逆伝播法による学習 多階層のニューラルネットワークでは誤差を出力層から逆に伝えることで学習を行う ディープニューラルネットワーク 勾配消失問題などで学習がうまくゆかないことがあったが、現在では様々な工夫により深 層学習が可能になっている CNN, RNN, Transformer など対象に特化したネットワーク構造がある Jupyter notebook