レゴブロックを積み上げるように: ニューラルネットワークの数学をゼロから説明する

レゴブロックを積み上げるように: ニューラルネットワークの数学をゼロから説明する

ニューラル ネットワークは、線形モジュールと非線形モジュールを巧みに組み合わせたものです。これらのモジュールをインテリジェントに選択して接続すると、非線形決定境界を利用して分類が可能なニューラル ネットワークなど、あらゆる数学関数を近似する強力なツールが得られます。

コードを実行する手順は次のとおりです。

  1. git クローン https://github.com/omar-florez/scratch_mlp/
  2. python スクラッチmlp/スクラッチmlp.py

トレーニング可能なパラメータを更新するバックプロパゲーション技術は直感的でモジュール的な性質を持っていますが、このトピックについては詳しく説明されていません。レゴブロックの例えを使って、ニューラル ネットワークを 1 つずつゼロから構築し、その内部の仕組みを探ってみましょう。

ニューラルネットワークはレゴブロックで作られている

上の図は、ニューラル ネットワークのトレーニングに使用される数学の一部を示しています。これについてはこの記事で説明します。読者が興味深いと思う点の 1 つは、ニューラル ネットワークが異なる目標を持つモジュールのスタックであるということです。

  • 入力変数 X は、行が観測値で列が次元である行列に格納されている生データをニューラル ネットワークに供給します。
  • 重みW_1は入力Xを最初の隠れ層h_1にマッピングします。重み W_1 は線形カーネルとして機能します。
  • シグモイド関数は、隠し層の数値が 0 ~ 1 の範囲外にならないようにします。結果はニューラル活性化の配列、h_1 = Sigmoid(WX) です。

この時点では、これらの操作は単に一般的な線形システムを形成するだけであり、非線形の相互作用をモデル化することはできません。別のレイヤーを追加すると、モジュール構造に深みが加わり、状況が変わります。ネットワークが深くなるほど、より微妙な非線形相互作用を学習し、より複雑な問題を解決できるようになります。おそらくこれが、ディープ ニューラル モデルが台頭した理由の 1 つです。

なぜこの記事を読む必要があるのでしょうか?

ニューラル ネットワークの内部を理解していれば、問題に遭遇したときに最初に何を変更すればよいかをすぐに把握し、不変かつ予想される動作であることがわかっているアルゴリズムの部分をテストするための戦略を立てることができます。

機械学習モデルのデバッグは複雑な作業だからです。経験則として、数学モデルは最初に試しただけではうまく機能しません。新しいデータに対する精度が低かったり、トレーニングに時間がかかりすぎたり、メモリを大量に使用したり、大きな負の誤差や NAN 予測を返したりする可能性があります... 場合によっては、アルゴリズムの仕組みを知ることで、タスクがはるかに便利になることがあります。

  • トレーニングに時間がかかりすぎる場合は、ミニバッチ サイズを増やすと、観測値の分散が減り、アルゴリズムの収束に役立つ場合があります。
  • NAN 予測が表示される場合、アルゴリズムが大きな勾配を受信し、メモリ不足になっている可能性があります。これは、反復回数が多すぎると爆発する行列乗算と考えることができます。学習率を下げると、これらの値も減少します。レイヤーの数を減らすと乗算回数を減らすことができます。せん断勾配によってもこの問題を大幅に制御できます。

具体例: XOR関数の学習

ブラックボックスを開けてみましょう。ここで、XOR 関数を学習するニューラル ネットワークをゼロから構築します。この非線形関数の選択は決してランダムではありません。バックプロパゲーションがなければ、直線で分類することを学習するのは困難です。

この重要な概念を説明するために、下の図で直線が XOR 関数の出力の 0 と 1 を分類できないことに注目してください。現実の問題も非線形に分離可能です。

