前沿與後摩爾時代

近似運算(approximate computing)

假設你正從一張照片挑牆壁的顏色。如果某個像素差了一個察覺不出的色調,有差嗎?當然沒有——你的眼睛分辨不出來,而「淡藍色」這個答案一樣好。許多現代運算都像這樣:串流影片、機器學習、感測器資料、影像處理。這些結果由不完美的人類感官消費,或者本身就已經帶著雜訊、是統計性的,所以做到精確、逐位元完美正確並換不到什麼。近似運算就是一種刻意的策略:拿你並不需要的一點點準確度,去換取能量、時間或硬體上的大量節省。

其想法是:精確很貴,你應該只在它真正重要的地方付那個代價。具體而言,近似運算涵蓋好幾種技巧。你可以用降低精度——以 8 位元或 16 位元數字運算,而非 32 或 64 位元,這樣更小、更快、也省電得多,這正是機器學習硬體仰賴低精度算術的原因。你可以打造刻意簡化的電路,例如一個幾乎總是對、偶爾在最後一位元出錯的加法器,換來更小、更涼。你可以略過工作——抽樣一部分資料而非全部,或在答案「夠好」時就提早停止某個迭代運算。每一種情況下,你接受一個受控、有界的誤差,把省下來的收進口袋。

紀律就在「受控」這個詞裡,而誠實的危險也正在那裡。近似運算只有在誤差可容忍且可量化之處才行得通,在不可容忍之處則是災難性的:你絕不可近似一筆銀行餘額、一把密碼金鑰、一個記憶體位址,或一個程式的控制流——那裡只要錯一個位元就毀掉一切。困難的工程問題是:一項運算的哪些部分可以馬虎、馬虎到什麼程度,而嚴謹地把那個誤差框住並不容易。明智地用在可容忍誤差的工作負載上,近似是後摩爾工具箱裡一個強大的槓桿;草率地用,它會悄悄產出看起來合理、實則錯誤的答案。

一個用來辨識照片的神經網路被重新訓練成以 8 位元數字、而非 32 位元運行。準確度下降了微不足道的一小部分百分點——實務上看不出來——但晶片用上少得多的記憶體與能量,跑得快上好幾倍。降低精度是部署得最廣泛的近似運算形式,正是因為視覺與語言模型對它的容忍度很好。

只在重要之處花費精確的位元;在可容忍誤差的工作上,較低的精度能換來能量與速度上的大勝。

近似只有在誤差可容忍且有界之處才安全。絕不要近似位址、控制流、密碼金鑰或金融數值——那裡錯一個位元不是小誤差,而是一個可能看起來完全合理的錯誤結果。

又稱
approximate computationinexact computing近似運算近似計算