パーセプトロン層
メニューを表示するにはスワイプしてください
パーセプトロンは最も単純なニューラルネットワークであり、1つのニューロンのみを持つ構造。より複雑なタスクには、多層パーセプトロン(MLP)を使用し、1つ以上の隠れ層を含むことで、ネットワークがより豊かなパターンを学習可能。
MLPの構成要素:
- 入力層 — データの受け取り;
- 隠れ層 — パターンの抽出;
- 出力層 — 予測の生成。
各層には複数のニューロンが存在し、ある層の出力が次の層の入力となる。
層の重みとバイアス
これまで、ニューロンは重みをベクトル、バイアスをスカラーとして保持。 一方、層には多数のニューロンが含まれるため、重みは行列となり、各行が1つのニューロンの重みを格納。 すべてのニューロンのバイアスはベクトルを形成。
入力が3つ、ニューロンが2つの層の場合:
W=[W11W21W12W22W13W23],b=[b1b2]ここで、Wijはj番目の入力からi番目のニューロンへの重み、biはニューロンiのバイアス。
順伝播
順伝播では、各ニューロンを重み付き和の計算、バイアスの加算、活性化関数の適用によって活性化。
これまで、単一のニューロンでは:
[ z = W \cdot x + b ]
現在は、(W)の各行が1つのニューロンの重みベクトルとなるため、重み行列と入力ベクトルの行列積を行うことで、すべてのニューロンの重み付き和を一度に計算可能。
それぞれのニューロンの出力にバイアスを加えるために、バイアスのベクトルも加算する必要があります。
最後に、活性化関数が結果に適用されます。ここではシグモイドまたはReLUです。レイヤーにおける順伝播の最終的な式は次の通りです:
a=activation(Wx+b)ここで、aはニューロンの活性化(出力)のベクトルです。
レイヤークラス
MLPはレイヤーから構成されるため、専用のLayerクラスを定義します。その属性は以下の通りです:
inputs: 入力ベクトル(n_inputs要素);outputs: ニューロンの生出力(n_neurons要素);weights: 重み行列;biases: バイアスベクトル;activation_function: レイヤーで使用される活性化関数。
重みとバイアスは、([-1, 1])の一様分布からランダムな値で初期化されます。inputsとoutputsは、後の誤差逆伝播で形状を揃えるためにゼロで埋められた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
inputs と outputs をゼロで初期化することで、形状エラーを防ぎ、順伝播および逆伝播の両方でレイヤーの一貫性を維持。
forward メソッド
レイヤーの順伝播は、生の出力を計算し、活性化関数を適用:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
入力を列ベクトルに変形することで、重み行列との積が正しく行われ、ネットワーク全体で期待される次元に一致。
ご希望であれば、さらに短縮した説明、レイヤー構造の図、または Layer クラスの完全な動作コードも作成可能。
1. 多層パーセプトロン(MLP)が単純パーセプトロンよりも強力である理由は何ですか?
2. inputsを重み行列と掛け算する前にこのコードを適用する必要があるのはなぜですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください