この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載しています。転載の際は出典元にご連絡ください。 学生の皆さん、今、皆さんの目の前には 33 個のニューラル ネットワーク トレーニングのヒントのリストがあります。 AI界の大物、アンドレイ・カルパシー氏(略してAK)が、人々が落とし穴に陥らないようにするための33のヒントと注意事項を丹念に列挙した長いブログ記事を公開した。2,300件を超える「いいね!」を獲得している。 AK 氏はスタンフォード大学で博士号取得を目指して勉強していたとき、フェイフェイ氏の研究室に所属していました。卒業後は OpenAI に移り、その後テスラの AI 部門の責任者となり、現在もその職に就いています。 彼のブログは年に一度更新されますが、すべての言葉と文章は長年の努力の結果であり、更新のたびに大きな影響を与えます。 私たちは生きている間に、このテキストを次のように翻訳します。 トレーニングモデルの処方箋 一般的に、Andrej Karpathy のテクニックは、焦らず (理由は記事の最後で説明します)、ニューラル ネットワークを単純なものから複雑なものへと徐々に改善していくというものです。 1. 急いでコードを書かない ニューラル ネットワークをトレーニングする前に、コードを忘れて、データセットの前処理から始めます。まず、データの分布を理解し、その中のパターンを見つけるために数時間を費やします。 Andrej はかつて、データを整理しているときに重複した例を発見し、また別のときには画像とラベルにエラーを発見しました。したがって、最初にデータを確認することで、多くの回り道を避けることができます。 ニューラル ネットワークは実質的にデータセットの圧縮バージョンであるため、ネットワークの (誤った) 予測を確認し、それがどこから来ているのかを理解することができます。ネットワークがデータに表示されている内容と一致しない予測を提供する場合、何か得られるものがあります。 データ内のパターンを発見したら、検索、フィルタリング、並べ替えを行うコードを記述できます。データを視覚化すると、外れ値を見つけるのに役立ちます。外れ値によって、データの品質や前処理におけるエラーが常に明らかになります。 2. エンドツーエンドのトレーニングと評価のフレームワークを構築する データセットを処理した後、モデルのトレーニングを開始できますか?いいえ!次のステップは、完全なトレーニング + 評価フレームワークを構築することです。 この段階では、線形分類器や CNN など、問題のない単純なモデルを選択し、損失を視覚化します。精度などのモデルを測定するための基準を取得し、モデルを使用して予測を行います。 この段階でのテクニックは次のとおりです。 固定ランダムシード 固定ランダム シードを使用して、コードを 2 回実行したときに同じ結果が得られるようにし、変動要因を排除します。 簡素化 この段階では幻想を抱かず、データを誇張しないでください。増幅データは後で使用しますが、ここでは使用しないでください。今導入するとエラーが発生するだけです。 見積もりに重要な数字を追加する テスト セットの損失をプロットするときは、テスト セット全体を評価してください。単にバッチ テストの損失グラフをプロットして Tensorboard で平滑化しないでください。 初期段階で損失関数を検証する 関数が正しい損失値で開始されていることを確認します。たとえば、1 つのレイヤーが正しく初期化されている場合、softmax 初期化時に -log(1/n_classes) を測定する必要があります。 初期化 1 つのレイヤーの重みを正しく初期化します。平均値 50 で何らかの値を回帰する場合、最終偏差を 50 に初期化します。比率が 1:10 の不均衡なデータセットがある場合は、ネットワークが初期化時に確率 0.1 を予測するようにログバイアスを設定します。これらを正しく設定すると、モデルの収束が速くなります。 人間のベースライン 人間が解釈および検査可能な損失を超えたメトリックを監視します。可能な場合は、その人の正確さを評価し、比較してください。または、テスト データに 2 回注釈を付け、各例に対して 1 つの注釈を予測として扱い、2 つ目の注釈を事実として扱います。 入力とは独立してベースラインを設定する 最も単純なアプローチは、すべての入力をゼロに設定し、モデルが入力から情報を抽出することを学習するかどうかを確認することです。 バッチのオーバーフィッティング モデルの容量を増やし、達成できる損失を検証しました。 検証によりトレーニング損失が減少 データ容量を少し増やしてみてください。 モデルをトレーニングする前にデータを視覚化する 生のテンソルのデータとラベルを視覚化すると、デバッグ時間を節約し、データの前処理とデータ拡張における問題を明らかにすることができます。 予測のダイナミクスを視覚化する トレーニング中に固定テスト バッチでモデル予測を視覚化します。 バックプロパゲーションを使用して依存関係を取得します。 1 つの方法は、i 番目の例の損失を 1.0 に設定し、入力までバックプロパゲーションを実行し、i 番目の例にのみゼロ以外の勾配があることを確認することです。 特殊なケースを一般化する: 実行したい内容に対して非常に具体的な関数を記述し、それを実行して、後で同じ結果が得られるかどうかを確認します。 3. 過剰適合 まず、トレーニング セットでの損失をオーバーフィットして削減できるほど十分に大きなモデルを用意し、次にトレーニング セットの損失の一部を放棄して検証セットの損失を改善するようにモデルを適切に調整する必要があります。 この段階でのテクニックは次のとおりです。 モデルを選択 適切なトレーニング損失を得るには、データに適したアーキテクチャを選択する必要があります。すべてを一度にやろうと考えないでください。画像分類を行う場合は、ResNet-50 をコピーして貼り付けるだけで、プロセスの後半でカスタマイズを行うことができます。 アダム法は安全 ベースラインを設定する初期段階では、学習率が 3e-4 の Adam が使用されました。経験則として、Adam は低い学習率を含むハイパーパラメータに対してより寛容です。 · 一度に一つずつ複雑化していく 複数の信号を分類器に入力する場合は、一度にすべてを入力するのではなく、1 つずつ入力して複雑さを段階的に増やし、期待されるパフォーマンスの向上を確実にすることをお勧めします。たとえば、最初に小さい画像を挿入し、その後拡大してみてください。 学習率の減衰のデフォルトを信用しない 注意しないと、コードによって学習率が早期にゼロに下げられ、モデルが収束しなくなる可能性があります。これを回避するために、学習率の低下を完全に無効にします。 4. 正規化 理想的には、トレーニング セットに適切に適合した大規模なモデルが完成しました。 さて、次は正規化の時です。トレーニング セットの精度を少し犠牲にすることで、検証セットの精度を高めることができます。 ここにいくつかのヒントがあります: より多くのデータを取得する これまでのところ、最も好まれる正規化方法は、実際のトレーニング データを追加することです。 小さなデータセットに時間をかけすぎず、何か大きなことを成し遂げようとしてください。より多くのデータを収集するエネルギーを持つことは、パフォーマンスの単調な改善を保証する方法です。 データ拡張 データセットを大きくするために、データの収集を継続するだけでなく、増幅とも呼ばれます。回転、反転、伸縮、増幅など、少し大胆に行うことができます。 クリエイティブな増幅 データセットを拡張する他の方法はありますか?たとえば、ドメインのランダム化、シミュレーション、シーンへのデータの挿入などの巧妙なハイブリッドなどです。 GANも使用可能です。 事前トレーニング もちろん、データが十分にある場合でも、事前トレーニング済みのモデルを直接使用しても問題はありません。 教師あり学習との戦い 監督なしの事前トレーニングにあまり興奮しすぎないでください。少なくとも視覚の分野では、教師なし学習はまだ非常に優れた成果を達成していません。 NLP 分野にはストーリーを伝えることができる BERT や GPT-2 がありますが、表示される結果は依然として大部分が手動で選択されています。 入力は低次元です 特にデータセットが大きくない場合、過剰適合を引き起こす可能性が高いため、誤った信号を含む可能性のある特徴を削除します。 同様に、低レベルの詳細がそれほど重要でない場合は、高レベルの情報をキャプチャする小さな画像を入力できます。 小型モデル 多くの場合、ドメイン知識の制約をネットワークに追加して、モデルを小さくすることができます。 たとえば、以前は ImageNet バックボーンに完全接続レイヤーを配置することが一般的でしたが、現在ではこの操作は平均プーリングに置き換えられ、パラメータが大幅に削減されています。 バッチサイズを縮小する バッチ正規化操作の場合、バッチが小さいほど正規化効果が向上する可能性があります。 ドロップアウト 畳み込みネットワークには dropout2d を使用します。ただし、この操作はバッチ正規化と互換性がないと思われるため、注意して使用してください。 体重減少 重量減少のペナルティを増加させます。 早期終了 常にトレーニングする必要はありません。検証セットの損失を観察し、過剰適合しそうになったら停止することができます。 もっと大きなモデルも試してみましょう この行は前の行(前の行のみ)に続くことに注意してください。 大規模なモデルは、ほぼ必然的に過剰適合する傾向がありますが、早期に停止することで非常に優れたパフォーマンスを発揮できることが分かりました。 トレーニングしたネットワークが優れた分類器であることをさらに確信したい場合は、重みを視覚化してエッジが美しいかどうかを確認します。 フィルターがノイズのように見える場合は、作業するタイミングです。同様に、アクティベーションで欠陥が見つかることもあるので、何が間違っていたのかを調査する必要があります。 5. パラメータ調整 今頃、あなたの AI は世界を探索し始めているはずです。ここで注意すべき点がいくつかあります。 ランダムグリッド検索 複数のハイパーパラメータを同時に調整する場合、さまざまな設定を含めることができるため、グリッド検索が魅力的に思えます。 ただし、ランダム検索の方が優れていることを覚えておいてください。 直感的に言えば、これはネットワークが通常、これらのパラメータの一部に対してより敏感であり、他のパラメータに対してはそれほど敏感ではないためです。 パラメーター a が有用であり、パラメーター b の影響がほとんどない場合は、いくつかの固定ポイントで複数回サンプリングするのではなく、パラメーター a をより徹底的にサンプリングする必要があります。 ハイパーパラメータの最適化 世の中には素晴らしいベイジアンハイパーパラメータ最適化ツールボックスが数多く存在し、多くの友人がこれらのツールに高い評価を与えています。 しかし、私の個人的な経験では、State-of-the-Art はインターンによって作成されます (間違い)。 6. 他にどうやって絞ればいいのでしょうか? 適切なアーキテクチャと適切なハイパーパラメータを見つけたら、既存のモデルでより良い結果を得て、その可能性を最大限に引き出すのに役立ついくつかのコツがまだあります。 モデルの組み合わせ 複数のモデルを組み合わせると、タスクに関係なく、少なくとも 2% の精度の向上が保証されます。 あまり多くの計算能力を用意できない場合は、蒸留を使用してモデルをニューラル ネットワークに結合します。 そこに置いて訓練させましょう 通常、人間は体重減少が停滞するとすぐにトレーニングをやめます。 しかし、どれくらいの期間かは分かりませんが、昼夜を問わず一生懸命トレーニングした方が良いと感じています。 ある時、私はモデルトレーニングを冬休み中ずっと放置してしまいました。 戻ってきたら最先端のものになってました。 もう一つ 偶然にも、2日前に「死んだプログラマー」がこう言っていました。
学生の皆さん、もしそのような経験をしたのであれば、おめでとうございます。あなたにも最先端の技術を達成するためのトレーニングを受ける可能性があります。 オリジナルリンク: http://karpathy.github.io/2019/04/25/recipe/ |
<<: 役に立つ情報: GitHub で 26,000 個のスターを獲得!初心者のための Python アルゴリズム
>>: フィンテック企業はリスク管理に AI をどのように活用しているのでしょうか?
インテリジェント製造の分野では、AI 駆動型デジタルツインが重要な技術となっています。デジタル ツイ...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
Cycode の共同創設者兼 CTO である Ronen Slavin 氏は、AI によって実現され...
将来の 6G ネットワークのより豊富なビジネス アプリケーションと極めて厳しいパフォーマンス要件を満...
畳み込みニューラル ネットワークは、ディープ ニューラル ネットワークの中で非常に人気のあるネットワ...
[[321682]] [51CTO.com クイック翻訳] 多くの新しいソフトウェアを実装する場合と...
ディープラーニングが加わったことで、コンピュータグラフィックスには多くの新しい分野が生まれました。 ...
[51CTO.com クイック翻訳]ディープラーニングの愛好家であれば、強力なディープニューラルネッ...
5月7日のZhidongxiによると、英国ケンブリッジ大学の研究者らは最近、シェフの調理過程を模倣...
トレンド1:中国の潜在力が爆発し、米国の優位性が揺らぐ[[226879]] 2017年、中国の人工知...
[[265710]]長らく技術革命の中心地となってきたサンフランシスコは、現地時間の火曜日に「秘密...