ディープラーニングを理解するための鍵 - パラメータ

ディープラーニングを理解するための鍵 - パラメータ

これは、これまで見た中で最もわかりやすいニューラル ネットワーク パラメータの説明です。数式も最小限に抑えられています。ニューラル ネットワークの専門家はこれを避けるべきです。

前回の記事「ディープラーニングを理解するための鍵 - 啓蒙」では、損失関数または目的関数とも呼ばれる二次コスト関数の定義について説明しました。

ここで、w はネットワーク内のすべての重みのセットを表し、b はすべてのバイアスを表し、n はトレーニング入力データの数を表し、a は入力が x の場合の出力ベクトルを表し、y(x) は実際の出力ベクトルを表し、合計はトレーニング入力 x 全体に対して実行されます。

記事「ディープラーニングを理解する鍵 - 啓蒙」の v の計算プロセスを参照してください。∇C は勾配ベクトルを表します。

ここで、2 つの成分 w と b があり、勾配ベクトル ∇C には対応する成分 ∂C/∂w と ∂C/∂b があります。これらの成分を使用して勾配降下法の更新規則を記述すると、次のようになります。

この更新ルールを繰り返し適用することで、「ボールを丘から転がし」、コスト関数の最小値、つまりニューラル ネットワークが学習できるルールを見つけることができます。

このコスト関数はすべてのトレーニング サンプルに適用され、x はサンプルを表すことに注意してください。

実際には、勾配 ∇C を計算するには、各トレーニング入力 x の勾配 ∇Cx を個別に計算し、平均化する必要があります。

残念ながら、トレーニング入力の数が多いと、これには長い時間がかかり、学習が非常に遅くなります。

1. 確率的勾配降下法

このセクションでは、具体的なトレーニング プロセス、ミニバッチとは何か、トレーニング エポックとは何かについて学習します。

学習を高速化できる確率的勾配降下法と呼ばれるアルゴリズムがあります。その考え方は、少数のトレーニング入力サンプルをランダムに選択して ∇Cx を計算し、勾配 ∇C を推定するというものです。少数のサンプルの平均を計算することで、実際の勾配 ∇C の適切な推定値をすばやく得ることができ、勾配降下法を高速化して学習プロセスを高速化するのに役立ちます。

より正確には、確率的勾配降下法は、少数の m 個のトレーニング入力をランダムに選択することによって機能します。これらの入力を X1;X2…Xm とラベル付けし、ミニバッチと呼びます。サンプルサイズmが十分に大きいと仮定すると、∇Cxjの平均値は∇Cx全体の平均値とほぼ等しくなることが予想されます。つまり、

次のように推測できます。

次に、すべてのトレーニング入力を使い果たすまで、ランダムに選択された別のデータのミニバッチを選択してトレーニングを行います。これを 1 回のトレーニング反復 (エポック) の完了と呼びます。次に、新しいトレーニングの反復を開始します。

確率的勾配降下法は世論調査のようなものと考えることができます。総選挙を実施するよりも世論調査を実施する方が簡単であるのと同じように、データのミニバッチをサンプリングする方がデータセット全体に対して勾配降下分析を実行するよりもはるかに簡単です。たとえば、MNIST のようなサイズ n = 60000 のトレーニング セットがあり、ミニバッチ サイズとして m = 10 を選択した場合、勾配の推定が 6000 倍高速化されます。

次に、確率的勾配降下法と MNIST を使用して手書きの数字を認識する方法を学習するプログラムを作成しましょう。

トレーニング データには、MNIST データに加えて、高速線形代数を実行するために使用される Numpy という Python ライブラリも必要です。心配しないでください。コードは掲載しません。ヒントだけを示します。関数の呼び出し方法は理解できます。

MNIST データを読み込んだ後、784 ピクセルの入力、30 個の隠しニューロン、10 個の出力を持つネットワークを設定します。

確率的勾配降下法を使用して、ミニバッチ サイズを 10、学習率 η=3.0 で、MNIST training_data から 30 エポックにわたって学習します。

プリントアウトには、各トレーニング エポック後にニューラル ネットワークが正しく認識したテスト画像の数が表示されます。ご覧のとおり、たった 1 回の反復で 10,000 個のうち 9,129 個が選択され、その数は増え続け、トレーニングされたネットワークの認識率は約 95% になります。

上記の実験を再度実行し、隠しニューロンの数を 100 に変更してみましょう。

予想通り、結果は 96.59% に改善されました。少なくともこの場合は、より多くの隠しニューロンを使用することで、より良い結果が得られます。

もちろん、これらの精度を得るには、トレーニング エポックの数、ミニバッチ サイズ、学習率 η について特別な選択を行う必要がありました。上で述べたように、これらはニューラル ネットワークではハイパーパラメータと呼ばれ、学習アルゴリズムによって学習されたパラメータ (重みとバイアス) と区別されます。不適切なハイパーパラメータを選択すると、結果も悪くなります。

学習率η = 0.001を選択した場合:

結果はそれほど期待できるものではありませんでした。

ただし、ネットワークのパフォーマンスは時間の経過とともに徐々に向上していることがわかります。これは、学習率を、たとえば η = 0.01 に上げる必要があることを示しています。そうすると、さらに良い結果が得られるため、学習率を再度上げる必要があることがわかります。 (変更によって状況が改善した場合は、さらに変更を試みてください!) これを数回繰り返すと、最終的には η = 1.0 (調整した場合は 3.0) のような学習率に到達します。これは、以前の実験に近くなります。したがって、たとえ最初に不適切なハイパーパラメータを選択したとしても、少なくともハイパーパラメータの選択を改善するのに役立つ十分な情報が得られました。

ニューラル ネットワークのデバッグは、特にハイパーパラメータの初期選択によってランダム ノイズと変わらない結果が生成される場合には、困難になることがよくあります。 30 個の隠しニューロンを持つ同じ成功したネットワーク構造を試して、学習率を η = 100 に変更すると、この時点ではやり過ぎてしまい、学習率が高すぎます。

