機械は学習できますが、ニューラル ネットワークはまだ実行できませんか?これらの提案をチェックしてください

機械は学習できますが、ニューラル ネットワークはまだ実行できませんか?これらの提案をチェックしてください

[[238335]]

ビッグデータダイジェスト制作

編纂者: Shijintian、Ni Ni、Hu Jia、Yun Zhou

多くの機械学習ラボでは、機械が何万時間もトレーニングされてきました。このプロセスでは、研究者は多くの回り道をして多くのバグを修正することがよくありますが、機械学習の研究プロセスでは、機械だけが経験と知識を獲得するわけではないことは確かです。私たち人間も豊富な経験を積んでいます。この記事では、最も実用的な研究提案をいくつか紹介します。

次に、この記事では、ディープ ニューラル ネットワーク (主に TensorFlow プラットフォームに基づく) のトレーニングに関するいくつかの経験を紹介します。これらのアドバイスの中には、あなたにとっては当たり前のことのように思えるものもあるかもしれませんが、他の人にとっては重要なものかもしれません。一部の提案は特定のタスクには適用できない場合がありますので、注意して使用してください。

一般的なアドバイス

ADAM オプティマイザーを使用します。バッチ勾配降下法などの従来のオプティマイザーと比較すると、Adam オプティマイザーのパフォーマンスは優れています。

TensorFlow の使用に関する提案: 重みを保存および復元するときは、Adam オプティマイザーを作成した後に Saver を作成することを忘れないでください。これは、Adam にも復元する必要がある状態 (学習率の単位重みとも呼ばれます) があるためです。

Relu は、最適な非線形マッピング (活性化関数) です。 Sublime が最高のテキスト エディターであるのと同じように、ReLU は高速でシンプルであり、トレーニング中に勾配が徐々に減少しないのが魔法です。シグモイドは教科書では活性化関数としてよく使われますが、DNN では勾配をうまく伝達できません。

出力層では活性化関数を使用しないでください。これは明らかなことですが、ネットワーク内のすべてのレイヤーで共有関数を使用する場合はよくある間違いです。出力層で活性化関数を使用しないようにしてください。

各レイヤーにバイアス値を追加します。これは機械学習の入門です。バイアスは基本的に、平面を最適な位置に変換します。 y=mx+b 関数では、b は線を最も適合する位置に移動できる偏差値です。

分散スケール初期化を使用します。 Tensorflow では、 tf.contrib.layers.variance_scaling_initializer() に似たメソッドを使用して初期化します。

私たちの経験では、この方法は、通常のガウス初期化、切り捨て正規初期化、および Xavier 初期化よりもうまく機能します。

一般に、分散スケーリング初期化では、各レイヤーの入力と出力の数に応じて初期ランダム重みの分散を調整できます (TensorFlow では入力数がデフォルトで使用されます)。これにより、切り捨てやバッチ正規化などの追加の方法を必要とせずに、信号がネットワークのより深いところまで通過できるようになります。

Xavier 初期化法はこれに似ていますが、Xavier 初期化は基本的にすべてのレイヤーで同じです。ネットワークのレイヤー間の値の範囲が大きく異なる場合 (畳み込みネットワークでは一般的)、各レイヤーに同じ分散を使用することは適切ではない可能性があります。

入力データは正規化されます。トレーニング中に、データセットの平均を減算し、標準偏差で割ります。これにより、各方向の重みの伸張が軽減され、ニューラル ネットワークがより速く、より適切に学習できるようになります。これは、入力データを平均値を中心に維持することで最も効果的に実現されます。また、トレーニング セットが実際のデータ環境をシミュレートできるように、各テスト入力が一貫して正規化されていることを確認する必要があります。

データを適切にスケーリングします。これは正規化プロセスに関連していますが、正規化の前に実行する必要があります。たとえば、実際のデータ x の範囲は [0, 140000000] で、tanh(x) または tanh(x/C) 分布に従う可能性があります。ここで、C は、入力データが tanh 関数の傾きに適合するように曲線を調整するために使用される定数です。特に、入力データの一方または両方の端が無制限の場合、ニューラル ネットワークは (0,1) の範囲でより適切に学習できます。

一般的に、学習率を下げる必要はありません。学習率の低下は SGD ではより一般的ですが、ADAM ではより自然に処理できます。微妙なパフォーマンスの違いを本当に確認したい場合、トレーニングの最後に学習率を一時的に下げると、エラーが突然少し減少し、その後再び安定することがあります。

