LoginSignup
0
3

More than 3 years have passed since last update.

深層学習-CNN

Last updated at Posted at 2020-12-23

深層学習-CNN

  • 連鎖率の復習
  • 勾配消失問題
  • 学習率最適化手法
  • 過学習
  • 畳み込みニューラルネットワークの概念
  • 最新のCNN

連鎖率(確認テスト)

連鎖率の原理を使い、dz/dxを求めよ。

z = t^2\\
t = x + y

解答

\frac{dz}{dx} = \frac{dz}{dt}\frac{dt}{dx}\\
\frac{dz}{dt} = 2t,
\frac{dt}{dx} = 1\\
\frac{dz}{dx} = 2t・1 = 2t

勾配消失問題

ニューラルネットワークにおいて勾配が消失することによって、学習が進まなくなる技術的な問題のことを勾配消失か問題という。
勾配消失問題を解決するためには、三つの解決法がある。
- 活性化関数の選択
- 重みの初期値設定
- バッチ正則化

活性化関数の選択

ReLU関数を選定することで勾配消失やスパース化を回避することができる。

確認テスト

シグモイド関数を微分した時、入力値を0にした時に最大値を取る。
その値はなにか?

f(u) = \frac{1}{1 + e^{-u}} = 0.5\\
\frac{∂z}{∂u} = (1 - sigmoid(x))*sigmoid(x) = (1-0.5)0.5 = 0.25\\

重みの初期値設定

Xavier

初期値の設定方法は、重みの要素を前の層のノード数の平方根で徐算した値。
Xavierの初期値を設定する際の活性化関数は→

  • ReLU関数
  • シグモイド関数
  • 双曲線正接関数
network['W1'] = np.random.randon(input_layer_size, hidden_layer_size) / np.sqrt(hidden_layer_size)
netrowk['W2'] = np.random.randon(hidden_layer_size, output_layer_size) / np.sqrt(hidden_layer_size)

He

初期値の設定方法は、重みの要素を前の層のノード数の平方根で徐算した値に対し、√2を掛け合わせた数値。
Heの初期値を設定する際の活性化関数はReLU関数である。

確認テスト

重みの初期値に0を設定するとどのような問題が発生するか?

重みの初期値を0に設定すると、全ての値が同じ値に伝わるため、パラメータのチューニングが行われなくなる。

シグモイド関数

シグモイド関数.png

ReLU関数

ReLU関数.png

シグモイド関数 - Xavier

シグモイド関数 - Xavier.png

シグモイド関数 - He

シグモイド関数 - He.png

ReLU関数 - Xavier

ReLU関数 - Xavier.png

ReLU関数 - He

シグモイド関数 - He.png

考察

シグモイド関数については、Heの方が安定的に学習できている。
一般的にReLU関数とHeの相性が良いとされているが、今回の結果を見るとXavierとの相性も良いことがわかる。

バッチ正規化

ミニバッチ単位で入力値のデータの偏りを抑制する手法。活性化関数に値を渡す前後にバッチ正則化の処理を学んだ層を加える。

確認テスト

バッチ正規化の効果は?

効果は、計算の高速化や勾配消失が起きづらくなる。

µ_t = \frac{1}{N_t}∑x_{mi} \\
σ^2_i = \frac{1}{N_t}∑(x_{mi} - µ_t)^2 \\
x_{mi} = \frac{x_{mi} - µ_t}{\sqrt{σ^2_t + θ}} \\
y_{ni} = rx_{ni}  +β

学習率最適化手法

  • モメンタム
  • AdaGrad
  • RMSProp
  • Adam

モメンタム

誤差をパラメータで微分したものと学習率の積を減算した後、現存の重みに前回の重みを減算した値と慣性の積を加算する。
メリットは、局所的最適解にならず、大域的最適解となる、
谷間についてから最も低い位置(最適値)にいくまでの時間が早いことが考えられる。

V_t = µV_{t-1} - ξΔE \\
\\
W^{(t+1)} = w^{(t)} + V_t\\
慣性:µ

Momentum-LearinngRate=0.1

momentum- learning rate0.1.png

AdaGrad

誤差をパラメータで微分したものと再定義した学習率の積を減算する。
勾配の緩やかな斜面に対して最適値に近づけるというメリットがある一方で、
学習率が徐々に小さくなるので、鞍点問題を引き起こすことがあった。
鞍点とは、ある方向で見れば極大値だが、別の方向で見れば局所うちになってしまう、つまり、極地を持たない停留点のことである。

h_0 = θ\\
\\
h_t = h_{t-1} + (ΔE)^2\\
\\
W^{(t+1)} = w^{(t)} - ξ\frac{1}{\sqrt{h_t} + θ}ΔE

AdaGrad-LearningRate=0.05

AdaGrad - learning rate0.05.png

RMSProp

誤差をパラメータで微分したものと再定義した学習率の積を減算する。
メリットは2つあって、
→局所的最適化にはならず、大域的最適解となる。
→ハイパーパラメータの調整が必要な場合が少ない。

h_t = ah_{t-1} + (1-a)(ΔE)^2\\
W^{(t+1)} = w{(t)} - ξ\frac{1}{\sqrt{h_t} + θ}ΔE

RMSProp-LearningRate=0.01

RMSProp - learning rate0.01.png

