Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Neural Networks: Weights, Activation, and Backpropagation

2026年09月07日に「Dev.to」が公開したITニュース「Neural Networks: Weights, Activation, and Backpropagation」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

ニューラルネットワークは、入力に重みをかけて計算し、非線形変換する層を重ねたものだ。予測の誤差を測り、その誤差を減らすよう重みを少しずつ調整する「バックプロパゲーション」という学習を繰り返すことで、データからパターンを学ぶ仕組みだ。

ITニュース解説

ニューラルネットワークは、人間の脳の仕組みを模倣して作られたコンピュータープログラムの一種であり、複雑なデータからパターンを学習し、予測や分類を行う。その基本的な構成要素と学習の仕組みを理解することは、システムエンジニアを目指す上で非常に重要だ。

まず、最も単純なニューラルネットワークは「パーセプトロン」と呼ばれる。これは、入力されたデータが線形的に分離できる場合に機能するモデルで、具体的には、あるデータを二つのクラスに分けるとき、一本の直線や平面で完全に分割できる状態を指す。例えば、方程式D=y-2x-3でDが0以上ならクラス1、0未満ならクラス2といった具合だ。しかし、実際のデータはほとんどの場合、これほど都合良くは分かれない。データが複雑に絡み合っている場合、一本の線では分離できないため、より複雑な構造、つまり複数の層を持つニューラルネットワークが必要になる。これが「ディープラーニング」の始まりだ。

ニューラルネットワークの個々の要素は「ニューロン」と呼ばれ、それぞれが特定の計算を行っている。ニューロンへの入力は「x_i」と表され、これは画像であれば個々のピクセル値、その他のデータであればその特徴量に相当する。これらの入力にはそれぞれ「重み(w_i)」がかけられる。重みは、ネットワークが各入力がどれくらい重要だと考えているかを示す値だ。さらに、「バイアス(b)」という定数が加わる。バイアスは入力値に依存せず、ニューロンの出力全体を上下に調整する「微調整」のような役割を果たす。これらの計算、つまり「S = b + Σ(w_i * x_i)」によって得られる結果を「ロジット(S)」と呼ぶ。ロジットは負の無限大から正の無限大まで、どんな値でも取りうる境界のない値だ。

しかし、このロジットをそのまま次の層に渡すと、ネットワーク全体が結局は単純な線形関数になってしまい、多層にする意味がなくなってしまう。ここで重要な役割を果たすのが「活性化関数」だ。活性化関数は、各ロジットに適用される非線形な「ひねり」であり、ネットワークに複雑なパターンを学習させる能力を与える。代表的な活性化関数の一つに「シグモイド関数(ø(S) = 1 / (1+e)^-S)」がある。シグモイド関数は、ロジットSが非常に大きな正の値を取ると出力が1に近づき、非常に小さな負の値を取ると出力が0に近づくように変換する。この非線形性が、ネットワークが複雑な決定境界を形成し、絡み合ったデータを効果的に分離するために不可欠な要素となる。

ニューロンは単体で存在するのではなく、「層」として積み重ねられる。一つの層は複数のニューロンの集まりであり、それぞれのニューロンは同じ入力から独自の重み付き和を計算する。この層の積み重ねによって、ネットワークは「入力層」「隠れ層」「出力層」という構造を持つ。入力層は外部からデータを受け取る部分で、出力層は最終的な予測や分類結果を出す部分だ。入力層と出力層の間にある層は「隠れ層」と呼ばれる。隠れ層の値は外部からは直接観測できないため、このように呼ばれる。一般的に、初期の隠れ層はデータの単純なパターン(例えば、画像の中の線やエッジなど)を捉え、より深い隠れ層はそれらの単純なパターンを組み合わせて、より抽象的で複雑な特徴(例えば、顔のパーツなど)を形成していく。

