因為剛好在讀Shimeng Yu教授的文章,覺得需要更基礎一點的模型,翻來覆去找到了這篇論文
順便筆記以免以後忘記
論文本文:In-Memory Computation of a Machine-Learning Classifier in a Standard 6T SRAM Array, Jintao Zhang, Zhuo Wang, and Naveen Verma ( 2017)
先來overview這篇論文,如下圖,對於一個標準6T bit-cell的SRAM陣列(6T表示一個記憶單元含有6個電晶體),不同的外圍電路會有不同的工作模式,一種為標準的SRAM模式,即Read/Writre,用於存儲模型,另外一種即為Classify模式,所有的wordline(WL)皆可以analog-voltage(類比電壓)即時控制bit-cell,並可以同時控制所有cell,即平行控制,任意一條WL上的analog-voltage皆對應到一個feature,每個皆對應了我們想要的分類結果其feature-vector,且feature-vector皆以數位之形式表現(digital-data),以feature-vector buffer進行輸入,再經過WLDAC進行數電製模電的轉換,以控制bit-cell。
在classify mode之下,每條column會形成一個弱分類器(weak classifier),
何謂弱分類器:
即它可以用做分類器,但卻不能很好的適應每種數據,效果也非常差,但是訓練成本低,複雜度低,不容易overfitting,例如linear classifier即為一種weak classifier,因為他的決策邊界(decisions boundaries)在特徵空間(feature space)為線性的,而現實中幾乎不可能這麼簡單。另一方面強分類器即可進行一些更分散的的數據分布,如support-vector machine(SVM)中的radial-basis-function kernel(徑向基核函數),所以我們最齁需要的還是強分類器,因此我們目標是要使用弱分類器去組合成強分類器
Column-based Weak Clasifier的原理與架構
論文首先介紹了所謂弱分類器(weak classifier),以公式表達即為
$$d=sgn\sum_{N}^{i=1} w_{i}\times x_{i}$$
在standard linear classifier下,decision d 遵從上述公式,其中 \(x_{i}\) 對應到特徵向量 \(\overrightarrow{x} \) 之元素(element), \(w_{i}\) 對應至權重向量 \(\overrightarrow{w}\) 中之權重,其電路結構如下圖
首先,字線對(bit-line pair(BL/BLB)) 會先預充電(precharged)。接著WL會被類比電壓以feature value \(x_{i}\),而\(I_{BC,i}\)的值是基於存儲在bit-cell中的值而變化,而BL/BLB為差分電壓信號(differential voltage signal),使得信號可以表現為儲存之權重(-1與+1)與\(I_{BC,i}\)(feature value)相乘,最後在BL/BLB上相加,再與預設之閾值(sign thresholding-->即為將類比訊號轉換成數位的值)去做比較。
上述結構甚至比linear classifer還要孱弱,因為它是非理想的(nonideal),因為電路中存在偏差(variation)以及非線性(nonlinearity),且權重被限制在\(\pm 1\),接下來會進一步解釋如何將weak classifier組合成strong classifier
分類器之訓練(CLASSIFIER TRAINING)
Boosting 是一種將多個弱分類器結合成強分類器的一種演算法,除了要解決由於弱分類器本身fitting不好所導致的誤差之外,基於column classifier還提出了兩個額外的問題。首先是電路的非理想性(如bit-cell variation和nonlinearity)會使其輸出偏離標準弱分類器的輸出。其次,儘管基於此弱分類器類似於權重限制為1比特(1-b)的線性分類器,但依照標準的線性分類器訓練算法,然後進行如此極端的量化,會導致性能不足。因此我們需要以下方法來提升此系統的完整度,首先是提升算法以克服電路非理想性,接著是基於分類器訓練算法以克服非常低的權重精度。
Error-Adaptive Classifier Boosting
Error-adaptive classifier boosting (EACB)是一種基於AdaBoost的一種算法,先讓我們來解釋甚麼是AdaBoost
什麼是adaboost
AdaBoost,全稱Adaptive Boosting(自適應增強),即會在基礎的弱分類器之上進行迭代,每次迭代都是著重於修正前一代的誤差,而fitting error是因為線性的決策邊界導致未能將不同類別的訓練數據分開所導致(視為線性,因此誤差單純是本身弱分類器不夠好所導致的)
而EACB則是把一些非理想條件所造成的誤差一起考慮進來,因此,因為非理想條件引起的錯誤會隨著fitting error一起被自適應地糾正
一旦所有的基弱分類器(base weak classifier)都完成訓練後,強分類器將通過弱分類器決策的加權值來構建,即上圖中的\(Z_{X}\),如上圖。另外,所有弱分類器的輸入都是相同的特徵向量,這些向量可以通過共享的 WLs 簡單輸入至SRAM 結構中。
另外,存儲訓練集所需的嵌入式內存,通常必須很大以保證低泛化誤差(表示通常需要很多樣本才能訓練泛化效果好的模型)。這在 EACB 中已經通過利用弱分類器對於過擬合的情況自帶免疫性而得到解決(畢竟弱分類器就是擬合效果差才叫弱分類器)。這使得可以在每次迭代中使用較小的訓練集,同時可以在每次迭代中選擇性地獲取新的訓練集以增強強分類器的多樣性。因此,瞬時訓練集(instantaneous training set)得以減少,從而大大減少所需的嵌入式內存。
註:內容中所謂的訓練集/瞬時訓練集應指的是batch,因此瞬時訓練集越小等於batchsize越小
Base Classifier Training for Binary Weights
將標準線性分類器訓練(如線性回歸)後的權重量化為1bit的問題在於,生成的模型會受到顯著擾動,不再能最佳擬合訓練集。相反,我們在基分類器學習規則的優化成本函數中整合了權重量化。生成的模型擬合程度較弱,但對於1bit來說是最佳的。下式指定了優化過程,其中1比特量化通過將權重向量 w 限制為+/-1來表示,並引入一個額外的正縮放變量 α 進行優化(\(x_{s}\)/\(y_{s}\) 是訓練集特徵向量/標籤)。
$$\underset{a,\vec{w} }{minimize} \sum_{s} (y_{s} -\alpha \cdot \vec{w}\cdot \vec{x_{s}})^{2} \\ subject\space to\space \alpha > 0,\space \vec{w}\in \left \{ -1,1 \right \} ^{N} $$
與傳統的線性回歸不同,這種優化是"離散化的",且"非凸",其複雜性隨向量維度 N 呈指數級增長。然而,如下面公式所示,通過將 \(\alpha\)縮放引入約束(使得 \(v = α · w\)),以及引入二進制變量 \(b_{i}\)(需優化)和常數\( c\)(簡單地選擇比 \(\alpha + max(\left | v_{i} \right | )\) 大),可以將其重新表述為混合整數規劃問題(即部分決策變量限制為整數的數學規劃問題)即,二次目標和線性約束,降低訓練難度(可參考Gurobi Optimization, Inc. (2015). Gurobi Optimizer Reference Manual.)
$$\underset{a,\vec{w} }{minimize} \sum_{s} (y_{s} - \vec{v}\cdot \vec{x_{s}})^{2} \\ subject\space to\space -\alpha \le v_{i} \le \alpha , \space v_{i}+c \cdot b_{i} \ge \alpha ,v_{i}+c \cdot (b_{i}-1) \le -\alpha \\ \space b_{i}\in \left \{ 0,1 \right \}, \space c>a+max(\left | v_{i} \right | ), \space i=1,...,N $$
以下圖為例
此圖表示了三種不同情況的約束條件,利用PCA方法(PCA ,即主成分分析(Principal Component Analysis):找出一組最能代表你手中數據的主成分(Principal Components),並以此為基底重新得到數據的成分表徵。這個新的成分表徵能為數據降維、去關聯並幫助我們理解數據本質)進降至2維,數據採用"0"與"2"兩個分類別,且將特徵從784個像素降採樣至81個像素。其中以10-bit量化效果最好(96%),同樣是1-bit但是經過優化的linear classifier可以與10-bit量化匹敵,但是未經優化的效果只比猜的好一點,明顯可以看出優化後的效果
電路設計
Wordline DAC
上圖表示了一個WLDAC的電路結構,接下來分析為甚麼結構要設計成這個樣子
5-b "digital" feature values X[4 : 0] 輸入至 current DAC ,至於訊號怎麼形成的呢?是透過一個binary-weighted pMOS current sources,那個binary-weighted current sources的運作是根據feature values中的值去控制開關,電路導通時,因為並聯電導相加(\(g_{m_{0}}+g_{m_{1}}+...+g_{m_{N}}\),因此當越多電路導通時,其WL電壓會越高,如下圖
接下來,結構的左下方,存在Bit-cell replica,作用是將上面電導所導出的電流(\(I_{DAC}\)),其結構為seif-biased,其等於電阻R,因此可生成與 DAC 電流\(I_{DAC}\)相對應的 WL 電壓
\(I_{DAC}\)被位元單元鏡像,生成與輸入的數字特徵值大致線性的 \(I_{BC}\)(按放大比例 R 進行縮放),並可實現追蹤電壓、溫度和工藝偏差
關於誤差來源,從上上圖可以看出,WL 的穩定時間是可變的。這是由於位元單元複製的自偏置(即,DAC 輸出阻抗約為 \(\frac{1}{g_{m_{A,R}}}\)取決於 \(I_{DAC}\))。因此,在低電流下,驅動大的 WL 電容會因slew rate\(\ne \infty\) (\(slew rate =\frac{\bigtriangleup V}{\bigtriangleup T} \))而出現非理想的電壓曲線(導致非線性),如圖下圖(左)所示的 BL 放電傳遞函數。為了減輕這種影響,DAC 中包括了一個偏置電流源(即下圖(右)中橘色方框中的pMOS結構),以降低其輸出阻抗,並且無論輸入的feature values如何,該電流源都會啟用,這顯著改善了傳遞函數(transfer-function)的線性度。
何謂transfer-function
在訊號處理中,\(Y(s)=H(s) \cdot X(s)\),其中\(Y(s)/X(s)\)為output/input,\(H(s)\)即為transfer-function,且通常具有以下兩個性質
1)Linear(具疊加性)
2)time-invariant
接下來探討其他誤差來源,另一個重大誤差來源自bit-line discharge,根據上圖,我們可以假設BL/BLB上面的電壓是接近其precharge voltage,但是對於Classify Mode來說,我們希望它具有大的Swing以容納所有bit-cell的pull-down current總和所需的動態範圍。這會產生兩種誤差:
1)由於access和driver晶體管上的 \(V_{DS}\)減少,所有pull down current的單元電流減少,
2)未pulling down的單元開始pull up,儘管是通過弱偏置的 nMOS
上述情況發生在access晶體管經歷源電壓減少並開始導通時,因此,正如下圖 (右) 的模擬所示,較低的共模電壓(與GND的電位差)導致 BL/BLB 差分(BL/BLB間電壓差)電壓壓縮。但,在預期比較器沒有offset的情況下,上述的error是不會影響到bit的狀態的,自然也就不會影響分類結果。
此外,我們預期比較器的offset是與column-based weak classifier是無關的,因此EACB可以克服這類型的誤差
Bit Cells
bit-cell array 是完全相同的標準6T SRAM(包括尺寸),但是在分類模式下,必須要有不同的位元翻轉條件才行,更確切的說,是要有比標準SRAM模式還要有更大的SNM。
位元翻轉會出現是因為原先儲存的資料會暴露在prechargeed BL/BLB,因此會使節點的電壓升高,為了確保儲存的資料不被改變,蝴蝶曲線的形式應表現為雙穩態的葉片(葉片即圖中與方框相切的葉片形狀的兩曲線所夾的面積),順帶一提的是,內嵌方框需取葉片中最大的正方形,此時為SRAM模式
現在討論分類模式,此時,因為BL/BLB會處於低電位的狀態,因此可能會將節點內存儲的1給拉低然而,由於WL的電壓限制在<0.4V,内部節點幾乎不受影響,如上圖中的蝶形曲線所示,保持了較大的“分類SNM”。下圖顯示了SRAM模式讀取SNM和分類模式SNM的蒙地卡羅模擬分布,顯示在標準單元尺寸下,分類SNM更大且標準差更小。
Sense Amplifire
與一般SRAM模式下的感測放大器不同,這種作為Classifier的SRAM架構需要非常大的動態範圍,以容納rail-to-rail的input
什麼是rail to rail?
應是指訊號電壓範圍接近電源電壓存在之兩軌,即(VCC與VEE),因此上面內容提到的rail-to-rail應是指幾乎與電源電壓相同之訊號
接下來比較複雜,需要仔細探討下面兩圖
根據時序,可知輸入電壓開關(SW)會在預充電相結束前閉合,這樣預充電的BL/BLB會在放電相之前平衡掉耦合節點上面的電壓
接下來討論失調補償的問題
offset compansation
比較器失調(如許多其他電路非理想性)可以通過 EACB 克服。但 SRA可以輕鬆實現自補償,從而大幅減少比較器失調,進而減少所需的 EACB 迭代次數。C 行被指定為失調補償行,WL 偏置 \(V_{CAL}\) 設置為實現所需的補償粒度。由於比較器失調可能與輸入共模電位有關係,因此其他行須被放電至 BL/BLB 對應於操作期間期望的平均放電電位。
本文提出來一個很特別的方法,首先,一半的失調補償row設置為存儲邏輯 1,另一半設置為存儲邏輯 0。然後,進行 BL/BLB 放電並進行比較。對於返回 -1 決策的column,一半的邏輯 0 單元被寫入邏輯 1 數據;對於返回 +1 決策的column,一半的邏輯 1 單元被寫入邏輯 0 數據。以這種方式進行二分搜尋,可以在 \(\log_{2}{C} \) 週期內平行補償所有column的失調。實際上,將 BL/BLB 等效放電至預期共模電位會受到位元單元變異的影響。為了減輕這一影響,每個二分搜尋決策可以通過平均不同配置的放電行的比較輸出來做出
失調補償的開銷是所需行數(增加面積和位線電容),這設置了失調補償範圍和粒度的比例(即,小的 VCAL 提供更細的粒度但減少範圍,需要更多行)。然而,因為所有行在物理上是相同的,用於失調補償的行數可以配置以優化不同應用。
總體結構如下圖
最後,文章敘述了一些模擬及實驗結果,因為不涉及原理的部分,就不逐一探討了
如果有錯拜託跟我說,我會非常非常感激🥹🥹
(乾,字有夠多