ディープラーニングでは、たくさんの層が順番につながりながら学習していきます。
でも、その途中で流れていく値が、毎回ばらばらだったら、どうなるでしょうか。
あるときは味が濃すぎる。
あるときは薄すぎる。
あるときは酸味が強く、次の瞬間には甘みが前に出すぎる。
……そんな料理を毎回味見しながら、「次はどこを直せばいいか」を判断するのは大変ですよね。
ディープラーニングでも、これと似たことが起こります。
各層に入ってくる値の大きさが毎回大きく変わると、次の層はそのたびに対応しなければならず、学習が不安定になってしまいます。
そこで登場するのが、正規化層です。
正規化層は、値のばらつきを整えて、学習しやすい状態にする仕組みです。
料理を作っている場面を想像してみてください。
スープを煮込みながら、何度も味見をして調整していくとします。
でも、味見をするたびに
・今回は塩味が強すぎる
・次は急に薄い
・今度は酸味が前に出すぎる
というように、味のバランスが大きく揺れていたらどうでしょう。
料理人は、「どこを直せばいいのか」が分かりにくくなってしまいます。
・塩を足すべきなのか、
・水を足すべきなのか、
・火を弱めるべきなのか。
毎回の味が安定していないと、次の一手を決めるのが難しいのです。
ニューラルネットワークでも同じです。
各層に入ってくる値が毎回ばらばらだと、その次の層は「今日は大きすぎる値が来た」「次は小さすぎる値になった」と振り回されてしまいます。
ここで料理人は、いきなり細かな調整に入るのではなく、まず全体の味のバランスを整えようとします。
・塩味が極端に強すぎないようにする
・甘みや酸味が偏りすぎないようにする
・味の土台を、ちょうどよいところへ戻す
こうしておけば、そのあとで「もう少しコクを出そう」「香りを足そう」といった微調整がしやすくなります。
正規化層も、まさにこれと似ています。
正規化層は、層に入ってくる値をそのまま次へ流すのではなく、極端なばらつきを整えてから次の層へ渡すのです。
ここで大事なのは、正規化は「全部を同じにする」ことではない、ということです。
料理でも、
・塩味
・甘み
・酸味
・香り
が全部同じ強さであればいいわけではありません。
それぞれの個性は残したまま、極端な偏りを整えることが大事です。
正規化層も同じです。
値の違いそのものを消してしまうのではなく、大きすぎる偏りや小さすぎる偏りを整えて、次の層が扱いやすい状態にする。
つまり正規化とは、個性を消すことではなく、バランスを整えることなのです。
味の土台がある程度そろっていれば、料理人は次の調整をしやすくなります。
「少し塩を足せばよさそう」「ここで火を弱めれば整いそう」と判断しやすくなるからです。
ディープラーニングでも、値のばらつきが整っていると、後ろの層は落ち着いて学習しやすくなります。
その結果、
・学習が安定しやすい
・学習を速く進めやすい
・勾配の流れも助けやすい
といった利点が出てきます。
つまり正規化層は、派手な主役ではないけれど、学習をなめらかに進めるための下ごしらえのような存在です。
ここで少しだけ、G検定で出てくる言葉にも触れておきます。
学習が進むにつれて、各層に入ってくる値の分布が変わってしまい、次の層が学習しにくくなることがあります。
これを内部共変量シフト(internal covariate shift)と呼びます。
料理で言えば、味見のたびにスープの土台そのものが大きく変わってしまい、毎回「別の料理」を調整しているような状態です。
正規化層は、こうした値のゆらぎを和らげて、学習を安定させるための工夫としても知られています。
next ▶ 代表的な正規化手法