畳み込み層に 64 個または 128 個のフィルターがある場合、これは少し冗長になる可能性があります。特にディープ ネットワークの場合、128 個のフィルターは多すぎます。すでに多数のフィルターがある場合は、さらに追加しても意味がない可能性があります。

プーリングは、変換の不変性を可能な限り最大限に維持することです。プーリングにより、ニューラル ネットワークは基本的に、画像の一部の全体的な特性を学習できるようになります。たとえば、最大プーリングでは、畳み込みネットワークで画像が変位、回転、拡大縮小などの変換を受けた後も、画像の特徴を変更せずに維持できます。

ニューラルネットワークのデバッグ

ニューラル ネットワークが学習できない場合、つまり、トレーニング中に損失または精度が収束しないか、期待どおりの結果が得られない場合です。以下の提案をお試しください:

  • オーバーフィット! ネットワークが収束しない場合は、まず 1 つのトレーニング ポイントをオーバーフィットします。精度は 100% または 99.99% になるか、エラーは 0 に近くなるはずです。ニューラル ネットワークが単一のデータ ポイントをオーバーフィットできない場合は、アーキテクチャに深刻だがおそらくは微妙な問題があります。 1 つのデータ ポイントにオーバーフィットできるが、より大きなデータセットでトレーニングするときに収束できない場合は、次の提案を試してください。
  • 学習率を下げます。ネットワークの学習速度は遅くなりますが、ステップ サイズが大きすぎるために以前は到達できなかった最小値まで到達できるようになります。 (最小値を見つけることは、溝の底に到達しようとしているが、ステップ サイズが大きすぎて溝を飛び越えてしまうようなものだと想像してください。)
  • 学習率を上げます。学習率が大きいほど、トレーニング時間が短縮され、フィードバック ループが削減されるため、ネットワーク モデルが実行可能かどうかを迅速に予測できるようになります。ただし、ネットワーク モデルはより速く収束できますが、結果が特に理想的ではなく、大きな変動が生じる可能性もあります。 (ADAM オプティマイザーの場合、多くの実験で学習率 0.001 がうまく機能することがわかりました。)
  • バッチ内のサンプル数を減らします。バッチ サイズを 1 にすると、よりきめ細かい重み更新フィードバックが得られ、TensorBoard (またはその他のデバッグ/視覚化ツール) を使用して表示できます。
  • バッチ正規化を削除します。バッチ サイズを 1 に減らしながらバッチ正規化を削除すると、勾配消失または勾配爆発の問題が発生します。数週間経っても収束に失敗したニューラル ネットワーク モデルがありました。バッチ正規化を削除して初めて、2 回目の反復後にすべての出力が NaN であることに気付きました。バッチ正規化は出血を止める絆創膏のように機能しますが、ネットワーク モデルにエラーがない場合にのみ機能します。
  • バッチ内のサンプル数を増やします。データセット全体を使用するなど、バッチを大きくすると、勾配更新の分散が減少し、各反復の結果がより正確になります。言い換えれば、重みの反復は正しい方向に進みます。ただし、この方法は物理メモリのサイズによって制限されます。通常、サイズ 1 のバッチを使用し、バッチ正規化を削除する前の 2 つの手法の方が、この手法よりも有用です。
  • マトリックスの変形をチェックします。行列の変形が大きくなると(画像の水平軸と垂直軸の変更など)、空間のローカル特性が破壊され、モデルの学習がより困難になります。これは、行列の変形も学習プロセスの一部であるためです。 (自然の特徴は断片化されます。実際、自然の特徴の空間的局所性は、畳み込みニューラル ネットワークが効果的である理由でもあります。) 複数のグラフィックス/チャネルの行列変形には特に注意してください。numpy.stack() を使用して適切な調整を行います。
  • 損失関数を確認します。複雑な損失関数を使用している場合は、まず L1 損失関数や L2 損失関数などの単純な損失関数を試してください。 L1 は外れ値に対する感度が低いため、ノイズの多いデータによる影響が少ないことがわかりました。
  • 視覚化を確認します。視覚化ツールキット (matplotlib、OpenCV など) が値の大きさを調整するか、範囲が制限されているかどうかを確認します。また、統一された配色の使用も検討してください。

ケース分析

上記の手順を理解しやすくするために、ここでは畳み込みニューラル ネットワークによって実行された回帰実験のいくつかの損失グラフ (TensorBoard 経由) を示します。