学習率だけでなく、ニューラル ネットワークの他のすべての部分についても懸念するかもしれません。ネットワークの学習を困難にする初期の重みとバイアスを使用したのではないか、意味のある学習を得るためのトレーニング データが十分ではなかったのではないか、反復処理が不十分だったのではないか、このアーキテクチャのニューラル ネットワークが手書きの数字を認識することを学習するのは不可能ではないか、学習率が低すぎるのではないか、学習率が高すぎるのではないか、などと疑問に思うかもしれません。初めて問題に遭遇したときは、必ずしも確信が持てるとは限りません。

通常のプログラミングと同様に、これは芸術であり、ニューラル ネットワークでより良い結果を得るにはデバッグの技術を学ぶ必要があります。より一般的には、適切なハイパーパラメータと適切な構造を選択するためのヒューリスティックな方法が必要です。ハイパーパラメータの選択方法については、後ほど説明します。

2. ディープラーニングに向けて

このセクションでは、ニューラル ネットワークがディープラーニングに移行する方法について学習します。

私たちのニューラル ネットワークは素晴らしいパフォーマンスを発揮しますが、そのパフォーマンスはいくぶん謎めいています。ネットワーク内の重みとバイアスは自動的に検出されるため、ネットワークがどのように機能するか、何をするかをすぐに説明することはできません。私たちのネットワークが手書きの数字を分類する原理を理解する方法はありますか? また、これらの原理を理解すれば、より優れた分類ができるでしょうか?

これらの疑問をより具体的にするために、数十年後にニューラル ネットワークが人工知能 (AI) を生み出すと仮定してみましょう。その時までに、私たちはこのインテリジェント ネットワークの動作メカニズムを理解できるでしょうか? おそらく、自動的に学習される重みとバイアスは私たちの理解を超えているため、このようなニューラル ネットワークは私たちにとって不透明です。人工知能研究の初期段階では、人工知能を構築する取り組みが、知能の背後にあるメカニズムや人間の脳の働きを理解するのにも役立つと期待されていましたが、結果として、脳のメカニズムも人工知能のメカニズムも理解できない可能性があります。

これらの問題に対処するために、画像に顔が写っているかどうかを判断したいと仮定して、証拠を評価する方法としてこの章の冒頭で示した人工ニューロンの説明を再考してみましょう。

[[188909]]

この問題は、手書き認識と同じ方法で解決できます。ネットワークへの入力は画像内のピクセルで、ネットワークの出力は「はい、これは顔です」または「いいえ、これは顔ではありません」と判断する単一のニューロンです。このアプローチを採用し、学習アルゴリズムを使用する代わりに、手動でネットワークを設計し、適切な重みとバイアスを選択することにします。どうすればいいでしょうか。ニューラル ネットワークについては今は忘れてください。この問題をサブ質問に分割するというアイデアが浮かびます。画像の左上隅に目はありますか? 右上隅に目はありますか? 中央に鼻はありますか? 中央下部に口はありますか? 上部に髪の毛はありますか? などです。いくつかの質問に対する答えが「はい」または「おそらくはい」であれば、画像は顔である可能性があると結論付けることができます。逆に、これらの質問のほとんどに対する答えが「いいえ」であれば、画像は顔ではない可能性があります。

この考え方は、ニューラル ネットワークを使用してこれらのサブ問題を解決できる場合、サブ問題を解決するこれらのネットワークを組み合わせて、顔検出用のニューラル ネットワークを形成できる可能性があることを示唆しています。下の図は、考えられる構造です。ボックスはサブネットワークを表しています。これは顔検出問題に対する現実的な解決策ではありませんが、ネットワークがどのように機能するかを直感的に理解するのに役立ちます。

サブネットワークをさらに分解することは理にかなっているようです。「左上隅に目はありますか?」という質問を考えてみましょう。この質問は、「眉毛はありますか?」、 「まつげはありますか?」、 「虹彩はありますか?」などのサブ質問に分解できます。もちろん、これらの質問には、「左上隅に眉毛があり、その上に虹彩がありますか?」などの位置に関する情報も含まれている必要がありますが、ここでは単純にしておきます。「左上隅に目はありますか?」という質問に答えるネットワークは、次のように分解できます。

これらのサブ問題は、さらに分解して、複数のネットワーク層に渡していくこともできます。最終的には、サブネットワークは、数ピクセルしか関係しない単純な質問に答えられるようになります。たとえば、これらの単純な質問は、画像内のいくつかのピクセルが非常に単純な形状を形成するかどうかを尋ねるものかもしれません。これらの質問には、画像内の生のピクセルに接続された単一のニューロンによって答えることができます。最終結果は、非常に複雑な質問 (この画像に顔があるかどうか) を、単一ピクセル レベルで答えられる非常に単純な質問に分解するネットワークを設計したことです。これは、一連の多層構造を通じて行われます。初期のネットワーク層では、入力画像に関する非常に単純で明確な質問に答え、後のネットワーク層では、より複雑で抽象的な階層を構築します。この多層構造 (2 つ以上の非表示層) を含むネットワークは、ディープ ニューラル ネットワークと呼ばれます。

2006 年以降、確率的勾配降下法とバックプロパゲーションに基づき、ディープ ニューラル ネットワークの学習を可能にするさまざまな手法が開発され、より深い (そしてより大きな) ネットワークのトレーニングを可能にする新しいアイデアが導入されました。現在では、5 層または 10 層の隠し層を持つネットワークをトレーニングするのが一般的であり、多くの問題において、隠し層が 1 層だけの浅いニューラル ネットワークよりもパフォーマンスが優れていることが判明しています。これは、ディープ ネットワークが複雑な概念の階層を構築できるためです。

3. クロスエントロピーコスト関数

このセクションでは、ニューラル ネットワークのトレーニングが遅すぎる理由と、MSE または二次コスト関数の代わりにクロス エントロピー コスト関数を使用する必要がある理由について説明します。

