単一ニューロンの実装
メニューを表示するにはスワイプしてください
定義
ニューロンはニューラルネットワークの基本的な計算単位。複数の入力を処理し、単一の出力を生成することで、ネットワークが学習や予測を行うことを可能にする。
この例では、1つのニューロンを持つニューラルネットワークを構築し、2値分類タスク(例:スパム検出)を行う。 ニューロンは数値特徴量を受け取り、0から1の値を出力する。これは、メールがスパム(1)かハム(0)である確率を表す。
手順:
- 各入力に重みを掛ける;
- すべての重み付き入力を合計する;
- 出力をシフトするためにバイアスを加える;
- 結果をシグモイド活性化関数に通し、確率出力のために((0,1))の範囲に変換する。
注記
ニューロンのバイアスも学習可能なパラメータ。
ニューロンクラス
ニューロンは重みとバイアスを保持する必要があり、これらの関連するプロパティをまとめるためにクラスが自然な方法となる。
注記
このクラスは最終的なニューラルネットワーク実装の一部にはならないが、重要な原則を効果的に示している。
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: 入力ごとに1つずつランダムに初期化された値。bias: 単一のランダム値。 どちらも対称性を避けるためにnp.random.uniform()を用いて 一様分布 ([-1, 1]) から取得。
順伝播
ニューロンの activate() メソッドは重み付き和を計算し、シグモイド関数を適用。
重み付き和は重みと入力のドット積を使用:
input_sum_with_bias = np.dot(self.weights, inputs) + self.bias
その後、活性化関数を適用してニューロンの最終出力を取得。
np.dot() を使用することでループを避け、重み付き和全体を1行で計算。
シグモイド関数はこの生の値を確率に変換:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
シグモイド活性化関数
生の出力値(z)に対して、シグモイド関数は次のように定義される:
σ(z)=1+e−z1任意の数値を ((0,1)) の範囲にマッピングするため、ニューロンの出力が確率を表す必要がある二値分類に最適。
この式を用いることで、シグモイド関数はPythonでシンプルな関数として実装できる:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
ReLU 関数の式は以下の通りで、出力は z が正の場合はそのまま z、それ以外は0 となる:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. 単一ニューロンにおけるバイアス項の役割は何ですか?
2. なぜ重みをゼロではなく小さなランダム値で初期化するのですか?
すべて明確でしたか?
フィードバックありがとうございます!
セクション 2. 章 1
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 2. 章 1