2bitで実現する疑似1.58bit量子化:無効状態を導入した制約付き符号化
1.58bit量子化はソフトウェアにはいいがハードウエア的には現行システムに適合しにくい
ならば2bitならば?
ここから出た発想を文書化してみました。
これで既存の枠の中に入るのかと言うと枠を再定義する事になると思います。
概要
1.58bit量子化(ternary:-1, 0, +1)は理論的には効率的だが、
- ビットパッキングが非整数
- GPUで扱いにくい
- 演算系が複雑
という理由で実用化が進みにくい。
本稿では、
2bit表現を維持したまま、1状態を「無効」として扱うことでternaryを実現する
という構成を定式化する。
1. 問題設定
ternary重み:
$$
\mathcal{W} = {-1, 0, +1}
$$
2bit表現:
$$
b \in {00, 01, 10, 11}
$$
通常は4状態だが、ternaryでは3状態しか使わない。
2. エンコーディング
写像:
$$
E : \mathcal{W} \rightarrow {0,1}^2
$$
$$
E(-1) = 00
$$
$$
E(0) = 01
$$
$$
E(+1) = 10
$$
残りの状態:
$$
11 \notin \mathrm{Im}(E)
$$
これを:
$$
11 \equiv \bot
$$
と定義する(無効状態)。
3. デコード
$$
D : {0,1}^2 \rightarrow \mathcal{W} \cup {\bot}
$$
$$
D(b) =
\begin{cases}
-1 & (b = 00) \
0 & (b = 01) \
+1 & (b = 10) \
\bot & (b = 11)
\end{cases}
$$
4. 演算定義
入力:
- 活性値 $x \in \mathbb{R}$
- 重み $w \in \mathcal{W}$
出力:
$$
y = w \cdot x
$$
実装的には:
$$
y =
\begin{cases}
-x & (b = 00) \
0 & (b = 01) \
+x & (b = 10) \
0 & (b = 11)
\end{cases}
$$
5. マスク付き演算
無効状態を扱うためにマスクを導入:
$$
m(b) =
\begin{cases}
1 & (b \neq 11) \
0 & (b = 11)
\end{cases}
$$
すると:
$$
y = m(b) \cdot \tilde{w}(b) \cdot x
$$
ここで:
$$
\tilde{w}(b) \in {-1, 0, +1}
$$
6. 情報効率
ternaryの理論情報量:
$$
\log_2 3 \approx 1.585
$$
実際の格納:
$$
2 \text{ bit}
$$
効率:
$$
\eta = \frac{\log_2 3}{2} \approx 0.79
$$
7. 無効状態の解釈
$$
\bot = 11
$$
は以下として解釈可能:
- pruning(枝刈り)
- dropout的無効化
- uncertainty表現
- エラー吸収
8. 制約射影
学習中に無効状態が発生した場合:
$$
\Pi(b) =
\begin{cases}
b & (b \neq 11) \
01 & (b = 11)
\end{cases}
$$
または確率的に:
$$
\Pi(b=11) \sim {-1,0,+1}
$$
9. システムとしての定義
$$
\mathcal{S} = ({0,1}^2, \Pi)
$$
- 有効状態:3
- 無効状態:1
- 射影で閉包
10. 本質的な意味
この方式は:
非整数bit量子化を、整数bitハードウェア上で近似する
という構造を持つ。
11. メリット
- 既存GPUでそのまま扱える
- メモリアラインメントが崩れない
- SIMDフレンドリー
- 実装難易度が低い
12. 未解決課題
- マスクコストは本当に安いか?
- 収束は安定するか?
- 真の1.58bitと比べてどこまで近づくか?
- 無効状態を積極利用できるか?
結論
この方式は:
「1.58bit量子化の理論」と「2bitハードウェア」の折衷解
であり、
完全最適ではないが、
実装可能性という観点では極めて現実的な中間解
である。