ニューラル ネットワークが間違いから素早く学習することを期待していますが、実際には、そうなることが多いのでしょうか。この質問に答えるために、入力が 1 つだけのニューロンに関する小さな例を見てみましょう。

このニューロンを非常に単純なこと、つまり入力 1 を 0 に変換するようにトレーニングします。もちろん、適切な重みとバイアスを手作業で見つけるのは簡単ですが、勾配降下法を使用して重みとバイアスを学習することは有益であると思われるので、ニューロンがどのように学習するかを見てみましょう。

この例をより明確にするために、まず重みとバイアスを 0.6 と 0.9 に初期化します。これらは、意図的に考えることなく、学習を開始するための一般的な選択にすぎません。ニューロンの最初の出力は 0.82 なので、これは目標出力 0.0 からは程遠いです。ニューロンが出力を 0.0 に近づけるためにどのように学習するかを以下の図で見てみましょう。これらの画像は実際には勾配を計算し、勾配更新を使用して重みとバイアスを更新し、結果を表示していることに注意してください。学習の学習率 η = 0.15 を設定すると、学習プロセスを追跡するのに十分に遅くなり、一方で学習時間が長くなりすぎないことも保証されます。数秒あれば十分でしょう。コスト関数は MSE、C です。

反復期間が長くなると、ニューロンの出力、重み、バイアス、コストは次の一連のグラフに示すように変化します。

ご覧のとおり、ニューロンはコスト関数を削減する重みとバイアスを素早く学習し、最終出力は 0.09 になりました。これは目標出力の 0.0 ではありませんが、かなり良い結果です。

ここで、初期の重みとバイアスを 2.0 に設定するとします。初期出力は 0.98 で、目標値とはまったく異なります。次に、ニューロンの学習プロセスを見てみましょう。

次のような一連の変更が表示されます。

この例では同じ学習率 (η = 0.15) を使用していますが、学習速度は最初は比較的遅いことがわかります。最初の 150 回程度の学習では、重みとバイアスはあまり変化しません。その後、前の例と同様に学習速度が速くなり、ニューラル ネットワークの出力はすぐに 0.0 に近づきます。

この行動は人間の学習行動とは非常に異なっているようです。私たちは通常、明らかな間違いを犯したときに最も速く学習しますが、人工ニューロンは大きな間違いを犯したときに学習が困難になることがわかっています。さらに、この現象はこの小さな例だけでなく、より一般的なニューラル ネットワークでも発生します。なぜ学習がこんなに遅いのでしょうか。これを回避する方法は見つかるのでしょうか。

この問題の原因を理解するには、コスト関数の偏導関数 (∂C/∂w と ∂C/∂b) によって決まる速度で重みとバイアスを変更して学習するニューロンについて考えてみましょう。したがって、「学習が遅い」と言う場合、実際にはこれらの偏導関数が小さいことを意味します。なぜそれほど小さいのかを理解することが、私たちが直面している課題です。これを理解するために、偏導関数を計算してみましょう。次のように定義される 2 次コスト関数を使用しています。

ここで、a はニューロンの出力、トレーニング入力は x = 1、y = 0 はターゲット出力です。重みとバイアスを使用してこれを明示的に表現するには、a = σ(z) とし、z = wx + b とします。連鎖律を使用して重みとバイアスの偏微分を求めると、次のようになります。

ここで、x = 1、y = 0 を代入しました。これらの表現の挙動を理解するために、まずσ関数のグラフを思い出しながら、σ′(z)という項を詳しく見てみましょう。

この図から、ニューロンの出力が 1 に近い場合、曲線は非常に平坦になるため、σ ′ (z) は非常に小さく、つまり、∂C/∂w と ∂C/∂b は非常に小さくなることがわかります。これが実際に学習が遅くなる理由です。さらに、後で説明するように、学習速度が低下する理由は、実際にはより一般的なニューラル ネットワークの学習が遅くなる理由であり、この特殊なケースに特有のものではありません。

研究によると、2 次コスト関数をクロス エントロピー コスト関数に置き換えることができます。クロス エントロピーとは何かを理解するために、前の簡単な例を少し変えてみましょう。重み w1、w2、... とバイアス b に対応する複数の入力変数 x1、x2、... を使用してニューロンをトレーニングするとします。

ニューロンの出力はa = σ(z)で、z = ∑j W j X j + bは入力の加重合計です。このニューロンのクロスエントロピーコスト関数を次のように定義します。

ここで、n はトレーニング データの総数、合計はすべてのトレーニング入力 x に対して実行され、y は対応するターゲット出力です。学習が遅い問題を解決する前に、クロス エントロピーがコスト関数として解釈できる理由を確認しましょう。

すべてのトレーニング入力 x に対して、ニューロンの実際の出力が目標値に近い場合、クロス エントロピーは 0 に近くなります。この例では、y = 0 および a ≈ 0 と仮定すると、クロス エントロピーは 0 に近くなります。逆に、y = 1 および a ≈ 1 の場合も、クロス エントロピーは 0 に近くなります。まとめると、クロス エントロピーは負ではなく、ニューロンが非常に優れた精度を達成したときに 0 に近くなります。これらは、実際に必要なコスト関数の特性です。実際、これらの特性は 2 次コスト関数にも備わっているため、クロス エントロピーは適切な選択です。

ただし、クロスエントロピーコスト関数は、学習速度の低下の問題を回避できるという、2 次コスト関数よりも優れた機能を備えています。この状況を明確にするために、重みに関するクロスエントロピー関数の偏微分を計算し、結果のみをリストします。

これは、重みの学習速度が出力の誤差である σ(z) − y によって制御されることを示す美しい式です。誤差が大きいほど学習速度が速くなりますが、これは直感的に予想されることです。特に、このコスト関数は、二次コスト関数の同様の方程式 σ ′ (z) によって引き起こされる学習の遅延も回避します。

