前の節では、正規化層を料理の味の土台を整える仕組みとして見てきました。
では、その「整え方」にはどんな違いがあるのでしょうか。
料理でも、
・大鍋ぜんぶを見て味を整える
・一皿ごとに整える
・一品ごとに整える
・材料のまとまりごとに整える
では、やり方が少しずつ違いますよね。
ディープラーニングの正規化も同じです。
違いのポイントは、どのまとまりを単位にして値を整えるかにあります。
ここでは代表的な4つの正規化手法を、料理の世界観で見ていきましょう。
バッチ正規化
まず代表的なのが、バッチ正規化(Batch Normalization)です。
これは、学習のときに、ミニバッチとしてまとめて扱っているデータ全体を見ながら、値のばらつきを整える方法です。
料理でいえば、大鍋で作ったスープを、何皿かまとめて味見して「今日は全体として少し塩が強いな」「この鍋は少し薄めだな」と判断し、まとめてバランスを整えるようなイメージです。
一皿ずつ別々に見るのではなく、いくつかをまとめて見て、「この集まり全体として、ちょうどよい味にしよう」とするのがバッチ正規化です。
この方法は、ディープラーニングを大きく発展させた重要な工夫の一つで、学習を安定させたり、速く進めやすくしたりすることで知られています。
ただし、ミニバッチの大きさに影響を受けやすいという特徴もあります。
つまり、まとめて味見する人数が少なすぎると、「今日の味の平均」が少し不安定になることがあるのです。
レイヤー正規化
次に、レイヤー正規化(Layer Normalization)を見てみましょう。
これは、バッチ全体を見るのではなく、1つのデータの中で、層全体の値を見て整える方法です。
料理でいえば、大鍋全体ではなく、目の前の一皿だけを見て、「この皿は少し塩が強い」「この皿はバランスが整っている」と判断して整える感じです。
つまり、
バッチ正規化→ 何皿かまとめて見て整える
レイヤー正規化→ 一皿ずつ、自分の中で整える
という違いがあります。
レイヤー正規化は、ミニバッチの大きさに左右されにくいため、系列データや自然言語処理のモデルなどでよく使われます。
料理のたとえで言えば、「今日は何人分を一緒に作ったか」ではなく、この一皿そのもののバランスを大事にする方法です。
インスタンス正規化
次にインスタンス正規化(Instance Normalization)を見てみましょう。
これは、さらに細かく、1つのデータ・1つのチャネルごとに整える方法です。
料理でたとえるなら、一皿の中にいくつかの小皿料理があるとして、
・スープはスープとして整える
・サラダはサラダとして整える
・ソースはソースとして整える
というように、一品ごとに味を整えるイメージです。
一皿全体の平均を見るのではなく、それぞれの要素を独立して整えます。
そのためインスタンス正規化は、画像のスタイル変換のように、見た目の雰囲気や質感を扱うタスクと相性がよいことで知られています。
つまり、全体のバランスよりも、その一品自身の整い方を大事にするのがインスタンス正規化です。
グループ正規化
最後に、グループ正規化(Group Normalization)を見てみましょう。
これは、チャネルをいくつかのグループに分けて、そのグループごとに正規化する方法です。
料理でいえば、
・香りに関わる材料のグループ
・塩味に関わる材料のグループ
・コクに関わる材料のグループ
のように、似た役割の材料ごとにまとめて整えるイメージです。
全部まとめて見るわけでもない。一品ずつ完全に分けるわけでもない。
その中間で、「このまとまりの中では、バランスをそろえよう」と考えるのがグループ正規化です。
この方法は、バッチサイズが小さいときにも比較的安定しやすく、バッチ正規化の代わりとして使われることもあります。
料理でいえば、「今日は人数が少ないから、大鍋の平均だけでは味を決めにくい。それなら、材料のグループごとに整えてみよう」という発想に近いかもしれません。
まとめ
ここまでの4つを、料理の世界でまとめるとこうなります。
バッチ正規化→ 何皿かまとめて味見して整える
レイヤー正規化→ 一皿ごとに全体の味を整える
インスタンス正規化→ 一品ごとに味を整える
グループ正規化→ 材料のグループごとに整える
つまり違いは、どの単位で「ちょうどよさ」を決めるかにあります。
正規化という考え方そのものは同じでも、どこをひとまとまりとして見るかによって、方法の性格は少しずつ変わるのです。
料理人にも、整え方の流儀があります。
・まず鍋全体を見る人
・一皿ずつ丁寧に見る人
・素材ごとに味を見ていく人
どれが絶対に正しいというより、料理や場面に合ったやり方を選ぶことが大切です。
正規化手法も同じです。
・ミニバッチを前提にした学習ならバッチ正規化が強いことが多い
・バッチサイズに頼りにくい環境ではレイヤー正規化やグループ正規化が役立つ
・画像の見た目や質感を重視する場面ではインスタンス正規化が使われることがある
つまり正規化手法とは、単に数式の違いではなく、どんな単位で世界を整えて見るかの違いでもあるのです。
ディープラーニングを勉強していると、正規化と正則化という、よく似た言葉が出てきます。
漢字も似ているし、どちらも「学習を助ける工夫」のように見えるので、「これ、同じようなものだったっけ?」と迷ってしまうことがあります。
でも、この二つは役割が違います。
■ 正規化:ばらつきを整える
正規化は、値のばらつきを整えて、学習を安定させる仕組みです。
料理でいえば、
・毎回スープの味が
・今日は濃すぎる
・次は薄すぎる
・今度は酸味が強すぎる
と大きく揺れていたら、
次の調整がしにくくなりますよね。
そこで、まず味の土台をある程度整えてから、細かな味付けに入る。
これが正規化のイメージです。
つまり正規化は、学習の流れをなめらかにするために、途中の値を整えるものと言えます。
■ 正則化:複雑になりすぎるのを防ぐ
一方、正則化は、モデルが複雑になりすぎて、過学習するのを防ぐ仕組みです。
こちらは、丸暗記してしまう学生のたとえがぴったりです。
過去問をそのまますべて覚えてしまえば、同じ問題には答えられるかもしれません。でも、少し形を変えた問題が出ると解けなくなる。
AIでも同じで、学習データに合わせすぎると、新しいデータに弱くなってしまいます。
そこで正則化では、
・重みを大きくしすぎない
・不要な特徴を減らす
・モデルを複雑にしすぎない
といった工夫をします。
つまり正則化は、学習しすぎて「丸暗記」にならないようにするものなのです。
この二つをとてもざっくり分けると、こうなります。
正規化
→ 値のばらつきを整える
→ 学習を安定させる
正則化
→ モデルの複雑さを抑える
→ 過学習を防ぐ
名前は似ていますが、見ているものが違います。
正規化は、学習の途中で流れる値を整える話。
正則化は、モデルそのものの複雑さを抑える話。
ここが大きな違いです。
正規化=値を整える
正則化=複雑さを抑える
next ▶ 正規化層の役割