類比運算(analog computing)
今天的電腦是數位的:一切都被表示成清晰的 0 與 1,是離散的階梯,中間什麼也沒有。類比運算更古老、也更奇特——它把一個數字表示成的不是一串位元,而是一個連續的物理量,像是一個確切的電壓位準或一個電流大小。數字 3.7 不是以二進位樣式儲存,而是有一條導線載著 3.7 伏特。而訣竅在這裡:物理替你免費做了一些數學。如果兩股電流流進同一條導線,它們會相加——電路的克希荷夫定律真的就把這個加法做了,完全不用任何算術電路,瞬間完成、幾乎不耗能。
為什麼有人在後摩爾時代重新審視這個老點子?因為一項特定、極其重要的運算:主宰機器學習的乘加運算。跑一個神經網路,大多就是把許多數字乘以儲存的權重、再把乘積加總,一遍又一遍。一個類比記憶體陣列能極有效率地做這件事:把權重編碼成記憶體單元的電導,把輸入當成電壓施加,憑著基本電路物理,產生的電流自動就是那些乘積,並沿著每條導線加總起來。整個矩陣-向量乘法——成千上萬次乘與加——基本上能在記憶體內、用極微的能量,於一個物理步驟內完成。這把類比運算與記憶體內運算、以及貫穿整個領域的資料搬移主題結合在一起。
現在來談無可迴避的誠實。類比本質上不精確:真實電壓會漂移、元件彼此有差異、溫度與電氣雜訊把數值弄模糊,所以類比運算天生就是近似的,無法給出數位所給的逐位元精確、可重現的答案。因此它只適合可容忍誤差的工作負載——這正是為什麼本來就容忍近似的神經網路推論,是它的殺手級應用、也幾乎是唯一被認真追求的應用。在類比與數位世界之間轉換也耗能量與面積,可能侵蝕掉省下來的好處。類比運算是針對一種狹窄但要緊的工作、有希望且仍屬實驗性的加速器,不是普遍回到前數位時代的機器。
一個類比加速器把神經網路的權重儲存成一格記憶體單元網格的電導。要把輸入向量乘以權重矩陣,它沿著各列把輸入當電壓施加;憑歐姆定律,每個單元產生等於電壓乘以電導的電流(一次乘法),而每一行上的電流加總起來(一次累加)。成千上萬次乘加在一個物理步驟內完成——但結果帶著類比雜訊,所以只用在小誤差無妨的地方。
讓電路物理去做乘加既快又超低功耗,但天生帶有雜訊、是近似的。
類比運算天生不精確——電壓會漂移、元件有差異,所以它給不出數位那種逐位元精確、可重現的結果。它實際的利基是像神經網路推論這類可容忍誤差的工作,而非通用運算。