ニューラルネットワークってよく聞きますが、そもそもどういう仕組みなんですか?
人間の脳の神経細胞(ニューロン)の仕組みを模倣した計算モデルだよ。入力層・中間層(隠れ層)・出力層の3つの層で構成されていて、データを受け取り、特徴を抽出して、結果を出力するんだ。
| 層 | 役割 |
|---|---|
| 入力層(Input Layer) | データを受け取る |
| 中間層(Hidden Layer) | 特徴を抽出・変換 |
| 出力層(Output Layer) | 結果を出力 |
1. 各入力に重み(Weight)をかける
2. すべてを足し合わせ、バイアス(Bias)を加える
3. 活性化関数を通して出力
ディープラーニングは普通のニューラルネットワークと何が違うんですか?
中間層を多数重ねた(深い)ニューラルネットワークのことだよ。従来の機械学習と比べると、特徴量を人間が設計する必要がないのが最大の違いなんだ。
| 項目 | 従来の機械学習 | ディープラーニング |
|---|---|---|
| 特徴量設計 | 人間が手動で設計 | 自動で学習(特徴表現学習) |
| 精度 | 特徴量の質に依存 | 大量データで高精度 |
| 必要リソース | 比較的少ない | 大量のデータ・GPU |
AlexNetがILSVRC(画像認識コンペ)で圧勝。GPU活用、大規模データ、ドロップアウトなどの技術が貢献し、第3次AIブームの火付け役となった。
パーセプトロンって何ですか?
1958年にフランク・ローゼンブラットが考案した、最も単純なニューラルネットワークだよ。入力に重みをかけて足し合わせ、しきい値を超えたら1、超えなかったら0を出力する「Yes/Noを判定する装置」なんだ。
| 論理演算 | 内容 | 単純パーセプトロン |
|---|---|---|
| AND | 両方1なら1 | できる |
| OR | どちらか1なら1 | できる |
| XOR | 片方だけ1なら1 | できない |
XORができない理由は、直線1本では分けられないから(線形分離不可能)。1969年にミンスキーとパパートがこの限界を数学的に証明し、ニューラルネットワーク研究が冷え込んだ(第1次AIの冬の一因)。
単純パーセプトロンの限界を突破するために、中間層(隠れ層)を追加したのが多層パーセプトロンだよ。中間層が入ることで非線形な境界を作れるようになり、XOR問題も解けるんだ。
| 単純パーセプトロン | 多層パーセプトロン(MLP) | |
|---|---|---|
| 構造 | 入力層→出力層(2層) | 入力層→中間層→出力層(3層以上) |
| 分離能力 | 線形分離のみ | 非線形分離も可能 |
| XOR問題 | できない | できる |
| 学習方法 | 単純な重み更新 | 誤差逆伝播法(1986年) |
| 表現力 | 低い | 高い |
全結合層って何ですか?
ある層のすべてのノードが、次の層のすべてのノードとつながっている層のことだよ。入力が3つ、次の層が4つなら接続は3x4=12本。フレームワーク(Kerasなど)ではDenseという名前で出てくるんだ。
活性化関数はなぜ必要なんですか?
全結合層の計算は「入力x重み+バイアス」だけど、これはただの線形変換。線形変換をどれだけ重ねても線形のまま。つまり層を何層重ねても1層と同じになってしまう。活性化関数で非線形な変換をかませることで、深くする意味が生まれるんだ。
線形 → 線形 → 線形 = 結局ただの線形(深くする意味がない)
線形 → 非線形 → 線形 → 非線形 = 複雑なパターンを表現できる!
活性化関数こそが「ディープ(深い)にする意味」を生んでいる。
| 活性化関数 | 出力の範囲 | 特徴 | 主な使いどころ |
|---|---|---|---|
| ReLU | 0〜∞ | 0以下→0、0以上→そのまま。シンプルで高速 | 中間層で最もよく使われる |
| シグモイド | 0〜1 | なめらかに0〜1に変換 | 二値分類の出力層 |
| tanh | -1〜1 | シグモイドを-1〜1に拡張 | 中間層(ReLU以前の主流) |
| ソフトマックス | 0〜1(合計1) | 各クラスの確率を出力 | 多クラス分類の出力層 |
| シグモイド | tanh | ReLU | |
|---|---|---|---|
| 出力の範囲 | 0〜1 | -1〜1 | 0〜∞ |
| 微分の最大値 | 0.25 | 1.0 | 1 |
| 勾配消失 | 起きやすい | 起きやすい | 起きにくい |
| 計算コスト | 高い(指数計算) | 高い(指数計算) | 非常に低い |
| 弱点 | 勾配消失 | 勾配消失 | 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年に提案して、ニューラルネットワーク研究が再び活性化したんだ。
損失関数を「山」と考え、勾配(傾き)が急な方向に少しずつ下って谷底(損失最小)を目指す手法だよ。
| 学習率 | 結果 |
|---|---|
| 大きすぎ | 谷底を飛び越えて発散(行ったり来たり) |
| 小さすぎ | なかなか谷底に着かない(学習が遅い) |
| ちょうどいい | 効率よく谷底にたどり着く |
全データを使って1回更新
安定だが遅い
全員の意見を聞いてから1歩進む
全データを一気に使わずミニバッチに分けて少しずつ更新
現在の主流
数人ずつの意見で1歩ずつ進む
なぜ「確率的」と呼ぶんですか?
全データではなくランダムに選んだ一部(ミニバッチ)を使って勾配を計算するからだよ。毎回使うデータが違うので更新の方向にブレ(ノイズ)が生じるが、このブレが局所最適解や鞍点を抜け出す力になるんだ。
| 学習方式 | やり方 | 対応する勾配降下法 | 日常の例え |
|---|---|---|---|
| バッチ学習 | 全データをまとめて学習 | バッチ勾配降下法 | 教科書を全部読んでからテストを受ける |
| ミニバッチ学習 | ミニバッチに分けて少しずつ学習 | SGD(主流) | 章ごとにまとめて復習する |
| オンライン学習 | データが来るたびに1個ずつ学習 | SGD(バッチサイズ=1) | 問題を解くたびにすぐ復習する |
| 誤差逆伝播法 | 勾配降下法 | |
|---|---|---|
| 役割 | 各重みの勾配を計算する(犯人探し) | 勾配をもとに重みを更新する(修正) |
| 方向 | 出力→入力(逆向き) | -- |
| 使う数学 | 微分の連鎖律(チェインルール) | 勾配x学習率で更新 |
| 単独で使える? | 勾配降下法とセット | 誤差逆伝播法とセット |
勾配降下法で必ず最良の答えにたどり着けるんですか?
そうとは限らない。谷底は1つとは限らなくて、浅い谷にハマるとそこが最良だと思い込んでしまうんだ。
全体で一番深い谷底(損失が最小)
周りでは一番低いが全体では最良でない谷底
ある方向では谷底だが、別の方向では山頂になっている点。勾配が0になるので勾配降下法が止まりやすいが、局所最適解と違って抜け出す方向が存在する。高次元のニューラルネットワークでは局所最適解より鞍点のほうが多いと言われている。
| 対策 | やり方 |
|---|---|
| SGD | ミニバッチのランダムなブレがあるので浅い谷から偶然飛び出せる |
| モメンタム(慣性) | 過去の更新の勢いを引き継ぎ、浅い谷を通過できる |
| 初期値をランダムに変える | スタート地点を変えて複数回試す |
| 学習率を調整 | 最初は大きく探索、徐々に小さくして収束 |
イテレーションとエポックの違いがわかりません...
学習の繰り返しに関する3つの用語を整理しよう。データが1000個でバッチサイズが100個なら、1エポック=10イテレーション。30エポック繰り返すなら合計300イテレーションだよ。
| 用語 | 意味 |
|---|---|
| バッチサイズ | 1回の更新に使うデータの個数 |
| イテレーション | ミニバッチ1回分の重み更新(=1回の学習ステップ) |
| エポック(Epoch) | 全データを1周学習すること |
1エポックのイテレーション数 = 全データ数 / バッチサイズ
| 全データ数 | バッチサイズ | 1エポックのイテレーション数 |
|---|---|---|
| 1000 | 100 | 10回 |
| 1000 | 50 | 20回 |
| 10000 | 256 | 約39回 |
エポック数を増やす=学習を長くすることだが、増やしすぎると過学習になる。
損失関数ってどういうものですか?種類がいくつかあるんですよね?
損失関数は予測と正解のズレを数値化する関数だよ。この値を小さくするように重みを調整するのが学習の本質。タスクの種類(回帰・二値分類・多クラス分類)によって使うべき損失関数が決まっているんだ。間違った損失関数を使うとうまく学習できないから、対応関係をしっかり覚えておこう。
1. MSE(平均二乗誤差):予測値と正解値の差の二乗の平均。回帰タスクで使用。
2. バイナリクロスエントロピー:0/1の正解ラベルと予測確率のズレを測定。二値分類で使用。
3. カテゴリカルクロスエントロピー:複数クラスの正解ラベルと予測確率のズレを測定。多クラス分類で使用。
| タスク | 出力層の活性化関数 | 損失関数 | 出力の例 |
|---|---|---|---|
| 回帰(数値予測) | 恒等関数(なし) | MSE(平均二乗誤差) | 売上予測:1250万円 |
| 二値分類(Yes/No) | シグモイド | バイナリクロスエントロピー | スパム確率:0.92 |
| 多クラス分類(A/B/C...) | ソフトマックス | カテゴリカルクロスエントロピー | 犬60%, 猫22%, 鳥18% |
「タスク → 出力層の活性化関数 → 損失関数」の3点セットの対応が問われる。特に「多クラス分類にはソフトマックス+カテゴリカルクロスエントロピー」は頻出。