Altifigence Academy

2 / 24 · 概念

畳み込みと相互相関

入力[1,2;4,5]、カーネル[1,0;0,-1]の相互相関と、反転カーネルでの結果は何ですか。

カーネルの向きを確定する

ニューラルネットワークの畳み込みでは一般に相互相関を使い、保存したカーネルを反転せずに入力ウィンドウと組み合わせます。数学的な畳み込みはカーネルを反転します。演算名より添字の式が有用です。対称なカーネルは向きの誤りを隠すことがあるため、検証は非対称な値から始めます。

1チャネル、ストライド1、パディングとダイレーションなしなら、次を使います。

y[h,w]=b+∑r=0R−1∑s=0S−1x[h+r,w+s]k[r,s]y[h,w]=b+\sum_{r=0}^{R-1}\sum_{s=0}^{S-1}x[h+r,w+s]k[r,s]

h,wは出力の位置、r,sはカーネル要素の位置です。どちらのカーネル添字も反転しません。

計算例

入力ウィンドウ[1,2;4,5]、カーネル[1,2;3,4]を使います。相互相関は1×1+2×2+4×3+5×4=37です。カーネルの両軸を反転すると[4,3;2,1]で、4+6+8+5=23になります。バイアス2を加えると39と25です。どちらを意図するかは仕様が決めます。

入力を[1,2,3;4,5,6;7,8,9]に広げます。元のカーネルは[37,47;67,77]を生成します。右上のウィンドウは[2,3;5,6]で、積の和は2+6+15+24=47です。ウィンドウの移動は入力座標を変えますが、保存した重みの順序は変えません。負の重みも同じ添字規則に従います。例えば[1,0,-1]は明示的に左サンプルから右サンプルを引きます。

複数チャネルでは、各チャネルのウィンドウを同じ出力要素へ累積します。出力チャネルごとに固有のカーネル群と1個のバイアスがあります。チャネルは縮約添字であり、ウィンドウを滑らせる空間位置ではありません。グループ畳み込みは接続を制限するため、明示的なグループ対応が必要です。

入力ウィンドウ、カーネル順序、部分積、バイアスを記録します。規則的すぎる例では、最終配列だけの検査が相殺する添字の誤りを見逃すことがあります。ここでの非対称例はその危険を減らします。テンソルと重みの規約はONNX Convの公式資料と比較してください。このレッスンの数値例は独自に作成したものです。

自分で考えてみましょう

入力[1,2;4,5]、カーネル[1,0;0,-1]の相互相関と、反転カーネルでの結果は何ですか。

解説を見る

相互相関は1−5=−4です。反転したカーネル[−1,0;0,1]は−1+5=4です。この例では符号の変化で向きの違いが現れます。

選択はこのブラウザに適用されます。フッターからいつでも変更できます。