コンピュータにとって写真は、数字がびっしり並んだ格子だ。人が決めた特徴も、ピクセルを一列に並べるニューラルネットワーク(MLP)も、この格子の前では簡単に揺らぐ。小さなフィルターを一つ格子の上で滑らせる畳み込みニューラルネットワーク(CNN)が何を解決し、何をまだ解決できていないのかを、数字を一つひとつ自分で計算しながらたどる。
画面の絵を思い切り拡大すると、小さな四角(ピクセル)が見える。ピクセル1つは明るさを表す数字1つ、カラーなら赤・緑・青の3つの数字だ。
数字の格子は通常、0(黒)から255(白)までの整数で保存する。ニューラルネットワークに入れるときは255で割って0〜1に変換することが多い。このページの計算も0〜1を使う。スマートフォンの写真1枚(例:4000×3000のカラー)は数字が3,600万個になる。数字の格子がこれほど大きいという事実が、この後のセクションの出発点だ。
3種類の図形(+、×、○)を見分けなければならない。人が手がかりを2つ決めた。「中央が塗られているか」「縦・横の帯が斜めの帯より濃いか」。機械はこの2つの数字に与える重みだけを学ぶ。
この例の特徴はわざと単純にしてある。実際の研究者たちは、エッジの向きを領域ごとに数えるような、はるかに精巧な特徴を長いあいだ考案してきた。それでも写真の中の物体は位置・大きさ・照明・角度が限りなく変わるため、人があらゆる変化を前もって思い浮かべて特徴に盛り込むのは難しかった。2012年、写真を1,000種類に分類するImageNetコンテストで、特徴まで自ら学ぶCNNがtop-5誤り率15.3%で2位(26.2%)を大きく引き離し、流れが変わった [R4]。
3-2のMLP(多層パーセプトロン)に写真を入れるには、格子を一列に広げなければならない。広げた瞬間に生じる問題を一つずつ見ていく。
局所結合 · 重み共有 · プーリング · 層の積み重ねFukushima 1980 → LeCun 1998
| MLPの問題 | CNNの解決策 | どこまで解決したか |
|---|---|---|
| ① 近傍関係の喪失 | 局所結合:ニューロン1つが3×3のような近くの小片だけを見る | 隣り合うピクセルを一緒に見るよう、構造に組み込んだ |
| ② 重みの爆発 | 重み共有:同じフィルターをすべての位置で使う | フィルター数 × 9個で済む。写真のサイズとは関係ない |
| ③ 位置の変化 | 重み共有 + プーリング:どこにあっても同じフィルターが見つけ、プーリングが小さな移動を吸収する | 比較的揺らぎにくい。完全ではない。大きくずらすと正解率が下がる(セクション8) [R6] |
| ④ ピクセルの順序を無視 | 層の積み重ね:近いピクセル同士をまとめ、だんだん広い形を作る | その代わり「近いピクセルは関連がある」という仮定に頼る。ピクセルを混ぜると性能が下がる(セクション8) |
出力 = Σ(入力の小片 × フィルター)6×6 入力 · 3×3 フィルター → 4×4 出力
フィルター窓を入力のある位置に重ねる。重なった9マスどうしを掛けて全部足した値が、出力の1マスになる。窓を1マスずつ動かしながら繰り返す。6×6の入力に3×3の窓は横に4か所、縦に4か所置けるので、出力は4×4だ(端を0で埋めるパディングをしない場合)。
縦エッジフィルターは左の列に+1、右の列に−1がある。だから「左が明るく右が暗い」位置では正、逆なら負、均一なら0に近くなる。ニューラルネットワークはこうしたフィルターの数字を人が決めるのではなく、誤差逆伝播法で学ぶ。付け加えると、ディープラーニングでいう「畳み込み」は数学の畳み込みと違ってフィルターを反転させない(相互相関)。学習で数字を決めるので結果は同じだ [R8]。
セクション5の4×4出力にReLU(負の数 → 0)を通したあと、2×2の窓ごとに数字を1つだけ残す(最大または平均)。絵を1マスずらしたときに何が変わるかも見る。
プーリングは数字を4分の1に減らして次の層の計算を軽くし、2×2の窓の中で起きた小さな移動は吸収する。窓の境界をまたぐ移動や2マス以上の移動は、そのまま結果を変える。だから「CNNは位置の変化に強い」より「比較的揺らぎにくい」のほうが正確だ。実際、有名な大規模CNNでも、絵を数ピクセルずらすだけで答えが変わりうるという研究がある [R6]。
最後の特徴マップを一列の数字にし、全結合層とソフトマックスを通して「+である確率、×である確率、○である確率」を出す。セクション8のCNNをあらかじめ学習させてそのまま使う。
LeNetのような古典的なCNNは、最後のマップをそのままつなぎ合わせて(平坦化、Flatten)全結合層に入れていた [R3]。この方式は「特徴がマップのどのマスにあったか」まで渡すので、再び位置に敏感になる。マップごとに数字を1つ(最大値や平均)だけ残すグローバルプーリングは、位置情報を消すので移動に揺らぎにくく、パラメータも少ない [R5]。このページのCNNはグローバル最大プーリングを使う。
ソフトマックスは3つのスコアを、合計が1になる3つの確率に変える。スコアが大きいほうが確率も大きい。確率が高いからといって常に正しいわけではない。学習時に見なかった姿では、間違った答えにも高い確率を与えることがある(3-1 セクション4)。
12×12の図形3種類を120枚(各40枚)で学習する。学習画像はすべて中央(±0.5マス)にあり、ノイズ・邪魔な線・回転・太さの変化が混ざっている。テストは初めて見る150枚ずつだ。
どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードで開くか、コピーして新しいノートブックのセルに貼り付ける。
セクション5・6と同じ6×6の数字「7」と同じフィルター4つで、畳み込み → ReLU → 最大・平均プーリングを計算する。出力の数字はページの数字とマスまで一致する。自分のデータに替えるには、コード内の[自分のデータに替えるには]と書かれた部分でIMGだけを替える。
セクション8と同じモデル構造と同じ図形の規則で、実務用ライブラリを使って実験をやり直す。オプティマイザーはAdam(40エポック)に変え、シード3つで繰り返して平均をとる。ピクセルを混ぜる実験は、同じ規則で混ぜたデータで最初から学習し直す。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトのあとに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。コンテストや論文でAIの助けを借りた場合は、主催者や学術誌の規定に従って、使用した事実と範囲を明らかにする。
本文の黄色い点線の下線と同じ辞書である。シリーズ全体で同じ表記を使う。セクション名を押すと最初に出てきた場所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。ショウジョウバエ・脳のたとえには強さを示した。直接 実際に同じことをしているという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | ショウジョウバエ・脳のたとえ | たとえが外れるところ |
|---|---|---|---|
| ピクセル | モザイクのタイル1枚 | 部分 ショウジョウバエの複眼の個眼1つ | 個眼は六角形に並び、明るさの変化に敏感だ。写真のピクセルは四角い格子の静止した値だ |
| フィルター | 特定の模様だけを照らして見る虫眼鏡 | 部分 一次視覚野の方位選択性細胞 [R1] | ニューロンの受容野は位置ごとに少しずつ違う。CNNのフィルターはすべての位置で完全に同じだ |
| 重み共有 | 同じはんこを紙のあちこちに押す | 部分 ショウジョウバエの視覚系では同じ種類のニューロンが視野全体に繰り返し配置される | 脳のニューロンはそれぞれ別々の結合強度を持つ。数字を「共有」してはいない |
| プーリング | 地図を縮小コピーする | 部分 位置が少し違っても反応する複雑細胞 [R1] | 複雑細胞が正確に最大値を選ぶ計算をしているかは確認されていない |
| 層の積み重ね | 点 → 線 → 図形の順に絵を描く | 部分 視覚経路 V1 → V2 → V4 → 下側頭皮質(3-1 セクション5) | 脳にはフィードバック結合が多いが、CNNは一方向にしか流れない |
| 平坦化 | 碁盤の石を一列に並べる | なし | 一列に並べると「誰が誰の隣か」が消える(セクション3 ①) |
| ソフトマックス | 投票結果を得票率に変える | なし | 得票率が高いからといって正解とは限らない。初めて見る絵では自信満々に間違えることがある |
| ピクセルを混ぜる | パズルのピースを決まった規則で混ぜる | なし | 人は混ぜた絵をほとんど見分けられないが、MLPは同じように学習する。「人のように見る」という基準はモデルごとに違う |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図の参考資料
以下の資料を構成と内容の参考にした。
講師、実務OJT担当者、チューターのための運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。
| 対象 | 3-2を終えた大学生・社会人。画像データを扱う実務者(検査画像、医療画像、文書スキャン) |
|---|---|
| 前提知識 | 3-2の隠れ層・誤差逆伝播法の概念。掛け算と足し算だけでセクション5・6の計算についていける |
| 学習目標 | ① 写真が数字の格子であることを説明し、MLPがつまずく4つの理由を挙げる ② 畳み込み・ReLU・プーリングを手で計算する ③ CNNが位置の変化に「比較的揺らぎにくいが完全ではない」ことを実験結果で説明する |
| 所要時間の目安 | 読む 40〜50分 · アニメーション実演 25分 · Colab実習 30分(コード1 10分、コード2 20分) |
導入5分(セクション1 カラーのショウジョウバエの数字)→ セクション3 4つの理由10分 → セクション5・6 手計算15分 → セクション8 ダッシュボード15分 → 確認問題5分。
セクション3 ② 重みの爆発を自社の画像サイズで計算10分 → セクション8 20分(現場のカメラ位置が変わったら?)→ コード2 実習30分 →「自社のデータに必要な拡張は?」討論20分 → プロンプトカード10分。
入門者はセクション1・3・5・8だけ。中級者にはセクション5の出力1マスを手で計算させてからコード1のconv2d関数と照らし合わせ、セクション7で平坦化とグローバルプーリングのパラメータ数を自分で数えさせる。
| セクション | 立ち止まって投げかける質問 | 操作のコツ |
|---|---|---|
| 1 数字の格子 | 「ショウジョウバエの目の赤は、3つのチャンネルでどんな数字だろう?」 | カラーのショウジョウバエで赤・緑・青の表示を順に押す |
| 2 従来の機械学習 | 「人が決めた特徴は、なぜずらした絵で崩れるのか?」 | きれいな絵 → 2マスずらす の順に押して正解率の棒を比べる |
| 3 MLPの限界 | 「すぐ下のピクセルは、一列にすると何マス離れるだろう?」 | ② 重みの爆発で1000×1000を押し、数字の大きさに驚かせる |
| 4 CNNの解決策 | 「フィルターを共有すると、なぜ重みが写真のサイズと無関係になるのか?」 | 層の積み重ねで、1つのニューロンが見る範囲が3 → 4 → 8と広がることを指摘する |
| 5 畳み込み | 「この位置の出力はなぜ負なのだろう?」 | 一時停止し、「1マス進む」で式を一緒に読む |
| 6 ReLU・プーリング | 「1マスずらすと、プーリングの前と後のどちらが変化が少ないだろう?」 | 元の絵と1マスずらした絵を交互に押す |
| 7 確率まで | 「平坦化とグローバルプーリングのどちらが位置に敏感でないだろう?」 | 「2マスずらした +」を選んでから、2つの方法を交互に見る |
| 8 比較ダッシュボード | 「中央の絵では誰が勝ち、ずらした絵では誰が勝つのか?」 | 位置をずらす実験を先に見て、ピクセルを混ぜる実験に切り替え、結果が逆転するのを見る |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| CNNは位置が変わっても同じように認識する | 比較的揺らぎにくいだけだ。大きくずらすと正解率が下がり、大規模なCNNでも数ピクセルの移動で答えが変わることがある | セクション8 位置をずらす、セクション6 |
| CNNは常にMLPより正確だ | このページのように絵がいつも同じ位置にあれば、MLPのほうが高いこともある。CNNの長所はパラメータ効率と移動に対する頑健さだ | セクション8の0マスでの正解率 |
| フィルターは人が決める | セクション5のフィルターは説明用だ。実際のCNNはフィルターの数字を誤差逆伝播法で学ぶ | セクション7の学習済みマップ |
| プーリングは情報を増やす | プーリングは数字を減らし、情報を捨てる。その代わり小さな移動を吸収し、計算を減らす | セクション6の4×4 → 2×2 |
| CNNは脳の視覚野と同じだ | 単純・複雑細胞から着想を得たが、学習方法と結合構造が違う | 共通セクションDの「部分」表示 |
224 × 224 × 3 = 150,528個の入力 × 1,000 = 150,528,000個(約1億5千万個)。3×3のカラーフィルター64個の畳み込み層は3 × 3 × 3 × 64 = 1,728個(バイアスを含めて1,792個)だ。
(6 − 3 + 1) × (6 − 3 + 1) = 4×4.
重なった小片の2行目が[0, 3, 3]で、フィルターの各行は[1, 0, −1]だ。0×1 + 3×0 + 3×(−1) = −3。1行目・3行目はすべて0なので、足しても−3だ。
最大6、平均 (6 + 3 + 0 + 3) / 4 = 3。
CNNだ。CNNは「近いピクセル同士は関連がある」という仮定を構造(3×3フィルター、プーリング)に組み込んでいるが、混ぜると近いマスが無関係なピクセルになる。MLPはもともとピクセル間の位置関係を使わないので、混ぜてもほぼ同じだ。学習済みのモデルに混ぜた絵を入れるのではなく、混ぜたデータで最初から学習するという条件が重要だ。
コード1のFILTERSに斜めエッジのフィルターを1つ追加し、6×6の「7」でどのマスが最も強く反応するかを見つけ、その理由を2文で書く。
コード2の学習データに1〜2マスずらした絵を混ぜる(データ拡張)。2つのモデルの0〜3マスでの正解率がどう変わるかを表にまとめ、「構造で得る頑健さ」と「データで得る頑健さ」を比較する。
| 入門者 | セクション2とセクション7は飛ばしても流れは途切れない。セクション8は結果の棒だけを一緒に読む |
|---|---|
| 発展 | セクション4 層の積み重ねの受容野の計算(3 → 4 → 8)を一般式にまとめさせる。セクション6の限界を[R6]論文の表と結びつけて討論する |
| さらに学ぶ | Sangsun Ahn『ビジネスのためのデータサイエンス』講義案(データサイエンス全般) · STEP [K-デジタル] 人工知能 自然言語処理(3-5・3-8と連動) · STEP [K-デジタル] フィンテックデータ分析の基礎(3-6と連動) |
| 講師用資料 | 確認問題の採点基準と課題の解答例は教育者用解答ページ(3-3)で見られる |
「3-3 画像とCNN」の回を最後まで読みました。研究室のメンバーがひと言ずつまとめます。