AI 人工智慧是一個很龐大的領域,在這篇中,我們的重點會放在「類神經網路」。
模型建立
類神經網路 (Neural Networks) 是達到人工智慧的眾多方法之一,透過多層的神經元以及資料的特殊處理 (如:降維處理、歸一化處理),我們可以得到一個類神經網路的模型。
訓練模型
有了模型,我們要接著訓練 (training) 類神經網路。訓練其實就是將模型內部的參數都找齊,包含眾多的權重 weights、偏移量 biases,由於訓練要耗費許多計算資源,因此這個步驟通常會使用雲端計算,透過租借高算力的機器來完成訓練。
訓練的方式與細節,在這裡提供幾個關鍵字給大家自行搜尋:
loss function
,gradient descent
,backpropagation
推理
推理 (inference) 就是將接收到的輸入,放進模型運算,但是由於類神經網路的參數非常多,因此計算出真正的結果不是那麼容易的。通常我們會修剪網路,降低計算量,並做成可放置在邊緣裝置的晶片,用來加速運算。
上述的步驟可以用數學來比喻,模型就像是一個函數 f(x) = ax^2 + bx + c
根據我們的需求而來的。訓練就是找齊所有參數 a
, b
, c
。最後的使用函數在類神經網路的專有名詞是「推理」。
現今對於類神經網路的主流處理是「雲端訓練,邊緣推理」。而我們要探討的 AI 晶片就是屬於邊緣裝置的靈魂!
我們可以透過兩個面向來降低 AI 晶片計算的複雜度:
減少精度
精度在許多時候都是很重要的,但是對於類神經網路來說,他不見得是必要的。精度過高除了會增加計算量,也要增加硬體的儲存空間,對於晶片計算來說,是很沈重的負擔。
另一種,減少精度的原因是將計算所需的參數微調成 2 的冪,例如,有一個參數是 1022 ,也許我們可以將它改為 1024 ,即 2 的 10 次方。因為我們可以透過位元運算很快速的達到運算結果,更近一步地說,位元運算其實是可以透過更改線路順序來達到,並非真的在做乘法!因此速度加快許多。
減少計算量
訓練出來的參數會被用在神經網路的推理,但是仔細觀察可以發現,部分參數未必可以有效的影響結果,因此這部分的參數就可以被移除,這件事情叫做「網路修剪」。另一種使在模型建立時就要決定的「激活函數的選擇」,以 ReLU 這個函數來說,他會將負數都改為 0 ,這個行為的好處是可以減少許多計算量,以矩陣的觀點來看,權重矩陣可以視為一個稀疏矩陣。