ニューラルネットワークとは?
ニューラルネットワークとは、重み付きの数値変換をつなぎ、データから予測の仕方を調整する機械学習モデルです。神経回路に着想を得ていますが、脳の働きをそのまま再現するものではありません。画像分類や文章生成でも、内部では数値の計算が行われます。
この記事では、入力3個・出力1個の例を使い、予測、損失、逆伝播、重みの更新を手計算で追います。まず基本構造と活性化関数を理解し、学習後に何が変わったかを確かめましょう。学習方法や未知のデータでの評価の全体像は、機械学習の仕組みを線形回帰で学ぶ記事で説明しています。

ニューラルネットワークの基本構造
基本となる順方向のネットワークでは、入力層から中間層を経て出力層へ数値を渡します。各層の計算単位をニューロン、またはノードと呼びます。
| 層 | 役割 | 具体例・条件 |
|---|---|---|
| 入力層 | データを受け取る | 画素値を並べる。8ビット画像の0〜255を0〜1に変換するなど、前処理を定める |
| 中間層 | 重みとバイアスで変換し、活性化関数を適用する | 複数の特徴を組み合わせる。人が各ノードの意味を指定するとは限らない |
| 出力層 | 目的に合わせた予測を返す | 二値分類の確率や、回帰の数値。すべての出力が確率になるわけではない |
犬と猫の2クラスだけを扱う分類器なら、出力を犬0.9・猫0.1のように解釈する設計ができます。ただし、この数値だけで実際の正解率90%が保証されるわけではありません。確率の信頼性は別のデータで検証します。
中間層を深く重ねるものが深層学習の代表例です。ResNetには数十層以上の構成もありますが、層やノードを増やすだけで性能が上がるとは限りません。データ量、学習の安定性、計算量との釣り合いが必要です。

