畳み込み層の計算問題、出力の大きさとパラメータ数がいつも合わん
フィルタ・ストライド・パディングを整理したい
【疑問】畳み込み層のフィルタ・ストライド・パディング、出力の大きさとパラメータ数はどう計算するん?【G検定】
前提のおさらい。全結合層のパラメータ数は「入力の数×出力の数+出力の数」。画像を全結合でつなぐと、すぐに何百万個にもなる
>>1
畳み込みは、小さい重みの表(フィルタ、カーネルとも言う)を画像の上でずらしながら、重なった部分を掛けて足す操作
3×3 の入力 [[1, 2, 0], [0, 1, 3], [2, 1, 0]] に 2×2 のフィルタ [[1, 0], [0, 1]] をかけると
左上:、右上:、左下:、右下:
出力は 2×2 の [[2, 5], [1, 1]]。この出力を特徴マップという
>>3
同じフィルタを画像のどこでも使い回すのがポイント。どこに写ってても同じ模様を見つけられるし、パラメータも少なくて済む
ストライドは、フィルタを1回に何マスずらすか
パディングは、入力のまわりに0などを足して広げること。端の画素もフィルタの中心に来られるようにして、出力が小さくなりすぎるのを防ぐ
>>5
出力の大きさは、入力 、フィルタ 、パディング 、ストライド で
32×32 に 3×3、パディング1、ストライド1 なら で大きさが変わらん
7×7 に 3×3、パディング0、ストライド2 なら
>>6
パラメータ数はどう数えるん?
>>7
入力のチャンネル数も込みで「フィルタの縦×横×入力チャンネル数」がフィルタ1枚の重み。それにバイアス1つ。それがフィルタの枚数(出力チャンネル数)ぶん
32×32×3 のカラー画像に 3×3 のフィルタを16枚なら、 個
画像の大きさには関係ない。同じ入出力の大きさを全結合でつなぐと、重みは 万個
>>8
448と5000万か。画像に畳み込みを使う理由がよう分かる
>>9
そのかわり、畳み込みは「近くの画素どうしに意味がある」データ向き。画像や音声には合うけど、列の並び順に意味がない表のデータにそのまま使っても効かん。畳み込みニューラルネットワーク(CNN)が画像で強いのはそこが合ってるから
管理人のひとこと
- 畳み込みはフィルタ(カーネル)をずらしながら掛けて足す操作。3×3 の入力と 2×2 のフィルタで特徴マップ [[2, 5], [1, 1]]。同じフィルタを使い回す。
- ストライドはずらす幅、パディングはまわりを広げること。出力の大きさは (32・3・1・1 で32、7・3・0・2 で3)。
- パラメータ数はフィルタの縦×横×入力チャンネル×枚数+枚数。32×32×3 に 3×3 を16枚で448個で、画像の大きさに関係ない。
- 畳み込みは近くの値どうしに意味があるデータ(画像・音声)に向く。