ネコ vs ヒト — 写真は数の行列である

人はひと目でネコとヒトを見分けるが、コンピュータが受け取るのは0〜255の数がぎっしり詰まった表だ。写真が行列になる過程をピクセル1つまでたどり、ピクセル距離がなぜ「似ていること」を測れないのかを確かめた後、3 × 3のフィルタでエッジを探す畳み込みを手で計算する。最後に、人が決めた特徴(顔の枠・特徴点・エッジ強度)の長所と限界を見る。

0~255チャネルの値1つの範囲(8ビット)
9,40856 × 56のカラー写真に含まれる数の個数
3 × 3フィルタ1つの大きさ
2001Viola–Jones 顔検出 [R4]
14% → 90%2マスずらした数字:MLP 対 CNN(コード2)
2つColabですぐ動かせるコード
1問題

ネコ vs ヒト — 人にとってはいちばん簡単な問題

とがった耳と毛、なめらかな肌。人はひと目で見分ける。コンピュータはこの写真を何として受け取り、どんな手がかりから見つけられるのだろうか?

左はネコの顔写真の上に額・目・鼻を結ぶ赤い線、右は長い髪の女性の顔写真に緑の顔の枠と赤い特徴点、ピンクの主要点が打たれた画像
著者が自ら作成した画像。線と点は、人があらかじめ決めておいた顔の特徴点である。

左のネコの上の赤い線は額・目・鼻を結ぶ顔の骨格、右の人の上の緑の枠は「ここに顔がある」という検出結果、赤い点はあごの線・眉・唇の周りの特徴点、ピンクの点は両目・鼻・口の主要な位置です。どれも、人が「何を見るか」をあらかじめ決めておいた手がかりです。

この回では2つのことを見ます。1つ目は、コンピュータが受け取るのはこうした線や点ではなく数の行列だということ(セクション2〜3)。2つ目は、その数からエッジのような手がかりを見つけるフィルタと、人が決めた手がかりの限界です(セクション4〜6)。

数の例は、シリーズを通して同じチワワの写真1枚(4-4の主役)でたどります。ピクセルとフィルタはどんな写真にも同じように働くからです。実習では、ネコ・ヒト・イヌ・チワワ・マフィンの5枚すべてを選べます。

初心者向けの解説

人にとって簡単な問題が、コンピュータにとっても簡単とは限りません。人は写真を見た瞬間に「毛がある」「耳がとがっている」と気づきますが、コンピュータはその手がかりを数から一つずつ計算して導き出さなければなりません。ネコ vs ヒトはその手がかりがはっきりしているほうなので、画像分類の最初の練習にぴったりです。

2ピクセル

ピクセルと行列 — コンピュータが受け取る最小の情報

写真は数の格子であり、カラー写真はその格子が3枚重なったものだ。モデルが入力として受け取る最小の単位は、チャネルの値1つ(0〜255)である。

1定義

デジタル写真は、縦・横に細かく分けられた小さなマスの集まりです。このマス1つをピクセル(pixel, picture element)といいます。ピクセル1つには色が1つだけ入っていて、その色は赤(R)・緑(G)・青(B)の光の強さ3つで記録されます。強さは0(光なし)から255(最も明るい)までの整数です。そのため、カラー写真は縦 × 横 × 3個の数が並んだ表、つまり行列(正確には3層のテンソル)になります。

形縦 H × 横 W × チャネル 3
値1つ0 ~ 255 の整数(8ビット)
意味を持つ最小単位チャネルの値1つ

かんたんに言うと方眼紙の色塗り遊びです。方眼の1マスに絵の具3色(赤・緑・青)をそれぞれ何滴入れたかを0〜255で書き留めておけば、そのメモだけで誰でも同じ絵を塗り直せます。コンピュータが持っているのは絵ではなく、このメモです。

2数式
X[y, x, c] ∈ {0, 1, …, 255},   y = 1…H,  x = 1…W,  c ∈ {R, G, B}注意:この0〜255は、画面表示用に補正された(ガンマ符号化された)値です。数が2倍だからといって、光の物理的な強さが正確に2倍というわけではありません。
グレースケール輝度  Y = 0.299·R + 0.587·G + 0.114·B人の目が緑に最も敏感であることを反映した重み付き和です(ITU-R BT.601)。カラーのマス1つが数1つに縮まります。
モデルに入れる前:  x′ = x / 255  (0 〜 1 の間に)
H, W
縦のマス数、横のマス数。2つを合わせて解像度と呼ぶ
c(チャネル)
色の層。カラーはR、G、Bの3枚、グレースケールは1枚
X[y, x, c]
y行目、x番目のマス、チャネルcの数1つ。モデルが受け取る最小の入力
Y
3つのチャネルを混ぜて作ったグレースケール輝度
数式を一つずつ読む
  1. {0, 1, …, 255}値が256通りの整数だという意味です。2⁸ = 256なので、数1つがちょうど8ビット(1バイト)に収まります。
  2. H × W × 3数の個数です。このページの実習写真は56 × 56 × 3 = 9,408個、よくあるモデル入力の224 × 224 × 3は150,528個、1,200万画素のスマートフォン写真は約3,600万個です。
  3. 0.299R + 0.587G + 0.114Bパーセプトロンの重み付き和と同じ形です。3つの数に比重を掛けて足すと、明るさ1つになります。3つの比重を足すと1なので、結果も0〜255の範囲に収まります。
  4. x / 255大きな数を0〜1に縮めて、モデルが扱いやすくします。前の回で見た正規化と同じ目的です。