このネットワークのトポロジーは非常にシンプルです。

  • 入力変数Xは2次元ベクトルである
  • 重みW_1はランダムに初期化された値を持つ2x3行列である
  • 隠れ層 h_1 には 3 つのニューロンが含まれています。各ニューロンは観測値の加重和を入力として受け取ります。これは下の図で緑色で強調表示されている内積です: z_1 = [x_1, x_2][w_1, w_2]
  • 重みW_2はランダムに初期化された値を持つ3x2行列である。
  • 出力層h_2には2つのニューロンが含まれています。これは、XOR関数の出力が0(y_1 = [0,1])または1(y_2 = [1,0])のいずれかであるためです。

次の図はより直感的です。

それではこのモデルをトレーニングしてみましょう。この単純な例では、トレーニング可能なパラメータは重みですが、現在の研究では、最適化できるより多くの種類のパラメータが研究されていることに注意する必要があります。たとえば、レイヤー間のショートカット接続、正規化された分布、トポロジ構造、残差、学習率など。

バックプロパゲーションは、ラベル付けされた観測値のバッチを与えられた場合に、事前定義されたエラー メトリック (損失関数) を最小化する方向 (勾配) で重みを更新する方法です。このアルゴリズムは何度も発見されており、逆累積モードでの自動微分と呼ばれるより一般的な手法の特殊なケースです。

ネットワークの初期化

ネットワークの重みを乱数で初期化しましょう

前進ステップ:

このステップの目的は、出力層 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つの部品を使用してマイクロロボットを組み立てました。このロボットは、「変形」によってさまざまな機能を実現することもできます。

>>:  もう感情を隠せない?歩く姿勢からAIがわかる!

推薦する

シンプルで使いやすいPythonの顔認識アルゴリズムをいくつかまとめます

こんにちは、みんな。今日は、シンプルで使いやすい顔認識アルゴリズムをいくつかまとめます。顔認識はコン...

AI天気予報には依然として人間の介入が必要

業界では、デート、マーケティング、ソーシャルメディアから宇宙探査、医療の進歩に至るまで、人工知能とそ...

...

Googleの自然言語処理はさらに一歩進んで、複雑な質問に直接答えることを可能にしました。

Google 音声検索は 2008 年に開始され、4 年後には人物、場所、物に関する情報を含む「ナ...

清華大学と北京大学は確実にトップ20に入っています!世界のAI研究の年間ランキングが発表され、中国と米国の間には大きな差がある

さらに、テクノロジー業界に特化したベンチャーキャピタル企業であるサンダーマーク・キャピタルは、毎年こ...

TensorFlow を通じてディープラーニング アルゴリズムを実装し、企業の実務に適用する方法

この記事は、Caiyun Technology のトップ ビッグ データ サイエンティストである Z...

人工知能の博士による記事では、分類と回帰評価指標について詳しく説明しています。機械学習の必読書です。

この記事では、機械学習における回帰と分類のさまざまな指標について説明します。私たちは常に、優れた機械...

ジェネレーティブ AI によるヘルスケアの変革: 新たなユースケースと将来の可能性

ヘルスケアとウェルネスのダイナミックな分野では、ANI と生成 AI の組み合わせによる革命が進行し...

ディープラーニングがなぜディープラーニングと呼ばれるのかご存知ですか?

これは単純なプッシュです。今日はディープラーニングという名前についてのみお話します。ディープラーニン...

...

Googleはクラウドコンピューティングの顧客向けにGemini Proを公開すると発表、開発者はアプリケーションの構築に利用できる

12月14日水曜日(米国時間)、Googleはクラウドコンピューティングの顧客により良いサービスを提...

人工知能は242万件の医療記録の分析を支援した

人工知能は242万件の医療記録の分析を支援した1月26日、iFLYTEKは最前線の防疫・管理を支援す...

機械学習と脳科学が次の10年間の教育発展をリードする

[51CTO.comよりオリジナル記事] 昨今人気の技術として、産業界における人工知能の応用が徐々に...

生体認証ウェアラブルでCOVID-19の発生を予測できると研究で判明

米国の研究チームは最近、ウェアラブルデバイスから得られる生体認証データを分析することで、一見健康そう...

産業用ロボットは高給ですか?

産業用ロボットの雇用見通しはどうですか?近年、世界の産業用ロボット産業と市場は急速に発展しています。...