今年去參加了ASPLOS 2017大會,這個會議整體來講我感受偏系統和偏軟一點,涉及硬件的相對少一些,對我這個喜歡算法以及硬件架構的菜鳥來講並不算很是契合。中間記錄了幾篇相對比較有趣的paper,今天簡單寫一篇。算法
SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Computing
單位做者:
markdown
咱們知道在神經網絡計算中,最主要的計算就是乘加,本篇重點就是解釋了什麼是Stochastic Computing(隨機計算),以及怎麼用邏輯電路來實現Stochastic Computing。網絡
這一塊就很少說了,做者畢竟是在作一些早期研究,先解決有無問題,因此在MNIST這樣規模的數據集上作的神經網絡,能夠轉化爲Stochastic Computing。(不過我要說一句,MNIST數據畢竟比較簡單,用LENET這樣規模的網絡就能夠搞定,實際上,其餘研究中已經把LENET變成Binary的網絡,識別準確率徹底不成問題,所以能夠用Stochastic Computing彷佛也是瓜熟蒂落,可是其推廣性就有待商榷了。事實上,在本次ASPLOS上,在本篇oral的提問環節,就有一個MM質疑了做者的Stochastic Computing只在這麼小的網絡上成功,徹底不能說服你們是否在大網絡上也能夠採用,否則意義就不大了。我我的附議。)架構
Stochastic Computing (SC) is a paradigm that represents a probabilistic number by counting the number of ones in a bit-stream.atom
做者給出了兩種形式的表示形式:spa
(1)能夠表示[0,1]數據的unipolar encoding:
圖片
(2)能夠表示[-1,1]數據的bipolar encoding:
ip
這樣看彷佛很是簡單,可是有幾點須要注意:input
實際上,SC計算是有偏差的,不精確的,其準確率受到stochastic number generators以及bit length的影響很大。generator
乘法Multiplication.
通常的數字電路二進制fix point計算中,乘法的代價是遠大於加法的,而SC的一個優點就是,乘法實現很是容易。
如上圖,針對兩種encoding,都只要很是簡單的門電路就能夠完成計算——unipolar是用AND,unipolar是用XNOR。(由於A和B是不肯定的,因此計算A*B的結果也是不徹底肯定的,好比(a)狀況,若是變成11110000 * 11001111的話,計算出來就是2/8。固然,結果仍是在正確的範圍以內的,因此要球NN能夠容忍這樣的計算偏差,而NN也確實有這樣的容錯性,因此NN確實是SC很好的一個應用場景,但願之後能夠在計算理論上再有突破)。
加法Addition.
加法要稍微複雜一點,但也比通常的邏輯運算單元簡單不少。論文中介紹瞭如下四種加法器的實現。、
這一塊只貼一個圖,你們有興趣的去下載原文看一下吧:
能夠看到,bit stream仍是比較長的,這個也是另一個問題,要保持較高的精度,須要較長的bit,這樣帶來的開銷也比較大。好在加法的實現是多輸入的。
總的來講,SC要實際可用還有很長的路,不僅是實現上的,我認爲更可能是在理論上須要突破。若是隻是來和現有的普通精確的二進制邏輯運算對比,好比標準的乘法加法,那麼優點看來並不大。可是若是一個網絡在構建結構以及訓練的時候,就是用隨機計算單元的,那可能其價值會顯著提升。
[1] SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Computing, ASPLOS 2017.