2020年10月13日火曜日

ディープラーニング その6

第6章 ディープラーニングの仕組み

6.1 活性化関数

ニューラルネットワークの隠れ層のユニットでは以下の流れで計算を行う

①前の層から渡される複数の入力に、ニューロン間の結合の強さを表す重みを乗じて足し合わせる

②①にニューロンの反応性の偏りを表すバイアスを加算する

③②の結果に対し活性化関数によって次の層にどのように値を伝播させるか調整する


tanh 関数のグラフはシグモイド関数のグラフに似た S 字の形状になります

シグモイド関数の出力値が0から1の範囲に収まるのに対し、tanh関数の出力値は-1から1の範囲に収まります


ReLU 関数は入力が0以下の場合は0を出力し、0を超える場合はそのまま出力します


ReLU 関数のグラフは0以下の領域を見て水平ですが、 leaky ReLU 関数のグラフは0以下の領域では穏やかな傾斜になります


全結合ニューラルネットワークにおける隠れ層の活性化関数として、 ReLU 関数が主流となっている。

 ReLU 関数はシグモイド関数と比べて勾配消失問題が起きにくい


一般にニューラルネットワークネットワークの出力層の活性化関数として、回帰問題の場合は恒等関数、二値分類問題の場合はシグモイド関数、多クラス分類問題の場合はソフトマックス関数が用いられる


6.2 最適化法

ディープラーニングにおける学習とは、大量のデータによる試行によって重みやバイアスなどのパラメーターを自動で調整することである。

これに対し分析者が調整しなければならないパラメータをハイパーパラメータと呼ぶ。

ハイパーパラメータの例として学習でパラメーターを更新する量を調整する学習率や隠れ層のユニット数があげられる。

またハイパーパラメーターを自動で調整する手法もいくつか存在する。例えばランダムにハイパーパラメータを試していくランダムサーチや、ハイパーパラメータの全ての組み合わせを試すグリッドサーチなどがある


ニューラルネットワークにおける最適化では、いくつかの問題が考えられる。

例えばある限られた空間において誤差が最小となる局所最適解にとらわれ、真の解である大域最適解にたどり着けない場合が考えられる。

また、パラメーター空間においてある次元から見た場合は最小値であるが、別の次元から見た場合は最大値となる鞍点の存在もあげられる。鞍点の周辺では勾配が殆どなくなり、学習が停滞するプラトーと呼ばれる状態に陥りやすい


ディープランニングでは勾配降下法を用いて最適化する。

勾配降下法は誤差関数の偏微分に基づいてパラメータを調整する手法である。まず基本的な方法としては偏微分の値に学習率を掛けた値を用いてパラメータを更新する。


この更新をランダムに選択したデータを用いて行う場合、確率的勾配降下法(SGD)と呼ぶ。

より発展的な手法として、毎回の更新量の慣性として利用するモーメンタム、学習率を自動で調整する  AdaGrad 、 AdaGrad の改良版でより最近のパラメータ更新を重視して学習率を調整する RMSprop やAdaDelta 、 AdaGrad や  RMSprop 、  RMSprop の長所を取り入れた Adam などが挙げられる


前の層のユニット数を考慮した重みの初期値で、活性化関数が ReLU 関数の場合て有効とされるのは He の初期値である


6.3 テクニック

機械学習では入力データの値の範囲を揃える正規化を行うことで学習がうまく進む場合がある。

中でもデータの分布の平均が0、分散が1になるように変換する標準化がよく使用される


過学習とは学習を進める結果、訓練誤差が小さくなったが、汎化誤差が大きくなってしまった状態を指す


ドロップアウトはニューラルネットワークの一部のノードを無視しながら学習を行う手法で過学習抑える効果があります


ドロップアウト は毎回ネットワークの経路が異なるので、アンサンブル学習を行っているとみなすことができる。

ドロップアウト率はハイパーパラメータとして設定する。


過学習に陥る前に学習を打ち切る手法はearly stopping(早期終了)です。