数字でやってみる(チワワの写真を14 × 14に縮めたとき)目のマス (R, G, B) = (39, 37, 43) → Y = 0.299×39 + 0.587×37 + 0.114×43 = 38.3 ≈ 38(ほぼ黒)
毛のマス (R, G, B) = (212, 161, 115) → Y = 0.299×212 + 0.587×161 + 0.114×115 = 171.0 ≈ 171(明るいベージュ)
2つのマスの差は171 − 38 = 133。この急激な差が、セクション4で「エッジ」として捉えられます。
3図解 · 最小の情報まで分解してみる
写真からビットまで写真1枚、ピクセル1マス、チャネルの値3つ、数1つ、ビット8つへと段階的に分解され、チャネルの値1つが画像の中で意味を持つ最小単位として強調される 写真ピクセル1マスチャネルの値3つ数1つビット8つ R = 39 G = 37 B = 43 39 00100111 「チワワ」という意味「ほぼ黒」光の強さ3つ赤の強さ1つオン/オフだけ モデルが受け取る最小の入力 ← 意味が大きい(人が理解)意味が小さい(機械が保存) → 左へ行くほど意味が生まれ、右へ行くほど数だけが残ります
4解釈

写真を分解し続けると、ピクセル1マス、その中のR・G・Bの数、数1つを構成する8つのビットにまで下りていきます。ビットはコンピュータが保存する最小の単位ですが、ビット1つは色でも明るさでもなく、オン/オフにすぎません。

そのため、画像のディープラーニングで意味を持つ最小の情報はチャネルの値1つ、つまり「このマスの赤の強さは39」という数です。モデルの最初の層は、まさにこの数(X[y, x, c])を入力として受け取ります。

しかし、この数1つには「チワワ」という意味はまったくありません。目のピクセル (39, 37, 43) とブルーベリーのピクセル (37, 31, 37) は、数で見るとほぼ同じです。意味は複数のピクセルがどう集まっているかから生まれ、その集まりを見つけるのがセクション4の特徴抽出です。

5動く図解 · 写真が数になるまで

チワワの写真を縦横14マスに区切り、目のマスを1つ選んで数に変える過程です。右側の数は、写真の実際のピクセルから計算した値です。

  1. 元の写真
  2. 格子に区切る
  3. 1マス選ぶ
  4. R・G・Bの3つの数
  5. グレースケールの数1つ
  6. 行列に展開
6ピクセル虫めがね · 自分でクリックして数を見る

写真と解像度を選び、絵のマスをクリックするか、マウスを重ねてみましょう。横(モバイルでは下)の表は、選んだマスとその周囲7 × 7マスの実際の数です。絵をクリックした後は、矢印キーでマスを移動できます。

写真
解像度
表示

7主な特徴 · ピクセルをそのまま使うと
強み
  • 写真の情報が一つも欠けていない、最も正直な入力
  • どの写真も同じ形(H × W × 3)なので、1つのモデルに同じように入れられる
  • 数なので、掛け算・足し算ですぐに計算できる
限界
  • 数が多すぎる:224 × 224の写真1枚で150,528個
  • 写真を1〜2マス動かしたり、少し明るくしたりするだけで、ほぼすべての数が変わる
  • 数1つには意味がない。目とブルーベリーが同じ数になることもある(セクション4と4-3・4-4で扱う)
位置づけ:ディープラーニング以前は、人がピクセルから特徴を取り出すルールを自分で作っていました(04のランドマーク)。2012年以降のCNNは、ピクセルをそのまま受け取り、特徴まで自ら学びます。
✓確認問題

Q1. 横10マス、縦10マスのカラー写真には、数がいくつ入っていますか?

Q2. ピクセル値 (R, G, B) = (0, 0, 0) は何色ですか?

Q3. 同じ写真を右に2マスずらすと、同じ位置の数は?

Q4. 画像のディープラーニングモデルが入力として受け取る最小の情報は?

初心者向けの解説

ピクセルは写真を構成する小さなマスで、マスごとに赤・緑・青の光の強さが0〜255の数で記録されています。4-1の表にたとえると、写真1枚は「縦 × 横 × 3」マスからなる1行です。ピクセル虫めがねでマスをクリックして実際の数を確かめ、解像度を変えて数の個数がどう変わるかを見てみましょう。

3ピクセル距離

ピクセル距離の落とし穴 — 1マスずらすだけで「別の写真」

2枚の写真の同じ位置の数を引いて距離を測れば、「似ていること」を測れるだろうか? 同じチワワをずらしたり暗くしたりして、5枚の距離をすべて測ってみる。

11マス動かすだけで「別の写真」になる このページの写真での値

2枚の写真のピクセル距離は、同じ位置のグレースケールの数どうしを引いた値を2乗して平均し、平方根をとった値です(0なら完全に同じ)。チワワを横にずらしたり、暗くしたりしてみましょう。人の目にはまだ同じチワワなのに、数の上ではマフィンよりも遠い写真になることさえあります。