まず、このニューラル ネットワークはまったく収束しません。

数値が範囲外にならないようにクリッピングしてみます。

痛いですね、この滑らかでない線がいかに乱雑か見てください。学習率は高すぎますか? 学習率を下げて、1 つのサンプル ポイントのみでトレーニングしてみました。

学習率が変化していることがわかります(ステップ 300 から 3000 の間)。どうやら、学習率が急速に低下しすぎているようです。そこで、反復速度を遅くしたところ、うまくいきました。

2000 ステップから 5000 ステップの間で減衰があることがわかります。結果は良くなりましたが、損失がまだゼロになっていないため、十分ではありません。

次に、学習率の低下を停止し、値をより狭い範囲に絞り込み、tanh 関数を置き換えてみました。これにより損失は 1 に減少しますが、それでもオーバーフィッティングは達成できません。

このステップで、バッチ正規化を削除すると、ネットワーク出力は 1 回または 2 回の反復後にすぐに NaN になることがわかります。そのため、バッチ正規化を停止し、初期化を分散正規化に変更しました。これにより問題は解決され、1 つまたは 2 つの入力サンプルを使用してトレーニングすることでオーバーフィッティングを実現できます。グラフ下のY軸の値はクリップされていますが、初期誤差は5を超えており、誤差がほぼ4桁減少したことがわかります。

グラフの上半分は平滑化されていますが、テスト データにすぐに過剰適合し、トレーニング セット全体の損失が 0.01 を下回っていることがわかります。現時点では学習率はまだ低下していません。学習率を 1 桁下げてニューラル ネットワークのトレーニングを継続したところ、さらに良い結果が得られました。

これらははるかに良い結果です! しかし、トレーニングを 2 つの部分に分割するのではなく、学習率を幾何級数的に減少させるとどうなるでしょうか?

各反復で学習率を 0.9995 倍すると、結果はそれほど良くありません。

その理由はおそらく、学習率が急速に低下するためです。 0.999995 を使用すると若干改善されますが、結果は減衰なしとほぼ同じです。この一連の実験から、バッチ正規化は不適切な初期化によって引き起こされる爆発的な勾配を隠蔽し、学習率の減少は最後の段階での学習率の減少を除いて、ADAM オプティマイザーにとってあまり役に立たないという結論に達しました。バッチ正規化に加えて、範囲をクリッピングすると、実際の問題が隠されるだけです。また、tanh 活性化関数を使用して、高分散の入力データを変換しました。

これらの基本的なヒントがディープ ニューラル ネットワークの学習に役立つことを願っています。よくあることですが、単純な詳細が大きな影響を与えることがあります。

関連レポート:

ディープニューラルネットワークの構築

[この記事は51CTOコラムBig Data Digest、WeChatパブリックアカウント「Big Data Digest(id: BigDataDigest)」のオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  ディープラーニングと比較すると、この新しいアルゴリズムの方が優れているようですね?

>>:  ライトスピードコンピューティングが画期的な進歩を達成、AIトレーニングコストの問題が解決される可能性

ブログ    
ブログ    

推薦する

...

GAN はたった 1 枚の画像でトレーニングできます。 Adobe が画像生成方法を改善 | オープンソース

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

AIが建物の運営に及ぼす影響

昨年、ChatGPT とその他の AI 搭載サービス エンジンがリリースされて以来、このテクノロジー...

機械学習と予測分析の違いは何ですか?

[[279165]]今日、認知学習はかつてないほど普及しています。一般的に言えば、認知学習と認知コ...

自動化とロボット工学:どちらがあなたの会社に適していますか?

ロボット工学と自動化には違いがありますか? 自動化が自分に適しているかどうかわからない人はたくさんい...

...

国内メディアが大々的に報じた「世界初のAI地震監視システム」は的外れ

[[387555]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

...

人工知能をより人間らしくする 高齢者向けにAIをもっとデジタル化すべき

人工知能は新たなインフラの一つとして、人々の社会生活のあらゆる分野に統合され、あらゆるものがつながり...

人工知能は世界の終わりか、それとも深淵か?

あなたは深淵を見つめ、深淵もまたあなたを見つめ返します。 「第一法則: ロボットは人間を傷つけたり、...

...

企業はどのように人工知能を導入し、そこから価値を得ることができるのでしょうか?

人工知能は近い将来、私たちの日常生活を変えるでしょう。企業は来たるイノベーションの波から価値を獲得す...

...

...