機械学習コードを単体テストするにはどうすればいいですか?

機械学習コードを単体テストするにはどうすればいいですか?

現在、ニューラル ネットワーク コードの単体テストに関する特に包括的なオンライン チュートリアルはありません。 OpenAI のようなサイトでも、各行をじっと見つめて何が間違っているのかを考えることによってのみ、バグを発見することができます。明らかに、ほとんどの人はそんな時間はなく、それをしたくないでしょう。したがって、このチュートリアルが堅牢なテスト システムの開始に役立つことを願っています。

まず、簡単な例を見て、次のコードのバグを見つけてみましょう。

見ましたか?実際のネットワークのスタッキングは行われません。このコードを書いたとき、slim.conv2d(…) という行をコピーして貼り付け、カーネル サイズを変更しましたが、実際の入力を変更するのを忘れていました。

これは実は筆者が一週間前に遭遇した状況です。恥ずかしいですが、大切な教訓でもあります!これらのバグは、次の理由により見つけるのが困難です。

  • このコードはクラッシュしたり、例外をスローしたり、速度が低下したりすることはありません。
  • ネットワークは引き続きトレーニング可能であり、損失は減少します。
  • 何時間も実行した後、値は非常に悪い結果に後退し、人々は頭を悩ませ、それを修正する方法を考えています。

最終的な検証エラーのみを手がかりとして、問題を見つけるにはネットワーク アーキテクチャ全体を確認する必要があります。明らかに、これに対処するにはもっと良い方法が必要です。

何日もトレーニングセッションを実行した後に発見するのではなく、事前にそれを防ぐにはどうすればよいでしょうか?ここで、レイヤーの値が関数の外側のどのテンソルにも到達しないことが明らかです。損失とオプティマイザーの場合、これらのテンソルが最適化されたことがなければ、デフォルト値が保持されます。

したがって、トレーニング ステップの前後で値が変化したかどうかを比較するだけで、この状況を検出できます。

おお。 15 行未満のコードで、少なくとも作成されたすべての変数がトレーニングされることを保証できます。

このテストはシンプルですが非常に役立ちます。問題が解決したので、バッチ正規化を追加してみましょう。あなたの目でその虫を見つけられるかどうか確かめてください。

見つかりましたか?このバグは非常に巧妙です。 tensorflow では、batch_norm の is_training のデフォルト値は False なので、トレーニング中にこのコード行を追加すると、入力が標準化されなくなります。幸いなことに、先ほど追加したユニット テストでこの問題はすぐに検出されます。 (3日前にこの問題に気付くのに役立ちました。)

別の例を見てみましょう。私はこれをRedditの投稿から読みました。元の投稿についてはあまり深くは触れませんが、投稿者は 0 から 1 の範囲で何かを出力する分類器を作成したいと考えていたとだけ言っておきます。何が問題なのかわかるかどうか確認してください。

問題を見つけましたか?この問題は見つけるのが難しく、結果を理解するのも非常に困難です。簡単に言えば、予測には出力値が 1 つしかないため、ソフトマックス クロス エントロピー関数を適用した後、損失は常に 0 になります。

この問題をテストする最も簡単な方法は、損失が決して 0 にならないようにすることです。

最初に実装したテストでもこのエラーを検出できますが、逆方向のチェックが必要です。つまり、トレーニングが必要な変数のみをトレーニングするようにしてください。敵対的生成ネットワーク (GAN) を例にとると、最適化プロセス中にどの変数をトレーニングする必要があるかを誤って設定し忘れてしまうというバグがよく発生します。このようなコードはどこにでも見つかります。

このコードの最大の問題は、オプティマイザーがデフォルトですべての変数を最適化することです。 GAN のような高度なアーキテクチャでは、これはトレーニング時間が無期限であることを意味します。ただし、簡単なテストでこのエラーを検出できます。

