ニューラルネットワークの基礎

パーセプトロン・活性化関数・誤差逆伝播法・勾配降下法
🔰 初心者

ニューラルネットワークってよく聞きますが、そもそもどういう仕組みなんですか?

🎓 上級者

人間の脳の神経細胞(ニューロン)の仕組みを模倣した計算モデルだよ。入力層・中間層(隠れ層)・出力層の3つの層で構成されていて、データを受け取り、特徴を抽出して、結果を出力するんだ。

🧠 ニューラルネットワークの基本構造
役割
入力層(Input Layer)データを受け取る
中間層(Hidden Layer)特徴を抽出・変換
出力層(Output Layer)結果を出力
ニューロンの動作

1. 各入力に重み(Weight)をかける
2. すべてを足し合わせ、バイアス(Bias)を加える
3. 活性化関数を通して出力

ニューラルネットワークの3層構造 x₁ x₂ x₃ h₁ h₂ h₃ h₄ y₁ y₂ w₁₁ w₂₂ w₃₃ 入力層 中間層(隠れ層) 出力層 3ノード 4ノード 2ノード
図1: ニューラルネットワークの3層構造(入力層→中間層→出力層)
🚀 ディープラーニング(深層学習)
🔰 初心者

ディープラーニングは普通のニューラルネットワークと何が違うんですか?

🎓 上級者

中間層を多数重ねた(深い)ニューラルネットワークのことだよ。従来の機械学習と比べると、特徴量を人間が設計する必要がないのが最大の違いなんだ。

項目従来の機械学習ディープラーニング
特徴量設計人間が手動で設計自動で学習(特徴表現学習)
精度特徴量の質に依存大量データで高精度
必要リソース比較的少ない大量のデータ・GPU
ブレイクスルーのきっかけ(2012年)

AlexNetがILSVRC(画像認識コンペ)で圧勝。GPU活用、大規模データ、ドロップアウトなどの技術が貢献し、第3次AIブームの火付け役となった。

💡 単純パーセプトロン
🔰 初心者

パーセプトロンって何ですか?

🎓 上級者

1958年にフランク・ローゼンブラットが考案した、最も単純なニューラルネットワークだよ。入力に重みをかけて足し合わせ、しきい値を超えたら1、超えなかったら0を出力する「Yes/Noを判定する装置」なんだ。

論理演算内容単純パーセプトロン
AND両方1なら1できる
ORどちらか1なら1できる
XOR片方だけ1なら1できない
XOR問題と第1次AIの冬

XORができない理由は、直線1本では分けられないから(線形分離不可能)。1969年にミンスキーパパートがこの限界を数学的に証明し、ニューラルネットワーク研究が冷え込んだ(第1次AIの冬の一因)。

XOR問題の可視化 — なぜ直線1本で分けられないのか 単純パーセプトロン(直線1本) x₁ x₂ 0 1 0 1 0 (0,0) 1 (0,1) 1 (1,0) 0 (1,1) 直線1本では分離不可能! 多層パーセプトロン(非線形境界) x₁ x₂ 0 1 0 1 0 1 1 0 2本の直線で分離可能! = クラス1(出力1) = クラス0(出力0)
図2: XOR問題 — 単純パーセプトロンでは直線1本で分離できないが、多層にすれば解ける
🔗 多層パーセプトロン(MLP)
🎓 上級者

単純パーセプトロンの限界を突破するために、中間層(隠れ層)を追加したのが多層パーセプトロンだよ。中間層が入ることで非線形な境界を作れるようになり、XOR問題も解けるんだ。

