G検定(ジェネラリスト検定)
とくちょうまっぷ
特徴マップ
Feature Map
特徴マップとは、畳み込みという計算の出力です。フィルタ(カーネル)と呼ばれる小さな重みの並びを入力の上で位置をずらしながら当てはめ、位置ごとに求めた積の和を当てはめた位置どおりに縦横へ並べたものです。
詳しい説明
特徴マップとは何か
特徴マップ(feature map)とは、畳み込み(convolution)という計算の出力です。Goodfellow、Bengio、Courvilleによる教科書「Deep Learning」(2016年)の第9章9.1節は、離散的な畳み込みの式を示したうえで、その出力を特徴マップと呼んでいます。
畳み込みの入力は、画像の画素のように縦横に並んだ数値です。畳み込みでは、フィルタと呼ばれる小さな重みの並びを入力の上に重ね、重なった値どうしを掛けて足し合わせます。同書ではこの重みの並びをカーネル(kernel)と呼んでいます。フィルタを1マスずつずらしながら同じ計算を繰り返すと、位置ごとに1つずつ数が得られます。得られた数をフィルタを当てた位置どおりに縦横へ並べたものが特徴マップです。
このため特徴マップの各マスは、入力のどの範囲にフィルタを当てた結果なのかが決まっています。特徴マップの値を見れば、入力のどの場所で積の和が大きくなったかを読み取れます。
特徴マップを求める式
多くの機械学習ライブラリが実際に計算しているのは、次の式です。
は入力、 はフィルタ、 は出力である特徴マップです。 と は特徴マップの中の位置(上から 行目、左から 列目)、 と はフィルタの中の位置です。このページでは、入力と特徴マップの位置は1から、フィルタの中の位置は0から数えます。和はフィルタの中のすべての位置について取ります。
数学で定義される本来の畳み込みは、フィルタを上下左右に反転させてから当てはめます。上の式は反転させない形で、相互相関(cross-correlation)と呼ばれます。同書は、多くの機械学習ライブラリが相互相関を実装しながらそれを畳み込みと呼んでいると述べ、同書自身もこの慣例に従い、反転の有無が問題になる場面でだけ両者を区別するとしています。このページの計算例も、反転させない形で計算します。
数値で追う特徴マップ
以下の数値は説明のために作った架空の例です。縦4マス、横4マスの入力 と、縦2マス、横2マスのフィルタ を次のように置きます。
入力は、左下の4マスだけが4で、ほかは1です。フィルタは上の段が 、下の段が なので、当てはめた範囲の下の段の和から上の段の和を引く計算になります。式に当てはめると です。
1行目の3つの位置では、フィルタが入力の1行目と2行目に重なります。重なる値はすべて1なので、、、 はどれも です。
2行目の3つの位置では、フィルタが入力の2行目と3行目に重なります。
3行目の3つの位置では、フィルタが入力の3行目と4行目に重なります。左から順に 、、 となります。
計算した9つの値を位置どおりに並べると、特徴マップ は次のようになります。
入力で値が1から4へ変わる境目は、2行目と3行目の間の左側にあります。特徴マップでは、その境目にフィルタが重なった2行目の左側にだけ0でない値が出ています。境目をフィルタの幅いっぱいに含む位置では6、半分だけ含む位置では3、境目を含まない位置では0です。特徴マップが入力の中の位置関係を保ったまま、フィルタとの積の和が大きい場所を示していることが分かります。
同じ入力でも、フィルタの値を変えれば特徴マップの値は変わります。フィルタを上下左右に反転させて本来の畳み込みで計算すると、フィルタは上の段が 、下の段が になり、この例では2行目が 、、 と符号だけが逆になります。
特徴マップの大きさを決めるもの
上の例では、4×4の入力から3×3の特徴マップが得られ、入力より小さくなりました。同書によると、入力の外側に値を付け足さない畳み込み(valid convolution)では、入力の幅を 、フィルタの幅を とすると、出力の幅は になります。この例では です。畳み込みを重ねるたびに、出力はこの分だけ縮みます。
入力の外周に0を付け足すことをゼロパディングと呼びます。同書は、ゼロパディングを使うとフィルタの幅と出力の大きさを互いに独立に決められると説明しています。
ストライドは、フィルタを何マスおきに当てはめるかを表す値です。同書は、すべての位置で計算した出力を マスおきに間引く操作としてストライド付きの畳み込みを定義し、この間引きの幅 をストライドと呼んでいます。上の例でストライドを2にすると、縦横とも1番目と3番目の位置だけが残り、特徴マップは 、、、 の2×2になります。この4つはすべて0なので、この例では境目を示していた6と3が特徴マップから抜け落ちます。ストライドを大きくすると特徴マップは小さくなりますが、間引いた位置の値は残りません。
誤解しやすい点
1つ目は、特徴マップとフィルタの取り違えです。フィルタは入力に当てはめる重みの並びで、特徴マップはその重みを入力に当てはめて得られた計算結果です。同じフィルタを使っても、入力が変われば特徴マップの値は変わります。
2つ目は、特徴マップの大きさが常に入力と同じだという思い込みです。外側に値を付け足さずに計算すると特徴マップは入力より小さくなり、ストライドを大きくするとさらに小さくなります。大きさはフィルタの幅、パディング、ストライドで決まります。
3つ目は、ライブラリの「畳み込み」がフィルタを反転させていると考えることです。多くのライブラリが計算しているのは反転させない相互相関です。数値例で見たとおり、反転の有無で特徴マップの値の符号や並びが変わることがあるため、手で計算して確かめるときはどちらの形で計算しているかを確認します。
試験で問われること
G検定
- 特徴マップは畳み込みの出力です。フィルタを入力の上でずらしながら当てはめ、位置ごとに求めた積の和を当てはめた位置どおりに並べたものです。
- 特徴マップの各マスは入力の決まった範囲に対応しているため、値の大小から、入力のどの場所でフィルタとの積の和が大きくなったかが分かります。
- 入力の外側に値を付け足さない場合、特徴マップの幅は、入力の幅からフィルタの幅を引いて1を足した値になり、入力より小さくなります。ゼロパディングを使うと、フィルタの幅と出力の大きさを独立に決められます。
- ストライドは、すべての位置で計算した出力を何マスおきに間引くかを表す値です。ストライドを大きくすると特徴マップは小さくなり、間引いた位置の値は残りません。
- 多くの機械学習ライブラリは、フィルタを反転させない相互相関を計算し、それを畳み込みと呼んでいます。
最終更新日: 2026/09/23