Altifigence Academy

9 / 24 · 概念

直接畳み込みの参照モデル

入力[2,3]、重み[4,−1]、バイアス1で、入力チャネルごとにバイアスを加えるとどの誤結果になりますか。

確認しやすい参照モデルを優先する

正解モデルは速度より見える契約を優先します。出力チャネル、出力行、出力列を反復し、その中で入力チャネルとカーネル行・列を縮約します。各入力座標を計算し、範囲外にはゼロを供給します。これにより最初の誤出力と、厳密にどの項が違うかが分かります。ハードウェアの最適化したループ順を模倣する必要はありません。

y[m,h,w]=b[m]+∑c∑r∑sx[c,hSh−Pt+rDh,wSw−Pl+sDw]w[m,c,r,s]y[m,h,w]=b[m]+\sum_c\sum_r\sum_s x[c,hS_h-P_t+rD_h,wS_w-P_l+sD_w]w[m,c,r,s]

各出力につき1回、アキュムレータをb[m]で初期化します。縮約内で加えるとバイアスを繰り返します。整数モデルのxとwは中心化コードで、バイアスは積のスケールを使います。

複数チャネルの計算例

2と3を持つ2個の1×1入力チャネルを使います。出力チャネル0の重みは[4,−1]、バイアス1で、1+8−3=6です。出力チャネル1は重み[−2,5]、バイアス−1で、−1−4+15=10です。共有アキュムレータは最初の結果を残さず、第2出力を独立に開始する必要があります。

入力[1,2,3;4,5,6;7,8,9]、カーネル[1,2;3,4]の期待値は[37,47;67,77]です。最初の記録する積は1,4,12,20、次は2,6,15,24です。手計算した位置を確認してください。最終値だけでは相殺する誤りを隠すことがあります。

直接モデルを別構造のパッチと内積のモデルと比較します。両者が同じアドレス関数を共有すると同じバグを共有し得ます。独立構造と手計算例を組み合わせます。乱数シードは再現可能にし、失敗テンソルを残します。数値の失敗箇所を絞るため、変換前のアキュムレータと最終出力コードの両方を比較します。

model.mjsは暗黙の1バッチでX[C][H][W]、W[M][C/G][R][S]を受け入れます。長方形テンソル、チャネル適合、グループを検査します。フレームワークモデルはインポートしません。全ゼロ例でなく、異なる値、負数、非対称な重みを使います。この教材モデルの制限を記録し、規約をONNX Convと比較します。

自分で考えてみましょう

入力[2,3]、重み[4,−1]、バイアス1で、入力チャネルごとにバイアスを加えるとどの誤結果になりますか。

解説を見る

正解は1+8−3=6です。バイアスを2回加えると8−3+2=7になります。チャネル縮約の外でバイアスを初期化します。

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