🔥

【手書き図あり】Zero-Centered でない活性化関数は何が問題なのか

2022/10/31に公開約3,100字

結論

入力と出力の関係性の制限が勾配の計算に影響し、複数のパラメータの更新する際の方向を同一にしてしまうことにより勾配の最適化に制限がかけられ時間がかかるから。

序章

私は現在大学生であり、深層学習に関する授業を受けている。その中で、シグモイド関数とtanh関数は基本的な関数であり形が似ている。ここでどちらが優れているかという話が出てきた。先生の回答は、ゼロ中心かどうかという観点からtanhの方が優れている、であった。

ゼロ中心とは私が「zero-centered」を適当に訳しただけの単語で、関数がx軸に対して対象になっていることを示すものである。

Googleの検索において、「zero-centered 活性化関数」で調べても日本語の詳細な解説記事が見つからなかった。そのため今回は調査しまとめたいと考えた。もしかしたら自分の検索能力がなかっただけかもしれない。英語で検索すると英語の記事がいくつか見つかる。

例えばこちらの日本語の記事では、
https://atcold.github.io/pytorch-Deep-Learning/ja/week11/11-1/

Tanhは、-1から1までの範囲で、中心化されていることを除いて、Sigmoidと基本的に同じです。 関数の出力は、ほぼ平均ゼロです。したがって、モデルはより速く収束します。

と記述されているが、明確な理由が書いていない。しかし、出力の平均がゼロである関数はそうでない関数に比べて収束が早いらしい。それは一体なぜであろうか。

ゼロ中心は活性化関数に限った話ではない

ここからは英語の記事を参考にしていく。
こちらのStackExchangeの回答を見ると、そもそもこの問題は深層学習における正規化という問題と強く結びついているらしい。

https://ai.stackexchange.com/questions/26958/why-is-it-a-problem-if-the-outputs-of-an-activation-function-are-not-zero-center

So, To solve this problem deep learning practitioners have invented a myriad of Normalization layers (batch norm, layer norm, weight norm, etc.). we can normalize the data in advance to be zero-centered as in batch/layer normalization.

活性化関数にもこの正規化の問題が適用されるということらしい。

正規化と深層学習

ゼロ中心という言葉をおいておいて、正規化と深層学習に注目し調べると、日本語の記事がたくさん見つかった。

https://xtech.nikkei.com/atcl/nxt/mag/rob/18/00007/00027/

この記事において

もし入力の値がすべて正であるならば、重みについての勾配の符号はすべて同じであり勾配降下法による最適化は、すべての次元の符号が同じ方向にしか進めない

と書いてある。これがほぼ答えらしい。私はこれをすぐに理解できなかった。どういうことだろうか。

ゼロ中心の性質と探索範囲の関係

以下、このサイトを参考にした。
https://stats.stackexchange.com/questions/237169/why-are-non-zero-centered-activation-functions-a-problem-in-backpropagation

ここからの例ではシグモイド関数を取り上げる。出力が全て正の値である。

つまり何を入力として受け取っても正の値に変換するという関数である。

ここで、以下の図のようなニューラルネットワークを想定する。

これを重みについて微分すると、以下のようになる。

ということから以下のことが言える。

[[[これが本質]]]
ここで、\sigma(x)は常に正の値をとるから\partial L/\partial w_1の符号は(Target - f)の符号と一致する。>>>勾配の符号が\sigma(x_1)に依存しなくなる!!<<< つまり、どのxについてもwの要素全てが同じ方向に更新しなければならなくなる。

あくまでも符号だけを考えていることに注意!!!
もちろんどれくらいの勾配かは入力に依存する。

シグモイド関数は符号が入力に依存しないので本来の関係性を失わせてしまうようなイメージである。
これによって入力に依存せず、勾配の符号が統一的に決まってしまうのが問題なのである。

では、逆にシグモイド関数がもし正の値も負の値もとる関数である場合はどうなるのだろうか。
その場合、符号はシグモイド関数にも依存するようになるので予測が不可能になるためそのような制限が課されない。

よりわかりやすく言えば、
例えばw_1からw_{100}まである中で、w_{52}だけ正の方向に更新して他は負の方向に更新するということができないのである。その逆もまた同様である。

シグモイド関数によって、
パラメータを全てを同じ方向に動かさなければならないという制約がつくのである!!

ではなぜこの制約が最適化に影響するのだろうか??

全てを同じ方向に動かす制約がどうして最適化に影響する?

勾配に制限が課されるとは以下の図のようなイメージである。

であるから、勾配の積み重ねによって最適な位置を探す勾配降下法の場合、以下の図のような動きになる。

このように、最短経路で最適解に辿り着くことができず回り道をしてしまっている。

まとめ

  • 活性化関数は正規化と深い関係性を持っている。
  • 活性化関数は正規化するという観点からニューラルネットワークにおいて重要である。
  • 正規化しなくても学習はできるが、勾配の計算に非効率性が生じる可能性がある。
  • 正規化することにより最短経路で学習ができる可能性がある。
  • ゼロ中心でない関数は勾配の符号が入力に依存しなくなってしまうため複数のパラメータに対して統一的に制限が課せられる。

最後の一言

正規化は大事

Discussion

ログインするとコメントできます