元の例に戻り、クロスエントロピーに切り替えた後の学習プロセスを見てみましょう。ここでも、以前のパラメータ設定に従ってネットワークを初期化し、初期重みを 0.6、バイアスを 0.9 にします。

クロスエントロピーに切り替えた後のネットワークの学習を見ると、次の曲線の変化がわかります。

当然のことながら、この場合、ニューロンは以前と同様に非常にうまく学習しますが、重みとバイアスの両方が 2.0 に初期化された、以前失敗した例 (リンク) を見てみましょう。

次のような曲線が表示されます。

成功です! 今回は、ニューロンは予想どおり非常に速く学習します。十分に注意深く観察すると、コスト関数曲線が 2 次コスト関数トレーニングの最初の部分よりもはるかに急勾配になっていることがわかります。クロス エントロピーによって生じた急勾配は喜ばしいものです。これは、ニューロンが重大なミスを犯し始め、最速の速度で学習できるようになったときに期待されるものとまったく同じです。

4. 過剰適合

このセクションでは、オーバーフィッティングの一般的な原因と、それに対処するための戦略について学習します。

ノーベル賞を受賞した物理学者エンリコ・フェルミはかつて、物理学における重要な未解決問題を解決するために同僚が提案した数学モデルについてどう思うかと尋ねられたことがある。モデルは実験と非常によく一致したが、フェルミは疑問を抱いていた。彼は、モデル内で設定する必要のある自由パラメータがいくつあるかを尋ねました。答えは「4」です。フェルミはこう答えた。「友人のジョン・フォン・ノイマンが、4 つのパラメータで象をシミュレートでき、5 つのパラメータで象の鼻を丸めることができるとよく言っていたのを覚えています。」

これが実際に意味するのは、多数の自由パラメータを持つモデルが特に不思議な現象を記述できるということです。そのようなモデルが既存のデータにうまく適合したとしても、それが良いモデルであることを意味するわけではありません。なぜなら、モデルには十分な自由度があり、現象の性質に関する実際の洞察を必要とせずに、特定のサイズのほぼすべてのデータセットを記述できる可能性があるからです。このような状況が発生すると、モデルは既存のデータではうまく機能しますが、新しいデータに一般化することは困難になります。モデルの真のテストは、これまでに見たことのないシナリオを予測する能力です。

フェルミとフォン・ノイマンは 4 つのパラメータを持つモデルに懐疑的でしたが、MNIST 数字の分類に使用する 30 個の隠しニューロンを持つニューラル ネットワークには、約 24,000 個のパラメータがあります。もちろん、これは多い数です。100 個の隠しニューロンを持つネットワークには約 80,000 個のパラメータがあり、最も高度なディープ ニューラル ネットワークには現在、数百万または数十億のパラメータが含まれています。これらの結果を信頼してよいのでしょうか?

ネットワークの汎中国能力が非常に低い例を構築して、この問題をより明確にしてみましょう。ネットワークには 30 個の隠しニューロンと合計 23,860 個のパラメーターがありますが、50,000 個の MNIST トレーニング画像すべてを使用するのではなく、最初の 1,000 個の画像のみを使用します。この制限されたセットを使用すると、一般化の問題がより顕著になります。クロスエントロピーコスト関数を使用し、学習率 η = 0.5、ミニバッチサイズ 10 という前と同じアプローチに従いますが、ここでは 400 エポックでトレーニングします。これは、少数のトレーニングサンプルのみを使用するため、前よりも少し多くなります。

上記の結果を使用して、ネットワークが学習するにつれてコストがどのように変化するかをプロットできます。

予想どおり、コスト関数は滑らかに下降しているので、これは有望に見えます。 200 から 399 までの期間のみを表示していることに注意してください。

テスト セットの分類精度を見てみましょう。

ここでは、引き続きその後のプロセスに重点を置いています。最初の 200 回の反復 (図には示されていません) では、精度は 82% に向上しました。その後、学習が遅くなり、最終的に、反復 280 付近で分類精度の向上が止まります。その後の反復では、反復 280 付近で小さなランダムな変動が見られるだけです。このグラフを、トレーニング データに関連するコストが引き続きスムーズに減少している前のグラフと比較してください。そのコストだけを見ると、モデルのパフォーマンスが「向上」していることがわかりますが、テスト精度を見ると、改善は錯覚であることがわかります。フェルミの嫌われたモデルと同様に、反復 280 以降、ネットワークはテスト データに一般化されなくなるため、これは有用な学習ではありません。反復 280 以降、ネットワークは過剰適合または過剰トレーニングしていると言えます。

つまり、私たちのネットワークは、トレーニング データ セットを一般的に認識できるのではなく、トレーニング データ セットの特殊なケースを学習しているのです。私たちのネットワークは、数字の本質を理解したり、テスト データ セットに一般化したりすることなく、トレーニング セットをほぼ単純に記憶しているだけです。

過剰適合はニューラル ネットワークの大きな問題です。これは、重みとバイアスの数が膨大である現代のネットワークでは特に当てはまります。効率的にトレーニングするには、過剰トレーニングが発生していないかどうかを検出する技術が必要であり、過剰トレーニングが発生しないようにする技術も必要です。また、過剰トレーニングの影響を軽減する技術も見つける必要があります。

過剰適合を検出する明白な方法は、上記の方法を使用することです。つまり、トレーニング中にテスト データ セットの精度を追跡し、テスト データの精度が向上しなくなった場合は、トレーニングを停止します。もちろん、厳密に言えば、これはオーバーフィッティングの必然的な現象ではありません。テスト セットとトレーニング セットの精度が同時に向上しなくなる可能性があるためです。もちろん、このような戦略を採用することで、オーバーフィッティングを防ぐことができます。

トレーニング画像を 1,000 枚だけ使用した場合の過剰適合の問題を研究しました。では、トレーニング データの 50,000 枚の画像をすべて使用した場合、どうなるでしょうか。他のすべてのパラメーターは同じまま (隠しニューロン 30 個、学習率 0.5、ミニバッチ サイズ 10)、エポックを 30 に増やします。下の図は、トレーニング セットとテスト セットでの分類精度がどのように変化するかを示しています。

