合體!模擬-數位電路(2)——用SPICE搞機器學習

矽說發表於2017-09-23
在前一期(合體!模擬-數位電路(1)——寫Verilog設計類比電路)中我們討論了用數位電路以及設計方法實現傳統的類比電路。在這一期中,我們反其道而行之,看看如何用類比電路高效來實現傳統上用數位電路做的運算。


機器學習,可謂是今天的當紅炸子雞,這年頭的paper關鍵詞裡面沒有“機器學習”相關的字眼都不好意思和人打招呼。機器學習的一系列演算法,包括卷積、非線性啟用(activation)函式、SVM核函式等等,看上去就和模擬沒關係而需要使用數位電路實現。然而,你沒有看錯,使用類比電路做機器學習運算,尤其是超低功耗下的機器學習晶片,漸漸成為了潮流。下面我們來仔細介紹一下如何用SPICE搞機器學習。


1.數位電路做機器學習有什麼問題?


首先,我們說說用數位電路實現機器學習遇到的瓶頸。


簡單來說,最近機器學習發展最好的方向是監督(supervised)機器學習,其目的是實現分類(classification)問題。


合體!模擬-數位電路(2)——用SPICE搞機器學習


線性與非線性分類


分類問題,從數學上來看就是在座標平面(或者超平面)上,把點分到正確的類別裡去。上圖中,就是需要找到一種函式,把藍色點與灰色點分開。最簡單的分類就是線性迴歸(上圖左),大家高中就學過,就是使用一個線性函式曲線把兩種點分開。然而,對於上圖右面那種比較複雜的情況,顯然無法找到一種簡單的線性函式曲線把兩種點分開,而必須使用非線性函式。近年來機器學習大躍進就是因為找到了非常強力的非線性函式來完成分類問題,這種函式叫做神經網路。使用神經網路,理論上可以擬合任意複雜度的函式(包括線性和非線性),因此在監督機器學習問題中游刃有餘,也造就了這波機器學習熱潮。


然而,非線性計算對於數位電路來說需要大量的時間和能量來計算。舉個例子,神經網路裡一種常用的非線性函式是sigmoid(下圖),需要用到除法和指數運算。大家在大學數位電路課本里一般會講到加減法和乘法數位電路實現,除法往往已經是選讀內容了,至於指數運算更是一般不會出現在課本里。此類非線性計算實現起來往往比較複雜,需要較長的延遲並消耗大量能量。在雲端計算這種場合,因為對於能量消耗需求並不嚴格,因此可以用GPU堆效能,問題不大;然而,在需要超低功耗的場合,使用數位電路硬算可能就沒法滿足功耗要求了。


合體!模擬-數位電路(2)——用SPICE搞機器學習

Sigmoid非線性函式


2.類比電路如何解決這個問題?


大家再仔細看一眼上面的Sigmoid函式,是不是很像帶飽和的放大器傳輸曲線?那麼能不能用模擬放大器來“模擬”這條曲線呢?答案是可以!神經網路一個特點就是對於誤差有一定的容忍性,即即使非線性函式離理想特性有一定偏差,最後得到的分類結果並不會差太多!因此,在低功耗的情況下,我們可以用超低功耗類比電路來完成非線性運算,即使結果有一些誤差仍然在允許的範圍之內!


韓國KAIST的H. Yoo教授領銜的研究組是機器學習晶片領域的領軍人物(每年ISSCC都能發表三篇以上論文),而在類比電路實現機器學習方面也走在了世界前列。在2016年發表在JSSC上的論文A 502-GOPS and 0.984-mW Dual-Mode Intelligent ADAS SoC With Real-Time Semiglobal Matchingand Intention Prediction for Smart Automotive Black Box System裡,他們實現了有超低功耗模式(功耗僅0.984mW)的機器學習晶片,其中在超低功耗模式下,非線性函式使用的就是模擬電流放大器來實現,並且通過調整放大器的電流增益還能調整Sigmoid曲線。


