TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

畳み込みニューラルネットワークは何を学ぶか:フィルター、受容野、逆伝播、そしてLeNetとAlexNet

ステータス:ドラフト(2026-10-13)、一部実測。 例はノートPCのCPU(Python 3.9、numpy 2.0)で直接実行した値です。コードはこのフォルダの code/01_conv.py にあり、数秒で完了します。論文の数値は原文を開いて条件とともに転載しました。 作成ルール:実測データが基本であり、測定できなかったものは「未実測」と表示します。

目次

1. なぜ画像には特別な構造が必要なのか

スマホの写真1枚は数百万個の数値(ピクセル)です。これを通常のニューラルネットワーク、すなわち 全結合層(すべての入力がすべての出力と結合された層)に入れると、結合数が爆発します。32×32のモノクロ画像を28×28サイズの特微マップ6枚に変換する1つの層だけでもそのようになります。

方式 学習する数値(重み)
全結合層 4,821,600個
5×5畳み込みフィルター6個 156個

(直接計算、 code/01_conv.py [5]. 畳み込みはフィルター6個 × (25 + バイアス1)。)

3万倍の差が出る理由は、画像にある2つの性質のためです。

  1. 近いピクセル同士の関係が深い(局所性)。 ボールの輪郭を認識するのに反対側の端のピクセルは必要ありません。
  2. 同じ模様はどこにあっても同じ模様である(平行移動に対する同等性)。 画面の左側のボールと右側のボールは同じ方法で見つければよいのです。

畳み込みは、この2つの仮定を構造に組み込んだ演算です。小さな窓だけを見て(局所性)、同じフィルターを画像全体で使い回します(重みの共有)。この「仮定を構造に組み込むこと」を 帰納バイアスと呼びますが、第7回でVision Transformerがまさにこれを捨てたことでどのような代償を払うのかを確認することになります。

2. 畳み込み:小さな窓を動かして掛け合わせて足す

합성곱: 3×3 창을 밀며 곱하고 더하기 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 입력 6×6 필터(학습) -1 0 1 -2 0 2 -1 0 1 0 4 4 0 0 4 4 0 0 4 4 0 0 4 4 0 출력 4×4 경계에서만 크다 창 9칸 × 필터 9칸을 곱해 모두 더하면 출력 한 칸 층을 쌓으면 한 칸이 보는 범위(수용 영역)가 넓어진다 3×3 한 층 3px 두 층 5px + 풀링(보폭 2) 6px 3×3 세 층 더 18px
図:入力の上を3×3の窓がスライドしながらフィルターと掛け合わせて足し合わされ、層を重ねるごとに1つのセルが見る範囲が広がる様子

計算は単純です。3×3のフィルター(数値9個)を画像の3×3の窓に重ねて同じ位置同士を掛け合わせ、すべて足し合わせると出力の1つのセルが求められます。窓を1つずつ動かしながら繰り返すと出力マップが完成します。

# code/01_conv.py 에서
def conv2d(x, k):
    kh, kw = k.shape
    out = np.empty((x.shape[0] - kh + 1, x.shape[1] - kw + 1))
    for i in range(out.shape[0]):
        for j in range(out.shape[1]):
            out[i, j] = np.sum(x[i:i + kh, j:j + kw] * k)
    return out

左半分が0(暗い)、右半分が1(明るい)の6×6の画像に垂直エッジフィルター(ソベルフィルター)を適用するとこうなります(実測)。

필터            출력(4×4)
[-1  0  1]      [0 4 4 0]
[-2  0  2]      [0 4 4 0]
[-1  0  1]      [0 4 4 0]
                [0 4 4 0]

明るさが変わる境界だけで4、残りは0です。フィルターは「このような模様がここにあるか」という質問であり、出力マップはその質問に対する答えを画像全体に展開したものです。実際のネットワークでは1つの層にこのようなフィルターを数十〜数百個配置し、それぞれのフィルターが異なる模様(水平エッジ、対角線、色の塊など)を探します。

ちなみに、ディープラーニングのフレームワークが「畳み込み」と呼ぶものは、数学の教科書の畳み込みとは異なり、フィルターを反転させない 相互相関です。フィルターはどうせ学習によって決定されるため、反転させるかどうかによる違いはありません。

3. フィルターは手動で決めない:損失、逆伝播、勾配降下

かつてのコンピュータービジョンでは、上記のソベルフィルターのように人間がフィルターを設計していました。CNNの本質は フィルターの数値をデータから学習するということです。学習の方法は3つのステップです。

  1. 損失関数:現在のフィルターで生成した出力が正解とどれほど異なるかを一つの数値で測定します。ここでは平均二乗誤差(MSE)です。
  2. 逆伝播:フィルターの9個の数値それぞれをわずかに変更した場合に損失がどれほど変化するか(勾配)を計算します。畳み込みの場合、「出力誤差」と「入力」を再度畳み込むことでフィルターの勾配が得られます。
  3. 勾配降下:勾配とは反対の方向にフィルターを少し動かします。 k ← k − 학습률 × 기울기.