ご覧のとおり、テスト セットとトレーニング セットの精度の差は、1,000 個のトレーニング データ ポイントを使用した場合よりも小さくなっています。特に、トレーニング データでの最高分類精度 97.86% は、テスト セットでの 95.33% の精度よりわずか 1.53% 高いだけです。前の例では、差は 17.73% でした。オーバーフィッティングはまだ発生しますが、大幅に減少しました。ネットワークは、トレーニング データからテスト データへの一般化がより優れています。一般的に言えば、オーバーフィッティングを減らす最良の方法の 1 つは、トレーニング サンプルの量を増やすことです。十分なトレーニング データがあれば、非常に大規模なネットワークでもオーバーフィッティングが発生する可能性は低くなります。残念ながら、トレーニング データは実際には扱いにくい、または高価なリソースであるため、これはあまり実用的なオプションではありません。

5. 標準化

このセクションでは、過剰適合を防ぐための正規化手法の使用について学習しますが、科学的な説明は行いません。

トレーニング サンプルの数を増やすことは、オーバーフィッティングを減らす 1 つの方法です。オーバーフィッティングの度合いを減らす他の方法はありますか? 実行可能な方法の 1 つは、ネットワークのサイズを縮小することです。ただし、大規模なネットワークは小規模なネットワークよりも強力になる可能性があるため、冗長性を適用するオプションがあり、幸いなことに、固定ネットワークと固定トレーニング セットがある場合でも過剰適合を軽減できる他の手法があり、その手法が正規化です。

このセクションでは、最も一般的に使用される正規化方法の 1 つ (重み減衰または L2 正規化と呼ばれることもあります) について説明します。L2 正規化の考え方は、コスト関数に追加の項を追加することです。この項は正規化項と呼ばれます。以下は正規化されたクロス エントロピーです。

最初の項は、通常のクロスエントロピー表現です。 2 番目に追加されるのは、すべての重みの二乗の合計です。次に、係数 λ/2n が量的調整に使用されます。ここで、λ > 0 は正規化パラメーターと呼ばれ、n はトレーニング セットのサイズです。λ 選択戦略については後で説明します。

直感的に言えば、正規化の効果は、他の条件が同じであれば、ネットワークがより小さな重みを学習する傾向を持つようにすることです。大きな重みは、コスト関数の最初の項を十分に改善する場合にのみ許可されます。言い換えると、正規化は、小さな重みを見つけることと元のコスト関数を最小化することの間の妥協点と考えることができます。これら 2 つの部分の相対的な重要性は、λ の値によって制御されます。λ が小さいほど、元のコスト関数を最小化する傾向が強くなり、逆もまた同様です。

さて、なぜこのトレードオフによってオーバーフィッティングが軽減されるのかは完全には明らかではありません。しかし、パフォーマンスはそれが軽減されることを示唆しています。

この例を構築するには、まず、確率的勾配降下アルゴリズムを正規化ニューラル ネットワークに適用する方法を理解する必要があります。

これは通常の勾配降下法の学習ルールとまったく同じですが、重み w が 1−ηλ/n の係数で再スケールされる点が異なります。この調整は重みを小さくするため、重み減衰と呼ばれることもあります。一見すると、重みは 0 に向かって減少し続けるように見えますが、実際にはそうではありません。他の項が元のコスト関数の減少を引き起こす場合、重みが増加する可能性があるからです。

正規化によってネットワークにもたらされるパフォーマンスの向上を見てみましょう。ここでも、30 個の隠しニューロン、ミニバッチ サイズ 10、学習率 0.5、クロス エントロピーを持つニューラル ネットワークを使用します。ただし、今回は正規化パラメーター λ = 0.1 を使用します。コードでは、変数名 lmbda を使用していることに注意してください。

トレーニング セットのコスト関数は、正規化なしの場合と同じパターンに従って減少し続けます。

しかし今回は、テスト セットの精度は 400 回の反復を通じて向上し続けています。

明らかに、正規化を使用すると、過剰適合の問題を解決できます。精度は非常に高く、最高は以前の 82.27% と比較して 87.1% に達しました。したがって、400 回の反復後にトレーニングを継続すると、より良い結果が得られることはほぼ確実です。実際の検証により、正規化によりネットワークの一般化能力が向上し、過剰適合の影響が大幅に軽減されるようです。

正規化によってオーバーフィッティングが実際に軽減されることはわかりましたが、これは興味深いことですが、なぜそうなるのかは明らかではありません。小さい重みが望ましいという一般的な議論は、重みが小さいと複雑性が低くなり、データの説明が単純かつ強力になるというものです。これは簡潔でわかりやすいですが、混乱を招く可能性のあるいくつかの要因が隠れています。

ほとんどのニューラル ネットワークの重みが非常に小さいと仮定すると、これは正規化されたネットワークで発生する可能性が最も高くなります。重みが小さいということは、入力をランダムに変更してもネットワークの動作があまり変化しないことを意味します。これにより、正規化されたネットワークがローカル ノイズの影響を学習することがより困難になります。これは、単一の証拠がネットワークの出力に過度に影響するのを防ぐ方法と考えてください。対照的に、正規化されたネットワークは、トレーニング セット全体で頻繁に出現する証拠に応答することを学習します。対照的に、重みが大きいネットワークでは、入力の小さな変化に応じて動作が大きく変化する可能性があります。したがって、正規化されていないネットワークは、大きな重みを使用して、トレーニング データ内のノイズに関する多くの情報を含む複雑なモデルを学習できます。つまり、正規化ネットワークは、トレーニング データ内の一般的なパターンに基づいて比較的単純なモデルを構築するという制約があり、トレーニング データ内のノイズの特性には耐性があります。これにより、ネットワークは実際に観測した現象を学習し、学習した内容に基づいてより適切に一般化できるようになるというのが私たちの考えです。

