ニューラルネットワークの作り方:アーキテクチャ、パラメータ、コード

公開: 2021-02-12

名前が示すように、ニューラルネットワークはニューロンの回路です。 ニューラルネットワークにはさまざまな種類があります。 生物学的ニューラルネットワークは、実際の生物学的ニューロンで構成されています。 一方、人工ニューラルネットワーク(ANN)は、脳に存在するような生物学的ニューラルネットワークに基づくシステムです。 脳内のニューロンの推定数は約100億であり、電気化学的信号を介して通信します。

ANNは、生物学的ニューロンに存在する計算の複雑さを再現しようとしますが、それに匹敵するものではなく、生物学的ニューラルネットワークのはるかに単純で複雑でないバージョンです。 この記事では、ANNの構造を理解し、Pythonを使用してニューラルネットワークを作成する方法を学びます。

目次

ニューラルネットワークアーキテクチャ

人工ニューラルネットワークは、「ノード」とも呼ばれる人工ニューロンで構成されています。 これらのノードは、ネットワークまたはメッシュが作成されるように相互に接続されています。 これらの相互接続の強さには値が割り当てられます。 この値は-1から1の間にあります。

接続の値が高い場合は、それらのノード間の強い接続を示しています。 すべてのノードには、それに特徴的な機能があります。 この関数を変更すると、ニューラルネットワークの動作と複雑さの性質が変わります。 以下に示すように、ANNには、入力ノード、非表示ノード、および出力ノードの3種類のニューロンがあります。

ソース

入力ノードは、一般に数値または式の形式である情報を受信する責任があります。 情報はアクティベーション値として表示されます。各ノードに番号が付けられている場合、数値が大きいほど、アクティベーションが大きくなります。
情報はさらにネットワークに渡されます。 ノード接続の重みと特定の層の特定のニューロンに関連する活性化関数に基づいて、情報はニューロンからニューロンに渡されます。 各ノードは受信時にアクティベーション値を追加し、値は伝達関数に基づいて変更されます。
情報は、出力ノードに到達するまで、隠れ層を介してネットワーク全体に流れます。 出力ノードは、外の世界に意味のある方法で入力を反映するため、非常に重要です。 ここでは、すべてのレイヤーとノードの重みの調整につながるニューラルネットワークの驚くべき側面を見ることができます。

予測値と実際の値の差(エラー)は逆方向に伝播されます。 したがって、ニューラルネットワークは、発生したエラーから学習し、指定された学習率アプローチに基づいて重みを調整しようとします。

したがって、隠れ層の数、層ごとのニューロンの数、重みの更新戦略、活性化関数などのパラメーターを調整することで、ニューラルネットワークを作成できます。

パラメータを定義する

活性化関数

手元の問題に基づいてニューラルネットワークで使用できるさまざまな活性化関数から選択できます。

活性化関数は、すべてのニューロンが持つ数式です。 ニューラルネットワークの出力を決定します。
この活性化関数は、ネットワーク内のすべてのニューロンに関連付けられており、特定のニューロンの活性化が出力層で関連する予測の導出に役立つかどうかに基づいて、アクティブ化する必要があるかどうかを決定します。 異なるレイヤーには、異なる活性化関数を付加することができます。 活性化関数は、各ニューロンの出力を1〜0または-1〜1の範囲に正規化するのにも役立ちます。

最新のニューラルネットワークは、バックプロパゲーションと呼ばれる重要な手法を使用して、重みを調整することでモデルをトレーニングします。これにより、活性化関数とその微分関数に計算負荷がかかります。

活性化関数の働き
MissingLink

活性化関数には次の3種類があります。
バイナリ-x<0y = 0、x> 0 y = 1
線形-x=y
非線形–さまざまなタイプ:Sigmoid、TanH、Logistic、ReLU、Softmaxなど。

出典:ブログ

タイプ:ReLU
MissingLink

アルゴリズム

ニューラルネットワークには多くの種類がありますが、多くの場合、フィードフォワードネットワークとフィードバック(バックプロパゲーション)ネットワークに分けられます。

1)フォワードフィードネットワークは、入力、出力、および隠れ層を含む非反復ネットワークです。 信号は一方向にしか移動できないためです。 入力データは処理装置層に転送され、そこで計算が実行されます。 各処理係数は、入力の重みに基づいて計算を行います。 新しい値が計算されてから、新しい入力値が次のレイヤーに送られます。

このプロセスは、すべてのレイヤーを通過して結果を決定するまで続きます。 限界伝達関数は、出力層のニューロン出力を測定するために使用されることがあります。 フィードフォワードネットワークは、パーセプトロン(直接および間接)ネットワークとして知られており、これが含まれます。 フィードフォワードネットワークは、データマイニングによく使用されます。