最終的な出力層では、隠れ層で抽出された特徴をもとに最終的な予測を行う。分類問題、例えば数字の0から9を識別する場合など、K個のクラスに分類する際にはK個の出力ニューロンが用意され、それぞれが各クラスに対する「確信度(ロジット)」を出力する。しかし、これらのロジットは前述の通り境界のない値であり、確率として解釈するには変換が必要だ。そこで用いられるのが「Softmax関数」だ。Softmax関数は、複数のロジット(例えば、0.01、-3.8、4.2といった値)を入力として受け取り、それらを0から1の範囲に収まり、かつ合計するとちょうど1になるような確率に変換する(例えば、-3.8は0に近い確率、4.2は90%以上の高い確率に変換される)。これにより、各クラスに対するネットワークの確信度を、直感的に理解しやすい確率の形で得ることができる。

ネットワークが予測を出した後、その予測がどれくらい「間違っていたか」を評価する方法が必要になる。これを測定するのが「損失関数」だ。数値予測の場合によく使われるのは「平均二乗誤差」だが、分類問題では「交差エントロピー」が広く用いられる。交差エントロピー損失(CE)は、正解ラベルが1であるにもかかわらず、モデルが低い確率を予測した場合に大きなペナルティを与えるように設計されている。逆に、正解を高い確信度で予測できた場合は、ペナルティが0に近づく。つまり、自信を持って正しい予測をした場合は報酬を与え、自信を持って間違った予測をした場合は厳しく罰するという、ネットワークの学習に非常に適した性質を持っている。

ネットワークを「使えない」状態から「使える」状態にするための肝となるのが「バックプロパゲーション(誤差逆伝播法)」と「勾配降下法」という学習メカニズムだ。この学習は以下のループを繰り返すことで行われる。まず、訓練データの一部(バッチ)をネットワークに通し、予測を出力層で計算する。次に、その予測と実際の正解との間の「損失」を損失関数で測定し、どれくらい不正確だったかを評価する。この誤差(損失)を、出力層から入力層へと逆方向に伝播させていくのがバックプロパゲーションだ。この過程で、ネットワーク内の各重みがどれくらいこの誤差に貢献したかを計算する。そして、計算された情報に基づいて、各重みを少しだけ調整する。この重みの調整が「勾配降下法」と呼ばれるもので、(w_ij)^new = w_ij - α * (∂E​) / (∂w_ij) の数式で表される。ここで「α(アルファ)」は「学習率」と呼ばれ、重みをどれくらいの大きさで調整するかを決定する。学習率が大きすぎると最適な点を行き過ぎてしまい、小さすぎると学習に時間がかかりすぎる。このプロセスは、損失という「地形」の一番低い谷底を目指して、勾配(傾き)を計算しながら一歩ずつ下っていくイメージで捉えられる。ネットワークには何百万、何十億もの重みがあるため、この地形は非常に多次元であり、必ずしも一番低い場所(大域最適解)にたどり着くとは限らず、近くの良い場所(局所最適解)に落ち着くことも多い。訓練データ全体を一通り学習させることを「エポック」と呼び、ネットワークはより良い性能を得るために、多くのエポックにわたって繰り返し学習が行われる。

これらの理論は、実際のコードを見るとより具体的に理解できる。例えばPythonのPyTorchというライブラリを使ってMNIST手書き数字認識のネットワークを構築する際、nn.Linearは重み付き和の計算、nn.ReLU(活性化関数の一種)は非線形な変換、criterionとして定義されるnn.CrossEntropyLossは交差エントロピー損失の計算、loss.backward()がバックプロパゲーションの実行、そしてoptimizer.step()が勾配降下法による重みの更新という具合に、これまでに説明した全ての概念が数行のコードの中に凝縮されている。

結局のところ、ニューラルネットワークとは、重み付きの和と非線形な活性化関数が層状に積み重ねられた構造であり、その学習は、予測の誤りを繰り返し測定し、その誤りを減らす方向に重みを少しずつ調整するというループによって行われる。この一連のプロセスが大規模に実行されることで、私たちが日常で利用するあらゆるAIツールが機能しているのだ。

関連コンテンツ

関連IT用語