したがって、より単純な説明に傾くという考えは、実際には私たちを不安にさせる可能性があります。人々は時々この考え方を「オッカムの剃刀」と呼び、それをまるで何らかの科学的原理であるかのように熱心に応用します。しかし、これは一般的な科学的原理ではなく、より単純な説明がより責任ある説明よりも優れているという先験的な論理的理由もありません。

正規化されたニューラル ネットワークは、正規化されていないニューラル ネットワークよりも一般化が優れていることが多いというのは経験的な事実であることを常に念頭に置く必要があります。

6. 権利放棄

このセクションでは、過剰適合を防ぐためにかなり積極的なドロップアウトを使用する手法について学習します。

ドロップアウトはかなり過激な手法です。正規化とは異なり、ドロップアウトはコスト関数の変更に依存しません。その代わりに、ドロップアウトではネットワーク自体を変更します。

ネットワークをトレーニングしようとするとします。

特に、トレーニング データ x とそれに対応するターゲット出力 y があると仮定すると、通常はネットワークを通じて x を順方向に伝播し、次に逆方向に伝播して勾配への寄与を決定します。ドロップアウト手法を使用すると、このプロセスが変わります。まず、入力層と出力層のニューロンを変更せずに、ネットワーク内の隠しニューロンの半分をランダムに(一時的に)削除します。この後、次の行のようなネットワークが完成します。放棄されたニューロン、つまり一時的に削除されたニューロンは、図では破線の円で表されていることに注意してください。

変更されたネットワークを介して入力Xを転送し、この変更されたネットワークを介して結果をバックプロパゲートします。次に、プロセスが繰り返され、最初に落下したニューロンをリセットし、次に非表示ニューロンの新しいランダムサブセットを選択して除去し、別のミニバッチの勾配を推定してから、重みとバイアスを更新します。

繰り返しの繰り返しを通じて、ネットワークは一連の重みとバイアスを学習します。もちろん、これらの重みとバイアスは、実際にネットワーク全体を実行すると、隠されたニューロンを補償するために無効になっていることを意味します。

なぜこのようなアプローチが標準化されることを期待するのでしょうか?特に、もちろん同じトレーニングデータを使用して、いくつかの異なるニューラルネットワークをトレーニングすることを想像してください。これが発生した場合、平均化または投票方法を使用して、どの出力を受け入れるかを決定できます。たとえば、5つのネットワークをトレーニングし、そのうち3つが数字を「3」として分類した場合、「3」である可能性が高く、他の2つの間ミスを犯した可能性があります。この種の平均化は、多くの場合、さまざまなネットワークが異なる方法で過剰に適合する可能性があり、平均化がその過剰適合を排除するのに役立つ可能性があるため、過剰適合を軽減するための強力な(高価ですが)方法です。

では、これはどのようにして、ヒューリスティブに脱落するのですか?したがって、廃棄のプロセスは、多数の異なるネットワークの効果の平均に似ているため、廃棄されたネットワークの効果は過剰フィッティングを減らします。

ドロップアウト技術の真の尺度は、ニューラルネットワークのパフォーマンスを改善することに非常に成功しており、多くの場合、過剰適合が特定の問題である大規模なディープネットワークをトレーニングするときに特に役立つことです。

7.トレーニングデータを人為的に拡張します

1,000のトレーニング画像を使用したとき、Mnist分類の精度は80%中期の精度に低下したことがわかりました。トレーニングデータが少ないため、ネットワークが人間の手書きの数字の変動が少なくなることを意味するため、これは驚くことではありません。さまざまなトレーニングデータセットを使用して、30の非表示ニューロンでネットワークをトレーニングし、パフォーマンスの変化を確認しましょう。 10のデータサイズの小さなバッチ、η= 0.5の学習レート、λ= 5.0の正規化パラメーター、クロスエントロピーコスト関数、トレーニングデータセット全体で30の反復期間をトレーニングし、トレーニングデータの減少に合わせて反復期間の数が比例して増加します。

より多くのトレーニングデータを使用すると、分類の精度が大幅に向上します。この傾向によれば、より多くのデータとともに改善は増加し続けます。

より多くのトレーニングサンプルを取得することは、実際には良い考えです。残念ながら、この方法は高価であり、実際には達成するのが難しいことがよくあります。

それを回転させ、たとえば15度:

これはまだ同じ数に設定されますが、これはMNISTトレーニングデータの画像とは異なります。そのため、トレーニングデータにサンプルを追加することで、数字を分類する方法を知ることができます。

このアイデアは非常に強力であり、適用されています。著者がこのアイデアをMNISTで変えるこの方法を使用した論文のいくつかの結果を見てみましょう。彼らが考慮するネットワーク構造の1つは、実際に私たちがすでに使用しているものと似ています - 800の非表示要素を備えたFeedforward Neural Network、クロスエントロピーコスト関数を使用しています。標準的なMNISTトレーニングデータは、98.4%の分類精度を発揮し、拡張データを拡張しました。 99.3%。

8。重みの初期化

ニューラルネットワークを作成した後、以前の方法を初期化する必要があります。この方法は非常にうまく機能しますが、非常に特別なものであるため、初期のウェイトとバイアスを設定するためのより良い方法を見つけることができるかどうかを確認する価値があります。

結果は、正規化されたガウス分布を使用するよりも優れていることを示しています。

簡単にするために、入力ニューロンの半分の値が1、残りの半分は0であるトレーニング入力Xを使用しているとしますが、次の引数がより一般的ですが、この特定のケースからキーポイントを取得できます。隠されたニューロン入力の加重合計z = ∑j w j x j + bを考えてみましょう。対応する入力x jが0であるため、500個のアイテムが排除されました。したがって、Zは、500重量項と追加の1バイアス項を含む合計501の正規化ガウスランダム変数の合計であるため、Z自体は平均0の標準偏差が√501≈22.4のガウス分布です。 Zは実際には非常に広いガウス分布を持っていますが、非常に鋭い形状ではありません。

