過去 1 年間、私は仕事時間のほとんどをディープラーニングの研究とインターンシップに費やしてきました。その年、私は多くの大きなミスを犯しましたが、それによって ML だけでなく、これらのシステムを正しく堅牢に設計する方法も理解することができました。 Google Brain で私が学んだ主な原則の 1 つは、ユニット テストによってアルゴリズムが成功するか失敗するかが決まり、デバッグとトレーニングに要する数週間の時間を節約できるということです。
しかし、ニューラル ネットワーク コードの単体テストの書き方に関するしっかりしたオンライン チュートリアルは存在しないようです。 OpenAI のような場所でも、コードのすべての行をじっくりと見て、なぜバグが発生するのかを考えるだけで、バグを見つけることができます。明らかに、ほとんどの人にはそんな時間はありません。ですから、このチュートリアルが、システムの健全なテストを始めるのに役立つことを願っています。 簡単な例から始めましょう。このコード内のエラーを見つけてみてください。
見ましたか? ネットワークは実際には機能していませんでした。このコードを書くとき、slim.conv2d(...) 行をコピーして貼り付け、実際の入力を変更せずにカーネル サイズのみを変更しました。 恥ずかしながら、これは 1 週間前に私に起こったことです... しかし、これは重要な教訓です。 これらのバグは、いくつかの理由から見つけるのが困難です。
唯一のフィードバックが最終的な検証エラーである場合、検索する必要があるのはネットワーク アーキテクチャ全体だけです。言うまでもなく、より良いシステムが必要です。 では、複数日にわたるトレーニングを実行する前に、これを実際にどのように活用すればよいのでしょうか。これについて最も簡単に気付くのは、レイヤーの値が関数の外部にある他のテンソルに実際には到達しないということです。何らかのタイプの損失とオプティマイザーがあると仮定すると、これらのテンソルは最適化されることはなく、常にデフォルト値を持ちます。 簡単なトレーニング手順と前後の比較で検出できます。
15 行未満のコードで、少なくとも作成したすべての変数がトレーニングされることが確認できました。 このテストは非常に簡単で非常に便利です。以前の問題を修正したと仮定すると、バッチ正規化の追加を開始できます。バグを見つけられるかどうか確認してください。
見ましたか?これは非常に微妙です。 tensorflow batch_norm では is_training のデフォルト値が False になっているため、このコード行を追加してもトレーニング中に入力が正規化されないことがわかります。ありがたいことに、最後に書いた単体テストでこの問題はすぐに検出されます。(3 日前に私に起こったことなので、私は知っています。) 別の例を見てみましょう。これは先日読んだ記事から来ています (https://www.reddit.com/r/MachineLearning/comments/6qyvvg/p_tensorflow_response_is_making_no_sense/)。あまり詳しく説明しませんが、基本的にこの人は (0,1) の範囲の値を出力する分類器を作成したいと考えています。
この間違いに気づきましたか? これを事前に見つけるのは非常に難しく、非常に混乱した結果につながる可能性があります。基本的に、ここで起こっていることは、予測には出力が 1 つだけあり、それにソフトマックス クロス エントロピーを適用すると、その損失は常に 0 になるということです。 これをテストする簡単な方法は、損失が 0 でないことを確認することです。
もう 1 つの優れたテストは、最初のテストと似ていますが、逆の順序です。トレーニングしたい変数だけがトレーニングされるようにすることができます。 GAN を例に挙げてみましょう。よくある間違いは、最適化を行う際にトレーニングする変数を誤って設定し忘れてしまうことです。このようなコードは頻繁に発生します。
ここでの最大の問題は、オプティマイザーがすべての変数を最適化するというデフォルト設定を持っていることです。 GAN のような高度なアーキテクチャでは、これはすべてのトレーニング時間の死刑宣告に相当します。ただし、次のようなテストを記述することで、これらのエラーを簡単に検出できます。
非常によく似たテストを識別子に対しても記述できます。同じテストを多くの強化学習アルゴリズムに適用できます。多くのアクター・クリティック・モデルには、さまざまな損失に基づいて最適化する必要がある個別のネットワークがあります。 テストすることをお勧めするパターンをいくつか紹介します。
まとめると、これらのブラックボックス アルゴリズムをテストする方法はまだたくさんあります。1 時間かけてテストを作成すると、トレーニング済みのモデルを再実行する時間が節約され、研究の効率が大幅に向上します。実装に欠陥があるために完璧さというアイデアを諦めなければならないのは残念ではないでしょうか? このリストは明らかに包括的なものではありませんが、確かなスタートとなります。 |
信頼関係を築く上で、私たちの表情が果たす役割は非常に大きいにもかかわらず、ほとんどのロボットの顔はプ...
「パンダはトークができる、パンダはジョークを言うことができる、パンダは書道を書ける、そしてパンダはチ...
さまざまなライブラリとフレームワークの助けを借りて、たった 1 行のコードで機械学習アルゴリズムを実...
MIT と Nvidia の研究者は、高性能コンピューティング タスクで使用されるデータ構造であるス...
翻訳者 | 劉涛レビュー | Chonglou AIがなぜ機能するのか誰も知らないですよね?はい、そ...
ビッグモデルが普及して以来、ビッグモデルを圧縮したいという人々の欲求は減ることはありません。大規模モ...
[[398872]]最近では、多層パーセプトロン (MLP) が CV 分野の重要な研究テーマとなっ...
モノのインターネットは、私たちがテクノロジーや周囲の世界と関わる方法に革命をもたらしました。 データ...
AI テクノロジーを導入する IT リーダーは、ある程度の不安を感じるかもしれませんが、それには十分...
汎用人工知能へと進むには、人間の生活の現実世界を理解し、豊富なスキルを習得できる具現化された汎用イン...
人工知能 (AI) は高等教育に大きな進歩を遂げており、何らかの形で AI を導入した教育機関は、学...
[[374688]] 「半オーク」「半魚」… SF映画、漫画、おとぎ話では、それは驚くことではありま...