ニューラルネットワークはいくつかの部品の組み合わせである。入力を秤にかけるニューロン、信号を曲げる活性化関数、層を積み重ねる隠れ層、間違いの度合いを測る損失関数、そして責任を逆向きに分けて重みを直す誤差逆伝播法。部品を一つずつ自分で動かしてみて、最後にはこれらの部品で実際のモデルを作り、評価し、デプロイする全体の流れまでたどる。
y = ステップ(w₁x₁ + w₂x₂ + b)Rosenblatt, 1958
果物の香りと酢の香りが同時にするとき、ニューロンは二つの信号をそれぞれ異なる強さで受け取って足し合わせる。合計が発火のしきい値を超えると「近づけ」という信号を送る。シナプスの強さが重み、発火のしきい値がバイアスである。
入力ごとに重みを掛けて足し、バイアスを加えた値zが0以上なら1、そうでなければ0を出す。平面上で見ると、w₁x₁ + w₂x₂ + b = 0という直線一本が「餌」と「餌でないもの」を分ける。間違えた点に出会うたびに、その点の方へ直線を少しずつ動かすのがパーセプトロンの学習規則である。
パーセプトロンの学習規則は一行である。間違えた点を一つ選んで w ← w + η·(正解 − 予測)·x。正解が1なのに0と答えたらその点の方へ直線を引き寄せ、逆なら押しやる。直線で分けられる問題なら、この規則だけでいつかはすべての点を当てられる。
XORのように「どちらか一方だけがあるときに餌」という問題は、どんな直線でも分けられない。1969年にMinskyとPapertがこの限界を数学的に示して以来、ニューラルネットワーク研究はしばらく停滞した。解決策は層をもう一つ入れること、つまり隠れ層である。その前に、ステップの代わりになめらかに曲がる関数から見てみよう。
活性化関数は重み付き和zを受け取り、ニューロンの出力aを決める。曲がる形があってこそ層を積み重ねる意味が生まれ、勾配(微分)の形が学習の速さを左右する。
誤差逆伝播法は層をさかのぼるたびに活性化関数の勾配を掛ける。シグモイドの勾配はどんなに大きくても0.25である。10層さかのぼると、多くても0.25¹⁰ ≈ 0.00000095倍に縮む。前の方の層には「直せ」という信号がほとんど届かない。これが勾配消失である。
ReLUは正の区間の勾配がちょうど1なので、何層さかのぼっても信号が縮まず、計算も「0と比べる」だけなので速い。その代わり負の区間では勾配が0なので、一度オフになったニューロンが二度と生き返れないことがある。Leaky ReLU、ELU、Swishのような変形は、この隙間を埋めようとする試みである。どの関数が常に最良というわけではなく、問題とモデルに応じて選ぶ。
点(ピクセル)→ 方向 → つなぎ目 → 形。前の層の特徴を材料に、次の層が一段階大きな特徴を作る。
前の層の特徴4個(0.8, 0.1, 0.4, 0.0)を重み(0.5, 0.3, 0.2, 0.1)で秤にかけ、バイアス0.1を加える。
上の図の方向・つなぎ目の検出器は、説明のために人があらかじめ決めておいた規則である。かつての機械学習では、実際にこのように人が特徴を設計していた。ディープラーニングはこれらの検出器の重みをデータから自ら学ぶ。だから人が思いつかなかった特徴も見つけ出す。
画像で実際にどんな特徴が層ごとに生まれるかは、3-3(画像とCNN)で見る。
学習とは損失を減らすことである。何を損失と決めるかによって、モデルが「何を恐れるか」が変わる。
(正解 − 予測)²。数値を当てる回帰問題の基本である。住宅価格、世帯支出、気温のように連続した値を予測するときに使う。下の誤差逆伝播法ダッシュボードがこの損失を使う。
−log(正解側に与えた確率)。分類問題の基本である。自信満々で間違えると罰点が際限なく大きくなる。出力にシグモイドやソフトマックスを使うときに組み合わせる。
出力にシグモイドを使うと、MSEの勾配は 2(p − t)·p(1 − p) になる。正解が1なのに p = 0.01 と自信満々で間違えると、p(1 − p) が0に近いので勾配もほぼ0である。大きく間違えたのに「直せ」という信号が弱いのだ。交差エントロピーを使うとシグモイドの微分がきれいに消え、勾配は単に p − t、つまり −0.99 になる。間違いが大きいほど強く直す。
入力 2 → 隠れ 3 → 出力 1目標 1.00 · 損失 = (目標 − 出力)² · 学習率 0.1
入力が結合をたどって出力まで計算される。最初の出力は0.41。
(1.00 − 0.41)² ≈ 0.35。上のセクション5のMSEである。
出力から逆向きにたどりながら、重みごとに責任(勾配)を計算する。
新しい重み = 元の重み − 学習率 × 勾配。これが勾配降下法である。
重みのマスを押すとその結合が図で強調され、下の「数字でたどる」がその重みの計算を示す。
まず出力での間違いの量 −2 × (目標 − 出力) が決まる。隠れ→出力の重みの責任は、これにその重みから入ってきた信号(隠れ層の値)を掛けたものである。入力→隠れの重みはもう一段さかのぼる。出力の重みvを掛けて隠れニューロンまで責任を送り、隠れニューロンがどれだけ敏感だったか h(1 − h) を掛け、入ってきた入力xを掛ける。この「掛けて逆向きに送る」が連鎖律である。セクション2の勾配消失も、まさにこの掛け算から生じる。
「出力側のみ(ショウジョウバエ方式)」を押すと入力→隠れの重みは固定され、上から降りてくる教師信号(ショウジョウバエのドーパミンにたとえたもの)が出力側の結合だけを直す。ショウジョウバエのキノコ体の学習構造を大きく簡略化したたとえであり、ドーパミン信号が勾配のように計算されているかどうかはまだ研究中である。
損失を地形として描くと、学習とは最も低い場所を探して下っていくことである。同じ勾配を見ても、足をどう運ぶかがオプティマイザごとに異なる。
この谷は横に長く、縦に急である。SGDは勾配の分だけ動くので、急な縦方向では大きな歩幅で上下に跳ね(ジグザグ)、学習率が小さいとなだらかな横方向は亀の歩みになる(「0.1 小さく」で確認)。モメンタムは転がってきた速度を覚えていて、一貫した方向(横)に加速し、ジグザグは互いに打ち消し合う。Adamは方向ごとに勾配の大きさを別々に測って歩幅を合わせるので、横・縦を同じくらいの速さで下っていく。
「ミニバッチのノイズ」は、実際の学習のようにデータの一部だけを見て勾配を計算するときに生じる揺れである。学習率を「大きく」にすると、SGDは谷の壁を越えて弾き飛ばされる。どのオプティマイザが常に勝つわけではない。Adamは多くの問題で無難なデフォルトなのでよく使われるが、いくつものディープラーニングの課題で、よく調整したSGDの方が初めて見るデータによく当てはまったという研究もある [R12]。
学習点 14個 · 検証点 80個入力 1 → 隠れ 48 (tanh) → 出力 1, Adam
最も確実な処方は、データをもっと集めることである。データが少ないのにモデルが大きいと、暗記しやすくなる。この図の数値はこのページで直接計算した説明用の実験であり、実行するたびに同じ結果になるよう乱数を固定してある。
ここまで見た部品は、学習という一つの段階に入る。実際の仕事はその前後の方が長い。例は工場の検査台の「不良品探し」モデルである。
検査した製品200個のうち、実際の不良は20個。モデルは製品ごとに「不良である確率」を出す。いくつ以上を不良と判定するか(しきい値)を変えてみよう。
どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードで開くか、コピーして新しいノートブックのセルに貼り付ける。
順伝播 → 損失 → 逆伝播 → 更新の四段階を、ライブラリなしでそのまま書き移した。同じ渦巻きデータを「活性化関数なし」と「tanh隠れ層」で学習して比較する。自分のデータに替えるには、コード内の[自分のデータに替えるには]と書かれた部分でX, yだけを替える。
実務で使う方法である。活性化関数なし / ReLU / ReLU+ドロップアウト+早期終了の三つのモデルを比較し、最後のモデルをファイルに保存する(セクション9の⑥保存)。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトのあとに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。コンテストや論文でAIの助けを借りた場合は、主催者や学術誌の規定に従って、使用した事実と範囲を明らかにする。
本文の黄色い点線の下線と同じ辞書である。シリーズ全体で同じ表記を使う。セクション名を押すと最初に出てきた場所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。ショウジョウバエ・脳のたとえには強さを示した。直接 実際に同じことをしているという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | ショウジョウバエ・脳のたとえ | たとえが外れるところ |
|---|---|---|---|
| 重み | 意見ごとに異なる信頼度 | 部分的 シナプスの強さ | 実際のシナプスは時間や体の状態によって強さが変わり、信号も連続した数値ではなく電気パルス(スパイク)である |
| バイアス・しきい値 | 決定を下す基準線 | 部分的 ニューロンの発火しきい値 | ニューロンのしきい値は固定値ではなく、疲労・適応によって絶えず変わる |
| 活性化関数 | いくら回しても限界があるボリュームつまみ | 部分的 刺激の強さに応じた発火頻度の曲線 | ニューラルネットワークは数値を一つ出すが、ニューロンは時間に沿ってパルスを出す |
| 隠れ層 | 報告を集めて整理する中間管理職 | 部分的 キノコ体のケニオン細胞 | キノコ体の入力側の結合はほとんど学習で変わらない。ディープラーニングの隠れ層はすべての結合を学習する |
| 損失関数 | テストの採点表 | 部分的 砂糖(報酬)・電気ショック(罰)という結果 | ショウジョウバエは「どれだけ間違えたか」を一つの数値で計算しない |
| 誤差逆伝播法 | 事故の後に責任を逆向きに問いただすこと | なし ドーパミン信号は層をさかのぼって計算されない | 脳が誤差逆伝播法に似たことを別の方法で行っているかどうかは研究中である |
| 学習率 | 一度指摘されて直す幅 | 部分的 一度の経験で変わるシナプスの量 | 脳の変化の幅は状況・注意・反復によって異なる |
| オプティマイザ | 霧のかかった山を下る登山者の歩き方 | なし | 実際の損失地形は数百万次元なので、図のように一目では見えない |
| 過学習 | 過去問の答えだけを暗記した受験生 | なし | 人も暗記はするが、人の汎化の仕方はニューラルネットワークとは異なる |
| ドロップアウト | 何人か抜けても回るチーム | なし シナプス伝達がときどき失敗することに似ているという解釈はあるが、根拠は弱い | テスト時はすべてのニューロンをオンにして使う。チームメンバーがいつも抜けているわけではない |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図の参考資料
以下の資料を構成と内容の参考にした。
講師、実務OJT担当者、チューターのための運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。
| 対象 | ニューラルネットワークを初めて学ぶ大学生・社会人。Pythonの基礎があればColab実習まで、なければ本文のアニメーションまで |
|---|---|
| 前提知識 | 掛け算と足し算、関数のグラフの読み方。微分は「勾配 = 少し変えたときにどれだけ変わるか」程度で十分 |
| 学習目標 | ① パーセプトロン・活性化関数・隠れ層がそれぞれ何をするかを説明できる ② 順伝播 → 損失 → 逆伝播 → 更新を数字でたどれる ③ 過学習を見分け、検証データ・早期終了・ドロップアウトで対処できる |
| 所要時間の目安 | 読む 40〜50分 · アニメーション実演 25分 · Colab実習 30分(コード1 10分、コード2 20分) |
導入5分(セクション1 XORの失敗を実演)→ セクション2·3の実演15分 → セクション5·6のダッシュボード15分 → セクション8 過学習10分 → 確認問題5分。
セクション6のダッシュボード15分 → セクション8·9 25分(正解率の落とし穴を業務事例で討論)→ コード2実習30分 → プロンプトカードで「自分のチームのデータに適用」20分。
入門者はセクション1·2·3·6だけ、中級者にはセクション6の「数字でたどる」を手で一度計算させた後、コード1の逆伝播部分と照らし合わせさせる。
| セクション | 立ち止まって投げかける質問 | 操作のコツ |
|---|---|---|
| 1 パーセプトロン | 「XORでは直線をいくら動かしても、なぜ間違えた点が残るのか?」 | 簡単な問題を先に学習させて成功を見せてから、XORに切り替える |
| 2 活性化関数 | 「シグモイドの勾配の最大値はどこで、いくつか?」 | シグモイドで停止した後、スライダーを0に動かして0.25を確認する |
| 3 隠れ層 | 「層を二つ積んだのに、なぜ左はまだ直線なのか?」 | ニューロン数を4に減らし、右も失敗する様子を見せる |
| 4 表現学習 | 「□はなぜ角4つで判断されるのか?人なら何を見るか?」 | TとLを交互に押して、つなぎ目の層だけが変わることを指摘する |
| 5 損失関数 | 「自信満々で間違えたとき、どちらの損失がより強く直せと言うか?」 | pを0.01にして二つの勾配の数値を比べる |
| 6 誤差逆伝播法 | 「出力に近い重みと遠い重み、どちらの勾配が大きいか?」 | 「次のステップ」で1周をゆっくり回した後、重みのマスを替えながら式を読む |
| 7 オプティマイザ | 「SGDはなぜジグザグに進むのか?」 | 学習率を「大きく」に変えて、SGDが弾き飛ばされる場面を見せる |
| 8 過学習 | 「学習損失が下がり続ければ良いモデルなのか?」 | 正則化をすべてオフにして最後まで回した後、一つずつオンにして比べる |
| 9 全体の流れ | 「不良品検査で、見逃しと誤警報のどちらがより高くつくか?」 | しきい値を0.2と0.8に動かし、適合率・再現率が逆向きに動くのを見る |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| 層をたくさん積めば必ず賢くなる | 活性化関数がなければ何層でも直線一本と同じ。あってもデータが少なければ過学習する | セクション3の左の図、セクション8 |
| ニューラルネットワークは脳をそのまま写した | 層・結合の強さ・しきい値という骨組みだけを借りた。誤差逆伝播法は脳では確認されていない | 共通セクションDの「なし」表示 |
| 学習損失が低ければ良いモデルである | 初めて見るデータ(検証・テスト)での性能が基準である | セクション8の右のグラフ |
| 正解率が高ければ良いモデルである | 不均衡データでは「すべて正常」でも正解率が高い。適合率・再現率を一緒に見る | セクション9 しきい値0.95 |
| Adamがいつでも最良である | 無難なデフォルトにすぎない。問題によってはSGD+モメンタムの方が良いこともある | セクション7 学習率「小さく」 |
直線(高次元では平面)一つだけである。線形変換を何回組み合わせても一つの線形変換になるからである(W₂W₁x = Wx)。セクション3の左の図がその例である。
シグモイドの勾配は最大0.25なので、層ごとに掛けられて急速に小さくなる。ReLUは正の区間の勾配が1なので、さかのぼっても縮まない。ただし負の区間では0なので、オフになったままのニューロンが生じうる。
L = (1 − 0.41)² = 0.3481 ≈ 0.35。∂L/∂y = −2 × (1 − 0.41) = −1.18。セクション6のダッシュボードの1周目の値と同じである。
過学習である。検証損失が最も低かった時点のモデルを使い(早期終了)、ドロップアウト・重み減衰をオンにするか、データを増やす。
正解率90%、再現率0%。不良を一つも見つけられなかった。だから不均衡データでは正解率だけを見てはいけない。
コード1でtanhをReLUに替える(活性化関数とその微分の2行)。隠れニューロン数を4、16、64に変えて検証正解率を表にまとめ、最も良い設定とその理由を3文で書く。
コード2のデータを自分の業務データ(特徴2個以上、正解0/1)に替える。学習/検証/テストを6:2:2に分け、テストデータの正解率・適合率・再現率を報告する。しきい値0.5が業務に合っているかを、根拠を挙げて判断する。
| 入門者 | セクション4·7は飛ばしても流れは途切れない。セクション6は「次のステップ」ボタンで1周だけ一緒に見る |
|---|---|
| 発展 | セクション6の「数字でたどる」を手で計算させた後、コード1のd1·d2·d3の行と一つずつ対応させる。セクション7に学習率の減衰(スケジュール)を加えるとどうなるかを討論する |
| さらに学ぶ | Sangsun Ahn『ビジネスのためのデータサイエンス』講義案(データサイエンス全般) · STEP [K-デジタル] 人工知能 自然言語処理(3-5・3-8と連動) · STEP [K-デジタル] フィンテックデータ分析の基礎(3-6と連動) |
| 講師用資料 | 確認問題の採点基準と課題の解答例は教育者用解答ページ (3-2)で見られる |
「3-2 ニューラルネットワークの部品」の回を最後まで読みました。研究室のメンバーがひと言ずつまとめます。