今日は引き続き、パーセプトロンをベースにしたニューラルネットワークモデルを紹介します。パーセプトロンは線形モデルであり、非線形問題に対する解決策を提供することは難しいことは誰もが知っています。 たとえば、よく知られている 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 を使用して、単層ニューラル ネットワークを手動で構築します。 |
>>: スマートシティのスマートパーキング:建物が利益を上げる方法
[[272485]]ビッグデータダイジェスト制作編纂者:張瑞怡、寧静コンピュータ ビジョンは、デジタ...
家が施錠されていなければ、誰でも勝手に入ることができ、暗号化なしでデータを勝手に変更できてしまうと、...
2022年11月末、OpenAIが立ち上げたChatGPTが生成AIブームを巻き起こしました。 C...
[[398642]]人工知能技術は今や誰もが知る技術となり、医療分野に変革をもたらす力となるでしょう...
著者の劉玉樹氏は中国人民大学重陽金融研究所学務委員会委員、マクロ研究部部長、研究者である。本稿は11...
人力の60倍の速さで作業する送電線検査画像「認識者」、ベテラン並みの監視ビデオ「品質検査員」、さまざ...
[[419906]]私はこれまで、人工知能とデータサイエンスのオープンソース プロジェクトを数多く...
Baiduの無人運転アプリケーションを見ました。私は車の所有者が自動で駐車するのを助けるアウディの...
7月9日、世界人工知能会議クラウドサミットが正式に開幕しました!アマゾン ウェブ サービスは、202...
[[279047]] [51CTO.com クイック翻訳] 今日、さまざまな新しいトレンドの出現に...