距離(A, B) = √( (1/N) Σ (Ai − Bi)² )N = 56 × 56 = 3,136マス。グレースケール輝度で比べます。
チワワ(元画像)
変えたチワワ
マフィン

2ピクセル距離の表:チワワは誰と近いのか このページの写真での値

このページの5枚の写真どうしのピクセル距離をすべて測りました。数が小さいほど「似ている」と計算されたことになります。最も小さい値には色を付けました。

この表の値は、このページの5枚(顔の部分だけを切り取って56 × 56に縮めたもの)で測ったものです。別の写真を使うと背景・照明・構図によって値は大きく変わりますが、「ピクセル距離は意味の距離とは違う」という結論は、実際の写真でも広く知られた性質です。

3Colab コード1の結果 · 別の写真で測ってみると

コード1は、scikit-imageに入っているネコの写真(chelsea)と人の写真(astronaut)の顔の部分を56 × 56に縮めて、同じ実験をします。同じネコを1マスずらすと距離は16.9、2マスで27.1、8マスで40.5と大きくなり、ネコとヒトの距離は85.3でした。数マスずらすだけで、別の動物との距離の半分近くになります。

ピクセル距離が測るのは「同じ位置の数が似ているか」だけです。そのため、位置・明るさ・構図に敏感で、何が写っているかはわかりません。この限界こそ、セクション4のフィルタと4-3のCNNが必要な理由です。

初心者向けの解説

4-1のk-NNは「近くの隣人」に尋ねました。写真で同じことをするには、写真どうしの距離が意味を反映していなければなりません。ところがピクセル距離では、チワワは同じイヌ(ゴールデンレトリバー)よりマフィンに近く、同じチワワでも4マスずらすだけでマフィンより遠くなります。写真では、ピクセルそのままの距離で隣人を探してはいけないということです。

4畳み込み

畳み込みとフィルタ — 隣り合うピクセルが作る模様を探す

3 × 3の数の表(フィルタ)を写真の上で滑らせながら、掛けて足す。模様に似たところで大きな数が出て、その結果を集めたものが特徴マップである。

1モデル

特徴とは、「ここで明るかったのが急に暗くなる(エッジ)」「周囲より丸く暗い(点)」「細い線が密に並ぶ(毛並み)」のように、複数のピクセルが一緒に作るパターンです。CNNは、3 × 3のような小さな数の表であるフィルタ(カーネル)を写真の上に置き、1マスずつ滑らせながら重なった数どうしを掛けてすべて足します。フィルタの模様に似たところでは大きな数が、そうでないところでは小さな数が出て、この結果を集めた新しい行列が特徴マップです。この計算を畳み込みと呼びます。

入力ピクセルの行列 X
道具小さなフィルタ K(例:3 × 3)
出力特徴マップ F

かんたんに言うと模様のハンコ探し遊びです。「左は暗く右は明るい」模様が彫られたハンコを写真のあらゆる位置に当ててみて、模様がよく重なる位置ごとに高い点数を書き込みます。点数表を埋め終えると、写真のどこに縦エッジがあるかがひと目でわかります。ハンコを変えれば、探す模様も変わります。

2数式
(X ∗ K)(i, j) = Σu=0…2 Σv=0…2 K(u, v) · X(i+u, j+v) + b数学の畳み込みはフィルタを反転させて掛けますが、ディープラーニングではこのように反転させずに掛ける計算(相互相関)を慣例的に「畳み込み」と呼びます。フィルタの数は学習で見つけるので、結果は同じです。
F(i, j) = ReLU((X ∗ K)(i, j)) = max(0, (X ∗ K)(i, j))ReLUは負の値を0にします。「模様が逆向きに現れたところ」は捨て、「模様があるところ」だけを残します。
最大プーリング:  P(i, j) = max { F(2i, 2j), F(2i+1, 2j), F(2i, 2j+1), F(2i+1, 2j+1) }2 × 2マスの中で最も大きい値だけを残し、縦横を半分に縮めます。特徴が1〜2マス動いても、結果がぶれにくくなります。
K(u, v)
フィルタの数9個。パーセプトロンの重み w と同じ役割で、学習によって見つける対象
X(i+u, j+v)
フィルタの下に重なったピクセル9個
b
バイアス。フィルタごとに1つ
F, P
特徴マップ、プーリングした特徴マップ
数式を一つずつ読む
  1. Σ Σ K·X3 × 3 = 9組を同じ位置どうしで掛けて、すべて足します。4-1で見たパーセプトロンの重み付き和 w · x とまったく同じ計算で、入力が写真の小さな切れ端だという点だけが違います。
  2. (i, j)フィルタを置いた位置です。i, j を変えながら、同じフィルタで写真全体をなぞります。同じ重みをすべての位置で使い回すので、写真のどこに目があっても同じ方法で見つけます。
  3. max(0, ·)活性化関数ReLUです。折れ曲がりがあるので、層を重ねる意味が生まれます。
  4. max { 4マス }最大プーリングです。56 × 56の特徴マップが28 × 28になり、計算量が4分の1に減ります。
