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

book単一ニューロンの実装

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

Note
定義

ニューロンはニューラルネットワークの基本的な計算単位。複数の入力を処理し、単一の出力を生成することで、ネットワークが学習や予測を行うことを可能にする。

この例では、1つのニューロンを持つニューラルネットワークを構築し、2値分類タスク(例:スパム検出)を行う。 ニューロンは数値特徴量を受け取り、0から1の値を出力する。これは、メールがスパム(1)かハム(0)である確率を表す。

手順:

  1. 各入力に重みを掛ける;
  2. すべての重み付き入力を合計する;
  3. 出力をシフトするためにバイアスを加える;
  4. 結果をシグモイド活性化関数に通し、確率出力のために((0,1))の範囲に変換する。
Note
注記

ニューロンのバイアスも学習可能なパラメータ。

ニューロンクラス

ニューロンは重みバイアスを保持する必要があり、これらの関連するプロパティをまとめるためにクラスが自然な方法となる。

Note
注記

このクラスは最終的なニューラルネットワーク実装の一部にはならないが、重要な原則を効果的に示している。

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)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

任意の数値を ((0,1)) の範囲にマッピングするため、ニューロンの出力が確率を表す必要がある二値分類に最適。

この式を用いることで、シグモイド関数はPythonでシンプルな関数として実装できる:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

ReLU 関数の式は以下の通りで、出力は zz が正の場合はそのまま zz、それ以外は0 となる:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. 単一ニューロンにおけるバイアス項の役割は何ですか?

2. なぜ重みをゼロではなく小さなランダム値で初期化するのですか?

question mark

単一ニューロンにおけるバイアス項の役割は何ですか?

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

question mark

なぜ重みをゼロではなく小さなランダム値で初期化するのですか?

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

すべて明確でしたか?

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

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

セクション 2.  1

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 2.  1
some-alt