人工知能(AI)の計算の中核を担うのが「重み(weight)」と呼ばれるパラメータです。AIが知識を獲得するプロセスは、神秘的な魔法ではなく、厳密な数学とアルゴリズムの積み重ねに基づいています。
ニューラルネットワークが重みを学ぶ基本原理はシンプルです。現在の重みを使って予測を行い、目標とする正解とのずれを「損失」として数値化します。そして、その損失が小さくなる坂の傾き(勾配)を計算し、坂を下る方向へと重みを少しずつ書き換えていきます。これが「勾配降下法」の仕組みです。本稿では、最小限の数式と具体的な数値例を通して、重みが調整されていく基本原理と現実の課題を解き明かします。
---

1. 「重み」とは何か:入力の影響度を決める調整つまみ
ニューラルネットワークの基本的な計算は、「入力された数値に係数を掛け算し、それらを足し合わせて出力を作る」という構造を持っています。このとき、各入力信号に掛け合わされる係数が「重み」です。
部屋の家賃を予測するモデルを例に取ると、駅からの距離や部屋の広さといった入力情報に対し、どの情報をどれくらい強く家賃に反映させるかという「影響度の大きさ」を決めているのが重みです。重みが大きければその入力は出力に強く影響し、ゼロに近ければほとんど無視されます。
バイアス(定数項)の役割
実際の計算では、重みだけでなく「バイアス(bias)」と呼ばれる定数項も組み合わされます。入力を x、重みを w、バイアスを b と置くと、基本的な出力の計算は次のようになります。
y = wx + b
この関係は単純な比例ではなく、数学的には「一次関数(アフィン変換)」です。バイアス b がなければ、入力 x がゼロのとき出力 y も必ずゼロになってしまいます。「広さがゼロでも最低限かかる基本料金」のように、入力がゼロでも底上げされる基準値を与えるのがバイアスの役割であり、状況に応じて正の値だけでなく負の値もとります。
重みの大きさ=重要度ランキングではない
「重みの数値が大きい入力ほど重要である」とは一概に言えません。重みの数値は、入力データの「単位やスケール」に直接左右されるからです。
たとえば部屋の広さを「\text{m}^2」で入力するか「\text{cm}^2」で入力するかによって、同じ影響を及ぼすために必要な重みの数値は1万倍も変化します。データの単位やばらつきを揃える正規化などの前処理が施されていない限り、重みの絶対値だけで単純な重要度比較はできません。
重みの初期値
学習前の重みには、でたらめな乱数を適当に入れるのではなく、学習の進行を妨げないよう計算された確率分布(Xavierの初期化やHeの初期化など)に基づいて、適切なばらつきを持つ小さな乱数が設定されます。一方、バイアスは最初「0」などの扱いやすい定数に設定されるのが一般的です。
---
2. 予測と正解のずれを測る:「損失」という評価のものさし
重みを調整するには、現在の予測が目標からどれだけ離れているかを測る必要があります。このずれを数値化したものが「損失(loss)」または「誤差(error)」です。
二乗誤差の考え方と区別
ずれを測る代表的な方法が「二乗誤差」です。予測値と正解値の差を2乗することで、ずれを必ず0以上の値にし、ずれが大きいほどペナルティを急激に重くします。
用語の区別として以下の3点があります。
- 単一データの二乗誤差:1つのデータ点について計算した二乗のずれ。
- 二乗和誤差:複数のデータ点すべての二乗誤差を足し合わせた総和。
- 平均二乗誤差(MSE):二乗和誤差をデータ数で割り、1データあたりの平均値にしたもの。
微分の計算で生じる係数2を打ち消すためにあらかじめ式に「1/2」を掛ける流儀もありますが、本稿では最も直接的な二乗誤差の定義式を採用します。
教材モデルの設定
重み更新の仕組みを明確に理解するため、1つの入力 x と1つの重み w だけを持つ最小の線形モデルを考えます。バイアスは一旦脇に置きます。
- 予測値:\hat{y} = wx
- 正解値(目標値):y
- 損失関数(二乗誤差):L = (wx - y)^2
学習させる具体的なデータとして「入力 x = 1 のとき、目標値 y = 2」という1組のデータ点を与えると、損失 L は重み w の式として次のように表せます。
L = (w \cdot 1 - 2)^2 = (w - 2)^2
放物線の谷底と、現実の多層ネットワークの違い
この式をグラフに描くと、横軸を重み w、縦軸を損失 L としたとき、正解である w = 2 を最下点(谷底)とする綺麗な左右対称の放物線が現れます。谷底では L = 0 となり、予測と正解が完全に一致します。
ただし、損失が綺麗な放物線を描き、損失ゼロの谷底が1つだけ約束されているのは、「1入力・1係数、データ1点」という単純化された教材条件だからです。
何百万ものパラメータが複雑に絡み合う実際のディープラーニングでは、損失の地形(損失曲面)は無数の起伏が存在する多次元の山岳地帯になります。そこには真の谷底ではない窪み(局所的最適解:ローカルミニマム)や、方向によって谷にも峠にもなる鞍点(サドルポイント)が無数に存在します。そのため、現実の複雑なモデルにおいて、大域的な最良の解に確実に到達できることや、損失が完全にゼロになることは保証されていません。局所的な傾きを手がかりに、少しでも損失が小さくなる地点を探索していくのが現実の学習の姿です。
---
3. 勾配降下法と更新式:坂を下るように重みを変える
損失を減らすために重みをどの方向へどれだけ動かすべきかを決める基本手法が「勾配降下法(Gradient Descent)」です。
坂の傾き(勾配)を手がかりにする
足元の地面の傾きを頼りに谷底へ降りていくように、損失関数の坂の傾きを手がかりにします。損失関数 L = (wx - y)^2 を重み w で微分すると、合成関数の微分法則より次のようになります。
\frac{dL}{dw} = 2x(wx - y)
教材条件 x = 1, y = 2 を代入すると、
\frac{dL}{dw} = 2 \cdot 1 \cdot (w \cdot 1 - 2) = 2(w - 2)
となります。予測の誤差を e = wx - y = w - 2 と置くと、傾きはシンプルに「誤差の2倍(2e)」です。
重みの更新式
求めた傾きを使って、重みを次の更新式に従って書き換えます。
w_{\text{next}} = w - \eta \frac{dL}{dw}
ここで \eta(イータ)は「学習率(learning rate)」と呼ばれる正の定数で、一歩の歩幅を制御します。
数式のマイナス記号により、重みは次のように誘導されます。
- 現在の重みが w = 0(正解の2より小さい)の場合、誤差は e = -2、傾きは -4(右下がりの坂)です。更新式は w_{\text{next}} = 0 - \eta(-4) = 4\eta となり、重みは正解の2に近づく正の方向へ動きます。
- 現在の重みが w = 3(正解の2より大きい)の場合、誤差は e = +1、傾きは +2(右上がりの坂)です。更新式は w_{\text{next}} = 3 - \eta(+2) = 3 - 2\eta となり、重みは正解の2に近づく負の方向へ引き戻されます。
逆伝播法と勾配降下法の違い
ここで初心者が混同しやすい2つの概念を整理しておきます。
- 逆伝播法(バックプロパゲーション):多層ニューラルネットワークにおいて、出力側で生じた誤差を後ろの層から前の層へと遡らせながら、各重みに対する傾き(勾配)を「効率よく計算する手法」です。
- 勾配降下法:逆伝播法で計算された傾き情報を使って、実際に重みの数値を書き換える「更新アルゴリズム」です。
「逆伝播法が足元の傾きを調べ、勾配降下法がその傾きに従って足を一歩踏み出す」という明確な役割分担があります。
---
4. 学習率 \eta が決める歩幅:挙動の厳密な数学的分類
重みを動かす方向が正しくても、歩幅である学習率 \eta の設定によって学習の成否は大きく分かれます。
誤差の漸化式
今回の教材モデルにおいて、1回更新した後の新しい誤差 e_{\text{next}} は、更新前の誤差 e とどのような関係になるでしょうか。更新式 w_{\text{next}} = w - \eta \frac{dL}{dw} に \frac{dL}{dw} = 2e と w = e + 2、w_{\text{next}} = e_{\text{next}} + 2 を代入して整理します。
e_{\text{next}} + 2 = (e + 2) - \eta(2e)
両辺から2を引くと、次の漸化式が得られます。
e_{\text{next}} = (1 - 2\eta)e
これに伴い、更新後の損失 L_{\text{next}} = e_{\text{next}}^2 は次のようになります。
L_{\text{next}} = (1 - 2\eta)^2 L
1回更新するごとに誤差が (1 - 2\eta) 倍され、損失がその2乗である (1 - 2\eta)^2 倍されます。この倍率によって更新の挙動が数学的に分類されます。
代表的な数値例で見る挙動の違い
初期値 w = 0(初期誤差 e = -2, 損失 L = 4)から1回更新したときの数値例です。
- $0 < \eta < 0.5$(滑らかな収束)
倍率 (1 - 2\eta) は0より大きく1より小さい正の値です。谷底を飛び越えずに誤差が滑らかに縮小します。 - $\eta = 0.2$ の場合:倍率は 1 - 2(0.2) = 0.6 です。 $w_{\text{next}} = 0 - 0.2 \times (-4) = 0.8 新しい誤差は 0.8 - 2 = -1.2(元の -2 の 0.6 倍)となり、損失も 1.44(元の 4 の 0.36$ 倍)に減少します。繰り返せば目標値2へ収束します。
- $\eta = 0.5$(一撃での到達)
倍率は 1 - 2(0.5) = 0 です。 $w_{\text{next}} = 0 - 0.5 \times (-4) = 2.0$ わずか1回の更新で誤差がゼロになり、谷底へ着地します。
- $0.5 < \eta < 1$(飛び越しつつの収束:オーバーシュート)
倍率は -1 より大きく 0 より小さい負の値です。谷底を飛び越えて反対側の斜面に移りますが、絶対値は小さくなるため左右に振動しながら谷底へ収束します。「オーバーシュート(行き過ぎ)」と「発散(破綻)」は区別され、\eta < 1 であれば学習は成立します。
- $\eta = 1$(永遠の振動)
倍率は 1 - 2(1) = -1 です。 $w_{\text{next}} = 0 - 1.0 \times (-4) = 4.0 新しい誤差は 4.0 - 2 = +2.0 となり、次は w = 4.0 から再び w = 0 へ跳ね返ります。損失は 4$ のまま谷底を挟んで永遠に振動します。
- $\eta > 1$(振動しながらの発散)
倍率の絶対値が1より大きくなります。更新するたびに谷底を飛び越え、振幅が拡大して計算が破綻します。 - $\eta = 1.1$ の場合:倍率は 1 - 2(1.1) = -1.2 です。 $w_{\text{next}} = 0 - 1.1 \times (-4) = 4.4 新しい誤差は 4.4 - 2 = +2.4 となり、絶対値が 2.0 から 2.4 へ拡大し、損失も 5.76$ に増加して谷底から遠ざかります。
- 小さな学習率:$\eta = 0.05$(慎重すぎる歩幅)
\eta = 0.05 のとき、倍率は 0.9 です。 $w_{\text{next}} = 0 - 0.05 \times (-4) = 0.2 新しい誤差は -1.8 となり、谷底に向かって安全に進みますが1回で 0.2$ しか進みません。目標値2に近づくまでに膨大な更新ステップと計算時間を要します。
- 最初から正解にいる場合:$w = 2$(静止)
最初から重みが正解の w = 2 であれば誤差は 0、傾きも \frac{dL}{dw} = 0 です。更新式は w_{\text{next}} = 2 - \eta(0) = 2 となり、重みはその場にとどまります。
教材ツールの読み方と仕様上の注意
この挙動を観察できるインタラクティブツールが用意されています。
INTERACTIVE
実際に動かして確かめる
条件や数値を変え、本文で説明した関係を確認できます。- ツールの操作方法:スライダーで初期重み w(入力範囲:-2 \sim 4)と学習率 \eta を設定し、1回更新後の重み w_{\text{next}} や損失の変化をグラフ上で確認できます。
- 仕様と限界:スライダーの入力上限は 4 ですが、初期値 w = 0, \eta = 1.1 では更新後の値が w_{\text{next}} = 4.4 となり、初期値 w = -2, \eta = 1.1 では w_{\text{next}} = 6.8 に達します。本ツールはこれらを入力上限で切り詰めることなく、グラフ表示枠をはみ出す場合でも数値ラベル等で正しく読み取れる設計になっています。
---
5. 現実のディープラーニングへ広がる3つの視点
「予測し、損失を測り、勾配に沿って更新する」という原理は大規模AIでも共通ですが、実践では次の3つの視点が不可欠です。
1. データの扱い方:バッチ処理の工夫
現実のデータは数万〜数十億件に及びます。
- フルバッチ学習:全訓練データに対する平均勾配を使って重みを更新します。勾配の向きは最も正確で安定しますが、データが巨大になると計算負荷が非常に高くなります。
- ミニバッチ学習と確率的勾配降下法(SGD):データを数十〜数百件の小さな束(ミニバッチ)に分け、その束ごとに重みを更新します。計算効率が高まるだけでなく、適度なランダムな揺らぎによって浅い局所解から脱出しやすくなる実用上のメリットがあります。
2. 訓練データの暗記を超えて:過学習と汎化性能
AI開発の真の目的は、手元の訓練データを丸暗記することではなく、未知のデータに対して正しく推論できる「汎化性能(generalization)」の獲得です。
訓練データだけに過剰に適応すると、ノイズまで学習して未知データへの精度が下がる「過学習(overfitting)」が発生します。そのため実際の開発では、学習用とは別に「検証用データ」を用意し、未知データに対する精度を監視しながら適切なタイミングで学習を切り上げるなどの調整を行います。
3. 重みは知識をどう記憶するのか:分散表現
巨大なモデルにおいて、1つの重みと1つの知識が一対一で対応しているわけではありません。多層ニューラルネットワークでは、入力された概念が多数のニューロンの活動パターンの組み合わせとして表現され、無数の重み同士の相互作用の中に知識が分散して保存されます。これを「分散表現(distributed representation)」と呼びます。
ここで重要なのは、パラメータ(重みそのものの数値)と隠れ層に現れる特徴表現を区別することです。また、分散表現だからといって内部が一切理解できないブラックボックスというわけではありません。現代では、内部の活性化パターンを可視化したり論理的な計算回路を解明したりする「解釈可能性(メカニスティック・インタープリタビリティ)」の研究が進められています。
---
6. よくある疑問と誤解(FAQ)
Q1. なぜ最初、すべての重みを「0」にしてはいけないのですか?
重みが1つしかないモデルでは初期値が w = 0 でも学習できますが、複数のニューロンが並ぶ多層ネットワークでは「対称性の問題」が生じます。すべての重みを0にすると、同じ層の全ニューロンが全く同じ勾配を計算してしまい、何回更新しても同一の値にしか変化しません。異なる特徴を分担して学習させるには、XavierやHeの初期化などを用いてランダムなばらつきを与え、あらかじめ対称性を破っておく必要があります(バイアスは重みにばらつきがあれば0から始めても問題ありません)。
Q2. 学習率は最初から最後まで固定ですか?
実践的なディープラーニングでは変化させるのが一般的です。最初は大きな歩幅で大まかに谷に近づき、終盤は歩幅を小さくして慎重に着地するため、学習の進行に応じて歩幅を下げる「学習率スケジューラ」が用いられます。さらに、過去の勾配の大きさやばらつきに応じてパラメータごとに歩幅を自動調整する最適化アルゴリズム(Adamなど)も広く使われています。
Q3. 勾配降下法を使えば、必ず最高の重みにたどり着けますか?
必ずしも全体の中で最良の重み(大域的最適解)にたどり着ける保証はありません。勾配降下法は現在地の足元の傾きに沿って進む局所的な探索手法であるため、多次元の複雑な曲面では浅い窪み(局所解)や平坦な領域(鞍点)で停滞する可能性があります。そのため、ネットワーク構造、初期化、正則化、学習率調整などの工学的工夫を総合的に組み合わせる必要があります。
---
結び:勾配という羅針盤を頼りに進む学習の旅
ニューラルネットワークが重みを学ぶプロセスは、「予測し、ずれを測り、坂を下るように係数を微調整する」という数学的に明快な反復処理です。
更新式 w_{\text{next}} = w - \eta \frac{dL}{dw} のシンプルな姿の中に、現代のAIが経験から知識を紡ぎ出すための基本原理が凝縮されています。単一係数の振る舞いから多層ネットワークの分散表現まで、この重み更新の土台を理解することで、進化を続けるAI技術の内側を確かな解像度で見つめることができるはずです。
---
出典・参考資料
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). *Deep Learning*, Chapter 4: Numerical Computation, Section 4.3 Gradient-Based Optimization. MIT Press. https://www.deeplearningbook.org/contents/numerical.html
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). *Deep Learning*, Chapter 15: Representation Learning, Section 15.4 Distributed Representation. MIT Press. https://www.deeplearningbook.org/contents/representation.html
- Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. *Nature*, 323(6088), 533–534. https://doi.org/10.1038/323533a0
