パーセプトロン層
メニューを表示するにはスワイプしてください
パーセプトロンは最も単純なニューラルネットワークであり、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をゼロで初期化することで、形状エラーを防ぎ、順伝播・逆伝播の両方でレイヤーの一貫性を保つことができる。
フォワードメソッド
レイヤーの順伝播では、生出力を計算し、活性化関数を適用する:
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 を重み行列と掛け算する前にこのコードを適用する必要があるのはなぜですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください