U-Netを見てたら出てきたので、バッチ正規化やグループ正規化を調べてみます。
これまでたくさんの記事を探してましたが、2、3見れば十分という経験に基づきそれくらいにしておきます。
機械学習で正規化はデータを平均0、分散1に直すことみたいです。
正規化(Normalization)/標準化(Standardization)とは?
https://atmarkit.itmedia.co.jp/ait/articles/2110/07/news027.html
まずは、
平均はデータをたし合わせて個数で割ります。
標準偏差は、データから平均を引いた数を二乗し、それを全部立ち合わせ、個数で割ってさらにルートをとります。
正規化はデータから平均を引いて標準偏差で割ります。
二つほど、グループ正規化について記事がありました。
バッチ正規化(Batch Normalization) とその発展型
・「バッチサイズが小さいと (例; バッチサイズが1や2だと),データ統計分布が小さすぎてうまく正規化できず,バッチ正規化の効果が発揮できない.よって,GPUメモリの上限との兼ね合いから小さなバッチサイズで学習するしかない「大規模なモデル」を学習しづらい.
・学習時とテスト時で,平均と分散の値が変わってしまう.
・バッチサイズが大きいほど,正則化の効果が減る(汎化性能向上に寄与しなくなる).
・動画入力ネットワーク向けに使用すると,隣接フレーム同士でデータの相関(もとい類似性)が高いことから,平均・分散の推定が安定せず,学習がなかなか進行しない.
上記の課題に対応するために色々正規化も変わっていくようです。
・レイヤー正規化(系列データのためにチャンネル方向からレイヤー方向に変更、レイヤー正規化は,RNNやseq2seqに,Transformerなどを用いた「自然言語処理むけのRNN言語モデル・系列対系列変換モデル」でよく使用される.)
・インスタンス正規化(画像一枚ごとにチャンネルごとのバッチ正規化)
・グループ正規化(各1サンプル(インスタンス)内のグループ単位で正規化、バッチサイズが大きくできない,小バッチサイズで複数GPUを用いて学習する問題むけ)
こちらの記事もあります。
Group Normalization(グループ正規化)を理解する
https://data-analytics.fun/2022/09/23/group-normalization/
こちらもよく記事がわかりやすいです。
今回はグループ正規化を見ました。正規化を行う際に、バッチサイズの性質に合わせて正規化する対象のサイズを変更するパターンとして、レイヤー正規化、インスタンス正規化、グループ正規化があり、グループ正規化はレイヤー正規化とインスタンス正規化の間のサイズになるということです。
正規化の記事は多いものの、解説記事は多くはなかった気がしましたが、グループ正規化までの解説は限られているようでしたが、性能を上げる上でとても大事な概念のようなので文言は覚えておきたいと感じました。
以上です。