数字でやってみる(チワワの目の右の縁、グレースケール 3 × 3 の切れ端)X = [92 129 174 ; 38 74 137 ; 55 119 176],  縦エッジのフィルタ K = [−1 0 1 ; −1 0 1 ; −1 0 1]
掛けて足す:(−92 + 174) + (−38 + 137) + (−55 + 176) = 82 + 99 + 121 = 302 → ReLU(302) = 302(強いエッジ)
毛だけの平らな切れ端 [175 176 175 ; 174 175 176 ; 175 175 174] なら:(175 − 175) + (176 − 174) + (174 − 175) = 1 → ほぼ0(エッジなし)
3図解 · フィルタを1回押し当てる
畳み込み1回5かける5の入力の左上3かける3の領域と3かける3のフィルタを同じ位置どうしで掛けて足した値が、3かける3の特徴マップの最初のマスになる 入力 X (5 × 5)フィルタ K (3 × 3)特徴マップ (3 × 3) −101−101−101 重ねて 掛けて足す 302 紫の窓が1マスずつ右 → 下へ移動 「左が暗く右が明るい」 窓の位置ごとに数1つ 出力の大きさ = (5 − 3) / 1 + 1 = 3。端の周りに0を1列ぐるりと置いておけば(パディング)、入力と同じ5 × 5を保てます。
4解釈

フィルタは「探したい模様」を数で書き留めたものです。左の列が−1、右の列が+1のフィルタは、右が左より明るいほど大きな数を出します。そのため、チワワの目(暗い)と毛(明るい)の間の縦エッジでは302のような大きな値が出て、毛だけの平らなところでは0に近い値が出ます。

重要なのは、同じフィルタを写真のすべての位置で使い回すということです。フィルタ1つの数は9個しかないのに、写真のどこにあるエッジでも見つけ出します。セクション3で見た「1マスずらすだけですべての数が変わる」問題も小さくなります。写真がずれても特徴マップが一緒にずれるだけで、エッジがあるという事実は変わらないからです。

実際のCNNの最初の層は、こうしたフィルタを数十個使います。フィルタごとに特徴マップが1枚ずつ出るので、出力は「写真の大きさ × フィルタの数」の厚い行列になります。

5動く図解 · フィルタが滑りながら特徴マップを埋めていく過程

チワワの目のあたりのグレースケール8 × 8の切れ端(28 × 28に縮めた写真から切り出したもの)に、縦エッジのフィルタを1マスずつ置いてみます。青い数は「右のほうが明るい」、オレンジの数は「左のほうが明るい」という意味です。

  1. フィルタを置く
  2. 9組を掛ける
  3. すべて足す
  4. 1マスずつ移動
  5. ReLUで負の値を消す
6フィルタ実験室 · ハンコを替えながら押してみる

写真とフィルタを選んでみましょう。フィルタのマスの数を直接書き換えてもかまいません。右の特徴マップで明るいところが「模様を見つけたところ」です。特徴マップのマスをクリックすると、その位置の計算が下に表示されます。出力の大きさを56 × 56に保つため、端の外側は最も近い端のピクセルを複製して埋めました。図解3の0パディングとは方式が違うので、縁のマスの値は0パディングのときと異なる場合があります。

写真
フィルタ
入力(グレースケール 56 × 56)
特徴マップ(クリックで計算)
フィルタ K (3 × 3)
7主な特徴
強み
  • フィルタ1つ(数9個)を写真全体で使い回すので、重みが非常に少ない
  • 写真が少しずれても特徴が一緒にずれるだけなので、判断がぶれない
  • 層を重ねると、線 → 部分 → 全体と自然に階層ができる
限界
  • フィルタは近くのピクセルしか見ないので、遠く離れた部分どうしの関係は、いくつもの層を経ないとわからない
  • 回転や大きさの変化にはそのままでは弱く、多様な写真で学習する必要がある
  • 前のほうの層の特徴は、似た模様(目とブルーベリー)を区別できない
位置づけ:1980年に福島邦彦のネオコグニトロンが「局所フィルタ + 層の積み重ね」という構造を初めて提案し、LeCunのLeNet(1989、1998)がこれを誤差逆伝播法で学習させて手書きの数字を読み取りました。2012年にはAlexNetが大規模な写真分類で大差をつけて勝ち、ディープラーニングの時代を開きました。
✓確認問題

Q1. 畳み込みで、フィルタの1つの位置の値はどうやって作りますか?

Q2. すべてのマスが10の平らな切れ端に、縦エッジのフィルタ [−1 0 1]×3 を押し当てると?

Q3. 56 × 56の特徴マップに2 × 2の最大プーリングをすると、大きさは?

Q4. CNNのフィルタの数字は誰が決めるのでしょうか?

初心者向けの解説

畳み込みは、4-1のパーセプトロンの重み付き和(w·x + b)を、写真の小さなかけらごとに繰り返す計算です。フィルタの9個の数字が重みで、同じフィルタを写真のあらゆる位置で使い回すため、目がどこにあっても同じやり方で見つけられます。コード2では、手計算がscipyの結果と一致するかを確かめ、手書き数字を2マスずらしたとき、ピクセルをそのまま使うニューラルネットワークは14.2%まで崩れる一方、小さなCNNは90.4%を保つことを見ます。

