ニューラル ネットワークは、線形モジュールと非線形モジュールを巧みに組み合わせたものです。これらのモジュールをインテリジェントに選択して接続すると、非線形決定境界を利用して分類が可能なニューラル ネットワークなど、あらゆる数学関数を近似する強力なツールが得られます。 コードを実行する手順は次のとおりです。
トレーニング可能なパラメータを更新するバックプロパゲーション技術は直感的でモジュール的な性質を持っていますが、このトピックについては詳しく説明されていません。レゴブロックの例えを使って、ニューラル ネットワークを 1 つずつゼロから構築し、その内部の仕組みを探ってみましょう。 ニューラルネットワークはレゴブロックで作られている 上の図は、ニューラル ネットワークのトレーニングに使用される数学の一部を示しています。これについてはこの記事で説明します。読者が興味深いと思う点の 1 つは、ニューラル ネットワークが異なる目標を持つモジュールのスタックであるということです。
この時点では、これらの操作は単に一般的な線形システムを形成するだけであり、非線形の相互作用をモデル化することはできません。別のレイヤーを追加すると、モジュール構造に深みが加わり、状況が変わります。ネットワークが深くなるほど、より微妙な非線形相互作用を学習し、より複雑な問題を解決できるようになります。おそらくこれが、ディープ ニューラル モデルが台頭した理由の 1 つです。 なぜこの記事を読む必要があるのでしょうか? ニューラル ネットワークの内部を理解していれば、問題に遭遇したときに最初に何を変更すればよいかをすぐに把握し、不変かつ予想される動作であることがわかっているアルゴリズムの部分をテストするための戦略を立てることができます。 機械学習モデルのデバッグは複雑な作業だからです。経験則として、数学モデルは最初に試しただけではうまく機能しません。新しいデータに対する精度が低かったり、トレーニングに時間がかかりすぎたり、メモリを大量に使用したり、大きな負の誤差や NAN 予測を返したりする可能性があります... 場合によっては、アルゴリズムの仕組みを知ることで、タスクがはるかに便利になることがあります。
具体例: XOR関数の学習 ブラックボックスを開けてみましょう。ここで、XOR 関数を学習するニューラル ネットワークをゼロから構築します。この非線形関数の選択は決してランダムではありません。バックプロパゲーションがなければ、直線で分類することを学習するのは困難です。 この重要な概念を説明するために、下の図で直線が XOR 関数の出力の 0 と 1 を分類できないことに注目してください。現実の問題も非線形に分離可能です。 このネットワークのトポロジーは非常にシンプルです。
次の図はより直感的です。 それではこのモデルをトレーニングしてみましょう。この単純な例では、トレーニング可能なパラメータは重みですが、現在の研究では、最適化できるより多くの種類のパラメータが研究されていることに注意する必要があります。たとえば、レイヤー間のショートカット接続、正規化された分布、トポロジ構造、残差、学習率など。 バックプロパゲーションは、ラベル付けされた観測値のバッチを与えられた場合に、事前定義されたエラー メトリック (損失関数) を最小化する方向 (勾配) で重みを更新する方法です。このアルゴリズムは何度も発見されており、逆累積モードでの自動微分と呼ばれるより一般的な手法の特殊なケースです。 ネットワークの初期化 ネットワークの重みを乱数で初期化しましょう 前進ステップ: このステップの目的は、出力層 h_2 のベクトルが計算されるまで、入力変数 X をネットワークの各層に渡すことです。 計算は次のようになります: 重みW_1を線形カーネルとして使用して、入力データXに対して線形変換を実行します。 加重合計はシグモイド活性化関数を使用してスケーリングされ、最初の隠し層 h_1 の値を取得します。元の 2D ベクトルが 3D 空間にマッピングされていることに注意してください。 同様のプロセスがレイヤー 2 h_2 でも発生します。まず、入力データである最初の隠し層の加重合計 z_2 を計算しましょう。 次に、シグモイド活性化関数を計算します。ベクトル[0.37166596 0.45414264]は、与えられた入力Xに対してネットワークによって計算された対数確率または予測ベクトルを表します。 全体の損失を計算する 「実際の値から予測値を引いた値」とも呼ばれるこの損失関数の目的は、予測ベクトル h_2 と手動ラベル y の間の距離を定量化することです。 この損失関数には、リッジ回帰の形式で大きな重みにペナルティを課す正規化項が含まれていることに注意してください。言い換えれば、重みの二乗が大きいほど損失関数が大きくなり、これを最小限に抑えたいのです。 逆の手順: このステップの目的は、損失関数を最小化する方向にニューラル ネットワークの重みを更新することです。後で説明するように、これは以前に計算された勾配を再利用し、微分可能な関数に大きく依存する再帰アルゴリズムです。これらの更新により損失関数が減少するため、ニューラル ネットワークは既知のクラスで観測のラベルを近似することを「学習」します。これは一般化と呼ばれる特性です。 前進ステップとは異なり、このステップは逆の順序で実行されます。まず、出力層の各重みに対する損失関数の偏微分 (dLoss/dW_2) を計算し、次に隠れ層の偏微分 (dLoss/dW1) を計算します。それぞれの導関数について詳しく説明します。 (1) dLoss/dW_2: 連鎖律は、ニューラル ネットワークの勾配計算をいくつかの微分部分に分解できることを示しています。 記憶を助けるために、次の表に、上で使用した関数定義とその 1 次導関数の一部を示します。 より直感的に言えば、下の図の重み W_2 (青い部分) を更新する必要があります。これを行うには、微分連鎖に沿って 3 つの偏微分を計算する必要があります。 これらの偏導関数に値を代入すると、W_2 の偏導関数を次のように計算できます。 結果は 3x2 行列 dLoss/dW_2 となり、損失関数を最小化する方向に W_2 の値が更新されます。 (2)dLoss/dW_1: 最初の隠し層 W_1 を更新するための重みを計算するために使用される連鎖律は、既存の計算を再利用できる可能性を示しています。 より直感的に言えば、出力層から重み W_1 へのパスは、後の層ですでに計算されている偏微分に遭遇します。 たとえば、偏導関数 dLoss/dh_2 と dh_2/dz_2 は、出力層の学習された重み dLoss/dW_2 の依存関係として前のセクションで計算されています。 すべての導関数をまとめると、再び連鎖律を適用して、隠れ層 W_1 の重みを更新できます。 最後に、重みに新しい値を割り当てて、ニューラル ネットワークのトレーニングの 1 つのステップを完了します。 成し遂げる 線形代数エンジンとして numpy のみを使用して、上記の数式をコードに変換してみましょう。ニューラル ネットワークはループでトレーニングされ、各反復でニューラル ネットワークに標準入力データが提示されます。この小さな例では、各反復でデータセット全体を考慮するだけです。前方ステップ、損失関数、および後方ステップの計算は、対応する勾配 (行列 dL_dw1 および dL_dw2) を使用して各サイクルでトレーニング可能なパラメータを更新するため、適切に一般化されます。 コードは次のリポジトリに保存されています: https://github.com/omar-florez/scratch_mlp このコードを実行してみましょう。 以下に、XOR 関数を近似するために多数の反復でトレーニングされたニューラル ネットワークをいくつか示します。 。 左: 精度、中央: 学習した決定境界、右: 損失関数 まず、隠れ層に 3 つのニューロンを持つニューラル ネットワークが弱い理由を見てみましょう。モデルは、最初は直線で始まり、その後非線形の動作を示す単純な決定境界を使用してバイナリ分類を実行することを学習します。トレーニングが続くと、右図の損失関数も大幅に減少します。 隠れ層に 50 個のニューロンを持つニューラル ネットワークにより、複雑な決定境界を学習するモデルの能力が大幅に向上します。これにより、より正確な結果が得られるだけでなく、ニューラル ネットワークをトレーニングするときに重大な問題となる勾配爆発も発生します。勾配が非常に大きい場合、バックプロパゲーションでの乗算によって大きな更新重みが生成されます。このため、トレーニングの最後の数ステップ (ステップ > 90) で損失関数が突然増加します。損失関数の正規化項は、大きくなった重みの二乗値(sum(W²)/2N)を計算します。 ご覧のとおり、この問題は学習率を下げることで回避できます。これは、時間の経過とともに学習率を下げる戦略を実装することで実現できます。あるいは、より強力な正規化、おそらく L1 または L2 を適用することで実現できます。勾配消失と勾配爆発は非常に興味深い現象であり、後で完全な分析を行う予定です。 オリジナルリンク: https://medium.com/towards-artificial-intelligence/one-lego-at-a-time-explaining-the-math-of-how-neural-networks-learn-with-implementation-from-scratch-39144a1cf80 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: MITチームは、わずか5つの部品を使用してマイクロロボットを組み立てました。このロボットは、「変形」によってさまざまな機能を実現することもできます。
ブドウを縫うことができる DIY ロボットアームを作りますか? [[428703]]最近、有名な「ハ...
[[357174]] AI の旅が始まって以来、私は無限の可能性を秘め、輝かしい歴史に足跡を残してき...
米国にある世界トップクラスの原子力研究所の一つが最近、大きな問題に直面している。データベースがハッキ...
この分野で GPT-4 を上回った Bard は「勢いをつかみ」、メジャーアップデートをリリースしま...
[[406364]]ヨーロッパの複数の大学の研究者チームが論文の中で、初期の携帯電話で使用されてい...
NetEase Intelligence News: 人工知能はまもなく私たちの世界を変えるでしょ...
デジタル時代では、サプライチェーンのインテリジェンスのレベルが企業の生産効率とパーソナライズされたサ...
みなさんこんにちは、私はZhibinです〜今日は、GridSearch グリッド検索と K 分割相互...
再び道路の穴の季節がやってきました。アメリカ全土の道路が乗用車やトラックに復讐する、冬から春にかけて...
[[398867]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...