特に、この写真から、| z |、つまりz≫1またはz −1が大きくなることがわかります。その場合、隠されたニューロンσ(z)の出力は1または0に近くなります。これは、隠されたニューロンが飽和することを意味します。したがって、そのような状況が発生した場合、体重をわずかに調整することは、隠れたニューロンの活性化値に非常に弱い変化をもたらすだけです。この弱い変化は、ネットワーク内の残りのニューロンにも影響し、対応するコスト関数に変化をもたらします。その結果、勾配降下アルゴリズムを実行すると、これらの重みが非常にゆっくりと学習します。

n入力重みのニューロンがあるとします。平均0と標準偏差1/√nのガウスランダム分布を使用して、これらの重みを初期化します。つまり、ガウス分布を下向きに絞り、ニューロンが飽和状態になる可能性が低くなります。これらの設定では、加重合計Z = ∑JW JX J+ Bは、平均0のガウス分布ですが、鋭いピークがあります。値が0と500の入力を持つ500の入力が1のと仮定します。次に、Zが平均0のガウス分布であり、√3/2 = 1.22の標準偏差であることを証明するのは簡単です。

このようなニューロンは飽和状態になる可能性が低いため、学習速度を低下させる可能性は低いです。学習率はη= 0.5から0.1に低下します。これにより、結果が画像でより明白になるためです。

どちらの場合も、96%の精度でオーバーラップしました。最終的な分類精度はほぼ同じです。ただし、新しい初期化テクノロジーは、最初の初期化方法の分類精度が87%未満になりました。事実のように思われるのは、重量の初期化への新しいアプローチがトレーニングを新しいレベルに引き上げ、より迅速に良い結果を得ることができるということです。

9。広範な戦略

これまで、学習率η、正規化されたパラメーターλなどのハイパーパラメーターを選択する方法は説明していません。たとえば、Mnistの問題を解決したいと考えています。最初にどのようなハイパーパラメーターを選択するかはわかりません。前の章で最初の実験で選択されたパラメーターは使用する方が良いと仮定しますが、学習率η= 10.0および正規化パラメーターλ= 1000.0を使用する場合、次のことは次の1つです。

分類の精度は、ランダムなノイズジェネレーターのようなものではありません。実際の問題は、他のパラメータを調整することはできません異なる重量の初期化方法?ハイパーパラメーターの選択で方向性を失うのは簡単です。ネットワークが大きい場合、または多くのトレーニングデータを使用している場合、この状況は残念です。これは、1つのトレーニングに数時間または数日または数週間かかる場合があり、最終的には何も得られないからです。これが常に発生した場合、それはあなたの自信に当たります。たぶん、あなたはあなたが直面している問題に適しているかどうかを疑うでしょうか?

MNIST分類問題に初めて遭遇したとします。最初は非常に情熱的ですが、最初のニューラルネットワークが完全に失敗した場合、この時点で少しイライラし、0と1を除いてトレーニングと検証セットの画像を捨ててから、0と1を区別するためにネットワークをトレーニングしようとします。これにより、より速い実験が確保され、優れたネットワークを構築する方法に関するより速い洞察が得られます。

より意味のある学習のためにネットワークを簡素化することにより、[784,10]ネットワークがランダムよりも優れた分類である可能性が高いと、このネットワークの実験を開始することにより、実験をスピードアップします。

トレーニングデータを上位1,000 MNISTトレーニング画像に削減するなど、モニタリングの頻度を増やすことにより、トライアルで別の加速を取得できます。試してみて、結果を見てみましょう。

上記の例では、以前と同じように、λ= 1000.0を設定します。しかし、これによりトレーニングサンプルの数が変更されるため、重量低下の同期性を確保するためにλを調整する必要があります。これは、λ= 20.0を変更することを意味します。