確認テスト

モメンタム・AdaGrad・RMSPropの特徴は?
・モメンタムー局所的最適解にならず、大域的最適解となる。また、谷間についてから最も低い位置(最適値)にいくまでの時間が早いことが考えられる。
・AdaGradー勾配の緩やかな斜面に対して最適値に近づける。
・RMSPropー局所的最適化にはならず、大域的最適解となる。また、ハイパーパラメータの調整が必要な場合が少ない。

Adam

モメンタムとRMSPropの一部を含んだ最適化アルゴリズムである。

  • モメンタムの過去の勾配の指数関数的減退
  • RMSPropの過去の勾配の2乗の指数関数的減衰平均 を孕んでいる。 特徴としては、モメンタムとRMSPropのメリットを孕んだアルゴリズムである。 →谷間についてから最も低い位置に行くまでの時間が早い。 →ハイパーパラメータの調整が必要な場合が少ない。

Adam-LearningRate=0.01

Adam - learning rate0.01.png

考察

学習率の値を大きくすることで正答率が上がった。
モメンタムとAdaGrandに関しては、学習率が0.01の場合、学習しなかった。そのため、学習率を大きくすることで学習させたが、モメンタムが正答率90%になるのが学習率=0.5、AdaGradは学習率=0.3であった。
一方、RMSPropは0.02、Adamは0.01で正答率90%を超える結果となった。

過学習

テスト誤差と訓練誤差とで学習曲線が乖離することを過学習という。
つまり、特定の訓練誤差に対して特化して学習してしまうと言い換えることもできる。
その原因は、
→パラメータの数が多い
→パラメータの値が適切でない
→ノードが多い 
→→総じて、ネットワーク自由度が高いことが考えられる。

解決策として、L1正則化・L2正則化・ドロップアウトが考えられる。
正則化をすることで、ネットワークの自由度を制約し、過学習を抑えることができる。

weight decay(荷重減退)

重みが大きい値を取ることで、過学習が発生することがある。
→学習させていくと、重みにばらつきが発生する。
重みが大きい値は学習において重要な値であり、重みが大きいと過学習が起きる。

解決策
誤差に対して正則化項を加算することで重みを抑制する。
→過学習が起こりそうな重みの大きさ以下で重みをコントロールし、かつ重みの大きさにばらつきを出す必要がある。

L1、L2正則化

||x||_p = (|x_1|^p + ... + |x_n|^p)^{\frac{1}{p}}  : pノルムの計算
np.sum(np.abs(network.params['W' + str(idx)]))

E_n(W) + \frac{1}{p}λ||x||_p  : 誤差関数にpノルムを加える
weight_decay += weight_decay_lamda
*np.sum(np.abs(network.params['W' + str(idx)]))

loss = network.loss(x_batch, d_batch) + weight_decay

確認テスト

下図についてL1正則化を表しているぐらふはどちらか?
スクリーンショット 2020-12-23 20.37.04.png

答えは、左のRidge推定量!
pノルム=1だったらRidge推定量、pノルム=2だったらLasso推定量だよ!

ドロップアウト

ランダムにノードを削除して学習させる。
過学習の課題の一つであるノード数が多いことに対応している。
メリットは、データ量を変化させずに異なるモデルを学習していると解釈できる点である。

畳み込みニューラルネットワーク(CNN)について

CNNの構造

入力層(入力画像)→畳み込み層→畳み込み層→プーリング層→畳み込み層
↓←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←↓
畳み込み層→プーリング層→全結合層→出力層(出力画像)

畳み込み層

画像の場合、縦・横・チャンネルの3次元のデータをそのまま学習し、次に伝えることができる。
つまり、3次元の空間情報も学習できるような層が畳み込み層である。

全体像

IMG_5757.jpg

演算概念

IMG_5758.jpg

バイアス

IMG_5759.jpg

パディング

パディングを使うことで、出力画像のサイズを変えることができる。
IMG_5760.jpg

ストライド

IMG_5761 (1).jpg

チャンネル

奥行きの層分だけチャンネルを数える。フィルターもチャンネルの数分ある。
畳み込み層はチャンネルによって、全結合層のデメリットをカバーしている。
全結合層→画像の場合、縦・横・チャンネルの3次元データだが、1次元のデータとして処理される。
つまり、RGBの各チャンネル間の関連性が学習に反映されないということである。
RGB=色の表現法の一種
IMG_5762.jpg

プーリング層

IMG_5763.jpg

確認テスト

サイズ6×6の入力画像を、サイズ2×2のフィルタで畳み込んだ時の出力画像のサイズを答えよ。なおストライドとパディングは1とする。

OH = \frac{H+2P - FH}{S} + 1 = \frac{6+2*1-2}{1}+1 = 7\\
OW = \frac{W+2P - FW}{S} + 1 = \frac{6+2*1-2}{1}+1 = 7\\
H:Height\\
W:Width\\
P:Padding\\
S:Stride\\
F:Filter

最新のCNN

AlexNet

2012年の大会で2位以下に圧倒的な大差をつけて勝利したCNNモデル。

モデルの構造

5層の畳み込み層およびプーリング層
それに続く3層の全結合層から構成される。

過学習を防ぐ施策として、
サイズ4096の全結合層の出力にドロップアウトを使用している。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3