最近、Tesla AI のシニアディレクターである Andrej Karpathy 氏が、非常に興味深いことを行いました。彼は、Yann LeCun 氏らによる 1989 年の論文を再現したのです。 1 つは楽しみのためであり、もう 1 つは、過去 33 年間にディープラーニングの分野でどのような興味深い変化が起こったか、そして当時 Lecun 氏を妨げていたものが一体何であったかを知るためです。さらに、2055年の人々が今日のディープラーニング研究をどのように捉えるのかについても期待しているという。 1989 年、Yann Lecun らは「手書きの郵便番号認識へのバックプロパゲーションの適用」という論文を発表しました。この論文は、私の知る限り、バックプロパゲーションを使用してトレーニングされたエンドツーエンドのニューラル ネットワークの最も初期の実世界への応用であるため、歴史的な重要性があると思います。 論文リンク: http://yann.lecun.com/exdb/publis/pdf/lecun-89e.pdf データセットとニューラル ネットワークは比較的小さいですが (7291 枚の 16x16 グレースケール デジタル画像、1000 個のニューロン)、この論文は 33 年経った今でも関連性があります。データセットを提示し、ニューラル ネットワークのアーキテクチャ、損失関数、最適化について説明し、トレーニング セットとテスト セットの実験的な分類エラー率を示しています。これは非常に有名で、現代のディープラーニング論文として分類できますが、33 年前の論文です。そこで私は、楽しみのためだけでなく、この演習をディープラーニングの進歩の本質に関するケーススタディとして使用するために、論文を再現することにしました。 成し遂げる私はできる限り論文に忠実に従い、PyTorch で細部まで再現しようとしました。次の GitHub リポジトリを参照してください。 複製リンク: https://github.com/karpathy/lecun1989-repro 元のネットワークは、1988 年に Bottou と LeCun によって提案されたバックプロパゲーション シミュレータ SN (後に Lush と命名) を使用して Lisp で実装されました。その論文はフランス語だったので読めませんでした。しかし、構文的には、現在の PyTorch と同様に、高レベル API を使用してニューラル ネットワークを指定できます。 現代のソフトウェア設計では、ライブラリ設計は次の 3 つの部分に分かれています。 1) 多次元テンソルの基本的な数学演算のための高速 (C/CUDA) 汎用テンソル ライブラリ。 2) 順方向計算グラフを追跡し、逆方向パスの操作を生成する autograd エンジン。 3) 一般的なディープラーニング操作、レイヤー、アーキテクチャ、オプティマイザー、損失関数などを含む、スクリプト可能な (Python) ディープラーニング高レベル API。 電車トレーニング中、7291 個のサンプルで構成されるトレーニング セットに対して 23 回のパスを実行し、合計 167693 個のサンプル/ラベルがニューラル ネットワークに提示されます。元のネットワークは、SUN-4/260 ワークステーション (1987 年にリリース) で 3 日間トレーニングされました。現在、この実装を MacBook Air (M1) CPU でわずか 90 秒で実行できます (約 3000 倍の高速化)。私の conda は、Rosetta エミュレーションではなく、ネイティブ amd64 ビルドを使用するように設定されています。 PyTorch が M1 のすべての機能 (GPU と NPU を含む) をサポートできれば、加速効果はさらに大きくなる可能性があります。 また、コードを純粋に A100 GPU で実行してみましたが、トレーニングはさらに遅くなりました。これは、ネットワークが小さすぎる (4 層の convnet、最大 12 チャネル、合計 9760 個のパラメーター、64K MAC、1K アクティベーション) ことと、SGD が一度に 1 つの例しか使用していないことが原因であると考えられます。とはいえ、この問題を最新のハードウェア (A100) とソフトウェア インフラストラクチャ (CUDA、PyTorch) で本当に解決したいのであれば、GPU の使用率を最大化するために、例ごとの SGD からフルバッチ トレーニングに切り替える必要があります。この方法により、トレーニングのスピードがさらに約 100 倍向上する可能性があります。 1989年の実験結果を再現するオリジナルの論文では、次のような実験結果が示されています。 評価: 分割トレーニング。 損失2.5e-3 。 エラー0.14 % 。 ミス: 10 しかし、23 回目のパスの後、トレーニング スクリプト repro.py は次のように出力します。 評価: 分割列車。 損失4.073383e-03 。 エラー0.62 % 。 ミス: 45 したがって、私は論文の結果を大まかに再現しただけであり、数字は正確ではありません。元のデータセットは時間の経過とともに失われているため、元の論文と同じ結果を得ることは不可能と思われます。そのため、はるかに大きな MNIST データセットを使用してシミュレートする必要がありました。そのデータセットの 28 x 28 桁を取得し、双線形補間を使用して 16 x 16 ピクセルに縮小し、そこから正しい数のトレーニング セットとテスト セットの例を置換なしでランダムにサンプリングしました。 しかし、論文の重み初期化スキームの説明が少し抽象的すぎる、PDF ファイルに書式エラーがある (小数点、平方根記号が消えているなど) など、正確な再現に影響する他の理由もあると思います。たとえば、論文では、重みの初期化は均一な「2 4 / F」から引き出され、F はファンインであると説明されていますが、実際には「2.4 / sqrt(F)」であり、sqrt は出力の標準偏差を維持するのに役立つと思います。 H1 層と H2 層の間の特定のスパース接続構造にも問題があります。論文では、この構造は「ここでは説明しないスキームに従って選択された」としか述べられていないため、重複ブロックのスパース性を使用して、ある程度の推測を行う必要がありました。 この論文では、tanh 非線形性も使用していると主張していますが、これは実際には ntanh(1) = 1 をマッピングする「正規化 tanh」であり、tanh の平坦な裾に少なくとも少しの勾配があることを保証するために、当時非常に人気があった縮小残差接続が追加されている可能性があるのではないかと心配しています。最後に、この論文では「ヘッセ行列の対角近似を使用するニュートン法の特別なバージョン」を使用しています。しかし、私は SGD を使用しました。なぜなら、SGD の方がはるかに簡単だからです。さらに、論文の著者らは「このアルゴリズムは学習速度の大幅な向上につながるとは期待されていない」と述べている。 新しいアプローチを試すここが私のお気に入りの部分です。それから33年が経ち、ディープラーニングはすでに非常に活発な研究分野となっています。ディープラーニングに関する現在の理解と 33 年間の研究開発経験を活用して、元の結果をどれだけ改善できるでしょうか? 私の最初の結果は次のとおりです。 評価: 分割列車。 損失4.073383e-03 。 エラー0.62 % 。 ミス: 45 まず、10 のカテゴリの単純な分類を行っていることは明らかです。しかし当時、これはターゲット -1 (負のクラスの場合) または +1 (正のクラスの場合) を持つ平均二乗誤差 (MSE) 回帰としてモデル化されており、出力ニューロンにも tanh 非線形性がありました。したがって、クラス ロジットを取得するために出力層の tanh を削除し、標準 (マルチクラス) クロス エントロピー損失関数に置き換えました。この変更により、トレーニング セットが完全にオーバーフィットされ、トレーニング エラーが大幅に改善されます。 評価: 分割列車。 損失9.536698e-06 。 エラー0.00 % 。 ミス: 0 出力層に(飽和した)tanh 非線形性と MSE エラーがある場合は、重みの初期化の詳細についてより注意する必要があると思われます。第二に、私の経験では、微調整された SGD は非常にうまく機能しますが、現在の Adam オプティマイザー (学習率 3e-4) は、ほとんどの場合、適切なベースラインであり、調整はほとんど必要ありません。 そこで、最適化がパフォーマンスに影響を与えていないことをより確信するために、学習率が 3e-4 の AdamW に切り替え、トレーニング中に学習率を 1e-4 に下げました。結果は次のとおりです。 評価: 分割列車。 損失0.000000e+00 。 エラー0.00 % 。 ミス: 0 これにより、SGD よりもわずかに改善された結果が得られます。ただし、デフォルトのパラメータでは重みが少し減少し、過剰適合を防ぐのに役立つことも覚えておく必要があります。過剰適合は依然として深刻なため、入力画像を水平または垂直に 1 ピクセルシフトするという単純なデータ拡張戦略を導入しました。ただし、これはデータセットのサイズの増加をシミュレートするため、チャネル数も 23 から 60 に増やす必要がありました (元の設定でチャネル数を単純に増やしても、結果が大幅に改善されないことを確認しました)。 評価: 分割列車。 損失8.780676e-04 。 エラー1.70 % 。 ミス: 123 テストエラーからわかるように、上記のアプローチは役立ちます。データ拡張は、過剰適合に対抗するためのかなり単純で標準的な概念ですが、1989 年の論文では言及されていなかったので、おそらく少し後の革新なのでしょうか。オーバーフィッティングがまだ存在していたため、ツールボックスから別の新しいツール、ドロップアウトを取り出しました。パラメータ数が最も多いレイヤー (H3) の前に、0.25 の弱いドロップアウトを追加しました。ドロップアウトはアクティベーションをゼロに設定するため、アクティビティ範囲が [-1, 1] である tanh で使用するのはあまり意味がありません。そのため、すべての非線形性をより単純な ReLU アクティベーション関数に置き換えました。ドロップアウトによりトレーニング中にノイズが増えるため、80 回のパスでより長いトレーニングを行う必要があります。最終結果は次のとおりです。 評価: 分割列車。 損失2.601336e-03 。 エラー1.47 % 。 ミス: 106 これにより、テスト セットでは 32/2007 のエラーのみが発生します。元のネットワークで tanh を relu に置き換えるだけでは大きな効果が得られないことが確認されたため、ここでの改善のほとんどはドロップアウトによるものです。全体的に、1989 年に戻れば、エラー率は 60% (エラー 80 件から 30 件) 削減され、テスト セット全体のエラー率はわずか 1.5% になります。しかし、このメリットは「ただで手に入る」というわけではなく、トレーニング時間がほぼ 3 倍(3 日から 12 日)に増えました。ただし、推論時間には影響はありません。残りのエラーは次のとおりです。 さらに一歩進んでしかし、MSE → Softmax、SGD → AdamW への移行を完了し、データ拡張、ドロップアウトを追加し、tanh を relu に置き換えた後、私は徐々にそれらの実装しやすいアイデアを放棄し始め、より多くのこと (重みの正規化など) を試しましたが、大幅に改善された結果は得られませんでした。 また、ViT を、パラメータ数とフロップス数がほぼ一致する「マイクロ ViT」に縮小しようとしましたが、畳み込みネットワークのパフォーマンスに匹敵することはできませんでした。もちろん、過去 33 年間に他の多くの革新も見られましたが、それらの多く (残差接続、レイヤー/バッチ正規化など) は大規模モデルでのみ機能し、主に大規模モデルの最適化を安定化するために使用されます。この時点で、ネットワークのサイズを増やすことでさらなる利益が得られる可能性がありますが、これによりテスト時の推論の待ち時間が長くなります。 データの改ざんパフォーマンスを向上させるもう 1 つの方法は、データセットのサイズを増やすことです。ただし、これにはラベル付けに 1 ドルのコストがかかります。元のベースラインをもう一度示します。 評価: 分割列車。 損失4.073383e-03 。 エラー0.62 % 。 ミス: 45 これで MNIST データセット全体にアクセスできるようになったため、トレーニング セットのサイズを 7 倍 (7,291 から 50,000) に増やすことができます。追加されたデータだけを見ても、ベースライン トレーニングを 100 パス実行すると、すでにいくつかの改善が見られます。 評価: 分割列車。 損失1.305315e-02 。 エラー2.03 % 。 ミス: 60 さらにこれを現代の知識からの革新(前のセクションで説明したように)と組み合わせると、最適なパフォーマンスが得られます。 評価: 分割列車。 損失3.238392e-04 。 エラー1.07 % 。 ミス: 31 要約すると、1989 年には、データセットを単純に拡張することが、推論の遅延に影響を与えずにシステム パフォーマンスを向上させる効果的な方法でした。 反射2022 年からのタイムトラベラーである私たちが、1989 年の最先端のディープラーニングから学んだことをまとめてみましょう。
この練習セッションが時間的に同じままであると仮定すると、これは 2022 年のディープラーニングにとって何を意味するのでしょうか? 2055 年から来たタイムトラベラーは、現在の Web のパフォーマンスをどのように見るでしょうか?
しかし、私が伝えたい最も重要な傾向は、GPT のような基本モデルの出現により、特定のターゲット タスク (数字認識など) に応じてニューラル ネットワーク全体を最初からトレーニングするという設定が、「微調整」によって時代遅れになるということです。これらの基本モデルは、大規模なコンピューティング リソースを持つ少数の組織によってトレーニングされ、ほとんどのアプリケーションは、ネットワークの一部に対する軽量な微調整、迅速なエンジニアリング、またはデータとモデルをより小さな専用の推論ネットワークに抽出するオプションの手順を通じて実現されます。 この傾向は今後も活発になると思います。もう一度ニューラル ネットワークをトレーニングしたくないと仮定してみましょう。 2055 年には、10,000,000 倍の大きさのニューラル ネットワーク ブレインに話しかけて何らかのタスクを実行できるようになります。リクエストが十分に明確であれば、リクエストは承認されます。 もちろん、ニューラル ネットワークを自分でトレーニングすることもできますが、なぜそうする必要があるのでしょうか? |
<<: ディープラーニングの台頭から10年:OpenAIのイノベーターたち
>>: Google: パフォーマンスの低い微調整モデルを捨てず、平均重量を計算してパフォーマンスを向上させる
IoT とロボティクスはそれぞれ単独でもビジネス組織に多くの利点をもたらしますが、組み合わせて使用...
人工知能が盛んに使われる一方で、この技術に伴う問題や潜在的な脅威も現れつつあります。 AI技術の「価...
ヒープは通常、(完全な) ツリーとして表示できるオブジェクトの配列です。そして、以下のルールは常に満...
人工知能と機械学習は私たちに利益をもたらしますが、そのセキュリティには注意が必要です。どれくらい安全...
18 世紀半ば以降、3 度の産業革命により、蒸気駆動の機械生産から電気駆動の機械生産へと、人類社会に...
以前、GPT + mindshow 自動 PPT の操作プロセスを紹介しました。主な手順は、まず G...
マイクロソフトはIBMとアマゾンに続き、米警察への顔認識ソフトウェアの販売を停止した最新のテクノロジ...
1. AIフレームワークの重要性AIフレームワークは、人工知能のオペレーティングシステムであり、基本...
分散システムにおける中心的な問題はデータの一貫性です。 Paxos アルゴリズムは分散一貫性における...
翻訳者 | ブガッティ校正:孫淑娟オンラインマーケットプレイスの eBay では、「ウォッチリスト...
先週、コピーライターのパネルがAIによってコピーライターの必要性がなくなるかどうかを議論した。一部の...
情報セキュリティの専門家は、「生成的敵対ネットワーク」(GAN)がオンラインセキュリティをどのように...
近年、人工知能の急速な発展は各国から大きな注目を集めており、教育界からも大きな注目を集めています。ま...
AI はすべての問題を解決できるわけではありませんが、正しく適用すれば短期間で大きな変化をもたらすこ...