G検定(ジェネラリスト検定)
ふぃるた
フィルタ
Convolution Filter
畳み込み層で入力の一部分に重ね、重なった値どうしの積の和を1つの値にまとめる小さな重みの並び(行列)です。カーネルとも呼ばれ、入力の上を少しずつずらしながら同じ計算を繰り返し、値の並び方に応じて縦の境目などの模様に反応した出力を作ります。
詳しい説明
フィルタとは何か
フィルタとは、畳み込みニューラルネットワーク(CNN)の畳み込み層で使う、小さな重みの並びです。カーネルとも呼ばれます。画像のように縦横に値が並ぶ入力に対しては、フィルタも2行2列や3行3列のように縦横に並んだ数の表、つまり行列になります。
フィルタは入力全体を一度に見るわけではありません。入力の一部分に重ね、重なった位置どうしの値を掛けて合計し、1つの数を出します。次に重ねる位置を少しずらして同じ計算をし、これを入力の端から端まで繰り返します。こうして得た数を位置の順に並べたものが特徴マップです。
イアン・グッドフェロー(Ian Goodfellow)、ヨシュア・ベンジオ(Yoshua Bengio)、アーロン・クールヴィル(Aaron Courville)による教科書「Deep Learning」(2016年)の第9章に沿って式で書くと、2次元の入力 とフィルタ から出力 を求める計算は次のようになります。
は出力のうち位置 の値です。 と はフィルタの中の行と列の番号で、フィルタのすべての要素について、重なった入力の値との積を足し合わせます。 と を1つずつ動かすことが、フィルタを入力の上で滑らせることに当たります。この式はフィルタを反転させない形で、数学の畳み込みとの違いは後の節で扱います。
数値の例で見るフィルタの動き
以下は説明のために作った架空の例です。入力は3行4列で、左の2列が1、右の2列が4の画像だとします。左右の明るさが変わる境目が、2列目と3列目の間に縦に走っています。
入力
1行目: 1, 1, 4, 4
2行目: 1, 1, 4, 4
3行目: 1, 1, 4, 4
フィルタは2行2列で、左の列が 、右の列が です。
フィルタ
1行目: ,
2行目: ,
まずフィルタを入力の左上、1列目と2列目の上2行に重ねます。重なった値はすべて1なので、計算は です。
右へ1列ずらし、2列目と3列目に重ねます。左の列は1、右の列は4なので、 になります。
さらに1列ずらして3列目と4列目に重ねると、値はすべて4なので です。
1行下へずらして2行目と3行目で同じ計算をすると、入力の行はどれも同じなので、やはり0、6、0が得られます。出力は次の2行3列になります。
出力
1行目: 0, 6, 0
2行目: 0, 6, 0
値の変わらない場所では0が出て、1から4へ変わる境目にフィルタが重なったときだけ6が出ています。このフィルタは右の列の値から左の列の値を引く計算をしているので、左右で明るさが変わる縦の境目に反応します。
値の並び方で反応する模様が決まる
同じ入力でも、フィルタの値を変えると出力は変わります。たとえば上の行を 、下の行を にした2行2列のフィルタ(1行目: , 、2行目: , )で同じ入力を計算すると、どの位置でも上の2つと下の2つが同じ値なので、出力はすべて0になります。このフィルタは上下で明るさが変わる横の境目に反応するものなので、縦の境目しかない入力からは何も拾いません。
どの位置の値を正にし、どの位置の値を負にするかという並び方が、そのフィルタが入力のどんな模様に反応するかを決めています。この例では値を手で決めましたが、CNNの中でフィルタの値がどう決まるかは畳み込み層の項目で扱います。
出力が入力より小さくなる理由
上の例では、4列の入力から3列、3行の入力から2行の出力ができました。フィルタが入力からはみ出さない位置だけで計算すると、入力の幅を 、フィルタの幅を として、出力の幅は になります。4列の入力に幅2のフィルタなら 列です。先の教科書は、このはみ出さない位置だけで計算する方式をvalid畳み込み(valid convolution)と呼んでいます。
この方式では、畳み込みを1回通すたびに出力の幅が だけ縮みます。層を重ねるほど縦横が小さくなっていくということです。入力の外周に0を付け足すゼロパディングを使えば、フィルタの幅と出力の大きさを別々に決められるようになります。付け足し方の詳しい扱いはパディングの項目にあります。
ずらす幅を広げるストライド
ここまでの例では、フィルタを1マスずつずらしました。先の教科書は、ずらす幅を広げた計算について、1マスずつずらして得た出力から マスおきに値を取り出す間引きの操作として式を示し、この をストライドと呼んでいます。
上の例の1行目の出力0、6、0からストライド2で1番目と3番目の値だけを取り出すと、0、0になります。境目に重なる位置が取り出されなかったため、6が消えています。ストライドを大きくすると出力は小さくなりますが、この例のように細かい位置の情報が出力に残らないことがあります。
数学の畳み込みとの違い
数学で定義される畳み込みでは、フィルタを反転させてから入力に重ねます。1次元の離散畳み込みは と書かれ、フィルタ の添え字が になっている点がこの反転に当たります。
一方、多くの機械学習ライブラリが実装しているのは、フィルタを反転させずにそのまま重ねる相互相関(cross-correlation)です。先の教科書は "Many machine learning libraries implement cross-correlation but call it convolution" と書き、ライブラリはこの計算を畳み込みと呼んでいると述べています。同書自身もこの慣例に従い、反転の有無が問題になる場面でだけ両者を区別するとしています。このページの式と計算例も、反転させない相互相関の形です。
反転させると値の位置が入れ替わります。縦の境目に反応する先のフィルタを上下左右に反転させると、左の列が 、右の列が になり、同じ入力に対する出力の各行は0、、0と符号が逆になります。フィルタの値からどんな模様に反応するかを読み取るときは、どちらの計算を前提にしているかを確かめる必要があります。
試験で問われること
G検定
- フィルタはカーネルとも呼ばれ、2行2列や3行3列のような小さな重みの行列として、入力の一部分との積の和を1つの値にまとめます。
- フィルタを入力の上で少しずつずらしながら同じ計算を繰り返し、その結果を位置の順に並べたものが特徴マップになります。
- フィルタが反応する模様は値の並び方で決まり、たとえば右の列から左の列を引くフィルタは左右で明るさが変わる縦の境目で大きな値を出します。
- パディングを使わない場合、入力の幅 とフィルタの幅 から出力の幅は になり、ゼロパディングを加えるとフィルタの幅と出力の大きさを別々に決められます。
- ストライドは、1マスずつずらして得た出力から マスおきに値を取り出す間引きの幅として定義されます。
- 多くの機械学習ライブラリが畳み込みと呼んで実装しているのは、フィルタを反転させない相互相関です。
最終更新日: 2026/09/23