目次
はじめに
こんにちは。てくますプロジェクトのYukkinです! 本記事は、てくますプロジェクトが実施している輪読会『深層学習による画像認識の基礎』の第2回活動記録です。
てくますプロジェクトは、「考える楽しさを探そう!」が合言葉の、数学と情報科学の学習コミュニティです。
輪読会に参加したい方は、Connpass よりお申し込みください。
現在は「深層学習による画像認識の基礎」という本を読み進めています。
リンク
第2回の今回は、<2章 深層学習の基礎>のp.36から、<3章 深層学習の基礎>のp.63まで読み進めました!
本記事では、今回の勉強会で学んだことをざっくりと紹介していきます。
学習内容
深層学習の基礎(前回の続き)
前回に引き続き、深層学習の基礎について復習しました。
活性化関数の改善
- シグモイド関数は層を積み重ねることで、入力に近い層の勾配が急激に小さくなる(勾配消失問題)
- ReLUでは勾配消失問題をある程度解決できる
- ReLUと並んでGELUも有効性を示している
- \(GELU(x) = x \cdot P(X \leqq x)\)
\(P(X \leqq x)\) は標準正規分布の累積分布関数
- \(GELU(x) = x \cdot P(X \leqq x)\)
バッチ正規化
- ミニバッチのデータで入力ベクトルの各次元を平均0、標準偏差1に正規化した後、\(\gamma_j\) と \(\beta_j\) でスケールを調整する処理
- \(\gamma_j\) と \(\beta_j\) は学習可能なパラメータで、全結合層の重みなどと一緒に確率的勾配降下法で学習する
- バッチ正規化は各層の活性化関数の直前で適用することが一般的
- バッチ正規化を用いることで、大きな学習率でも安定して学習を行えることが実験的に知られている
残差学習
- スキップ接続による残差学習は、ほとんどのモデルで適用されている技術である
- スキップ接続では、入力を2つに分岐させて、1つはこれまで通り演算処理(全結合→バッチ正規化→活性化関数)を行い、もう1つは演算処理をスキップし、その2つの結果を足し合わせる
- \(h_{l+1} = h_l + F_l(h_l)\)
- スキップ接続により、上層の勾配の情報を落とすことなく下層に伝播させることができるため、勾配消失問題を改善可能である
最適化方法
- 効率的な最適化方法
- モーメンタム法
- 過去のステップで計算した勾配を利用して現在の勾配を滑らかにすることで学習の効率化を図る
- Adam
- 学習率が全次元共通ではなく、次元ごとに学習率を自動調整する方法
- 他の次元より更新が遅れている次元は学習率を大きめに設定するなど
- AdamW
- 重み減衰と呼ばれる正則化を工夫してAdamに適用したもの
- Transformerなどでも利用されている
- モーメンタム法
- 学習率のスケーリング
- 徐々に学習率を上げる「ウォームアップ」→コサイン関数に従ってなだらかに学習率を下げる「コサインアニーリング」
- 勾配クリッピング
- 勾配が大きくなりすぎないように閾値を設定して制御する方法
正則化
- 正則化とはモデルが訓練データに対して過学習しないように、モデルに制限を与えることをいう
- 正則化の例
- 重み減衰
- ニューラルネットワークの重みが大きくなりすぎないように、目的関数に重みのL2ノルムの総和を加える方法
- ドロップアウト
- 学習中にニューラルネットワークの各ユニットをある確率でランダムに0にする方法
- 重み減衰
データ拡張
- 人工的に学習データ数を水増しする方法
- 画像の場合、回転、平行移動、ノイズ、左右反転、色変換などしたデータを水増しできる
畳込みニューラルネットワーク
いよいよ、畳込みニューラルネットワークに突入しました。
畳込みニューラルネットワーク(CNN)とは
- CNNは画像認識分野で最もよく使われているニューラルネットワーク
- 標準的なCNNでは、数層から数十層程度の畳込み層とプーリング層を使用する
- 畳込み層
- 画像の局所的な特徴を抽出する役割
- プーリング層
- 画像の解像度を落とす役割
畳込み層
- 畳込み処理
- 画像と畳込みカーネル間の積和演算を計算する畳込み処理を実行する
- 積和演算は類似度(相関)を求める計算である
- つまり畳込み処理とは、畳込みカーネルが持つ濃淡パターンと類似した濃淡パターンを入力画像内から抽出することを意味する
- パディング
- 畳込み処理の前後で画像サイズが変化しないように、あらかじめ入力画像の周りに人工的な画素値を配置すること
- 人工的な画素値として、0を使うのが一般的(ゼロパディング)
- ストライド
- 畳込みカーネルを適用する際のずらし幅
- テンソルによるデータ表現
- H×Wサイズのグレースケール画像は2階テンソルとして表現できる
- \(X \in \mathbb{ R }^{H×W}\)
- H×WサイズのCチャネルの画像は3階テンソルとして表現できる
- \(X \in \mathbb{ R }^{C×H×W}\)
- H×WサイズのCチャネルの画像をB枚集めたミニバッチは4階テンソルとして表現できる
- \(X \in \mathbb{ R }^{B×C×H×W}\)
- H×Wサイズのグレースケール画像は2階テンソルとして表現できる
- 一般的な畳込み層
- 1出力の畳込み層
- 入力 \(X \in \mathbb{ R }^{C_{in}×H×W}\) に対して、畳込みカーネル \(K \in \mathbb{ R }^{C_{in}×H_k×W_k}\)を適用すると、出力 \(Y \in \mathbb{ R }^{1×H×W}\) を得る
- 畳込み処理後に各位置でチャネル方向に加算するため、チャネル次元が出力では 1 になっている
- 複数出力の畳込み層
- 入力 \(X \in \mathbb{ R }^{C_{in}×H×W}\) に対して、畳込みカーネル \(K \in \mathbb{ R }^{C_{out}×C_{in}×H_k×W_k}\)を適用し、出力 \(Y \in \mathbb{ R }^{C_{out}×H×W}\) を得る
- \(C_{out}\) は適用するフィルタの数に対応し、それぞれ並列に計算し、出力結果のチャネル次元で結合する
- 要は、もとのチャネル次元 \(C_{in}\) は計算過程でなくなり、適用したフィルタ数が新しいチャネル次元 \(C_{out}\) になるということ
- 1出力の畳込み層
最後に
画像認識の2回目のゼミでした。
CNNの章に突入しました。既知の内容が多く、まだ平和な感じです。
では、またね!
コメントを書く