チェックポイントを利用してearly stoppingを実装することがありますが、学習を打ち切る手法そのものの名前ではありません


過学習を抑える手法の一つには正則化がある。

 L 1正則化は不要な入力に対する重みが0になるように働く。

 L 2正則化は重みが大きくなりすぎないようにすることで滑らかなモデルを作る。

また、L 1正則化と L 2正則化を組み合わせて特に線形回帰に適用した場合に Elastic net という


ニューラルネットワークでは、入力層に近づくほど誤差が小さくなる傾向があるため、層が深いネットワークでは勾配消失問題が起こりやすくなります。

活性化関数としてReLU関数を用いることで勾配消失を低減することができます


ミニバッチ学習では、訓練データをバッチサイズごとに分割して学習する。バッチサイズが決まると訓練データ全体を学習に使うのに必要なイテレーション数が決まる。訓練データ全体を1周分使って学習した時、1エポック学習したという


6.4 CNN

画像認識でよく使われる CNN は畳み込み層とプーリング層を持つニューラルネットワークである。畳み込み層ではフィルターによる処理を行い、画像の特徴を抽出した特徴マップを得る。

プーリング層では畳み込み層で得た特徴マップを縮小することで、対象物の位置のずれに対し頑健にすることができる


CNN 畳み込み層では入力データにフィルタ(カーネル)を重ね積和計算を行っている。

この時フィルターをずらしていく幅をストライドという。

また、フィルターを適用する前に入力データの周囲を0などで埋めてサイズを広げることをパディングとよぶ

出力される特徴マップのサイズは入力データのサイズやフィルターのサイズにストライドやパディングの幅によって決まる


GoogleNetの特徴であるinceptionモジュールは異なるサイズの畳み込み層を並列につないだものである.

表現力を落とさずパラメータ数を削減する効果がある。

また、ネットワークの途中で分岐して分類を行う AuxiliaryLoss も GoogleNetの特徴であるAuxiliaryLoss により誤差を効率よく伝えることができる。

さらに全結合層の代わりに Global Average Pooling (GAP) を導入していることにも注目したい。 GAP の導入もパラメータ数の削減に貢献している。


ResNet は畳み込み層と Shortcut connection を組み合わせた残差ブロックを導入したところで飛躍的に層の深いネットワークを構築することができるようになった。


6.5 RNN

RNN では時系列データに対し過去の情報を考慮した推論ができる


実際の時系列タスクでは、 RNN を拡張した LSTM(Long Short Term Memory) がよく用いられる 。

LSTM ブロックは長期の情報を保持するためのセル(CEC)と、入力ゲート・出力ゲート・忘却ゲートの三つのゲートを持つ。

 LSTM ではこれらの仕組みによって勾配消失問題や、時系列のを扱う上で問題となる入力重み衝突および出力重み衝突に対処することができる。

ほかにも LSTM をよりシンプルにした GRU という手法が用いられることもある。 GRU ブロックは更新ゲートとリセットゲートという二つのゲートを持つ。


単純な RNNを LSTM などに拡張しても、それだけでは勾配爆発を防ぐことは出来ません。

勾配クリッピングは勾配が閾値よりも大きくならないように制限することで勾配爆発をしていきます


時系列データの予測する予測をする時に未来の情報を入力して良い場合は BiRNN は使用することで精度の向上が更新できる


6.6 学習済みモデルの利用

あるタスクのために訓練した学習済みモデルを別のタスクに適用する手法を転移学習という


学習済みモデル(教師モデル)に入力したデータと予測された出力を学習データとして新しいモデル(生徒モデル)を訓練する手法を蒸留という。

蒸留によって予測精度を保ったまま、よりシンプルで軽量なモデルを作成できる。

シンプルなモデルでも精度を保つことができるのは生徒モデルがクラス間の類似度を学習するも学習するからだと言われている


教師モデルから生成したラベルにはそれぞれのクラスである確率が出力されているため、生徒モデルはクラス間の類似度も学習することができる