ニューロンの出力を計算する
まず入力ごとに重みを掛けて足し、バイアスを加えます。その結果に活性化関数を適用します。加算前の入力と区別するため、重み付き和をz、出力をaと書きます。
\[ z=\sum_{i=1}^{n}w_i x_i+b,\qquad a=f(z) \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| xᵢ・wᵢ | i番目の入力と重み | 以下の例では無次元 |
| b・z | バイアスと重み付き和 | 以下の例では無次元 |
| f・a | 活性化関数とその出力 | fの選択で出力範囲が変わる |
| n・i・Σ | 入力数・添字・総和 | nは正整数、iは1〜n |
入力を(0.5, 0.8, 0.2)、重みを(0.2, −0.5, 1.0)、バイアスを0.1とします。ここではすべて無次元です。物理量を入力する場合は、前処理の基準と重みの単位もそろえます。
\[ \begin{aligned}z&=0.2\times0.5+(-0.5)\times0.8+1.0\times0.2+0.1\\&=0.1-0.4+0.2+0.1=0\end{aligned} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| z | 上の入力・重み・バイアスによる和 | 無次元、結果は0 |
シグモイド関数なら出力は0.5、ReLUなら0です。このように入力から出力を求める工程を順伝播と呼びます。ここではまだ重みを変えていません。学習では、予測の誤りを測ってから更新します。
活性化関数の役割と種類
活性化関数は、入力と出力の関係に曲がりや折れ曲がりを与えます。線形変換とバイアスの加算だけを何段重ねても、一つの同じ種類の変換にまとめられます。非線形な関数を間に置くことで、表現できる関係を広げます。
ステップ関数:しきい値で判定する
\[ f(z)=\begin{cases}1&(z\geq0)\\0&(z<0)\end{cases} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| z | 関数への入力 | 無次元、しきい値は0 |
| f(z) | 判定の出力 | 0または1 |
0以上かどうかを明確に判定できます。一方、0では微分できず、それ以外では傾きが0です。微分を使って少しずつ重みを調整する通常の逆伝播には向きません。
シグモイド関数:二値分類の出力に使う
\[ f(z)=\frac{1}{1+e^{-z}},\qquad f(0)=\frac{1}{1+1}=0.5 \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| z | 関数への入力 | 無次元 |
| e | 自然対数の底 | 約2.71828、無次元 |
| f(z) | 変換後の出力 | 0より大きく1より小さい |
二値分類では「正解ラベル1の確率」を表す出力として使えます。入力の絶対値が大きいと傾きが小さくなります。多層の中で小さな微分を掛け続けると勾配が弱まり、学習が進みにくくなることがあります。
ReLU:正の値をそのまま通す
\[ f(z)=\max(0,z) \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| z | 関数への入力 | 以下では無次元 |
| max・f(z) | 大きい方を選んだ出力 | zが負なら0、正ならz |
正の領域では傾きが1で、シグモイドのような飽和を避けられます。ただし、負の領域では傾きが0です。更新によって負の入力ばかり受けるノードは、学習に寄与しにくくなる場合があります。0での微分の扱いは実装上の約束が必要です。
Leaky ReLU・tanh・Swish
\[ \begin{aligned}f_{\mathrm{Leaky}}(z)&=\begin{cases}z&(z\geq0)\\\alpha z&(z<0)\end{cases}\\ f_{\tanh}(z)&=\frac{e^z-e^{-z}}{e^z+e^{-z}}\\f_{\mathrm{Swish}}(z)&=\frac{z}{1+e^{-\beta z}}\end{aligned} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| z・e | 入力と自然対数の底 | 無次元 |
| α | Leaky ReLUの負側の傾き | 小さな正数。例:0.01 |
| β | Swishの形を調整する係数 | ここでは1を例とする |
| f・tanh | 関数の出力・双曲線正接 | tanhの値は−1より大きく1より小さい |
Leaky ReLUは負側にも小さな傾きを残します。tanhは0を中心とする出力ですが、入力の絶対値が大きい領域では傾きが小さくなります。Swishは滑らかな関数です。Swishの原著論文の改善結果は特定のモデル・データで得られたもので、常にReLUを上回るという意味ではありません。

損失関数:予測の誤りを数値にする
学習では、人が定めた損失を小さくするようパラメータを調整します。連続値の予測で使う平均二乗誤差(MSE)は、正解と予測の差を二乗して平均します。正解・予測が(1, 0.9)、(0, 0.2)の2件なら次の通りです。
\[ \begin{aligned}E_{\mathrm{MSE}}&=\frac1N\sum_{j=1}^{N}(y_j-\hat y_j)^2\\&=\frac{(1-0.9)^2+(0-0.2)^2}{2}\\&=\frac{0.01+0.04}{2}=0.025\end{aligned} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| E | 平均損失 | 目的変数の単位の二乗。例は無次元 |
| N・j | データ数と添字 | Nは正整数、jは1〜N |
| yⱼ・ŷⱼ | 正解値と予測値 | 互いに同じ単位 |
二値分類では、確率の予測を評価する二値クロスエントロピーも使います。以下はN件の合計です。平均損失が必要ならNで割ります。
\[ E_{\mathrm{BCE}}=-\sum_{j=1}^{N}\left[y_j\ln p_j+(1-y_j)\ln(1-p_j)\right] \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| E・N・j | 合計損失・データ数・添字 | Eは無次元、Nは正整数 |
| yⱼ | 正解ラベル | 0または1 |
| pⱼ | ラベル1の予測確率 | 0より大きく1より小さい |
| ln | 自然対数 | 対数の中は無次元 |
正解が1なら、そのデータの損失は−ln(p)です。正解側の確率を高くすると損失が下がります。互いに排他的な多クラス分類では、出力と損失の組み合わせを変えます。また、実装では極端な確率の対数による数値誤差を避ける計算方法を使います。
勾配降下法とAdam:重みをどう変えるか
勾配は、パラメータを少し動かしたときに損失がどちらへ増えるかを示します。単純な勾配降下法では、その逆方向へ動かします。
\[ w’=w-\eta\frac{\partial E}{\partial w} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| w・w′ | 更新前・更新後の重み | 例では無次元 |
| η | 学習率 | 正数、例では無次元 |
| ∂E/∂w | 重みに関する損失の偏微分 | 例では無次元。一般には損失の単位÷重みの単位 |
学習率が大きすぎると損失が増えることもあり、小さすぎると進みが遅くなります。SGDはデータの一部から勾配を求めて更新します。逆伝播は勾配を計算する工程、SGDやAdamはその勾配を使って更新する方法と分けると、役割が明確になります。
Adamでは初期値の偏りも補正する
Adamは勾配とその二乗の移動平均を使い、重みごとの更新幅を調整します。重み1個について、二つの平均を0から始める基本形は次の通りです。
\[ \begin{aligned}m_0&=v_0=0\\m_t&=\beta_1m_{t-1}+(1-\beta_1)g_t\\v_t&=\beta_2v_{t-1}+(1-\beta_2)g_t^2\\\hat m_t&=\frac{m_t}{1-\beta_1^t},\quad\hat v_t=\frac{v_t}{1-\beta_2^t}\\w_t&=w_{t-1}-\eta\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}\end{aligned} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| t・gₜ | 更新回数と、その回の勾配 | tは1以上の整数、物理的時刻ではない |
| mₜ・vₜ | 勾配と勾配の二乗の指数移動平均 | 初期値は0 |
| β₁・β₂ | 過去の平均を残す比率 | 0以上1未満 |
| m̂ₜ・v̂ₜ | 初期値の偏りを補正した値 | 分母のtは指数 |
| wₜ・η・ε | 更新後の重み・学習率・安定化定数 | ηとεは正数 |
0から始めた平均は初期に小さく見積もられるため、補正後の値を使います。これは重み減衰などを省いた基本形です。詳細はKingma・Baの原著論文とPyTorch公式の更新式で確認できます。Adamでも最適な解や未知データへの性能が保証されるわけではありません。

1回の学習を手計算する
最初の3入力の例に戻り、シグモイド出力の二値分類器とします。正解は1、予測は0.5です。1件の損失を求め、連鎖律で重みまで微分をつなぎます。
\[ \begin{aligned}p&=\frac1{1+e^{-z}}=0.5,\quad L=-\ln p\approx0.693147\\\frac{\partial L}{\partial p}&=-\frac1p=-2\\\frac{\partial p}{\partial z}&=p(1-p)=0.25\\\frac{\partial L}{\partial z}&=(-2)\times0.25=-0.5\\\frac{\partial L}{\partial w_i}&=(-0.5)x_i,\quad\frac{\partial L}{\partial b}=-0.5\end{aligned} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| p・z | 予測確率と重み付き和 | 無次元、更新前はp=0.5・z=0 |
| L・ln | 1件の損失と自然対数 | 無次元、正解ラベル1の場合 |
| xᵢ・wᵢ・b | 入力・重み・バイアス | 無次元、i=1,2,3 |
| ∂ | 偏微分を表す記号 | 他の独立変数を固定して変化を調べる |
入力を掛けると、重みの勾配は(−0.25, −0.40, −0.10)です。学習率を0.1として、更新前の値から同時に更新します。
| パラメータ | 更新の計算 | 更新後 |
|---|---|---|
| w₁ | 0.2−0.1×(−0.25) | 0.225 |
| w₂ | −0.5−0.1×(−0.40) | −0.46 |
| w₃ | 1.0−0.1×(−0.10) | 1.01 |
| b | 0.1−0.1×(−0.5) | 0.15 |
更新後も同じ入力で順伝播し、損失が下がったかを確かめます。途中で丸めず、最後に小数点以下を丸めます。
\[ \begin{aligned}z’&=0.225\times0.5-0.46\times0.8+1.01\times0.2+0.15\\&=0.1125-0.368+0.202+0.15=0.0965\\p’&=\frac1{1+e^{-0.0965}}\approx0.524106\\L’&=-\ln p’\approx0.646061\end{aligned} \]
| 記号 | 意味 | 単位・条件 |
|---|---|---|
| z′・p′・L′ | 更新後の重み付き和・予測確率・損失 | すべて無次元、同じ入力と正解を使用 |
正解1の確率が約0.524へ上がり、損失は約0.693から0.646へ下がりました。これはこの1件に対する改善です。未知の入力にも強くなったとは、この計算だけでは判断できません。多層でも連鎖律を使いますが、各層へ微分を順に伝えるため計算量が増えます。
ニューラルネットワークの種類と使い分け
| 種類 | 仕組み | 用途・注意点 |
|---|---|---|
| 全結合(FCNN) | 隣接層の各ノードを結ぶ | 入力数×出力数の重みと、出力数のバイアスを持つ |
| 畳み込み(CNN) | 近傍の構造と重みの共有を使う | 画像や時系列。プーリングを使わない構成もある |
| 循環型(RNN) | 系列を読みながら状態を更新する | 時系列・文章。LSTMやGRUは情報を残す仕組みを工夫する |
| Transformer | 注意機構で要素間の関係を計算する | 文章など。長い系列では計算量・メモリも課題になる |
| GAN | 生成器と識別器を競わせて学習する | 生成モデルの一種。すべての画像生成AIがGANではない |
| GNN | ノードと辺からなる関係を扱う | 分子やネットワークなどのグラフデータ |
これらは完全に排他的な分類ではなく、複数の仕組みを組み合わせる場合もあります。画像での重み共有と具体的な畳み込み計算は、CNNによる画像認識の解説を参照してください。
応用例:出力を何に使うかで評価が変わる
画像認識では物体の分類や検出、医療では画像の診断支援に利用されます。翻訳、音声認識、文章・画像・音楽の生成も応用先です。自動運転では物体検出などの部品に使えても、個々の予測精度だけでシステム全体の安全性は判断できません。
金融の異常取引検出では、見逃しと誤検出の両方を調べます。医療でも患者群や撮影条件の違いを評価します。ゲームのAlphaGoのように、ネットワークを探索と組み合わせる例もあります。用途が違えば、求める出力と失敗の重さも変わります。
生命科学では、AlphaFoldの研究がタンパク質の立体構造予測を示しました。構造の予測は薬剤探索を支える情報になり得ますが、それだけで薬の有効性や安全性まで確かめたことにはなりません。遺伝子解析や創薬への応用でも、予測と実験による検証を区別します。
歴史の概略
1943年のMcCullochとPittsによる形式的なニューロン模型、1958年のRosenblattによるパーセプトロンは初期の重要な研究です。1986年のRumelhart・Hinton・Williamsの論文は、多層ネットワークで逆伝播を用いる研究を広めました。1986年を微分による学習そのものの発明年と捉えるのは不正確です。
2012年のAlexNetはImageNet画像分類で大きな成果を示し、2017年にはTransformerが発表されました。2020年代にはGPT系やLlamaなどの大規模言語モデル、画像生成モデルが広く知られるようになりました。ただし、小規模モデルや従来の統計手法も、目的に応じて使われ続けています。
課題と展望:大きくすれば解決するのか
訓練データへの当てはまりだけを追うと過学習が起こります。学習に使わない検証データで調整し、最終評価用データは別に保つことが基本です。データの偏りや誤ったラベルも点検します。誤答の内訳を見れば、追加データが必要なのか、目的やモデルの見直しが必要なのかを考えられます。
大規模な訓練には計算資源と電力が必要です。費用はモデルの大きさだけでなく、データ量、精度、試行回数にも左右されます。端末側で動かすエッジAIは通信や遅延を減らせる場合がありますが、常に消費電力を減らすとは限りません。機器と利用頻度を含めて比較します。
量子計算による学習や汎用人工知能は研究課題であり、この基本構造から実用上の優位性や実現時期が導けるわけではありません。予測根拠の説明も課題です。説明用の図や重要度が得られても、それが現実の因果関係を証明するとは限りません。
倫理的・社会的影響をどう点検するか
自動化は仕事の内容や必要な技能を変えます。効率化の効果だけでなく、誤判定の責任や人が確認する範囲を決める必要があります。顔認識などでは、全体の正解率に加えて、属性や撮影条件ごとの誤りを調べます。
学習データを使う権限、収集目的、保管期間、訂正・削除への対応も設計します。生成された偽画像や音声は誤情報に使われるおそれがあります。出所を確かめる手順と、人へ相談・訂正できる導線を用意することは、モデルの精度とは別の運用上の課題です。

まとめ:予測・微分・更新を分けて理解する
ニューラルネットワークは、重みとバイアスによる変換に活性化関数を組み合わせます。順伝播で予測し、損失で誤りを測り、逆伝播で勾配を求め、更新法でパラメータを変えます。今回の例では、この1周で正解側の確率が上がることを手計算で確認できました。
その結果を実用につなげるには、未知データでの評価と用途に合う検証が必要です。式を追う際は「今は出力を計算しているのか、勾配を求めているのか、値を更新しているのか」を区別すると、複雑なモデルでも見通しがよくなります。
出典と理解を深める資料
- Google:活性化関数 — 非線形性と代表的な関数。
- Google:逆伝播 — 勾配を計算する工程。
- Rumelhartほか(1986) — 多層ネットワークの逆伝播の原著論文。
- Rosenblatt(1958) — パーセプトロンの原著論文情報。
- Krizhevskyほか(2012) — AlexNetの画像分類研究。
- Vaswaniほか(2017) — Transformerの原著論文。
- Goodfellowほか(2014) — GANの原著論文。


