脈衝神經網路(SNN)在邊緣運算上的應用與挑戰 (影片有中英文字幕) 關注
評論 文字稿
Hi 我是廖華鵬
感謝百業分享堂的邀請
在這段影片我想要分享的是
脈衝式神經網路SNN
在邊緣運算上的應用與挑戰
說到邊緣運算
就要先提到一個已經被提出了一段時間的概念
物聯網
早在上世紀的九十年代
網路才剛開始普及的時候
在很多人暢想的未來裡面
有一個場景是這樣子的
所有的東西都可以連上網路
一切重複的繁瑣的事情都可以被自動化
小到超市採購、出門關燈
大到工廠生產或是跨國運輸
一切的事物都可以被追蹤、被遙控
這裡面的基礎就是所謂的物聯網
在物聯網這個概念剛被提出來的時候
多數的應用場景只停留在
把所有的東西加上一個自動識別的無線射頻辨識標籤
也就是RFID
臺灣的高速公路上用的ETC
或者是在百貨公司買衣服、買鞋子的時候
上面貼的仿盜標籤
都屬於這類的產品
RFID與其他類似的應用
都需要我們在物品上面加一個裝置
這個裝置需要能夠收集、處理跟儲存本地的資料
之後在需要的時候把資料傳送到雲端
或者是中心化的處理裝置
就像現在我們開車過高速公路
不再需要在收費站停車繳費
ETC會自動從我們的帳戶扣款
其他像是Google文件、YouTube
或是Netflix之類的影音串流服務
都是典型的例子
那我們的手邊的電腦在這樣的場景下面
越來越像是一個本地的終端機
它只需要輕便又能夠上網
其他的功能變得不那麼重要
類似於Chromebook這樣的筆電
就是這種雲端系統的代表之一
但是當本地端的資料太大
或者是網路速度不夠快的時候
這種中心化的系統就很容易出現問題
如果在本地端先對數據做一部分的處理
不但可以減少因為網路造成的延遲
增加安全性
很多時候還可以減少傳輸需要的頻寬
與後端處理的複雜度
那麼本地處理的部分就是邊緣運算的範圍
隨著這幾年人工智慧的興起
把AI合併物聯網
理所當然的進入大家的想像裡面
現今的物聯網
特指結合感測器、軟體
和其他技術的互聯設備
這些邊緣裝置可以與使用者互動
或者是自動化運作
物聯網的裝置負責收集還有傳輸資料
經過大量的資料分析與機器學習
物聯網就可以被升級成
人工智慧物聯網
最終在周邊裝置上提供更準確
而且更精細的輸出
在2021年的時候
世界經濟論壇一份報告裡面
提到了物聯網的未來
作者認為綜合了AI、網路還有大數據
物聯網會進化為人工智慧物聯網
其中有四個領域
包括智慧家庭、穿戴裝置
智慧城市還有智慧產業
會是未來的趨勢
當然每個領域都有他們各自的挑戰
在這個影片裡面
我們要針對穿戴裝置這個部分
來稍微做介紹
無論物聯網有沒有人工智慧的加成
它的核心都是邊緣運算
相較於雲端運算
邊緣運算在數據安全與延遲上
有明顯的優勢
但是運算的精確度
還有系統的擴展性
會比雲端運算要稍微差一點
在穿戴式的裝置上
制約邊緣運算性能
主要有兩個
其中一個是尺寸
另外是功耗
畢竟沒有人能夠隨身攜帶
一個超大的裝置
然後到處找地方幫它充電
在周邊裝置上加上AI
聽起來是一個很美好的想像
但是這裡面有一個問題
AI晶片需要佔用到周邊裝置的空間
更不要說運算AI
產生的熱量還有耗電
都非常的驚人
這些都制約了AI在穿戴式周邊裝置上的應用
如果考慮到尺寸跟功耗的限制
把常見的神經網路放在GPU上面
運行在周邊裝置
顯然不是一個很好的主意
我們需要一個更小、更省電的神經網路
這兩個條件都是SNN的強項
神經網路在歷史上大致可以分為三代
第一代是以Perceptron為代表的神經網路
它的輸入跟輸出通常會比較簡單
層數也相對的少
第二代就是我們現在最常用到的神經網路
常見的CNN、RNN
甚至大語言模型都屬於這一類
那我在後面影片裡面
會用ANN來統稱第二代的神經網路
在研究與訓練大型神經網路的時候
很多人都提出了一個質疑
人類的大腦作為最先進的神經網路
消耗的功率大約只有20瓦
這樣的瓦數
連一個亮一點的白熱燈泡都點不起來
相比之下
任何一張GPU的耗電功率都是幾百瓦
訓練一個大型的神經網路
動輒就需要用到幾萬張顯示卡
訓練的費用從幾十萬到幾千萬美金不等
很明顯
我們用的神經網路模型效率非常差
右邊這張圖是訓練幾個大型神經網路費用的估計
這個費用包含了硬體還有電費
我們可以看到從2015年開始
這個費用就呈指數級的上漲
最近的Gemini Ultra訓練費用
估計在1.9億美金左右
這樣的效率顯示
我們現在廣泛使用的神經網路
有很明顯的缺陷
它們也不可能被應用在小型的邊緣裝置上
那麼出於對人類大腦的模仿
我們有了以SNN為代表的第三代神經網路
SNN裡面每一個神經的運作與訊息的傳遞
更接近於生物的神經
既然SNN運作的方式更接近於生物的神經細胞
我在這裡先簡單介紹一下
生物體內的神經細胞, 還有它們的運作方式
相較於一般的細胞
神經細胞在型態上有顯著的不同
根據功能
神經細胞可以大致分為三個部分
首先是Dendrite
也就是樹突
它是負責接收與運算上游神經傳入的訊號
第二部分是Soma
也就是細胞體
這一部分負責神經基本的生理功能
第三部分是Axon
也就是軸突
這一部分負責訊息的輸出
上下游之間的神經透過Synapses
也就是突觸來相互連接並且傳送訊息
相較於其他的細胞
神經細胞最大的特色在於
細胞膜上具有離子通道
這些通道會消耗能量來改變細胞膜兩側的離子濃度
離子濃度差會讓細胞膜的膜電位產生變化
如果我們將一個很細的玻璃探針插入細胞膜
然後偵測細胞膜兩側的電位差
大部分的時候
膜內外的電位差會落在-65到-70 mV之間
當上游的神經細胞輸入訊息後
細胞膜表面的離子通道會打開
這時候膜電位會發生變化
如果膜電位上升到超過Threshold的時候
細胞膜表面的離子通道會大量的開啟
並且觸發一系列的連鎖反應
這時候會有大量的鈉、鉀和氯離子依序的通過細胞膜
這時候膜電位會在短時間內出現非常劇烈的變化
就像我們在右邊這張圖看到的
這樣的動作電位的變化被稱為神經脈衝
相較於第二代的神經網路
他們著重在模擬突觸對神經的影響
第三代的SNN更著重在模擬神經細胞膜電位的變化
既然SNN是模擬神經細胞膜電位的變化
我們會需要一個模型來計算神經細胞膜電位的變化
在神經科學裡面有非常多的數學模型
可以用來描述膜電位的變化
這張圖列出了幾個我們常見的模型
最右下角的是最精確
但是運算最複雜的Hodgkin-Huxley模型
最左上角的就是運算最簡單
但是最不精確的Integrate-and-fire模型
每一種模型都有它的運用場景
Hodgkin和Huxley是兩位神經科學家
他們在1963年得到諾貝爾醫學獎
最早在1952年的時候
他們就針對主要產生膜電位變化的三個離子的通道
提出過數學模型
我們可以在這裡看到這樣的數學模型
這個數學模型能夠很好的描述膜電位的變化
但是它計算的複雜度很明顯的不適合作為AI運算的模型
在SNN的運算裡面
最常用到的是最簡單的兩個模型
也就是Leaky-Integrate-and-Fire
簡稱LIF Model
或者是Integrate-and-fire
簡稱IF Model
無論是哪一種
它們都去除了不同離子通道對神經元單獨的影響
純粹只針對膜電位的變化做簡單的加總跟運算
左上角的這張圖示是常用到的LIF Neuron的模型
我們可以看到
神經元的膜電位變化在不同時間點
純粹就是上游神經輸入的總和
加上前一個時間點殘餘的膜電位
如果膜電位的總和沒有超過Threshold的時候
它會緩慢的衰退
這個時候神經的輸出是0
當膜電位的總和超過Threshold的時候
神經元的輸出是1
之後膜電位會被Reset
在運行一段時間之後
我們可以看到
在不同的時間點
神經元的輸出只可能是0或1
這兩種組合
這個原理非常容易理解
但是如果我們仔細觀察右邊的數學模型之後
會發現一個問題
這種神經的輸出並不是連續的
而非連續的函數在斷點的地方無法被微分
無法被微分的函數
也就沒有辦法計算Back propagation
也就是說我們在傳統的模型下面
SNN是沒辦法被訓練的
那為了解決SNN沒有辦法被訓練的問題
現在主要有兩種方法
第一種是建立並且訓練一個傳統的模型
並且在建立神經模型的時候
讓它的輸出比較接近於SNN的輸出
訓練完之後
直接將神經網路的權重轉換成SNN
那SNN就不需要再被訓練
這樣的好處是訓練速度快
但是在轉換的過程中精確度會降低
而且為了能夠轉換
使用的神經模型就很容易受到限制
那另外一種方法是用Surrogate Gradient
也就是說利用一個近似的Activation Function
去取代這個非線性的函數
我們可以看到
最常用的方式是Sigmoid Function
比如說Arc tangent
就是一個很常用來做SNN訓練的函數
前面我很簡單的介紹了SNN的原理
透過這些原理
我們可以得到幾個SNN很明顯的優缺點
在優點的部分
因為SNN的運算只出現在
上游神經有動作電位的時候
他不像ANN
在每一個時鐘週期
每一個神經都需要被運算一次
這樣可以顯著的減少運算的次數
當然功耗也就會隨之降低
第二
SNN的網路裡
訊息主要被儲存在
動作定位的時間還有空間的序列裡
當神經元膜電位低於Threshold的時候
訊息就不會被傳遞到下一層
當輸入端出現少量雜訊
這些雜訊不足以觸發動作定位的時候
下游的輸出訊號是不受雜訊的影響的
另外在任意的時間點
訊息都是二進制的型態
如果訊息需要在不同的神經元之間被傳送
需要傳送的訊息量
就比ANN少非常多
那SNN的缺點也很明顯
首先是訓練的複雜性
在SNN訓練的時候
Forward and Backward propagation
需要走不同的路徑
常用的訓練工具如Torch
對SNN並沒有很好的最佳化
其次
要發揮SNN的優勢
最好把它放在專用的硬體晶片裡面
但是現在只有非常少數商業化的晶片可以選擇
每個晶片還有各自的配套軟體
在使用上面比較不方便
那如果要設計專用的SNN晶片
通常需要軟硬體的共同設計
這對設計的團隊要求會稍微高一點
那SNN另外一個問題是
它更擅長處理時間或空間序列的資料
但是常見的Benchmark資料庫
不容易發揮SNN的優勢
當然現在網路上有基於動態視覺感測器
相關的數據集可以用
但是Benchmark的結果在論文裡面還比較少見
最後是SNN的大小
大型而且多層的SNN還是相對的不容易被訓練
而且跟ANN一樣
它一樣會有梯度消失或梯度爆炸的狀況
在訓練的時候要特別注意
大概在最近這十幾年
SNN的研究變得比往年更熱門
在文獻裡面
SNN通常被歸類在仿生模型的一種
這張圖裡列舉了一些仿生模型的晶片
我們可以看到在最近這十幾年
每一張晶片上面能夠模擬的神經元數量
呈現指數級的增長
但是這類的晶片大多停留在學校或公司的研究部門裡面
商用化的產品並不是特別多
在這裡我列出幾個已知的公司或學校發表過的晶片
其中Innatera、BrainChip、SynSense和SpiNNaker都是商業化的產品
有一些還有配套的PCB還有軟件模組可以用
另外Intel的Loihi 2
它可以在網上提交使用方案
在審核通過的之後可以遠端的使用Intel的晶片
由於SNN的特性
SNN特別適合搭配DVS相機的輸入訊號
DVS是一種動態視覺感測器
不同於傳統相機
會固定的擷取整個畫面的光線強度
DVS相機的輸出是不同時間點的差值
如果有一個像素感受到光強度的變化
這個變化會被記錄並且輸出
如果光線強度沒有變化
這個像素是不會輸出訊號的
它輸出的畫面有點像左下角的螢幕
我們可以看到受試者比的手勢
因為手勢的不穩定
所以在手掌邊緣會出現手勢的輪廓
在這篇2020年文章裡面
作者用DVS camera
搭配兩種不同的SNN晶片
來判斷即時影像中的手勢
這兩個晶片分別運行不同的AI模型
除了相機之外
受試者手上還有記錄肌肉活動電流的裝置
來作為另外一組輸入
在這篇文章裡
作者比較了使用SNN與CNN
來判斷手勢的精確度、耗能
還有反應時間的差別
相較於使用顯示卡處理影像的CNN
SNN在判斷手勢精確度的差異上
並沒有明顯的不同
然而Loihi chip消耗的能量
只有GPU的大約2.5%
雖然因為晶片運算時脈比較低
它輸出的時間長了大約10%
但是這個反應時間
在一般的使用場景已經足夠了
另外一個使用ODIN晶片的SNN趨勢也非常類似
判斷手勢的精確度跟CNN非常接近
運算時間較長
但是功耗只有顯示卡的千分之2
其他研究文獻大約都有類似的結論
雖然不同的SNN晶片架構與機制略有不同
但是低功耗的特色主要是沒有變化的
這樣的特性對於穿戴式的周邊裝置
或者是需要長時間待機
並且講究低耗電的邊緣運算
就特別適合
那這部影片的分享就到此為止
如果有問題
希望討論可以在LinkedIn上跟我聯絡
謝謝