合體!模擬-數位電路(2)——用SPICE搞機器學習


除了Sigmoid之外,Yoo組還用類比電路實現了機器視覺中常用的高維高斯濾波,在A 1.22 TOPS and 1.52 mW/MHz Augmented Reality Multicore Processor With Neural Network NoC for HMD Applications論文中,用尾電流控制電路實現了接近高斯濾波的傳遞函式。


合體!模擬-數位電路(2)——用SPICE搞機器學習


3.線性運算也可以用模擬處理!


“物聯網”和“機器學習”是當今最熱的兩大技術關鍵詞,而把它們結合到一起時,就產生了“智慧物聯網”(Intelligent IoT)的概念。在智慧物聯網中,感測器負責把環境中的訊號收集,並且用機器學習演算法處理。環境中的訊號當然是模擬的,因此在送入機器學習演算法處理前,需要經過模擬-數字轉換。


但是,這麼做存在很多冗餘!如果把環境訊號無腦轉換成數字訊號,那麼ADC需要跑在比較高的頻率。從另一個角度看,機器學習也是一種訊號壓縮的過程,把大量的環境訊號(幾百甚至上千位元)收集之後,最後輸出的結果只是一個分類結果(幾個位元)。那麼,能不能在模擬-數字轉換的時候順便把分類給做了呢?這樣ADC只要跑在比較低的頻率!


這是可以的。2015年的ISSCC上,來自普林斯頓大學的Jintao Zhang等人發表了A Matrix-Multiplying ADC Implementing a Machine-Learning Classifier Directlywith Data Conversion,利用電容陣列在ADC這邊直接就做了矩陣相乘並且完成了AdaBoost機器學習演算法,最後輸出就直接是分類結果了。使用類比電路完成矩陣乘法這種線性運算的特點仍然是功耗很低,比較適合使用在超低功耗的應用中。在需要高精度和高速的場合,類比電路會的種種非理想因素開始體現,這時候還是老老實實用數位電路實現比較方便。


合體!模擬-數位電路(2)——用SPICE搞機器學習


在2017年ISSCC,使用類比電路實現矩陣運算的趨勢仍在繼續。

合體!模擬-數位電路(2)——用SPICE搞機器學習


 

UCSD的空間濾波陣列(Spatial Filter Bank)繼續沿用MDAC的理念,並瘋狂地將乘法的位寬增加到14位。在傳統模擬/數字訊號處理的教科書上,這種計算的應用一般是數位電路的天下。

 

另一個基於模擬實現的場景也和多徑有關。在超聲的片上系統應用領域,波束成形(beamforming)逐漸取代了原有的單點超聲。傳統的波速成形往往採用先量化在數字延遲的方法,這樣對ADC的數量、匹配和麵積提出了很高的設計要求。而在今年的ISSCC中日本日立集團的3072道超聲應用中,採用了先取樣,在電荷域求和延遲的技術,最後僅需要對求和後的訊號進行一次模數轉換即可。


合體!模擬-數位電路(2)——用SPICE搞機器學習


類似的空間運算和延遲技術不僅對於生物系統有重要的參考價值,更是在MIMO/雷達等先進的通訊系統存在中的廣泛應用。於是越來愈多的模擬計算技術是否會為未來的通訊電路帶來新的基帶架構也是一個值得期待的問題。

 

4.結語


在兩期文章中,我們介紹了使用數位電路實現的傳統類比電路,以及用類比電路實現的傳統數字運算模組。數位電路能更好地享受特徵尺寸縮小的好處,而類比電路更適合實現超低功耗運算電路。實際上,在訊號處理中,採用模擬還是數字的方式的爭論由來已久。具體問題往往需要具體分析。但是片面地將設計思路固步自封的模擬或者數字中往往是不可取的。總之,未來的積體電路電路設計工程師恐怕再也不能僅以“模擬”或者“數字”自居了。



相關文章