5人が決めた特徴

人が決めた特徴 — 顔の枠、特徴点、エッジ強度

ディープラーニング以前は、人が「何を測るか」を決めていた。その方法の長所と、写真が変わると判断がひっくり返る限界を見る。

1人が決めた特徴の歴史 · 顔検出と特徴点

ディープラーニング以前の顔認識は、人が決めた特徴で行われていました。2001年、ViolaとJonesは「目の部分は頬より暗い」といった明るさの差を測る単純な長方形の特徴(Haar特徴)を数千個すばやく計算し、写真の中の顔の枠を見つけました [R4]。2005年のHOGは、小さなマスごとにエッジの向きを数えて人の輪郭を見つけました [R5]。セクション1の画像の赤い点のように、目尻・鼻先・あごのラインの位置を探す顔の特徴点は、こうして見つけた顔の枠の中であらためて計算します [R6]。

これらの方法は速くて説明しやすい反面、何を測るかを人が先に知っていなければならず、照明・角度・遮蔽に弱いものでした。CNNは同じ種類のフィルタをデータから学ぶことで、この限界を乗り越えました [R7]。

2人が決めた特徴 vs モデルが学んだ特徴
ネコの顔の幾何構造の線とヒトの顔の特徴点

セクション1の画像。緑の枠は「ここに顔がある」という検出結果、赤い点はあごのライン・眉・唇の周りの顔の特徴点、ピンクの点は両目・鼻・口の主要な位置です。ネコの赤い線は、額・目・鼻を結ぶ顔の骨格です。

人が決めた特徴

「目と目の距離」「耳の先の角度」のように、何を測るかを人が先に決めます。

  • 理由を説明しやすい
  • データが少なくても動く
  • 照明・角度・遮蔽に弱い
  • 人が思いつかない手がかりは使えない
CNNが学んだ特徴

フィルタの数字Kを最初はランダムにしておき、正解を当てる方向へ学習が直していきます。

  • 毛並み、パンのきめ、鼻のつやまで自分で見つける
  • 照明・角度が違っても比較的頑健
  • 写真が数千〜数百万枚必要
  • なぜそう判断したのか説明しにくい
①ネコ vs ヒト かんたん

表示を「エッジ強度」に切り替えてみましょう。興味深いことに、写真全体のエッジ強度の平均は両者でほとんど同じです。人の写真にも、長い髪の毛による細い線がたくさんあるからです。違いはエッジがどこにあるかです。ネコは毛並みと縞模様が顔の真ん中までびっしりあるのに対し、人は頬と額がなめらかで、エッジが目・鼻・口と髪の毛に集中します。下の「中央領域」の値がこの違いを示しています。平均という数字1つではなく、位置ごとの地図、つまり特徴マップが必要な理由です。

3層目あたりの部分的な特徴でも、はっきり分かれます。頭の上のとがった三角の耳、額の縞模様、小さなピンクの鼻と長いひげは、人の顔にはありません。セクション1の画像の赤い線と点は、人がこうした手がかりを直接決めておく方式で、CNNは同じ手がかりをフィルタで自ら見つけます。

セクション3の表では、ネコとヒトのグレースケールのピクセル距離は、ネコとイヌの距離と同じくらいです。人にとってはいちばんやさしい対決なのに、ピクセル距離ではその違いが表れません。ピクセル距離は意味を知らないというもう1つの証拠です。

3Colabコード1の結果 · エッジ強度1つでは写真ごとにひっくり返る

上のペア比較では、このページの写真でネコのほうが中央のエッジが大きくなりました。ところが、コード1でscikit-imageのネコ・ヒトの写真を使って測ると逆になります(顔部分のエッジ強度:ネコ 101.5、ヒト 123.6)。人の写真の髪の毛と、笑った口の歯が強いエッジを作るからです。

「エッジが多ければネコ」のような人が決めた単一の特徴は、写真が変わると簡単にひっくり返ります。だからこそ、1つの特徴ではなく複数の特徴の組み合わせを、しかもデータから学ぶ方法が必要です。これが4-3のテーマです。

初心者向けの解説

人が決めた特徴は「なぜそう判断したのか」を説明しやすく、データが少なくても動きます。その代わり人があらかじめ知っておく必要があり、写真の条件が変わると崩れやすくなります。ペア比較で表示を「エッジ強度」に切り替え、ネコとヒトのエッジがどこに集まるのか比べてみましょう。

6後ろの層

層が深くなるほど、見つけるものが大きくなる

最初の層のフィルタは線とエッジを見つける。層を重ねると、線が集まって角に、角が集まって目や耳に、目や耳が集まって顔になる。

1層が深くなるほど、見つけるものが大きくなる
層ごとに見つける特徴1層目は短い線とエッジ、2層目は角と曲線と質感、3層目は目・耳・鼻のような部分、4層目以降は顔全体を見つける 1層目 · 線とエッジ2層目 · 角・曲線・質感3層目 · 部分後ろの層 · 全体 ピクセル3 × 3だけを見る線を何本か組み合わせる目、とがった耳、鼻「ネコの顔」 チワワ・マフィンは区別不可毛並み vs パンのきめで分かれる目 vs ブルーベリーで分かれる配置全体で判断

