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

パーセプトロン層

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

パーセプトロンは最も単純なニューラルネットワークであり、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をゼロで初期化することで、形状エラーを防ぎ、順伝播・逆伝播の両方でレイヤーの一貫性を保つことができる。

フォワードメソッド

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

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

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

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

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

question mark

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

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

question mark

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

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

すべて明確でしたか?

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

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

セクション 2.  3

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 2.  3
some-alt