今日は引き続き、パーセプトロンをベースにしたニューラルネットワークモデルを紹介します。パーセプトロンは線形モデルであり、非線形問題に対する解決策を提供することは難しいことは誰もが知っています。 たとえば、よく知られている XOR 問題は典型的な線形分離不可能な問題であり、通常のパーセプトロンでは処理が困難です。 そのため、通常のパーセプトロンをベースに、隠れ層を追加してパーセプトロン構造を拡張し、パーセプトロンが非線形問題に適合できるようにしました。 隠れ層構造を持つこのパーセプトロン モデルはニューラル ネットワークであり、多層パーセプトロンとも呼ばれます。 エディターは、入力層、隠し層、出力層、活性化関数、順方向伝播、逆方向伝播、勾配降下法、重み更新など、ニューラル ネットワークに関する多くの概念や知識の詳細については説明しません。 データを生成するこのセクションでは、2 層ネットワーク、つまり単一の隠し層ネットワークを例に、NumPy を使用してニューラル ネットワーク モデルを実装する方法を説明します。ニューラル ネットワークを正式に構築する前に、データを準備しましょう。データ生成関数を定義します。 デフcreate_dataset (): データの視覚化を以下に示します。 ニューラル ネットワークを構築するための基本的な考え方と手順を引き続き確認してみましょう。
ネットワーク構造の定義X がニューラル ネットワークの入力特徴行列であり、y がラベル ベクトルであると仮定します。単層のニューラル ネットワークの構造は次のとおりです。 ネットワーク構造の機能定義は次のとおりです。 レイヤーサイズを定義します( X , Y ): 入力層と出力層のサイズは、それぞれ X と y の形状に関連しています。隠し層のサイズは手動で指定できます。ここでは、隠し層のサイズを 4 に指定します。 モデルパラメータを初期化するW1 は入力層から隠れ層への重み配列、b1 は入力層から隠れ層へのバイアス配列、W2 は隠れ層から出力層への重み配列、b2 は隠れ層から出力層へのバイアス配列であると仮定します。そこで、パラメータ初期化関数を次のように定義します。 definitialize_parameters ( n_x , n_h , n_y ): 重みを初期化するために numpy の乱数生成モジュール np.random.randn を使用し、バイアスを初期化するために np.zeros モジュールを使用しました。辞書を設定してカプセル化し、初期化パラメータを含む結果を返します。 前方伝播ネットワーク構造を定義し、パラメータを初期化すると、ニューラル ネットワークのトレーニング プロセスが開始されます。トレーニングの最初のステップは、順方向伝播計算を実行することです。 隠れ層の活性化関数が tanh 関数であり、出力層の活性化関数がシグモイド関数であると仮定します。順方向伝播の計算は次のように表されます。 順伝播計算関数を次のように定義します。 def forward_propagation ( X 、 パラメータ): パラメータ初期化結果辞書からそれぞれのパラメータを取得し、順方向伝播計算を実行し、順方向伝播計算の結果をキャッシュ辞書に保存します。ここで、A2 はシグモイド活性化関数による活性化後の出力層の結果です。 現在のトレーニング損失を計算する順方向伝播計算が完了したら、現在のパラメータを使用した計算後の出力とラベル値の間の損失を決定する必要があります。注 1 と同様に、損失関数もクロスエントロピー損失として選択されます。 損失関数は次のように定義されます。 def compute_cost ( A2 , Y , パラメータ): バックプロパゲーションを実行する順方向伝播と現在の損失が決定したら、重みを調整するために逆方向伝播プロセスを続行する必要があります。次の図に示すように、各パラメータの勾配計算が行われます。 上記の勾配計算式によれば、バックプロパゲーション関数は次のように定義されます。 def backward_propagation ( パラメータ、 キャッシュ、 X 、 Y ): 各パラメータの微分計算結果は辞書gradに格納されて返されます。 ここで言及する必要があるのは、数値最適化に関わる知識です。機械学習では、学習する問題が特定の形式になると、機械学習は最適化問題として形式化されます。 勾配降下法、確率的勾配降下法、ニュートン法、準ニュートン法、あるいは Adam などの高度な最適化アルゴリズムのいずれであっても、その数学的原理を習得するには時間が必要です。 体重更新反復計算の最後のステップは、バックプロパゲーションの結果に従って重みを更新することです。更新式は次のとおりです。 重み更新関数は、次の式で定義できます。 def update_parameters ( パラメータ、 grads 、 学習率= 1.2 ): このようにして、順方向伝播 - 損失の計算 - 逆方向伝播 - 重みの更新というニューラル ネットワークのトレーニング プロセスが展開され、完了します。 ここで、以前のいくつかの講義と同様に、より Python らしくするために、さまざまなモジュールを組み合わせてニューラル ネットワーク モデルを定義します。 nn_model を定義します( X 、 Y 、 n_h 、 num_iterations = 10000 、 print_cost = False ): モデルの本体が完成したら、トレーニング結果に基づいて予測関数を定義することもできます。 def predict ( パラメータ, X ): 次に、以前に生成されたデータに基づいてモデルをテストします。 パラメータ= nn_model ( X , Y , n_h = 4 , 9000 回の反復後、損失は 0.21 に低下しました。テストの精度を見てみましょう: #予測精度 テスト精度は0.9に達しました。 ニューラル ネットワークの決定境界を描画する効果は次のとおりです。 上記がこのセクションの主な内容です。NumPy を使用して、単層ニューラル ネットワークを手動で構築します。 |
>>: スマートシティのスマートパーキング:建物が利益を上げる方法
非常に普及した拡散モデルは廃止されるのでしょうか?現在、GAN、拡散モデル、一貫性モデルなどの生成 ...
序文と個人的な理解とても良い作品を見つけたので、皆さんと共有したいと思います!占有+世界モデルに関し...
AI と機械学習は価値の高いデータに依存しているため、IT 部門はネットワーク内で何が起こっているか...
ChatGPTの登場以来、大規模言語モデル(LLM)は飛躍的な発展を遂げ、自然言語に基づく人間とコン...
アリババが中国だけでなく国際的にも素晴らしいインターネット企業であることは誰もが知っています。しかし...
LLaMA アダプタが完全にロック解除されました。一般的なマルチモーダル ベース モデルとして、画像...
ビッグモデルは事実の知識を習得する上で優れた能力と可能性を示していますが、ドメイン知識の欠如、リアル...
翻訳者 |陳俊レビュー | Chonglouご存知のとおり、データセットはおそらく機械学習プロジェク...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
ロボットの学習方法を開発する際に、大規模で多様なデータセットを統合し、強力で表現力豊かなモデル (T...
[[424483]] 1. はじめにアルゴリズムとは、データを操作し、プログラムの問題を解決するた...