プーリングで写真を縮めながら層を重ねると、後ろの層の1マスは、元の写真のより広い領域を見ることになります。そのため前の層は小さな線を、後ろの層は線の組み合わせである目や耳を、さらに後ろの層は顔全体を見つけるようになります。この図は、ZeilerとFergus(2014)が学習済みCNNの層ごとの反応を可視化して示した傾向を、単純化して描いたものです。

初心者向けの解説

プーリングで写真を縮めながら層を重ねると、後ろの層の1マスは、元の写真のより広い領域を見ることになります。そのため前の層は小さな線を、後ろの層はその線の組み合わせを見つけます [R8]。4-3では、これらの層を重ねたCNNが確率を出す過程と、層を重ねるとなぜ平面1枚では分けられなかったものが分けられるようになるのかを見ます。

Colabコード — このページを自分で実行してみる

どちらのコードも、Colabに標準でインストールされているライブラリと組み込みデータだけを使う。「ノートブック(.ipynb)をダウンロード」したあとColabでファイル → ノートブックをアップロードで開くか、コピーして新しいノートブックのセルに貼り付ける。

コード1 · 写真を数の行列として開いてみるセクション2・3・5と連動 · numpy, scikit-image, scipy, matplotlib(写真は内蔵)· CPUで数秒

scikit-imageに含まれるネコ・ヒトの写真の形とピクセル値を見て、グレースケール輝度・ピクセル距離・エッジ強度を計算する。自分のデータに替えるには、io.imreadで自分の写真を読み込み、small()の(上, 左, 一辺)を顔の位置に変える。

実行結果(2026-10-04実行、numpy 2.4 · scikit-image 0.26 · scipy 1.17 · CPU)。乱数を使わないので、いつ実行しても同じになる。
コード2 · 畳み込みを手で、そしてCNNは本当にずれに強いのかセクション4と連動 · numpy, scipy, tensorflow(Keras), scikit-learn · CPUで約1分

3 × 3の縦エッジフィルタの畳み込みを手で計算してscipyと照らし合わせ、手書き数字を1〜2マスずらしたテスト画像でMLPと小さなCNNを比較する。

実行結果(2026-10-04実行、TensorFlow 2.21 · Keras 3 · CPU)。シード2つの平均。シード・バージョン・ハードウェアによって数字が少し変わることがある。

AI活用プロンプト — このコードを出発点にする

ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトの後ろに選んだコードが一緒につく。〔 〕の中を自分の状況に書き換えて使えばよい。

一緒につけるコード

AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。コンテストや論文でAIの助けを借りた場合は、主催者や学術誌の規定に従って、使用した事実と範囲を明記する。

用語まとめ

本文の黄色い点線の下線と同じ辞書である。シリーズ全体で同じ表記を使う。セクション名を押すと、最初に登場した箇所へ移動する。

たとえ集 — そしてたとえが当てはまらない点

たとえは理解の第一歩だが、誤解の種にもなる。人の目・脳のたとえには強さを示した。直接 実際に同じことをしているという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない

概念日常のたとえ人の目・脳のたとえたとえが当てはまらない点
ピクセルモザイクタイル1枚部分的 目の網膜にも、光を受け取る細胞がびっしり並んでいる網膜の細胞は格子状に均等に並んでいるわけではなく、中央(中心窩)に集まっており、色を感じる細胞の種類と比率も異なる
畳み込みフィルタ模様が彫られたハンコ部分的 視覚野の単純型細胞は、特定の向きのエッジに強く反応する脳の細胞は学習の仕方も結合もはるかに複雑だ。CNNのフィルタは同じ数字をあらゆる位置で使い回すが、脳はそうではない
特徴マップ宝の地図の×印なし地図は1枚だが、実際の層にはフィルタの数だけ特徴マップが何枚も重なっている
プーリングクラスの代表選びなしクラスの代表は人が選ぶが、最大プーリングは数字がいちばん大きいマスを機械的に選ぶ
顔の特徴点地図の道しるべなし道しるべは人が立てるが、特徴点の位置は学習済みモデルが写真ごとに計算する。隠れていると間違った場所に打たれる

著者紹介と参考文献

E-1 著者紹介 · E-2 学術参考文献 · E-3 図・データの参考資料

E-1 著者紹介

アン・サンソン(M-Robo Inc. 代表)

韓国電気安全公社(KESCO)、毎日経済新聞(Maeil Business Newspaper)を経て、現在は毎日経済の社外ベンチャーであるM-Robo Inc.を創業し、代表を務めている。M-Robo Inc.は報道機関の社内ベンチャーとして始まったメディアベンチャーで、国民日報(Kukmin Ilbo)にロボット記者(ストックボット)をサービスし、韓国インターネット振興院(KISA)、韓国言論振興財団(Korea Press Foundation)、韓国放送通信電波振興院(RAPA)などで多数のプロジェクトを手がけた。その後、自社のAIニュース新聞であるMoney-Roboをサービスしている。代表在任中にアジア・オープンデータ・ハッカソンで優勝し、データ創業分野での功績により行政安全部長官賞を2回受賞したほか、人工知能およびブロックチェーン分野で5件の特許の発明者・登録者である。著書に『AI犯罪と自己防衛(AI범죄와 자기방어)』があり、フィンテック、統計学、人工知能の分野で韓国技術教育大学校(KOREATECH)オンライン生涯教育院のeラーニングコンテンツ開発を行った。最終学位は経済学博士(東国大学校、ミクロ数理経済学)。国民大学校、湖西大学校など複数の大学で、データおよび人工知能に関する科目を講義している。詳しいプロフィール

