ニューラルネットワークは、単純な演算を層ごとに通して数値を処理し、入力を出力へ変換する数学モデルです。各層では、前の値から重み付き和を作り、バイアスを加え、非線形の活性化関数を適用し、その結果を次へ渡します。

この説明は抽象的に聞こえるかもしれませんが、核となる考え方はシンプルです。ネットワークは、多数の調整可能な重みを学習し、入力の中の有用なパターンが出力の有用な予測につながるようにします。

ニューラルネットワークとは何か

入力 x1,x2,,xnx_1, x_2, \dots, x_n をもつ1つのニューロンでは、基本的な計算は

z=w1x1+w2x2++wnxn+bz = w_1x_1 + w_2x_2 + \dots + w_nx_n + b

です。

その後に活性化を適用します。

a=g(z)a = g(z)

ここで w1,,wnw_1, \dots, w_n は重み、bb はバイアス、gg は ReLU、sigmoid、tanh などの活性化関数です。

完全なフィードフォワード型ニューラルネットワークでは、このパターンを層ごとに繰り返します。簡潔に書くと、1つの層はしばしば次のように表されます。

a(l)=g ⁣(W(l)a(l1)+b(l))a^{(l)} = g\!\left(W^{(l)} a^{(l-1)} + b^{(l)}\right)

ここで a(l1)a^{(l-1)} は前の層の出力です。

腑に落ちやすい直感的な見方

各ニューロンは、自分が見ている入力に対して重み付きの問いを投げかけています。大きな正の重みは、ある特徴をより重要にします。負の重みは、あるパターンに逆らう方向に働きます。バイアスはしきい値をずらします。そして活性化関数が、そのニューロンがどれだけ強く反応するかを決めます。

層を重ねることで、ネットワークは段階的に特徴を組み立てられます。初期の層は単純なパターンを検出し、後の層はそれらを組み合わせて、最終タスクに役立つ内部表現を作ります。

だからニューラルネットワークは、単に「たくさんの数式を同時に使うもの」ではありません。単純な関数の合成であり、その合成こそが柔軟性を生みます。

具体例を1つ見てみる

入力が2つ、隠れ層が1つ、出力が1つの小さなネットワークを考えます。入力を

x=[21]x = \begin{bmatrix} 2 \\ 1 \end{bmatrix}

とします。

隠れ層には2つのニューロンがあり、ReLU を使うとします。ReLU は

ReLU(z)=max(0,z)\operatorname{ReLU}(z) = \max(0, z)

です。

隠れ層の計算を次のようにします。

z1=12+(1)1+0=1z_1 = 1 \cdot 2 + (-1) \cdot 1 + 0 = 1 h1=ReLU(z1)=1h_1 = \operatorname{ReLU}(z_1) = 1 z2=0.52+0.511=0.5z_2 = 0.5 \cdot 2 + 0.5 \cdot 1 - 1 = 0.5 h2=ReLU(z2)=0.5h_2 = \operatorname{ReLU}(z_2) = 0.5

次に、これらの隠れ層の値を出力ニューロンへ送ります。

s=2h1h2=2(1)0.5=1.5s = 2h_1 - h_2 = 2(1) - 0.5 = 1.5

ルールが「s>0s > 0 のときクラス1を予測する」であれば、この入力はクラス1に分類されます。

重要なのは具体的な数値そのものではありません。重要なのは構造です。

  1. 入力を受け取る
  2. 重み付き和を作る
  3. 非線形活性化を適用する
  4. 繰り返す
  5. 最終スコアを読む

これが、ニューラルネットワークが順伝播を行っているということです。

ニューラルネットワークはどう学習するか

ネットワークを使うことと、学習させることは別の問題です。

標準的な教師あり学習では、まずネットワークが予測を出します。次に損失関数が、その予測が正解からどれだけ離れているかを測ります。勾配ベースの学習では、損失が各重みやバイアスに対してどう変化するかを計算し、損失が小さくなるようにそれらを更新します。

現代の実務では、これは通常、誤差逆伝播法と勾配降下法、またはそれに関連する最適化手法を意味します。この仕組みは、モデルと損失が微分可能、あるいは少なくとも勾配法が機能する程度には区分的に微分可能であることに依存します。

短く言えば、流れは次の通りです。

predictionlossgradientsparameter update\text{prediction} \to \text{loss} \to \text{gradients} \to \text{parameter update}

多くの例を通して、重みはタスクに役立つパターンの方向へ少しずつ動いていきます。

よくある誤解

層を増やせば自動的に性能が上がると思うこと

そうではありません。層を増やすと表現力は上がりますが、そのぶん最適化、必要なデータ量、過学習の制御は難しくなります。

非線形性が重要な理由を忘れること

すべての層が線形でしかなければ、ネットワーク全体も結局は1つの線形写像にすぎません。活性化関数があるからこそ、深いネットワークはより複雑な関係を表現できます。

出力を確実な正しさだとみなすこと

ネットワークの出力がどれだけ有用かは、その背後にあるモデル、データ、学習設定に依存します。高いスコアは証明と同じではありません。

入力表現を軽視すること

ネットワークは生の意味から学ぶわけではありません。受け取った数値表現から学びます。入力が不適切だったり、一貫性がなかったり、重要な構造を欠いていたりすると、通常は性能が落ちます。

ニューラルネットワークが使われる場面

ニューラルネットワークは、入力と出力の関係が複雑で、人手で書いたルールでは壊れやすかったり不十分だったりする場合に使われます。代表的な例としては、画像認識、音声、言語モデリング、推薦システム、一部の予測タスクがあります。

ただし、あらゆる問題で自動的に最良の選択になるわけではありません。小規模で構造化されたデータセットでは、より単純なモデルのほうが学習しやすく、解釈しやすく、場合によっては同じくらい有効なこともあります。

役に立つイメージ

ニューラルネットワークを、多数の調整可能なつまみを持つ層状の関数だと考えてみてください。順伝播は1つの入力を1つの出力に変えます。学習はそのつまみを変えて、将来の出力がタスクにとってより有用になるようにします。

この見方が、2つの考え方を最もすっきりと同時に捉えられます。ニューラルネットワークは関数の合成によって計算し、誤差を減らすようにパラメータを調整することで学習します。

自分でも試してみる

同じ小さなネットワークを使って、入力を (2,1)(2, 1) から (0,3)(0, 3) に変えてみてください。z1z_1z2z_2h1h_1h2h_2、そして最終スコア ss を計算し直します。そのあとで重みを1つ変え、出力のどの部分が動くかを見てみてください。この小さな練習をすると、定義を暗記するだけよりも、順伝播の考え方がずっと具体的に理解できます。

問題の解き方でお困りですか?

問題をアップロードすると、検証済みのステップバイステップ解答が数秒で届きます。

GPAI Solver を開く →