Neural Network (NN)
ニューラルネットワーク(NN)は、データから重みを学習する、相互接続された人工ニューロンの層で構成されます。ニューロンの計算方法、学習、主な種類を解説します。
ニューラルネットワーク(NN)は、人工ニューラルネットワーク(ANN)とも呼ばれ、ニューロンと呼ばれる単純な接続ユニットを層状に組み合わせて構成する機械学習(ML)モデルです。各ニューロンは入力に重みを掛け、バイアスを加え、その合計を非線形な活性化関数に渡します。ネットワークは、出力が学習データの例と一致するまで重みとバイアスを調整して学習するため、その振る舞いはデータから得られます。設計は生物のニューロンから大まかに着想を得ていますが、現代のネットワークは大規模な学習可能な数学関数と捉えるのが適切です。層を多数持つネットワークは深層学習(DL)の対象であり、コンピュータービジョン、音声認識、大規模言語モデル(LLM)を支えています。
ニューラルネットワークの計算方法#
ニューロンは層状に配置されます。入力層が画素値やセンサー読み取り値などのデータを受け取り、1つ以上の隠れ層がデータを変換し、出力層がクラススコアや予測値などを出力します。全結合層では、各ニューロンが前の層のすべての出力を受け取るため、層全体は行列乗算の後に要素ごとの活性化を適用する処理になります。データを順番にすべての層へ通すことを順伝播といいます。活性化関数があることで、層を深くする効果が生まれます。活性化関数がなければ、積み重ねた層は1つの線形関数にまとめられてしまいます。活性化関数を使えば、幅が十分に広い隠れ層が1つあるだけでも、あらゆる連続関数を任意の精度で近似できます。これは万能近似定理として知られています。
以下のPyTorchのコードでは、まず1つのニューロンの計算を手作業で行い、次に4つのニューロンからなる層全体を一度に計算します。
import torch
from torch import nn
torch.manual_seed(1)
x = torch.tensor([0.5, -1.0, 2.0]) # one example with three input features
# A layer of four neurons: each has three weights and one bias
layer = nn.Linear(in_features=3, out_features=4)
# Neuron 0 by hand: weighted sum of inputs plus bias, then a ReLU activation
z = (layer.weight[0] * x).sum() + layer.bias[0]
print(f"Neuron 0 by hand: {torch.relu(z).item():.4f}")
# The layer computes all four neurons at once as one matrix multiplication
outputs = torch.relu(layer(x))
print(f"All four neurons: {[round(v, 4) for v in outputs.tolist()]}")Neuron 0 by hand: 0.3906とAll four neurons: [0.3906, 1.1465, 0.0, 0.0]が出力されます。手作業の計算結果は層の最初のニューロンと一致します。また、ReLU活性化関数は、重み付き和が負になる2つのニューロンをゼロにします。この層には学習可能な数値が16個あり、重みが12個、バイアスが4個です。実際のネットワークでは、このような層を積み重ねて、数百万から数十億個のパラメーターを構成します。
ニューラルネットワークの学習方法#
学習はランダムな重みから始まり、単純なループを繰り返します。ラベル付きデータのバッチをネットワークに順伝播させ、損失関数で予測とラベルとの差を測定し、誤差逆伝播で連鎖律を適用して各重みが誤差にどれだけ寄与したかを計算します。そして、確率的勾配降下法(SGD)やAdamなどのオプティマイザーが、損失を下げる方向へ各重みを少しずつ調整します。学習セット全体を1回通すことをエポックといいます。通常は、保留しておいた検証データに対する損失の改善が止まった時点で学習を終了します。そのまま学習セットへの適合を続けると、ネットワークが過学習し始めるためです。
ゼロから学習するには通常、大規模なラベル付きデータセットが必要ですが、転移学習では大規模データセットで事前学習した重みから始めるため、必要なデータを減らせます。学習によって得られる数百万個の重みは解釈も困難であり、これが説明可能なAI(XAI)の研究を促しています。
ニューラルネットワークの主な種類#
アーキテクチャと呼ばれるニューロンの接続方法によって、ネットワークが得意とするデータ処理が決まります。
- フィードフォワードネットワーク: データを一方向に渡す全結合層で構成され、多層パーセプトロン(MLPs)とも呼ばれます。表形式データに適しており、より大きなモデルの構成要素としても使われます。
- 畳み込みニューラルネットワーク(CNNs): 小さな共有フィルターを画像上でスライドさせ、畳み込みを行う、ビジョン分野の標準的な設計です。残差接続により、数百層まで拡張できます。
- 再帰型ニューラルネットワーク(RNNs): 隠れ状態を引き継ぎながらシーケンスを順に処理します。LSTMやGRUなどのゲート付きバージョンは、より長い記憶に対応します。
- Transformer: 自己注意機構を使い、シーケンス内の各要素と他のすべての要素との関係を並列に処理します。LLMやビジョンTransformerを支える技術です。
- スパイキングニューラルネットワーク(SNNs): 時間に沿った離散的なスパイクで通信するため、生物学的なニューロンに近く、ニューロモーフィックチップ上で効率的に動作します。
現在のモデルの多くは、これらの設計を組み合わせています。YOLO26は、最も低解像度の特徴マップ上に自己注意ブロックを備えた畳み込みネットワークです。nano検出モデルは約240万個のパラメーターを使い、640×640画像内の物体の位置を特定して分類する処理を単一のフォワードパスで行います。
ニューラルネットワークと関連用語の比較#
- ディープラーニング: 隠れ層が1つまたは2つのニューラルネットワークは浅いネットワークです。ディープラーニングとは、多数の層を持つネットワークをトレーニングする手法であり、ネットワークは生データから独自の特徴階層を学習します。ディープラーニングモデルはすべてニューラルネットワークです。
- 機械学習: ニューラルネットワークは、決定木、サポートベクターマシン、勾配ブースティング木などと並ぶ機械学習モデルの一種です。これらの手法は、表形式データにおいて今も高い競争力を持っています。
- 生物学的ニューラルネットワーク: 実際のニューロンは、タイミングを伴う電気的なスパイクで通信し、人工ニューロンではモデル化されない化学的プロセスを通じて適応します。スパイキングニューラルネットワークは、標準的なネットワークよりもこうした動作を多く再現します。
簡単な歴史#
Warren McCullochとWalter Pittsは1943年にニューロンの数学的モデルを説明しました。このモデルは、二値入力の合計がしきい値を超えると発火するユニットです。Frank Rosenblattが1958年に提案したパーセプトロンは、例からこうしたユニットの重みを学習しましたが、1969年にMarvin MinskyとSeymour Papertが、単層パーセプトロンではXOR関数すら計算できないことを示し、関心は薄れていきました。多層ネットワークならXORを解けます。1986年にはDavid Rumelhart、Geoffrey Hinton、Ronald Williamsが、バックプロパゲーションによって隠れ層をトレーニングし、有用な内部表現を学習できることを示しました。2012年にはディープネットワークがコンピュータービジョンを席巻しました。2つのGPUでトレーニングされたAlexNetが、ImageNetチャレンジでトップ5エラー率15.3%を達成し、次点の26.2%を大きく上回りました。