ああ、今では信号がありますが、それは本当に悪い信号です。これに基づいて、ハイパーパラメータを変更して、学習率を増やす必要があると推測できます(これが悪いと思われるかもしれません。

これは良くありません。前の推測が間違っていると言ってください。

これは少し良いです。そのため、各ハイパーパラメーターを1つずつ調整し続けることができます。パフォーマンスを向上させるη値を見つけたら、良い値を見つけることができます。次に、10の非表示の要素を持つネットワークであると仮定して、より複雑なネットワークアーキテクチャを試します。次に、ηとλを調整し続けます。次に、20の非表示の要素に調整します。次に、他のハイパーパラメーターを調整してから調整します。これは、パフォーマンスを評価するために各ステップで検証データセットを使用し、これらのメトリックを使用して、これを行うと、通常、ハイパーパラメーターの変化の影響を発見するのに時間がかかります。

これらはすべて、幅広い戦略として有望に見えます。

10。学習率

異なる学習率(η= 0.025、η= 0.25、η= 2.5)の3つのミストネットワークを実行し、30ラウンドを実行し、ミニバッチサイズは10、そしてλ= 50,000のトレーニング画像を使用します。

η= 0.025を使用して、コスト関数は最後のラウンドにスムーズに低下し、η= 0.25を使用して、コストが低下し始め、その後、わずかな振動とランダムジッターが続きます。

ただし、ηが大きすぎると、ステップも増加します。これにより、アルゴリズムが最小値に近づくと底部を横切る可能性があります。これは、η= 2.5の場合に発生する可能性が非常に高いです。 η= 0.25を選択すると、最初のステップが底部近くになりますが、底に到達すると過去を簡単に越え、η= 0.025を選択すると、最初の30ラウンドのトレーニング中にこの状況に影響を与えなくなります。もちろん、小さすぎる学習率も別の問題をもたらします - より良い戦略は、最初にη= 0.25を使用することです。

したがって、このアイデアを使用すると、次のようにηを設定できます。 ⾸先,我们选择在训练数据上的代价⽴即开始下降⽽非震荡或者增加时作为η 的阈值的估计,这个估计并不需要太过精确,你可以估计这个值的量级,⽐如说从η = 0.01 开始,如果代价在训练的前⾯若⼲回合开始下降,你就可以逐步地尝试η = 0.1,1.0,...,直到你找到⼀个η 的值使得在开始若⼲回合代价就开始震荡或者增加,相反,如果代价在η = 0.01 时就开始震荡或者增加,那就尝试η = 0.001,0.0001,... 直到你找到代价在开始回合就下降的设定,按照这样的⽅法,我们可以掌握学习速率的阈值的量级的估计,你可以选择性地优化估计,选择那些最⼤的η,⽐⽅说η = 0.5 或者η = 0.2。

11。小さなバッチデータサイズ

小さなバッチデータのサイズをどのように設定する必要がありますか?最初にオンライン学習が実行されていると仮定しましょう。つまり、サイズ1の小さなバッチデータを使用します。

100個の小さなバッチデータを使用するための学習ルールは次のとおりです。

これは、小さなバッチデータですべてのトレーニングサンプルを合計することであり、オンライン学習は次のとおりです。

たとえそれがわずか50倍であっても、オンライン学習を頻繁に更新しているため、結果は直接的なオンライン学習よりも優れています。

したがって、最適なバッチデータサイズも小さすぎます。したがって、優れた小さなバッチデータサイズを見つけるために、他のパラメーターの選択として許容できる値(最適である必要はありません)を使用することができます。検証精度の値のグラフを描画して、時間の経過とともに変化し(ラウンド非)、どの小さなバッチデータサイズが最速のパフォーマンス改善であるかを選択します。データサイズの小さなバッチを取得した後、他のハイパーパラメーターを最適化できます。

上記のエクスペリエンスに従うことで、ネットワークは絶対に最適な結果をもたらすことはできませんが、特に改善の基礎を与える可能性があります。実際には、ハイパーパラメータを使用して、効果が良好であることがわかります。要するに、ヒューリスティックのルールは実際には経験ではなく、ゴールデンルールではありません。機能しない信号に注意を払い、特により多くの試行を試してみてください。これは、神経ネットワークの動作、特に検証セットの精度のより細心の監視を意味します。

ハイパーパラメーターを設定するという課題により、ニューラルネットワークは、他の機械学習アルゴリズムと比較してパラメーターを選択するために多くの作業が必要であると不満を述べました。また、多くの異なるバージョンを聞いたことがあります。「完全なパラメーターを備えたニューラルネットワークは、この問題で最高のパフォーマンスを得ることができます。ただし、最適なパフォーマンスを達成することが最も重要な目標である場合、機械学習が常に単純である場合、より複雑で洗練された方法を試す必要がありますが、機械学習がそれほど単純であると言う理由はありません。

実際には少しの露出ですが、多くの本のフォーミュラやコードの山と比較して、この執筆はあなたがこれを驚かせたことを知らせるために多くのインスピレーションを与えます。

<<:  GitHub で最も人気のあるオープンソース機械学習プロジェクト 28 件: TensorFlow がトップ

>>:  プラットフォームのイノベーションを加速し、「クラウド、ビッグデータ、IoT、インテリジェンス」の新たな章を切り開く

ブログ    
ブログ    

推薦する

Python が機械学習に最適な理由は何ですか?

[[395543]] Python AI プロジェクトは、あらゆる形態や規模の企業の間で非常に人気...

WeChatグループに広告を投稿する人が常にいるのでしょうか? Pythonを使って自動ロボットを作成し、彼を排除する

[[341536]] WeChatグループ乾癬とは、WeChatグループ内の他のユーザーに恥ずかしげ...

130 億個のパラメータを持つモデルをトレーニングするには GPU がいくつ必要ですか?マイクロソフト: 1つで十分

今日のモデルには数千億、あるいは数兆ものパラメータがあります。一般の人がモデルをトレーニングできない...

360、認知汎用大型モデル「360 Brain 4.0」をリリース、360ファミリーバケットに完全統合

「デジタルヒューマン『周紅一』を我が社のスポークスマンにしよう。彼が正しいことを言ったら、それは私の...

Baidu PaddlePaddleがソフトウェアグリーンアライアンス開発者会議に登場。最新の2つの成果は産業実装に直接つながるものだった。

11月19日、アリババ、百度、ファーウェイ、テンセント、網易など国内有名企業が企画・主催する201...

機械学習を活用して産業オペレーションにおける運用リスクを管理する

センサーデータは、産業オペレーションにおける運用の安全性と効率性を確保する上で重要な役割を果たします...

OpenAI が GPT-3.5 Turbo の値下げを発表、GPT-4 Turbo の「怠惰」を解消

米国時間1月26日木曜日、OpenAIは一連のメジャーアップデートを発表した。これらのアップデートは...

2021 年のサイバーセキュリティにおける人工知能のトレンドは何ですか?

研究によると、人工知能技術はサイバーセキュリティの脅威やデータ侵害を防ぐ上で非常に重要です。人工知能...

新しい脳のようなコンピューティングデバイスは人間の学習をシミュレートできる:この論文はNature Communications誌に掲載された。

「シナプストランジスタ」は、脳の可塑性を模倣して、データの処理と保存を同時に行うことができます。 ...

Java仮想マシンオブジェクトの生存判定とガベージコレクションアルゴリズム

[[323332]]この記事では主に、オブジェクトが生きているかどうかを判断する方法を説明し、Jav...

...

AIファースト戦略はどこから始まるのでしょうか?

[[393200]] [51CTO.com クイック翻訳]人工知能は企業に競争上の優位性をもたらし...

シリコンバレーのエンジニアの間で大人気だったこの技術共有セッションで、ディディはどんなことを話したのでしょうか?

11月19日、滴滴出行は米国の新研究オフィスで地元の科学研究者向けの技術サロンを開催した。 Did...

...

マインドコントロールが現実に:話したり手を動かさずに、ただ横たわっているだけでゲームをプレイできる

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...