ディープラーニングコースを受講した生徒からの興味深い質問(2/4)

基礎理論

1.ディープラーニングコースを受講した生徒からの興味深い質問(2/4)まとめ

・何を重視するかによってミニバッチとシングルバッチの優位性は異なる
・一般化能力を最優先する場合はシングルバッチの方が優れているという見方もある
・バッチ毎に正規化すると全体を正規化するより恩恵を受けやすくなる

2.ミニバッチとシングルバッチの比較

以下、kyunghyuncho.meより「A few QA’s from the course F’20 <Deep Learning>」の意訳です。元記事の投稿は2020年12月7日、kyunghyun choさんによる投稿です。

アイキャッチ画像のクレジットはPhoto by NeONBRAND on Unsplash

2.シングルバッチの優位性

LeCun教授は、ミニバッチは並列化が容易である以外にシングルバッチSGDに勝る利点はなく、SGDは実際には優れていると述べました。 シングルバッチが好ましい他の理論的理由はありますか?

これは興味深く重要な質問であり、これに対する答えは、Yannと私も含めて専門家毎に異なります。何故なら、暗黙的に想定しているものと、どちらが好ましいかを判断するための基準として使用されているもの(計算効率、一般化精度など)が異なるためです。

Yannの見解では、SGDのノイズは、学習が急な極小値にとどまるのを防ぎ、より平坦な極小値を見つけるように学習を促進するため、一般化に大いに役立ちます。

より平坦な極小値は、最終的なニューラルネットがパラメーターの微妙な変動に対してより堅牢性を高める事を意味します。これは、入力データの微妙な変動に対して堅牢になる事に自然に変換され、つまりは、ニューラルネットワークがより一般化されることを意味します。

この観点から考えると、(個々のトレーニング事例から計算されたすべての確率的勾配が、平均すると大まかに相殺されるという条件付で)SGDのノイズレベルを最大化する事が望ましい学習法になります。

これは、各確率的勾配を計算するためにトレーニングデータを一度に使用することに対応します。もちろん、ノイズの量は確率的勾配の分散に比例し、これは学習が行われる速度に影響を与えます。

近年、私たちは(深層学習研究者のコミュニティとして)特定のネットワークアーキテクチャが訓練するために大きなミニバッチが必要になり、それを使って確率的勾配を計算する必要があることを発見しました。(ただし、トレーニングセットのサイズにかなり関連しているため、「大きな」が何を意味しているのかはかは不明です)このような場合、特に初期段階では、高レベルのノイズが学習の進歩を妨げることがあるように見えます。

つまり、これはまだ未解決の問題です。いずれYannの見方が正しいことがわかるかもしれません。(そして、そのようになるのはこれが初めてではありません)。または、将来、まったく異なる説明が見つかる可能性があります。

3.バッチ毎に正規化する意味

最初にデータセット全体を一度に正規化するのではなく、バッチ毎に正規化を行うのはなぜですか?データセット全体を正規化するのに計算コストがかかりすぎる場合に適しているのでしょうか?正規化により、固有値を等しくすることで最適化プロセスが容易になることを理解しました。ただし、バッチ単位で正規化する場合、各バッチの正規化はノイズの影響を受けやすく、各次元で学習率が低下する可能性があります。

この問いかけには3つの質問/ポイントがあります。 以下、それぞれについて個別に説明します。

「正規化により、固有値を等しくすることで最適化プロセスが容易になります」

対象とする正規化の種類を指定する必要がありますが、一般に、入力を正規化するだけではヘッセ行列(Hessian)を同一にすることはできません。これは、特定の損失関数(例えば、回帰におけるL2損失と分類におけるクロスエントロピー)を持つ線形ネットワークを検討している場合にのみ可能です。

ただし、経験的に知られている事ですが、場合によっては、入力変数をゼロ平均および単位分散に正規化すると、条件数(ヘッセ行列の最大実固有値と最小実固有値の比率)が1に近くなる(これは良い事です)ことも厳密にわかっています。

「最初にデータセット全体を一度に正規化するのではなく、バッチ単位で正規化を行うのはなぜですか?」

さて、複数の層を持つネットワークの場合、各層への入力をゼロ平均と単位分散に正規化することで、正規化の利点を最大化できることがわかりました。しかし、残念ながら、これは簡単なことではありません。各レイヤーへの入力は、下位レイヤーの重みとバイアスが変化するにつれて変化するためです。

つまり、各レイヤーへの入力を正規化するのであれば、重み行列とバイアスベクトルを更新する毎にデータセット全体を一掃する必要があり、これには耐えられなくなります。

更に、下位層で入力を再正規化すると、上位層への入力が変更され、最終的には、全ての層を再正規化するたびに損失関数が劇的に変化し、学習が不可能になる可能性があります。 ただし、これはある程度まで対処可能です。(私の博士課程のアドバイザーであるTapani RaikoとYann LeCunによる論文「Deep Learning Made Easier by Linear Transformations in Perceptrons」を参照してください)

「各バッチ単位で正規化するとノイズの影響を受けます」

これは確かに真実であり、バッチ正規化で各次元の平均と分散の移動平均を維持することが慣習となっているのはまさにそのためです。ネットワークのパラメータがゆっくりと進化すると仮定すると、そのような慣習は最終的に母集団の平均と分散に収束します。

3.ディープラーニングコースを受講した生徒からの興味深い質問(2/4)関連リンク

1)kyunghyuncho.me
A few QA’s from the course F’20 <Deep Learning>

2)openreview.net
Evaluating biological plausibility of learning algorithms the lazy way

3)leon.bottou.org
Online Learning and Stochastic Approximations(PDF)

4)proceedings.neurips.cc
Identifying and attacking the saddle point problem in high-dimensional non-convex optimization

5)arxiv.org
The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks

6)drive.google.com
A speculative lecture on optimization in deep learning

7)proceedings.mlr.press
Deep Learning Made Easier by Linear Transformations in Perceptrons(PDF)

タイトルとURLをコピーしました