同様のタイプのテストを識別子に対して記述できます。同じテストを適用して、他の多数の学習アルゴリズムを強化することもできます。多くのアクター・クリティック・モデルには、異なる損失で最適化する必要があるさまざまなネットワークがあります。

以下は著者が推奨するテスト モードです。

  • 入力の確実性を確保します。再現できなくなった、奇妙な失敗したテストを発見するのはひどいことです。特にランダム入力が必要なシナリオでは、必ず同じ乱数シードを使用してください。こうすることで、障害が発生した場合でも、同じ入力で再度再現することができます。
  • テストを簡潔にしてください。回帰トレーニングのチェックと検証セットのチェックに同じユニット テストを使用しないでください。こんなことをするのはただ時間の無駄です。
  • テストするたびに必ずグラフをリセットしてください。

要約すると、これらのブラックボックス アルゴリズムをテストする方法はまだたくさんあります。 1 時間かけて簡単なテストを書くと、何日もかけて再実行する必要がなくなり、研究能力が大幅に向上します。天才的なアイデアは、バグのある実装のせいで実現できないということがあってはなりません。

この記事に記載されているテストはまだ完了には程遠いですが、良いスタートです。他の提案や特定の種類のテストを見つけた場合は、Twitter でメッセージを送ってください。この投稿の続編を書きたいと思っています。

この記事のすべての意見は著者の個人的な経験のみを表したものであり、Google によってサポートまたは後援されているものではありません。

元の英語テキストを表示

https://medium.com/@keeper6928/how-to-unit-test-machine-learning-code-57cf6fd81765

<<:  IT プロフェッショナル向けの 8 つの新しい AI 職種

>>:  Python の基礎: FP 成長アルゴリズムの構築

ブログ    
ブログ    
ブログ    

推薦する

...

NLP に革命を起こす 3 つの AI スタートアップ

ディープラーニングは自然言語処理において驚くべき進歩を遂げました。 Explosion、Huggin...

...

DeepFMアルゴリズムを使用して推奨システムを設計する方法

[[239303]] [51CTO.com クイック翻訳] 10年以上の開発を経て、推奨システムはイ...

こんなの今まで見たことないよ! AIの巨人たちが「人類絶滅説」に立ち向かい、ヒントン、アンドリュー・ン、ルカンが排除され、マスクは強く見守った

こんなことは今まで見たことがありません。AIの巨人たちが袖をまくり上げて、オンラインで「戦い」始めま...

PyTorchBigGraph を使用して超大規模グラフ モデルをトレーニングする方法は?

Facebook は、数十億のノードと数兆のエッジを持つグラフ モデルを効率的にトレーニングできる...

...

...

2018 年に「破壊的な」変化をもたらす 12 のテクノロジー

[[223288]]人工知能から拡張現実まで、今年、将来を見据えた企業のビジネスを牽引する破壊的なテ...

AI と新しい小売業が出会ったとき、両者は力を合わせて無敵になれるのでしょうか?

[51CTO.com オリジナル記事] 2018 年に最も人気のある 2 つの単語はどれでしょうか...

人工知能も汚染される可能性があるので、顔認証による支払いは依然として安全でしょうか?

下の図は、人間にとって非常に区別しやすい 3 種類の動物、鳥、犬、馬を示しています。しかし、人工知能...

職場は「理想の街」になり得るか?企業と従業員の両方にAIを活用した自動化が必要

従業員が複雑なタスクに圧倒され、毎日同じ作業を繰り返すうちに徐々に疲れ果てていく一方で、企業も業務プ...

...

人工知能が人間に取って代わることは決してない

午後は、かわいい子供たちを連れて映画「頭の大きい息子と頭の小さいお父さん 完璧なお父さん」を見に行き...

Microsoft は、全二重音声インタラクションにおいて画期的な進歩を達成しました。ロボットは本当に「人間」になる

マイクロソフト(アジア)インターネットエンジニアリングアカデミーは、新世代の音声インタラクション技術...