講義

  • アン・サンソン (2025). 『ビジネスのためのデータサイエンス(비즈니스를 위한 데이터 과학)』講義案. Open Cyber University of Korea 人工知能融合学科.
  • アン・サンソン (2025). [K-デジタル] 人工知能 自然言語処理. STEP(スマート職業訓練プラットフォーム), 韓国技術教育大学校(KOREATECH)オンライン生涯教育院.
  • アン・サンソン (2024). [K-デジタル] フィンテックデータ分析の基礎. STEP(スマート職業訓練プラットフォーム), 韓国技術教育大学校(KOREATECH)オンライン生涯教育院.

STEPの講義はこちら:link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
サイトのリニューアルによりつながりにくい場合は、www.step.or.krにアクセスしてください。

論文と発表

  • アン・サンソン (2025). 国民老後保障パネルデータを活用した世帯支出予測モデルの研究:人工知能モデルに基づくアプローチ. 『未来社会(미래사회)』, 16(2). 原文
  • アン・サンソン (2025). 国民老後保障パネルデータを活用した世帯支出予測モデルの研究:人工知能アプローチ. 国民老後保障パネル学術大会 発表資料(2025.05.13), 国民年金公団 国民年金研究院(National Pension Service, National Pension Research Institute). 発表資料
  • アン・サンソン (2025). SNSテキストに基づく麻薬疑い取引検知アルゴリズムに関する研究:パターンおよび文脈分析を中心に. 『未来社会(미래사회)』, 16(1). 原文
  • アン・サンソン (2024). 金融分野の異常検知モデルのセキュリティのための統計に基づく敵対的データへの対応策:実証分析とシミュレーション結果. 『未来社会(미래사회)』, 15(3). 原文
  • アン・サンソン (2024). 人工知能を活用した仮想キャラクターの特性に基づくSNS投稿検知ソリューション. 2024 Summer Newmedia Party ポスター発表(2024.06.19), Seoul Media Institute of Technology.
  • アン・サンソン (2024). 産業災害パネルデータを活用した機械学習モデル. 第10回 労災保険パネル学術大会 ポスター発表(2024.05.17), 勤労福祉公団 勤労福祉研究院(Korea Workers' Compensation & Welfare Service, Labor Welfare Research Institute).
  • アン・サンソン (2024). 仮想資産の時系列データの分析と予測:時系列モデルと人工知能モデルの比較および改善点の提示. 『未来社会(미래사회)』, 15(1). 原文

E-2 学術参考文献

  1. [R1] ITU-R Recommendation BT.601. Studio encoding parameters of digital television. — セクション2(グレースケール輝度の係数)
  2. [R2] LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11), 2278–2324. — セクション4
  3. [R3] Fukushima, K. (1980). Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36, 193–202. — セクション4
  4. [R4] Viola, P., & Jones, M. (2001). Rapid object detection using a boosted cascade of simple features. CVPR 2001. — セクション5
  5. [R5] Dalal, N., & Triggs, B. (2005). Histograms of oriented gradients for human detection. CVPR 2005. — セクション5
  6. [R6] Kazemi, V., & Sullivan, J. (2014). One millisecond face alignment with an ensemble of regression trees. CVPR 2014. — セクション1・5
  7. [R7] Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). ImageNet classification with deep convolutional neural networks. NeurIPS 2012. — セクション5
  8. [R8] Zeiler, M. D., & Fergus, R. (2014). Visualizing and understanding convolutional networks. ECCV 2014. — セクション6
  9. [R9] van der Walt, S., et al. (2014). scikit-image: image processing in Python. PeerJ, 2, e453. — コード1(chelsea, astronautの写真)

E-3 図・データの参考資料

  • セクション1の画像は著者が自ら作成したものである。実習用のネコ・ヒトの写真は、この画像から顔の部分を切り出して56 × 56に縮小し、線と点を消して使った
  • セクション2のチワワの写真は、4-4の画像から切り出したものである
  • セクション6の層ごとの図は、[R8]が示した傾向を単純化して描いた概念図式である

教育者のためのTIP

講師、実務OJT担当者、チューターのための運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。

対象4-1を終えた大学生・社会人。画像AIが「写真をどう受け取るのか」を知りたい実務者
前提知識4-1の特徴・ターゲットと重み付き和、掛け算と足し算
学習目標① カラー写真の形(H × W × 3)と数の個数を計算する ② 3 × 3の畳み込み1マス分を手で計算する ③ ピクセル距離と人が決めた特徴の限界を例を挙げて説明する
所要時間の目安読む 40〜50分 · 実習デモ 25分 · Colab実習 25分(コード1 10分、コード2 実行1分 + 解釈14分)

3つの運営案

講義形式 50分

概念中心

導入5分(セクション1)→ セクション2 ピクセル虫めがね15分 → セクション3 ずらし実験10分 → セクション4 畳み込みの手計算15分 → 確認問題5分。

