Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ パーセプトロン層 | ニューラルネットワークをゼロから構築
Pythonによるニューラルネットワーク入門

bookパーセプトロン層

メニューを表示するにはスワイプしてください

パーセプトロンは最も単純なニューラルネットワークであり、1つのニューロンのみを持つ構造。より複雑なタスクには、多層パーセプトロン(MLP)を使用し、1つ以上の隠れ層を含むことで、ネットワークがより豊かなパターンを学習可能。

MLPの構成要素:

  1. 入力層 — データの受け取り;
  2. 隠れ層 — パターンの抽出;
  3. 出力層 — 予測の生成。

各層には複数のニューロンが存在し、ある層の出力が次の層の入力となる。

層の重みとバイアス

これまで、ニューロンは重みをベクトル、バイアスをスカラーとして保持。 一方、層には多数のニューロンが含まれるため、重みは行列となり、各が1つのニューロンの重みを格納。 すべてのニューロンのバイアスはベクトルを形成。

入力が3つ、ニューロンが2つの層の場合:

W=[W11W12W13W21W22W23],b=[b1b2]W=\begin{bmatrix} W_{11} & W_{12} & W_{13} \\ W_{21} & W_{22} & W_{23} \end{bmatrix}, \qquad b=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}

ここで、WijW_{ij}jj番目の入力からii番目のニューロンへの重み、bib_iはニューロンiiのバイアス。

順伝播

順伝播では、各ニューロンを重み付き和の計算、バイアスの加算、活性化関数の適用によって活性化。

これまで、単一のニューロンでは:

[ z = W \cdot x + b ]

現在は、(W)の各が1つのニューロンの重みベクトルとなるため、重み行列と入力ベクトルの行列積を行うことで、すべてのニューロンの重み付き和を一度に計算可能。

それぞれのニューロンの出力にバイアスを加えるために、バイアスのベクトルも加算する必要があります。

最後に、活性化関数が結果に適用されます。ここではシグモイドまたはReLUです。レイヤーにおける順伝播の最終的な式は次の通りです:

a=activation(Wx+b)a = activation(Wx + b)

ここで、aaはニューロンの活性化(出力)のベクトルです。

レイヤークラス

MLPはレイヤーから構成されるため、専用のLayerクラスを定義します。その属性は以下の通りです:

  • inputs: 入力ベクトル(n_inputs要素);
  • outputs: ニューロンの生出力(n_neurons要素);
  • weights: 重み行列;
  • biases: バイアスベクトル;
  • activation_function: レイヤーで使用される活性化関数。

重みとバイアスは、([-1, 1])の一様分布からランダムな値で初期化されます。inputsoutputsは、後の誤差逆伝播で形状を揃えるためにゼロで埋められたNumPy配列として初期化されます。

class Layer:
    def __init__(self, n_inputs, n_neurons, activation_function):
        self.inputs = np.zeros((n_inputs, 1))
        self.outputs = np.zeros((n_neurons, 1))
        self.weights = ...
        self.biases = ...
        self.activation = activation_function
Note
注意

inputsoutputs をゼロで初期化することで、形状エラーを防ぎ、順伝播および逆伝播の両方でレイヤーの一貫性を維持。

forward メソッド

レイヤーの順伝播は、生の出力を計算し、活性化関数を適用:

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs: weighted sum + bias
    self.outputs = ...
    # Apply activation
    return ...

入力を列ベクトルに変形することで、重み行列との積が正しく行われ、ネットワーク全体で期待される次元に一致。

Note
注意

ご希望であれば、さらに短縮した説明、レイヤー構造の図、または Layer クラスの完全な動作コードも作成可能。

1. 多層パーセプトロン(MLP)が単純パーセプトロンよりも強力である理由は何ですか?

2. inputsを重み行列と掛け算する前にこのコードを適用する必要があるのはなぜですか?

question mark

多層パーセプトロン(MLP)が単純パーセプトロンよりも強力である理由は何ですか?

正しい答えを選んでください

question mark

inputsを重み行列と掛け算する前にこのコードを適用する必要があるのはなぜですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  3
some-alt