3-02 重み係数とバイアスの整数化

●畳み込みvgg1層目の重み係数を整数化する

 vgg1層目の
重み係数はリスト3‐04のように整数化します。いったん重み行列を読み、256倍→int化の後、行列に書き戻します。なお、係数が(-128〜+127)を超えそうなケースはリミッタを入れるとよいでしょう。
 この層の係数の数は入力3ch x 出力64ch x フィルタ3x3 = 1,728個になります。


リスト3‐04 1層目は256倍してintにするだけ(必要に応じてリミッタ)


図3‐04 1層目の重み係数。‐128〜+127までの範囲を超える場合はリミッタを入れる


2層目以降は係数の数が膨大になるので工夫する

 vgg2層目以降は格段に係数の数が増えます。例えばvgg15層目は入力1024ch x 出力1024ch x フィルタ1x1 = 1,048,576個になり、このままでは大量の乗算器を消費します。

 そこでリスト3‐05のように係数を8種類(±1, ±2, ±4, ±16)に集約します。すべて2の累乗なので「
ビットシフトによる乗算」が可能になります。

リスト3-05 2層目以降の係数は2の累乗に集約させる(乗算器節約のため)


 図3‐03は整数化された15層目の重み係数です。係数の数は1024x1024 = 1,048,576個、種類は8(±1, ±2, ±4, ±16)になっています。


図3‐05 15層目の重み係数。8値に集約されている

 15層目だけはバイアスが必要なのでリスト3‐06のように整数化します。


リスト3-06 15層目のバイアスの整数化。256倍してintにするだけ


図3‐06 15層目のバイアス。この層だけはバイアス加算する


目次へ戻る