実務OJT 90分

業務への適用中心

セクション2で自社の業務写真(不良品、書類スキャンなど)の解像度と数の個数を計算 20分 → セクション4のフィルタ実験室で自社の写真に合うフィルタを探す 25分 → セクション5 人が決めた特徴の限界について討論 15分 → コード2の実行・解釈 30分。

1対1チュータリング

レベル別の進度

入門者はセクション1・2・4のみ。中級者には、セクション4の出力サイズの式をパディング・ストライドを変えて計算させ、コード2のCNNでGlobalMaxPoolingをFlattenに替えると、ずれへの強さがどう変わるかを予想させる。

セクション別の運営ポイント

セクション立ち止まって尋ねる質問操作のコツ
1 問題「人は何を見てネコだとわかるのだろう?」線と点は人が決めた手がかりであることを押さえる
2 ピクセル「目のマスにある3つの数は何だろう?」ピクセル虫めがねで解像度を7 → 56に変える
3 ピクセル距離「同じチワワなのに、なぜマフィンより遠いのだろう?」ずらしスライダーを4マス以上に動かす
4 畳み込み「平らな毛のかけらに縦エッジフィルタを押したら?」アニメーションを「すべて足す」で止め、手で計算して答え合わせする
5 人が決めた特徴「エッジが多ければネコ」はいつも正しいだろうか?ペア比較のエッジ強度表示とコード1の結果を一緒に見る
6 後ろの層「目を見つけるフィルタは何番目の層にあるだろう?」層ごとの図を左から順に指し示す

よくある誤解 Top 5

誤解正しい説明見せる場面
写真は画像ファイルなので数とは違うコンピュータにとって写真はH × W × 3個の0〜255の数だセクション2 ピクセル虫めがね
ピクセルが似ていれば同じものが写っている1マスずらすだけで距離が大きく変わる。ピクセル距離は意味を知らないセクション3 ずらし実験
畳み込みは難しい数学だ重なった9組を掛けて足すだけだ。パーセプトロンの重み付き和と同じであるセクション4の数値例
フィルタは人が設計する実習のフィルタは例だ。CNNはフィルタの数字をデータから学ぶセクション4 確認問題Q4
人が決めた特徴は役に立たない説明しやすく、データが少なくても済む。ただし条件が変わると弱いセクション5とコード1のひっくり返った結果

確認問題(解説は押して開く)

Q1. カラーの56 × 56の写真の数の個数は? グレースケールなら?

カラーは56 × 56 × 3 = 9,408個、グレースケールは56 × 56 = 3,136個。

Q2. セクション2のチワワの目のマス(39, 37, 43)のグレースケール輝度は?

0.299×39 + 0.587×37 + 0.114×43 = 11.661 + 21.719 + 4.902 ≈ 38.3.

Q3. かけら [92 129 174; 38 74 137; 55 119 176] に縦エッジフィルタ [−1 0 1]×3 を押すと?

(174−92) + (137−38) + (176−55) = 82 + 99 + 121 = 302。右側が明るい強いエッジだ。

Q4. 56 × 56の入力に3 × 3のフィルタをパディングなし(ストライド1)で適用したときの出力サイズは?

56 − 3 + 1 = 54、つまり54 × 54。パディング1を加えれば56 × 56を保つ。

Q5. コード2では、2マスずらした数字に対してMLPは14.2%、CNNは90.4%だった。この差を生んだ2つの要素は?

同じフィルタをあらゆる位置で使い回す畳み込み(位置が変わっても同じ模様を見つける)と、位置を捨てて最大の反応だけを残すグローバル最大プーリングである。

Colab課題

基本

コード1で自分の顔写真(またはペットの写真)を読み込んで形・数の個数を出力し、1・2・4マスずらしたときのピクセル距離を表にまとめる。

チャレンジ

コード2のCNNでGlobalMaxPooling2DをFlattenに替えて学習し直し、1・2マスずらした写真での正解率の変化をシード3つで報告する。セクション4の解釈と結びつけて理由を書く。

難易度の調整とさらに学ぶ

入門者セクション3の距離の表とセクション6は飛ばしてもよい。セクション2・4の実習だけは確実にやってみる
発展Haar特徴とHOGを調べ、セクション4のフィルタ実験室で似たフィルタを作らせる。調べた論文は原文で確認する
さらに学ぶ3-3 画像とCNN · 4-3 ネコ vs イヌ(CNNの全体構造)
講師用資料確認問題の採点基準と課題の解答例は教育者向け解答ページ(4-2)で見られる

お疲れさまでした!

「4-2 ネコ vs ヒト」編を最後まで読みました。研究室のみんなが一言ずつまとめてくれます。

研究室のみんな4人がカメラの前で記念写真を撮るピクセルアート
博士
博士写真を数として開いてみました。
  • コンピュータが受け取るいちばん小さな情報は、チャネルの値1つ
  • ピクセル距離は意味を知らない
  • 畳み込みは9組を掛けて足すハンコ押し
助手
助手1マスずらしただけで、マフィンより遠くなりました!
ショウジョウバエ研究員
ショウジョウバエ研究員次の回ではフィルタを重ねてCNNを作ってみよう。