2)フィードバックネットワーク(リカレントニューラルネットワークやRNNなど)には遡及的なメカニズムがあり、トラップ/ループを使用して信号を両方向に移動させることができます。 ニューロン間のすべての可能な通信が許可されます。

このタイプのネットワークにはループが存在するため、安定状態に達するまで絶えず変化する非線形システムになります。 フィードバックネットワークは、ネットワークが接続されたオブジェクトの適切なセットを探しているときに、パフォーマンスの問題に関連するメモリによく使用されます。

トレーニング

フィードフォワードパスとは、与えられた入力を意味し、出力の計算方法に重みを付けます。 トレーニングの完了後、予測を作成するためにフォワードパスを実行するだけです。

ただし、最初にモデルをトレーニングして重みを実際に学習する必要があるため、トレーニング手順は次のように機能します。

  1. すべてのノードの重みをランダムに選択して初期化します。 TensorFlowとKeras(Python)に組み込まれているスマートな初期化メソッドがあります。
  2. すべてのトレーニング例について、現在の重みを使用してフォワードパスを実行し、左から右に向かうすべてのノードの出力を計算します。 最終的な出力は、最後のノードの値です。
  3. 最終出力をトレーニングデータ内の実際のターゲットと比較し、損失関数を使用してエラーを測定します。
  4. 右から左への逆方向パスを実行し、最後のステップで計算されたエラーをバックプロパゲーションを使用して個々のノードに伝播します。
  5. エラーに対する各ニューロンの重みの寄与を計算し、それに応じて最急降下法を使用して接続の重みを調整します。 最後のレイヤーからの範囲でエラー勾配を伝播します。

ニューラルネットワーク用のPythonコード

ニューラルネットワークが理論的にどのように作成されるかを理解したので、Pythonを使用して同じものを実装しましょう。

Pythonのニューラルネットワーク
ニューラルネットワークを作成するために、TensorflowまたはTheanoバックエンドでKerasAPIを使用します。

ライブラリのインストール
テアノ
>>> pip install –upgrade –no-deps git + git://github.com/Theano/Theano.git

TensorflowとKeras
>>>pip3インストールテンソルフロー
>>> pip install –Kerasのアップグレード

ライブラリをインポートする

ケラスをインポートする
keras.modelsからインポートシーケンシャル
keras.layersからDenseをインポートします

人工ニューラルネットワークの初期化

モデル=Sequential()

入力レイヤーと非表示レイヤーを作成します-

model.add(Dense(input_dim = 2、units = 10、activation ='relu'、kernel_initializer ='uniform'))

このコードは、入力レイヤーと1つの隠れレイヤーをシーケンシャルネットワークに追加します
Dense():密に接続されたニューラルネットワークを作成できます
input_dim:入力レイヤーのノードの形状または数
単位:現在の層(非表示層)のニューロンまたはノードの数
活性化:各ノードに適用される活性化関数。「relu」はRectifiedLinearUnitの略です。
kernel_initializer:レイヤーの初期ランダムウェイト

2番目の隠しレイヤー
model.add(Dense(units = 20、activation ='relu'、kernel_initializer ='uniform'))

このコードは、20個のノードと「修正された線形」活性化関数を備えた別の隠れ層を作成してモデルに追加します。 問題と複雑さに応じて、同様の方法でさらにレイヤーを追加できます。

出力層
model.add(Dense(units = 1、activation ='sigmoid'、kernel_initializer ='uniform'))

Sigmoidまたはsoftmaxを使用した単一の出力層は、出力層で一般的に使用される活性化関数です。

ANNコンパイル:
model.compile(optimizer ='adam'、loss ='binary_crossentropy'、metrics = ['accuracy'])

ANNは、トレーニングされる前に、オプティマイザ関数と損失関数を使用してコンパイルされます。

オプティマイザー:ネットワーク用のオプティマイザー機能。オプティマイザーにはさまざまな種類があり、主にadamが使用されます。
損失:損失とエラーの計算に使用されます。 さまざまなタイプがあり、選択は対処される問題の性質によって異なります。
メトリック:モデルのパフォーマンスを測定するために使用されるメトリック。

モデルをトレーニングデータに適合させる:
model.fit(X_train、Y_train、batch_size = 64、epochs = 30)

このコードはモデルを作成します

結論

手元の問題に応じて変更できるさまざまなパラメーターを理解したので、人工ニューラルネットワーク(Python上)を最初から作成できるようになりました。

ディープラーニングの手法、機械学習について詳しく知りたい場合は、IIIT-BとupGradの機械学習とAIのPGディプロマをご覧ください。これは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディを提供しています。課題、IIIT-B卒業生のステータス、5つ以上の実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。

世界のトップ大学からMLコース学びましょう。 マスター、エグゼクティブPGP、または高度な証明書プログラムを取得して、キャリアを迅速に追跡します。

AI主導の技術革命をリードする

機械学習とNLPの高度な証明書プログラムに申し込む