単純パーセプトロン多層パーセプトロン(MLP)
構造入力層→出力層(2層入力層→中間層→出力層(3層以上
分離能力線形分離のみ非線形分離も可能
XOR問題できないできる
学習方法単純な重み更新誤差逆伝播法(1986年)
表現力低い高い
🔌 全結合層(Dense層)
🔰 初心者

全結合層って何ですか?

🎓 上級者

ある層のすべてのノードが、次の層のすべてのノードとつながっている層のことだよ。入力が3つ、次の層が4つなら接続は3x4=12本。フレームワーク(Kerasなど)ではDenseという名前で出てくるんだ。

活性化関数
🔰 初心者

活性化関数はなぜ必要なんですか?

🎓 上級者

全結合層の計算は「入力x重み+バイアス」だけど、これはただの線形変換。線形変換をどれだけ重ねても線形のまま。つまり層を何層重ねても1層と同じになってしまう。活性化関数で非線形な変換をかませることで、深くする意味が生まれるんだ。

活性化関数がないと?

線形 → 線形 → 線形 = 結局ただの線形(深くする意味がない)
線形 → 非線形 → 線形 → 非線形 = 複雑なパターンを表現できる!

活性化関数こそが「ディープ(深い)にする意味」を生んでいる。

活性化関数出力の範囲特徴主な使いどころ
ReLU0〜∞0以下→0、0以上→そのまま。シンプルで高速中間層で最もよく使われる
シグモイド0〜1なめらかに0〜1に変換二値分類の出力層
tanh-1〜1シグモイドを-1〜1に拡張中間層(ReLU以前の主流)
ソフトマックス0〜1(合計1)各クラスの確率を出力多クラス分類の出力層
主要な活性化関数の比較 x y -2 -1 0 1 2 1 0.5 -0.5 -1 ReLU シグモイド tanh ReLU: 負の入力→0(勾配消失しにくい) シグモイド: 0〜1に圧縮 tanh: -1〜1に圧縮
図3: 活性化関数の比較 — ReLU・シグモイド・tanh
📊 シグモイド・tanh・ReLU 詳細比較
シグモイドtanhReLU
出力の範囲0〜1-1〜10〜∞
微分の最大値0.251.01
勾配消失起きやすい起きやすい起きにくい
計算コスト高い(指数計算)高い(指数計算)非常に低い
弱点勾配消失勾配消失Dying ReLU
主な用途二値分類の出力層RNN内部(LSTM)中間層(定番)
歴史的な流れ

シグモイド(勾配消失) → tanh(まだ消失) → ReLU(解決!) ← 今ここが主流

🎯 ソフトマックス関数
🔰 初心者

ソフトマックス関数はどういうときに使うんですか?

🎓 上級者

多クラス分類の出力層で使うよ。出力層の生の数値を各クラスの確率(合計1)に変換するんだ。例えば犬60%、猫22%、鳥13%のように。一番高いクラスが予測結果になる。

シグモイド

二値分類(Yes/No)に使用
出力:1つの値(0〜1)
出力層のノード数:1個

ソフトマックス

多クラス分類(犬/猫/鳥...)に使用
出力:クラス数分の確率(合計1)
出力層のノード数:クラス数分

🔀 中間層と出力層での活性化関数の使い分け
場所よく使う活性化関数理由
中間層ReLU(ほぼ一択)計算が速く、勾配消失が起きにくい
出力層(二値分類)シグモイド0〜1の確率を出したい
出力層(多クラス分類)ソフトマックス各クラスの確率(合計1)を出したい
出力層(回帰)なし(恒等関数)数値をそのまま出したい
🔄 学習の仕組み:誤差逆伝播法と勾配降下法
🔰 初心者

ニューラルネットワークはどうやって学習するんですか?

🎓 上級者

2つの技術がセットで使われるんだ。誤差逆伝播法は「犯人探し」(どの重みが間違いの原因か調べる)、勾配降下法は「修正」(調べた結果をもとに重みを直す)という役割分担だよ。

学習の流れ

1. 順伝播:入力データを流して予測を出す
2. 損失計算:予測と正解のズレ(損失)を計算する
3. 誤差逆伝播法:「どの重みがどれだけ悪かったか」を逆算する
4. 勾配降下法:その情報をもとに重みを修正する
→ 1に戻る(繰り返し)

🎓 上級者

誤差逆伝播法は、微分の連鎖律(チェインルール)を使って、各重みの「損失への影響度(勾配)」を効率的に計算している。ラメルハート、ヒントン、ウィリアムズが1986年に提案して、ニューラルネットワーク研究が再び活性化したんだ。

順伝播(Forward)と逆伝播(Backward) 入力層 データ 中間層1 特徴抽出 中間層2 特徴変換 出力層 予測 損失計算 予測 vs 正解 Loss = ? 順伝播(Forward): データを流して予測 逆伝播(Backward): 誤差を逆算して勾配計算 順伝播で予測 → 損失計算でズレを測定 → 逆伝播で各重みの勾配を計算 → 重みを更新
図4: 順伝播でデータを流して予測し、逆伝播で誤差を逆算して重みを修正する
📉 勾配降下法
🎓 上級者

損失関数を「山」と考え、勾配(傾き)が急な方向に少しずつ下って谷底(損失最小)を目指す手法だよ。

学習率結果
大きすぎ谷底を飛び越えて発散(行ったり来たり)
小さすぎなかなか谷底に着かない(学習が遅い)
ちょうどいい効率よく谷底にたどり着く
勾配降下法と学習率の影響 重みの値 損失 最適解 開始 学習率が大きすぎ 谷底を飛び越えてしまう (発散・振動) ... 学習率が小さすぎ 少しずつしか進まない (学習が遅い) 開始 学習率がちょうどいい スムーズに谷底へ到達 (効率的な学習)
図5: 勾配降下法 — 学習率の大小による挙動の違い
⚖️ バッチ勾配降下法 vs SGD

バッチ勾配降下法

全データを使って1回更新
安定だが遅い
全員の意見を聞いてから1歩進む

SGD(確率的勾配降下法)

全データを一気に使わずミニバッチに分けて少しずつ更新
現在の主流
数人ずつの意見で1歩ずつ進む

🔰 初心者

なぜ「確率的」と呼ぶんですか?

🎓 上級者

全データではなくランダムに選んだ一部(ミニバッチ)を使って勾配を計算するからだよ。毎回使うデータが違うので更新の方向にブレ(ノイズ)が生じるが、このブレが局所最適解や鞍点を抜け出す力になるんだ。

📋 学習方式の関係
学習方式やり方対応する勾配降下法日常の例え
バッチ学習全データをまとめて学習バッチ勾配降下法教科書を全部読んでからテストを受ける
ミニバッチ学習ミニバッチに分けて少しずつ学習SGD(主流)章ごとにまとめて復習する
オンライン学習データが来るたびに1個ずつ学習SGD(バッチサイズ=1)問題を解くたびにすぐ復習する

🎯 G検定ポイント

🔍 誤差逆伝播法 vs 勾配降下法 まとめ
誤差逆伝播法勾配降下法
役割各重みの勾配を計算する(犯人探し)勾配をもとに重みを更新する(修正)
方向出力→入力(逆向き--
使う数学微分の連鎖律(チェインルール)勾配x学習率で更新
単独で使える?勾配降下法とセット誤差逆伝播法とセット
🏔️ 大域最適解と局所最適解
🔰 初心者

勾配降下法で必ず最良の答えにたどり着けるんですか?

🎓 上級者

そうとは限らない。谷底は1つとは限らなくて、浅い谷にハマるとそこが最良だと思い込んでしまうんだ。

大域最適解(Global Optimum)

全体で一番深い谷底(損失が最小)

局所最適解(Local Optimum)

周りでは一番低いが全体では最良でない谷底

鞍点(サドルポイント)

ある方向では谷底だが、別の方向では山頂になっている点。勾配が0になるので勾配降下法が止まりやすいが、局所最適解と違って抜け出す方向が存在する。高次元のニューラルネットワークでは局所最適解より鞍点のほうが多いと言われている。

対策やり方
SGDミニバッチのランダムなブレがあるので浅い谷から偶然飛び出せる
モメンタム(慣性)過去の更新の勢いを引き継ぎ、浅い谷を通過できる
初期値をランダムに変えるスタート地点を変えて複数回試す
学習率を調整最初は大きく探索、徐々に小さくして収束
🔢 イテレーション・エポック・バッチサイズ
🔰 初心者

イテレーションとエポックの違いがわかりません...

🎓 上級者

学習の繰り返しに関する3つの用語を整理しよう。データが1000個でバッチサイズが100個なら、1エポック=10イテレーション。30エポック繰り返すなら合計300イテレーションだよ。

用語意味
バッチサイズ1回の更新に使うデータの個数
イテレーションミニバッチ1回分の重み更新(=1回の学習ステップ)
エポック(Epoch)全データを1周学習すること
計算式

1エポックのイテレーション数 = 全データ数 / バッチサイズ

全データ数バッチサイズ1エポックのイテレーション数
100010010回
10005020回
10000256約39回
注意

エポック数を増やす=学習を長くすることだが、増やしすぎると過学習になる。

📐 損失関数(Loss Function)の種類と使い分け
🔰 初心者

損失関数ってどういうものですか?種類がいくつかあるんですよね?

🎓 上級者

損失関数は予測と正解のズレを数値化する関数だよ。この値を小さくするように重みを調整するのが学習の本質。タスクの種類(回帰・二値分類・多クラス分類)によって使うべき損失関数が決まっているんだ。間違った損失関数を使うとうまく学習できないから、対応関係をしっかり覚えておこう。

損失関数の3種類

1. MSE(平均二乗誤差):予測値と正解値の差の二乗の平均。回帰タスクで使用。
2. バイナリクロスエントロピー:0/1の正解ラベルと予測確率のズレを測定。二値分類で使用。
3. カテゴリカルクロスエントロピー:複数クラスの正解ラベルと予測確率のズレを測定。多クラス分類で使用。

タスク出力層の活性化関数損失関数出力の例
回帰(数値予測)恒等関数(なし)MSE(平均二乗誤差)売上予測:1250万円
二値分類(Yes/No)シグモイドバイナリクロスエントロピースパム確率:0.92
多クラス分類(A/B/C...)ソフトマックスカテゴリカルクロスエントロピー犬60%, 猫22%, 鳥18%
G検定の頻出パターン

「タスク → 出力層の活性化関数 → 損失関数」の3点セットの対応が問われる。特に「多クラス分類にはソフトマックス+カテゴリカルクロスエントロピー」は頻出。

🎯 G検定ポイント