Motivation
矩陣相乘 $y=Wx$ 是神經網路的基本單元, 其中 $W\in\mathbb{R}^{m\times n}$, $x\in\mathbb{R}^{n\times1}$, $y\in\mathbb{R}^{m\times 1}$.
試想一下如果 $W$ 裡面的值存在 outliers, 則對整個 matrix 量化時, 為了能覆蓋 outlier 則會犧牲精度, 這正是現今 LLM 極致量化時的魔王關卡.
考慮旋轉矩陣 $U\in\mathbb{R}^{m\times m}$, $V\in\mathbb{R}^{n\times n}$, 如果先對 $W$ 和 $x$ 作如下座標旋轉操作:
$$\begin{align}
\tilde{W}\leftarrow UWV^T \\
\tilde{x}\leftarrow Vx
\end{align}$$ 則我們觀察一下 $\tilde{W}\tilde{x}$ 與原來的 $Wx$ 差異在哪
$$\begin{align}
\tilde{W}\tilde{x} &= (UWV^T)(Vx) =UWx
\end{align}$$ 所以如果再多乘上 $U^T$ 旋轉一下, 則就能還原出原本的 output activation $y=Wx$ 了.
那為什麼要套這些旋轉矩陣? 反正最後又要還原回去, 不是多此一舉嗎?
其實不是白做, 旋轉有很大的好處
這是因為透過旋轉矩陣, 我們能夠把 outlier 消除, 進而能夠很好的量化
$\tilde{W}$ 比 $W$, $\tilde{x}$ 比 $x$ 好量化很多! 👍🏻

