ディープラーニング実験の十のパターンとアンチパターン
ディープラーニング実験の10のパターンとアンチパターン 美容とファッションの専門家の視点から
紹介
この記事では、深層学習エンジニアとしての10年の経験から収集したパターンとアンチパターンのリストを紹介します。深層学習エンジニアリングは実験に基づいています。最初の最小限の有効な製品を作るのは非常に速いことがよくあります。一方、深層学習プロジェクトのライフサイクルのほとんどは、コードと指標/スコアの反復的な改善に費やされます。多くの場合、高いスコアへの道は、幅広い実験で見つかった多くのわずかな改善の複合物から構成されます。私の実践では、5つの実験のうち1つ、あるいは10の実験のうち1つしかスコアを上げません。特にチームで作業する場合、実験のプロセスを効率化することが重要です。
まず、使用されている用語を明確にしてみましょう。以下の資料では、単一の指標を最大化することを考えています。これを「指標」と呼びます。ベースラインでは、考慮されていない変更を含まないコードと指標の状態を指します。回帰とは、指標の減少、つまり望ましくない結果を指します。対照的に、進行とは、指標の増加、つまり望ましい結果を意味します。
パターンとアンチパターン
#1 結果の信頼性
アンチパターン:
ベースラインと実験を一度実行し、比較に基づいて結論を出す。結果に大きな分散がある場合(例えば、高い学習率の選択や過学習の結果としてのトレーニングの収束の悪さによるものなど)、進行または回帰を観察しているかどうかを間違った結論を出す可能性があります。
パターン:
結果の分散を推定するために複数のトレーニングサイクルを実行します。複数の深層学習トレーニングサイクルを実行することは、リソースと時間がかかるかもしれませんが、結果の分散の理解と信頼性のある変化の進行には重要です。必要な場合は、二重または片側のStudentのT検定で測定値を分析します。
- 再生医療テキスト生成が臨床NLPタスクを革命化することができるのか? クリニカルナレッジ抽出とコンテキストに基づいたLLMプロンプトを組み込んだAIモデル「ClinGen」に会いましょう
- 「トランスフォーマーブロックは、効率を損なうことなく簡素化することはできるのか? このAIの研究論文は、設計の複雑さと性能のバランスを探求しますETHチューリッヒ大学の論文」
- 「加速、効率的なAIシステムの新しいクラスがスーパーコンピューティングの次の時代を示す」
#2 願望思考
アンチパターン:
ある変更が指標を改善することが保証されていると仮定し、マージを進めます。ソフトウェアとアルゴリズムの両方の変更は、明白または微妙な回帰を導入することがあります。
パターン:
任意の変更後にトレーニングを再実行して、回帰がないことを確認します。トレーニングのクラッシュなどの明白な回帰は、トレーニングの初期イテレーションでも簡単に見つけることができます。微妙な回帰はトレーニングサイクルの終了時にのみ見つけることができます。
#3 回帰のシャドウ
アンチパターン:
研究者によると、いくつかの変更がすべて指標を改善するとして、1つのバンドルで複数の変更を行います。 regression shadowingが起こる可能性があります。つまり、変更Aはわずかな回帰を与え、変更Bは重要な進行を提供します。これら2つを組み合わせると、指標の改善が示されるかもしれません。このように、微妙な回帰は大幅な改善によって担ぎ上げられることになります。ただし、指標を減少させる変更を取り下げる代わりに、改善をもたらす変更のみを望んでいます。
パターン:
変更を個別に計測します。心に浮かんだ2つの潜在的な改善策がある場合は、それぞれ個別に実行してください。
- 変更 A
- 変更 B
- 変更 A と B を同時に行う
これにより、回帰の影を回避できます。
#4 付帯条件あり
アンチパターン:
Gitの作業コピーからトレーニングを開始する。この場合、将来の実験を繰り返すことや、実験間の正確な差異を分析することはできません。
パターン:
一時的な変更を含め、すべての変更はコミットされている必要があります。コミットはタグ付けされている必要があります。タグ付けの代わりに、実験の成果物には実行されたコードのコミットハッシュを保存する必要があります。
#5 速いサイクル
アンチパターン:
常に重い(最終)バージョンのトレーニングを開始する。重いバージョンは遅く、実験結果を得るのに時間がかかり、微小な変化の研究から逸れる可能性があります。
パターン:
高速なトレーニングサイクルを維持する。高速バージョンは、評価中の変更の効果を反映するために、通常、2倍から10倍の速さで動作する必要があります。高速バージョンは、トレーニングの反復回数が少なく、より小さなニューラルネットワークを持つことがあります。高速バージョンは統合テストと、変更の有望さを迅速に評価するための方法として機能することがあります。
#6 ブランチレス
アンチパターン:
個別の機能に対してブランチを使用せず、すべての変更をメインブランチに保持する。
パターン:
各変更に対して個別のブランチを作成する。変更を別のブランチに保持することで、回帰を示すコードのマージを回避し、オプション、モード、およびif-elseブロックにコードが肥大化するのを防ぐことができます。時には、進展のない実験をサポートするための多くのコードを廃棄するという精神的な努力が必要になることもあります。
#7 コーディング習慣
アンチパターン:
コードの開発にソフトウェアエンジニアリングのプラクティスを使用しない。よくある議論として、“私たちはソフトウェアエンジニアリングチーム/プロジェクトではない”や“研究では事が違います”などというアドホックなコードを正当化する意見が聞かれますが、最高得点を目指す際に、平凡なソフトウェアのバグによりわずかなパーセントでも失うことは致命的です。
パターン:
アーキテクチャ的によく構造化されたコードを書き、コードの重複を排除し、すべての「マジックナンバー」を名前付きで表現し、ユニットテストと統合テストを行います。高速で展開が進む応用研究プロジェクトには、大規模なテストやコードカバレッジが手頃でないこともあります。しかし、コンパクトでアルゴリズムが密な関数(特徴エンコーダー・デコーダーなど)に対するユニットテストは、欠陥のある実験、間違った結論、さらには誤った研究者の直感の面で重要なメリットを提供します。
#8 非侵襲的
反パターン:
「侵襲的な」変更を行い、それらを統合する。侵襲的な変更とは、ターゲットのモードを改善するものの、他のモードの動作を変更する変更のことを指します。以下の例を考えてみましょう。コードは2つのニューラルネットワークバックボーン、バックボーンXとバックボーンYのトレーニングをサポートしています。それぞれのバックボーンで別々のモードとなります。バックボーンXの学習率を変更して、そのメトリックを改善したいとします。両方のモードの学習率を変更し、バックボーンXの実験を実行し、メトリックの改善を観察します。コードをそのまま統合することは反パターンです。なぜなら、実験が実行されていないバックボーンYの学習率も変更され、実行後には回帰が生じる可能性があるからです。
パターン:
あらゆる他の作業モードのコードの動作を変更しない非侵襲的な変更を行います。非侵襲的な変更のコーディングは手間がかかり時間がかかる場合があります。より迅速な実験をするためには、まず侵襲的な変更を行い、実験を実行し、有望な結果が出た場合のみ、非侵襲的な変更を行うことを検討することができます。特に、非侵襲的な変更が完了した後に実験を再実行する必要があります。このステップは、コードをメインブランチにマージする際のバグによる潜在的な回帰を回避するのに役立ちます。
#9 ベースラインを再実行する
反パターン:
過去のベースラインメトリックの数値を利用し、新しい実験結果と比較する。
パターン:
ベースライン(メインブランチから)を定期的に再実行します。週末に1回、または各実験と一緒に再実行するなどの方法が考えられます。ベースラインのコードは変更されるかもしれませんが、外部要因がベースラインを台無しにする可能性があります。そのような外部要因には、次のものがあります:
- 異なるマシン上での実験の実行
- ソフトウェアの更新:CUDAツールキット、condaパッケージ
- ベースラインと実験を実行したのは異なるチームメンバーであり、実験を実行するための文書化されていない方法が異なる場合があります。
#10 メトリックのバージョニング
反パターン
検証データ/手順/メトリックを変更し、新しい実験メトリックと過去のメトリック値を比較することは反パターンです。たとえば、検証データがトレーニングデータとともにクリーニングされた場合、データクリーニングは常に改善されると想定することができます。一般的にはそのような場合もありますが、メトリックが変更され、過去の結果とは比較できなくなっている可能性があります。
パターン
メトリックの計算方法を変更した後、ベースラインを再実行して新しいメトリックの値を把握します。
結論
上記の10の反パターンを避け、10のパターンに従うことで、ディープラーニングの実験を次のレベルに引き上げることができます。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 「SEINEをご紹介します:シーン間のスムーズでクリエイティブなトランジションがある高品質な拡張ビデオのためのショートトゥロングビデオ拡散モデル」
- 「ユーザーとの対話により、RAG使用例でのLLM応答を改善する」
- ジェンAIの活用:攻撃型AIに対するサイバー強靭性の構築
- クロード2 APIの使い方をはじめる
- 「OpenAI API Dev Dayアップグレードは驚くべきものです:DALL-E 3、GPT-4 Vision、およびGPT-4 Turboのアクションをご覧ください」
- このAI論文は、’リラックス:エンドツーエンドの動的機械学習ワークロードの最適化のためのコンパイラの抽象化’を紹介しています
- 画像処理におけるノイズとは何ですか? – 簡易解説