# code/01_conv.py 에서 — 필터 k 의 기울기
for x, y in zip(X, Y):
    err = conv2d(x, k) - y                       # 출력 오차
    for a in range(3):
        for b in range(3):
            g[a, b] += np.mean(2 * err * x[a:a + err.shape[0], b:b + err.shape[1]])
k -= lr * g

やってみる:ランダムフィルターがソベルフィルターになるまで

ランダムな画像32枚をソベルフィルターに通して「正解出力」を作成し、正解フィルターは教えずにランダムなフィルター(平均0、標準偏差0.1)から出発して学習率0.1で勾配降下を行いました(実測、ノートPCのCPUで約6秒)。

ステップ 損失(MSE)
0 1.064
10 0.730
50 0.193
100 0.037
200 0.0013
500 0.000000

500ステップ後に学習されたフィルターは [[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]] であり、正解との最大誤差は0.0005でした。人間が「垂直エッジを探せ」と言わなかったにもかかわらず、データがそのようなフィルターを要求したため、フィルターがその形状になったのです。実際のCNNの最初の層のフィルターを画像として可視化すると、エッジや色の模様の形状が現れるのも同じ理由です。

逆伝播で求めた勾配が正しいかどうかは、 数値微分(1つの数値をほんの少しだけ変更して損失の変化を直接測定する方法)と比較して確認しました。最大相対誤差は6.4×10⁻¹¹で一致していました。自作の学習コードを信頼する前に常に試してみる価値のあるテストです。

4. プーリングと受容野:1つのセルが見る範囲

畳み込みの1層の出力の1つのセルは、入力を3×3しか見ません。ボール全体や選手の腕を認識するためには、より広範囲を見る必要があります。方法は2つあります。

出力の1マスが入力から影響を受ける範囲を 受容野と呼びます。層ごとに r ← r + (커널 − 1) × j, j ← j × 보폭 で計算します(j は累積ストライド)。LeNet-5とAlexNetの構成で計算するとこうなります(直接計算、 code/01_conv.py [4]).

ネットワーク 層を通過する受容野(px) 最後
LeNet-5 5 → 6 → 14 → 16 → 32 入力32×32全体
AlexNet 11 → 19 → 51 → 67 → 99 → 131 → 163 → 195 入力224×224の大半

プーリングには代償があります。解像度を下げると、 正確な位置を失います。分類(「この絵に猫がいるか」)には問題ありませんが、ボールの座標をピクセル単位で知る必要がある仕事には致命的です。第3部(U-Net・HRNet)まさにこの問題を扱います。

5. LeNet-5(1998): 畳み込み + プーリング + 逆伝播の原型

LeCunらの1998年の論文は、手書き数字(MNIST)を読み取るLeNet-5を紹介しました。入力は32×32のモノクロです。データの数字は大きくても20×20で28×28マスの真ん中に置かれていますが、入力をそれより意図的に大きく取りました(上記の受容野計算で最後の層が入力32×32全体を見るという点と噛み合います)。

この論文が示したのは、「特徴を人が設計せず、畳み込み構造と逆伝播によって最初から最後まで学習できる」ということです。しかし、1998年の計算力とデータでは、手書きのように小さく綺麗な絵を越えるのは困難でした。

6. AlexNet(2012): 同じ発想、異なる規模

14年後、Krizhevsky・Sutskever・HintonのAlexNetがImageNetコンペティション(ILSVRC、1000クラス、学習画像約120万枚)で大差をつけて勝利しました。構造の発想はLeNetと同じです。変わったのは規模といくつかの学習手法です。

項目 AlexNet(論文)
サイズ パラメータ6,000万個、ニューロン65万個、畳み込み5層 + 全結合3層
入力 224×224×3
学習 当時デスクトップGPU(メモリ3GB)2枚にネットワークを分けて載せ、5〜6日、120万枚を約90回
ILSVRC-2012テスト top-5 誤り率 15.3%(CNN 7個のアンサンブル)対 2位 26.2%。1モデルは検証セット18.2%
ILSVRC-2010テスト top-1 37.5%、top-5 17.0%(テスト時の切り抜き10個の平均)

「top-5 誤り率」とは、モデルが選んだ上位5つの答えの中に正解が含まれていない割合です。15.3%がアンサンブルの数値である点は、よく見落とされる条件です。

何が違いを生んだのか、論文が直接測定したものを見ると「なぜこのように設計したのか」が見えてきます。

まとめると、AlexNetの教訓は「1つの新しいアイデア」ではなく、 大容量データ + 高速計算 + 大きなネットワークを学習可能にする手法の組み合わせです。その後の10年のビジョンモデルのほとんどはこの公式の上に成り立っています。

7. 限界

8. 我々のプロジェクトとのつながり

TT Scoreのボール検出モデル(WASB・BlurBall)は2026年においても 畳み込みニューラルネットワークです。その理由は、この記事の内容そのものです。

詳細な構造と実測値については「TT Scoreモデル解剖編2:ボール検出」にあります。次の記事は、深いネットワークの学習を可能にした残差接続とバッチ正規化です。

TTの一言。 フィルターに「縦の境界線を探して」と指示した覚えはないのに、500ステップでソーベルフィルターになりました。データが求める形へと、フィルターが自ら変化するのです。

参考文献

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます