1. バッチ正規化(Batch Normalization)とは [概要]
バッチ正規化 (Batch Normalization) は,畳み込みニューラルネットワーク(CNN)の隠れ層において,ミニバッチ内のデータ分布をもとに,各チャンネルごとに特徴を正規化したのち,スケール・シフトを行う,学習の高速化・安定を図る層である.バッチ正規化を各中間層で行うことで,元のDNNの表現力の高さを保ちつつも,学習の収束の高速化と安定化を達成でき,正則化の役割果たす [Ioffe and Szegedy, 2015].
この記事では,バッチ正規化層の説明 (2節)と,初期の基本的な「バッチ正規化の発展型層」の導入紹介を行う(3節).3節ではバッチ正規化の発展型として以下3つを紹介する,
- レイヤー正規化(3.1節) : Transformer系モデルでよく使用される系列データむけ改善.
- インスタンス正規化 (3.2節):GANでの画像生成や,画像スタイル変換むけの改善
- グループ正規化(3.3節):小バッチ・多タスク学習むけの改善.
バッチ正規化や上記の発展型の各層は,特徴マップ/特徴ベクトルの正規化効果により,ResNetやTransformerなどの「層数の多いDNN」を,安定して最適解近くまで学習するうえで,必須の技術である.バッチ学習であるSGDとしても,非常に助けられる重要技術である.
また記事中では,各手法を読者がより理解しやすくなるように,管理人が良いと思ったQuoraの記事での,各手法の正規化範囲を,色分けして比較しやすくした可視化図を,もう少し見やすくアレンジした各図も用意した(図2以降).
バッチ正規化は [Ioffe and Szegedy, 2015] で提案されて以降,CNNや他DNNの中間層として,標準的に用いられる層となった.それ以前のCNNでは,[(旧) 畳み込み層 – ReLU(活性化関数) – プーリング層] の3種の層で,繰り返しの1ブロックを構成する設計が標準的であった.それが,バッチ正規化 [Ioffe and Szegedy, 2015] の登場以降は,[(新) 畳み込み層 – バッチ正規化 – ReLU(活性化関数)- プーリング層] の4種の層で,1ブロックを構成する設計が,CNNでは標準的となった.つまりは「CNNブロック内に,バッチ正規化も定番層として新たに加わった」わけである.
その後,物体認識CNNだけでなくRNN,GAN,画像変換モデル,Transformerなど向けに,バッチ正規化の発展型として,以下の主な3系統が登場した
- 系列モデル向け(3.1 レイヤー正規化)
- 学習が不安定なGANの学習を安定化 (3.2 インスタンス正規化)
- より多層で大規模なCNN向け(3.3 グループ正規化)」
これらの発展型の登場により,バッチ正規化が応用されるタスク(もといネットワーク構成)が増えていったともいえる.
1.1 記事の構成
2節以降では,以下の構成で,バッチ正規化(2節)と,その発展型(3節)を紹介する:
- 2. バッチ正規化の詳細
- 2.1 計算手順
- 2.2 バッチ正規化の内容・性質の理解
- 2.3 課題と弱点
- 3. バッチ正規化の発展型
- 3.1 レイヤー正規化
- 3.2 インスタンス正規化
- 3.3 グループ正規化
- 4 まとめ
1.2 バッチ正規化の概要と,その性質
バッチ正規化の計算手順(2.1)と性質(2.2)ついて,概要を先にここで述べておきたい.図1は,バッチ正規化をCNNに複数層挿入することによる,CNN全体の学習への利点をまとめた図解にまとめたものである.
バッチ正規化層(図1)の学習では,[畳み込み層–ReLU層]の出力である(活性化後の)特徴マップのうち,$k$チャンネル目の出力$x^{(k)}$のそれぞれについて,チャンネル毎に正規化された固定分布を学習中に求めたい.
そこでSGD学習中において,バッチ正規化の処理(図2)では,N個のサンプルから構成されるミニバッチ$\bm{X}={\bm{x_1},\bm{x_1},\ldots, \bm{x_n},\ldots,\bm{x_N}}$のうち,同一チャンネルに含まれる$m$個の特徴ベクトル$\mathcal{B}= \{x_i^{(k)}\}^{N}_{i=1}$に対して,以下の処理を行う:
バッチ正規化層の処理
- バッチ内で,各特徴を $x_i^{(k)}$を正規化し $\hat{x}^{(k)}$ を得る (平均0, スケール1の分布にする).
- 正規化済み $\hat{x}^{(k)}$ をスケーリング・シフトして,固定分布 $y^{(k)} = \gamma^{(k)} \hat{x}^{(k)} + \beta^{(k)}$ へと変換.
手順1で正規化するだけでも学習は高速に収束するようになるが,それだけだと全チャンネルが同じ分布になってしまい,CNNの表現力が落ちる(※ 異なるカーネルを畳み込まないと意味がない).よって,手順2でスケーリング・シフトも行うことで,バッチ正規化層挿入前の変換を保つことで,挿入前のCNNの表現力を保てる仕組みになっている.より詳しい処理手順は,2.1節(A)にて解説する.
このように,各中間層出力を「学習済みの固定分布」へ変換できるようにしていきながら,画像認識CNNやTransfomer系ネットワークなどを学習することで,SGD学習を安定化・高速化できるようになった (2.1節).バッチ正規化の登場以降,層数の多い深めのCNNを学習する時に,学習率の値を高めに設定しても,勾配爆発・勾配消失問題を起こさないように学習を安定させることができ,そのうえ学習の速い時間での収束を実現しやすくなった(2.2.1節).また,正則化の効果により,汎化性能の向上も行えるようになった (2.2.2節).
また,バッチ正規化には正則化(regularization)の効果もある(2.2.1節).これに伴い,それまでCNNの正則化で定番であったドロップアウトや局所応答正規化が不要となった.ただし,Transformer登場の時期(2018~2019)以降,ディープニューラルネットワークの巨大モデルが進み,再びドロップアウトがよく使用されている.
2. バッチ正規化の詳細
2節では,最初にバッチ正規化の手順について紹介し(2.1節),その上で,バッチ正規化の仕組みの意味・効果(2.2)および課題(2.3)について順に触れたい.
2.1 計算手順
バッチ正規化は,(A)学習時と(B)テスト時で,少し異なる計算を行う.それぞれ計算手順を紹介する.
(A) 学習時の計算
- 概要:
バッチ正規化は,CNNの隠れ層である畳み込み層(もしくは全結合層)の出力の特徴マップの,学習中のミニバッチ集合$\mathcal{B} = \{\bm{x_1},\bm{x_2},\ldots,\bm{x_i},\ldots,\bm{x_N}\}$に対して,バッチ内でチャンネルごとの正規化を行う(図1).
この節では,SGD中に,ランダムに取り出されたサイズ$N$のミニバッチ内のみの動作を考えたい.そこで2.1-(A)節では$x^{(c)}$にのみフォーカスした計算手順を示したいことから,各変数からはチャンネルの添字$c$を省略する.
バッチ内の特徴マップ$\bm{x} \in \mathbb{R}^{W \times H \times C}$ ($W$は幅,$H$は高さ,$C$はチャンネル数)から,チャンネル$c$の特徴$x^{(c)}$のみを取り出した集合を$\mathcal{B}= \{x_i\}^{m}_{i=1}$とする.ここで,$m$は畳み込み層の場合,バッチ内のチャンネル内特徴$x_i$の総数は$m= W \times H \times \textcolor{blue}{N} $であり,図1の各同一色部分の総数が$m$に相当する.
すなわち,畳み込み層の場合だと,バッチ内のチャンネル$c$の特徴$m$個に対して,チャンネル毎に特徴正規化を行う(※ 全結合層の場合は$m=N$であるが,ここでは「畳み込み層直後のバッチ正規化の挙動」を紹介したいので,畳み込み層のケースのみを考えたい).
学習時の計算手順であるが,「1. 概要」でも既に述べたとおり,まずはバッチ集合$\mathcal{B}$の中で,各チャンネル$c$ごとに「平均0,分散1」にするように各$x_i$の正規化を行う.その後,$\gamma$でリスケール,$\beta$でリセンタリング(シフト)する.以上がバッチ正規化の全手順である.
※ 平均0, 分散1に整えるのは「標準化」と呼ぶことが多いが,この研究では「正規化」と読んでいることに注意.
以上の学習時の計算手順を,学習時のチャンネル$c$での,バッチ正規化層$BN_{\gamma,\beta}(x_i)$の計算手順アルゴリズムとして以下にまとめる(※ 前述の通り,添え字$c$は,各式中から省略している):
バッチ正規化の詳細な処理手順
- チャンネル$c$内のバッチ平均を計算:\begin{equation} \mu_{\mathcal{B}} \leftarrow \frac{1}{m} \sum_{i=1}^m x_i \end{equation}
- チャンネル$c$内のバッチ分散を計算:\begin{equation} \sigma_{\mathcal{B}}^2 \leftarrow \frac{1}{m} \sum_{i=1}^m (x_i – \mu_{\mathcal{B}})^2 \end{equation}
- ミニバッチ内$N$個の特徴マップ内の,各特徴量$x_i$について1,2の順で計算:
- (チャンネル$c$での)正規化:\begin{equation}\hat{x_i} \leftarrow \frac{1}{\sqrt{\sigma^2_{\mathcal{B}} + \epsilon}} (x_i – \mu_{\mathcal{B}})\end{equation}
- スケーリングとシフト:\begin{equation} y_i \leftarrow \gamma \hat{x_i} + \beta \equiv BN_{\gamma,\beta}(x_i)\end{equation}
- CNNの学習が終了すると,このバッチ正規化層のパラメータの学習も終了.
このアルゴリズムにより,各$c$チャンネルのニューロン出力値$x_i$は,どれもバッチ内の正規化と$\gamma, \beta$で表現される固定分布へと,(学習中に)少しずつ収束していく.
以上で示した$x_{(c)}$の処理は,$c$次元目の特徴$x_1,x_2,\ldots,x_{N \times W \times H}$の全てにおいて行われるの.よって,SGDが終了すると,パラメータ$\gamma^{(c)},\beta^{(c)}$が全てのチャンネル$c$で学習されおわり,結果として$\{\gamma^{(c)},\beta^{(c)}\}_{c=1}^{C}$が手に入る.以上で学習フェーズは終了である.
学習中,各チャンネル$c$での分布のスケール量$\gamma^{(c)}$とシフト量$\beta^{(c)}$が,それぞれ独立で固定されていく.それに伴って,全チャンネルの隠れ層出力分布がそれぞれ固定分布に安定していくので,特徴正規化の効果により「効率的な勾配降下= 速くて安定した学習」が可能となる.
バッチ正規化の挿入箇所
線形層(全結合層 or 畳み込み層)では,バッチ正規化を挿入しない場合,式(2.1)のように入力$\bm{x}$がアフィン変換される:
\begin{equation} \bm{h} = f(\bm{W}^{\mathsf{T}}\bm{x} + \bm{b}) \tag{2.1}\end{equation}
ここで$f(\cdot)$はReLUなどの活性化関数で,$\bf{W}$が結合重み行列で$\bm{b}$がバイアスベクトルである.
式(2.1)で$f(\cdot)$を実施する直前に,バッチ正規化の変換$BN_{\sigma,\gamma}(x)$を挿入したい.この時,式(2.1)の代わりに以下の変換式(2.2)を実施する:
\begin{equation} \bm{h} = f(BN_{\gamma,\beta}(\bm{W}^{\mathsf{T}}\bm{x})) \tag{2.2}\end{equation}
ここで,(2.2)式にバイアス$\bm{b}$がないのは,$\beta$がバイアスと同じ役割を担当して不要になったからである.以上が,学習時のバッチ正規化処理である.
(B) テスト時の計算
学習時には,ランダムなミニバッチ内を毎回正規化し,その各隠れ層出力の暫定的な正規化結果により,チャンネル$c$ごとに,パラメータ$\gamma^{(c)},\beta^{(c)}$を学習していた.しかし,テスト時にはミニバッチを得ることはできない.よってテスト時は,データセット全体から決定しておいた平均・分散を常に用いて$BN_{\gamma,\beta}(x_i)$を実施する必要がある.
そこでまず学習時に準備として,学習データ全体のバッチ平均$E^{(c)}[x]$とバッチ分散$Var^{(c)}[x]$を,各チャンネル$c$においてそれぞれ算出しておく(※ $\epsilon$はゼロ除算回避目的の定数):
$$E^{(c)}[x] \leftarrow E^{(c)}_{\mathcal{B}} [\mu_{ \mathcal{B}}]$$
$$Var^{(c)}[x] \leftarrow \frac{m}{m-1} E_{\mathcal{B}}^{(c)}[ \sigma^2_{ \mathcal{B} }] $$
次に,テスト時は,これらを用いて$y^{(c)} = BN_{\gamma^{(c)},\beta^{(c)}}(x^{(c)})$を以下のように計算する:
$$y^{(c)}= \frac{\gamma^{(c)}}{ \sqrt{Var^{(c)}[x] + \epsilon} } \cdot x^{(c)} + (\beta^{(c)} – \frac{\gamma E^{(c)}[x]}{ \sqrt{Var^{(c)}[x] + \epsilon}}) $$
こうすることで,テスト時はデータセット全体の統計$E^{(c)}[x], Var^{(c)}[x]$を用いてのバッチ正規化を実行できる.
2.2 内容・性質の理解
2.1節で先にアルゴリズムを示したことを踏まえて,2.2節ではその中身を理解するための,バッチ正規化の各性質や長所短所について,順に触れていきたい.
2.2.1 中間層分布のコントロールによる,最適化の容易化.
バッチ正規化の1番の大きな貢献は,SGD学習中に隠れ層の$c$次元目特徴の分布を,それぞれ正規化後にスケール・シフトされた固定分布へコントロールする仕組みである.これにより,隠れ層の分布がチャンネル$c$ごとに正規化され,SGD学習が安定・高速に収束できるようになった.
これまで学習が不安定で収束に苦労していたネットワーク構造でも,バッチ正規化を導入するだけで,学習を高速に安定して成功させられる.白色化と違って「無相関化は行わずに正則化だけを行う」のがバッチ正規化であるが,それでも十分SGDの収束を速くするので効果が高い.
「ニューラルネットワークの正規化」という観点では,以前は,入力層でのみ正規化や白色化 [Lecun et al., 1998]を頑張っていた.しかし内部共分散シフトは,収束の鈍化や勾配爆発・勾配消失を招きやすい.よって,それらを防ぐために当時(2015まで)のCNNでは,(1) 繊細な重み初期化や,(2)学習率を低めにおさえた (ゆっくりな) 学習,が必要であった.
それが,バッチ正規化が提案の導入により.(1) 重みパラメータの初期化も容易になり(= 適当で済むようになり),(2)高い学習率の値を用いて学習を高速化しやすくなった
※ バッチ正規化の論文 [Ioffe and Szegedy, 2015] の時点では,ReLU [Nair et al., 2010]は登場済みであり,実験中でも使用されている
元論文の主張:「内部共分散シフトの削減」が最適化の向上に効いている.
SGDを用いたCNNの学習では,各層の分布間の形が学習中に大きく変化してしまうと学習が遅くなってしまったり,学習率が高過ぎると勾配消失・勾配爆発が行って収束できない問題を抱えていた.
以前から,ニューラルネットワークの学習には,(互いに離れたところにある)隠れ層間で,活性化値の分散がシフトしてズレが生じる内部共分散シフト (Internal Covariate Shift)が起こると,うまく収束しづらくなり,学習難易度が上がる問題があった.そこで著者らは「バッチ正規化が,内部共分散シフトを減らすので,CNN最適化を容易にする」と主張していた [Ioffe and Szegedy, 2015]
代わりに効いていたもの:「安定」で「平滑な」最適化問題への再パラメータ化.
しかし,その後の研究 [Santurkar et al., 2018] では「内部共分散シフトの削減」が,上記の主張に対して,VGGNetを用いた実験結果から「バッチ正規化由来の『内部共分散シフトの削減』の効果は,ほぼ出ておらず,役立っていない」と反論した.
そしてバッチ正規化がSGD最適化を助けている「代わりの要因」として,以下の2点を主張した [Santurkar et al., 2018]:
- より「安定な」最適化問題への再パラメータ化:(ロスのリプシッツ連続性の観点で)
- より「平滑な」最適化問題への再パラメータ化:(ロスのβ-平滑化の観点で)
2.2.2 バッチ正規化の「正則化」効果
バッチ正規化を用いると,SGDでランダムなバッチ選択を行うことを通じて,学習する固定分布にもランダム性(ノイズ)が追加される.従って,元のデータセットの分布と異なる分布に,各中間層の特徴分布を学習していくので,正則化(regularization)の効果も生まれる(※ 少々ではあるが).
バッチ正規化の登場以前は,CNNの正則化にはドロップアウトがよく使用されていた.しかし,バッチ正規化が定着して以降は,バッチ正規化で用が足りるので,ドロップアウトは使用されなくなっていった.また,AlexNetで提案されて,InceptionNet v1等でも使われていた局所応答正規化(Local Response Normalization)も,同じくバッチ正規化以降に必要性がなくなり,めっきり使われなくなった.
一方で,Transformerなどの,深くて超大規模な系列対系列変換モデルでは,ドロップアウトを行う必要性が復活しており,GPT/BERTやViT/DERTRなどのTransformer系モデルの流行もあって,再びドロップアウトはよく使用されるようになった.
2.3 課題と弱点
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022.
- 3.6.5 バッチ正規化の欠点 (p52) も参考になる.
以上のように,特にDNN向けの,学習を助ける便利な層として登場したバッチ正規化であるが,最初の提案時では,以下のような課題や弱点があった:
- バッチサイズが小さいと (例; バッチサイズが1や2だと),データ統計分布が小さすぎてうまく正規化できず,バッチ正規化の効果が発揮できない.よって,GPUメモリの上限との兼ね合いから小さなバッチサイズで学習するしかない「大規模なモデル」を学習しづらい.
- 学習時とテスト時で,平均と分散の値が変わってしまう.
- バッチサイズが大きいほど,正則化の効果が減る(汎化性能向上に寄与しなくなる).
- 動画入力ネットワーク向けに使用すると,隣接フレーム同士でデータの相関(もとい類似性)が高いことから,平均・分散の推定が安定せず,学習がなかなか進行しない.
よって,これらの課題を克服していく目的で,バッチ正規化の発展系(3節)が色々と提案されていく(レイヤー正規化やグループ正規化など).
また,発展型の提案を通じて,CNN以外の損失関数や,他のニューラルネット(RNNやGAN,pix2pixなど)でもバッチ正規化形の層は使用・応用されていく(インスタンス正規化など).
3. バッチ正規化の発展型
3節では,2.3節の初期の課題を元に提案されていった「代表的なバッチ正規化の発展系」について,それぞれの応用にカテゴリ分けし,簡単にだけまとめる (重要な手法は,別記事に分けて詳細を執筆したい).
3.1 レイヤー正規化: 系列モデル向け
レイヤー正規化(Layer Normalization)は,バッチ正規化の系列モデル・系列変換モデルむけ改善版として,正規化方向をチャンネル方向から「レイヤー方向」に変更し,層(タイムスタンプ)単位で正規化できるようにして使いやすくした層である (図3).レイヤー正規化は,RNNやseq2seqに,Transformerなどを用いた「自然言語処理むけのRNN言語モデル・系列対系列変換モデル」でよく使用される.
チャンネル方向に正規する「バッチ正規化」を系列モデルに応用することを考えてみる.しかし,各サンプル系列の長さが違うとバッチ内合計数が一定でないので,平均・分散を同一の分母で計算できなくなってしまう.それが,レイヤー正規化を用いると,系列モデルのRNN・LSTMなどにより相性が良い「層単位での正規化 + スケーリング」が行えるようになり,バッチ正規化技術の各種恩恵(学習高速化や汎用性向上など)を得やすくなった.
子記事の3節にまとめているように,Transformer系モデルの部品として,レイヤー正規化は頻繁に使われており,現代のニューラルネットワークにおいては重宝されている部品である.
3.2 インスタンス正規化:ニューラルスタイルトランスファーむけ
インスタンス正規化(Instance Normalization) [Ulyanov et al., 2016] [Ulyanov et al., 2017]は,画像一枚(=インスタンス)単位で,チャンネルごとのバッチ正規化を行う,バッチ正規化の発展型である(図4).ニューラル画像スタイルトランスファーなどで,よく用いられる
また,適応的インスタンス正規化 (AdaIN: Adaptive Instance Normalization) [Huang and Belongie 2017] は,コンテンツ画像とスタイル画像の間で,適応的に調整を行う機能が,インスタンス正規化に追加されたものである.このAdaINにより,1モデルだけであらゆるスタイル画像を参照入力として変換できる,スタイルトランスファーモデルが実現できるようになった.
スタイルトランスファー以外でも,インスタンス正規化は pix2pixHD [Wang et al., 2018]などの画像対画像変換モデルでも用いられている.また,画像生成GANにおいても,スタイルトランスファー技術を画像生成GANに組み込んだ StyleGAN [Karras et al., 2019] などで,AdaINが応用されている.
3.3 グループ正規化:小バッチ,多タスクの大規模CNN向け改善.
グループ正規化 (Group Normalization) [Yuxin and He, 2018] は,各1サンプル(インスタンス)内のグループ単位で正規化を行うことで(※ デフォルトでは32グループ),効率計算かつ性能保持を可能にした (図5).
元祖のバッチ正規化 [Ioffe and Szegedy, 2015] が不得意で有効に使用できなかった「バッチサイズが大きくできない,小バッチサイズで複数GPUを用いて学習する問題 (例:物体検出・インスタンスセグメンテーション・動画アクション認識など)」でも,グループ正規化を用いることで,CNNの学習を安定・高速化させやすくなった.
[Yuxin and He, 2018] の実験では,高画質入力画像を使いたいので「1 or 2画像/バッチ」×「8GPU」くらいの『小バッチサイズ』で学習する「Mask R-CNN の fine-tuning」で実験を行った.実験では,バッチ正規化よりも高速に学習でき,認識精度も向上することが確認できた.更には「事前学習なしに,スクラッチからの学習」で,Mask R-CNNが学習出来るようになる事も示した.
また,動画入力から,メモリ容量を多く必要とする3D-CNN特徴(C3DやI3Dなど)を計算するため,バッチサイズが 4 or 8クリップ分しか使えない「アクション認識(Action Recognition)」においても,バッチ正規化よりもグループ正規化の方が,高速かつ精度よく学習できることを示した.
ちなみにグループ正規化は,レイヤー正規化(3.1節)同様「バッチ数に依存していない正規化」であるので,レイヤー正規化のように系列モデルにも有効に機能する.そもそもグループ正規化は,レイヤー正規化とインスタンス正規化の両方の分割方向を使用した手法であるので,2者の中間解の提案であったともみなせる(※ この意味では「インスタンスグループ正規化」とでも,命名して欲しかったと個人的に思う).
4. バッチ正規化のまとめ
この記事では,バッチ正規化の基本と,その代表的な発展型であるレイヤー正規化・インスタンス正規化・グループ正規化の概要紹介を行った.
バッチ正規化の登場により,まずは画像識別CNNが「高速で安定な学習」を手に入れた.そして,レイヤー正規化の登場で,系列対系列変換モデル(seq2seq with attention, Transformer・BERTなど)も,その恩恵を得ることができるようになった.また,グループ正規化の登場で,物体検出・インスタンスセグメンテーション・動画アクション認識のCNNなども,バッチ正規化の仕組みの恩恵を得やすくなった.
関連書籍
- Pythonで学ぶ画像認識 (機械学習実践シリーズ) 【📖紹介記事】, 田村 雅人, 中村 克行, インプレス, 2023.
- 4章 画像分類 (物体認識)
- バッチ正規化 (p98)
- レイヤー正規化 (p140)
- 4章 画像分類 (物体認識)
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022.
- 3.6.3 バッチ正規化 (p51)
- 3.6.4 レイヤー正規化 (p52)
- Probabilistic Machine Learning: An Introduction, Kevin Patrick Murphy , MIT Press, 2022.
- 14.2.4.1 Batch Normalization
- 画像認識(機械学習プロフェッショナルシリーズ),原田達也,講談社,2017.
- 6.4.3 データの正規化 (p181)
References
- [Ba et al., 2016] J. Ba, R. Kiros, and G. E. Hinton. Layer normalization. ArXiv, abs/1607.06450, 2016.
- [Huang and Belongie 2017] X. Huang and S. Belongie. Arbitrary style transfer in real-time with adaptive instance normalization. In ICCV 2017.
- [Ioffe and Szegedy, 2015] S. Ioffe and C. Szegedy, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift” In ICML , 2015.
- [Karras et al., 2019] T. Karras, S. Laine, and T. Aila. A style-based generator architecture for generative adversarial networks. In CVPR 2019.
- [LeCun et al., 1998] LeCun, Y., Bottou, L., Orr, G., and Muller, K. “Efficient backprop” In Orr, G. and K., Muller (eds.), Neural Networks: Tricks of the trade. Springer, 1998b.
- [Nair and Hinton., 2010] Nair, V., Hinton, G.E.: Rectified linear units improve restricted boltzmann machines. In, ICML 2010.
- [Santurkar et al., 2018] Santurkar, S., Tsipras, D., Ilyas, A., & Mądry, A. “How Does Batch Normalization Help Optimization?” In NeruIPS, 2018.
- [Ulyanov et al., 2016] Ulyanov, D., Vedaldi, A., Lempitsky, V. ” Instance normalization: The missing ingredient for fast stylization” arXiv:1607.08022 (2016)
- [Ulyanov et al., 2017] Ulyanov, D., Vedaldi, A., Lempitsky, Improved texture networks: Maximizing quality and diversity in feed-forward stylization and texture synthesis.” In CVPR, 2017.
- [Wang et al., 2018] T.-C. Wang, M.-Y. Liu, J.-Y. Zhu, A. Tao, J. Kautz, and B. Catanzaro. “High-resolution image synthesis and semantic manipulation with conditional gans” In CVPR, 2018.
- [Yuxin and He, 2018] Yuxin Wu and Kaiming He. Group normalization. In ECCV, 2018.
外部参照リンク
- https://www.quora.com/What-are-the-main-normalization-layers-in-artificial-neural-networks
- Batch Normalization – Wikipedia
- Feature scaling – Wikipedia
- Ch 9: Convolutional Networks , Ian Goodfellow (※ 動画序盤がバッチ正規化について)
- Qiita | Batch normalization(BN)の正体に迫る論文とBNの代わりになるかもしれないNormalizationの論文まとめ
- Batch Normalizationとその派生の整理| GANGANいこうぜ
- Batch Normalization, Instance Normalization, Layer Normalization: Structural Nuances | Becoming Human