ニューラルネットワークの数学(順伝播と活性化関数)
入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子
- 1
- ニューラルネットワークの数学(順伝播と活性化関数)の本質的な定義と直感的ビジュアルをシミュレーターで体験できる。
- 2
- 公式や証明の背景にある数学的意味と、厳密な導出ステップを解説。
- 3
- 実社会における工学応用(単層パーセプトロンによる2クラス線形分類器)のTypeScript実装コードを収録。
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
ニューラルネットワークの数学(順伝播と活性化関数)の基礎原理を体系化し、抽象的な計算を直感的に扱うために誕生した。
身につく武器・思考力
入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子。この考え方を身につけることで、複雑な課題を単純化して数理モデルとして解く力が養われる。
実社会・ITでの活躍現場
- •単層パーセプトロンによる2クラス線形分類器
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
2つの入力値 x1, x2、それぞれの重み(Weight: w1, w2)、バイアス b をスライダーで調整してみよう。線形結合 z = w1*x1 + w2*x2 + b の値が計算され、ボタンで選択した「活性化関数(ReLU / Sigmoid / Step)」を通すことで、最終的な出力ニューロンがどのように発火(活性化)するかを直感的にシミュレートできる。
↑ 人工知能のディープラーニングは、この「内積をとってバイアスを足し、非線形関数を通す」ノードを数億〜数千億個つなぎ合わせた巨大な関数です。
Layer 2 — 定義・受験・証明
定義
人工ニューロン(パーセプトロン)は、複数の入力ベクトル に対し、重みベクトル との内積(線形結合)を計算し、バイアス を加算した後に非線形な「活性化関数 」を適用して出力を算出する。
代表的な活性化関数には ReLU: やシグモイド関数 がある。
公式・数理モデル
証明・導出
なぜ非線形な活性化関数が必要なのか? もし活性化関数を使わず線形変換 のまま多層に重ねると、何十層重ねても合成写像は
という「単なる1つの線形変換」に退化してしまう(線形結合の線形結合は線形結合にしかならない)。
非線形の活性化関数(特に区分線形のReLU)を挟むことで初めて、空間を折り曲げ、複雑な境界線を描き分ける「万能近似能力(任意の連続関数を近似できる定理)」が生まれる。
押さえておきたいポイント
- 人工知能の最小単位は「入力 × 重みの足し算(内積)+ バイアス」という単純な高校数学である
- 重み は各入力の重要度、バイアス は発火のしやすさ(感度)を制御する
- 非線形活性化関数(ReLUなど)を挟むことで、複雑な境界を表現できる多層ネットワークになる
- AIの「学習」とは、正解との誤差が最小になるよう、この重み とバイアス を微積分(勾配降下法)で自動更新することである
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
単層パーセプトロンによる2クラス線形分類器
入力された2つの特徴量(例えば「年収」と「勤続年数」)から、ローン審査の可否(0か1か)を瞬時に推論する機械学習の推論エンジンの最小実装。
1// 活性化関数2const relu = (z: number) => Math.max(0, z);3const sigmoid = (z: number) => 1 / (1 + Math.exp(-z));45// 単一ニューロンの順伝播計算6function forwardNeuron(7 inputs: [number, number],8 weights: [number, number],9 bias: number,10 activation: 'relu' | 'sigmoid'11): { z: number; output: number } {12 // 線形結合: z = w1*x1 + w2*x2 + b13 const z = inputs[0] * weights[0] + inputs[1] * weights[1] + bias;14 const output = activation === 'relu' ? relu(z) : sigmoid(z);15 return { z, output };16}1718// 実行例: 入力 [2.0, 1.5], 重み [0.8, -0.5], バイアス 0.119const result = forwardNeuron([2.0, 1.5], [0.8, -0.5], 0.1, 'sigmoid');20console.log(`線形和 z: ${result.z.toFixed(2)}, 発火出力: ${result.output.toFixed(4)}`);
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元