神經網路如何在電腦裡表示
你可能會好奇, 神經網路這樣的計算模型, 要怎麼在電腦裡表示呢? 是要造出很多個用電路來模擬神經元, 然後用很多導線把它們連起來嗎? 確實有這樣的嘗試, 類腦計算就是這樣的嘗試,但是那需要徹底修改神經網路的工作方法,這還需要時間來等技術成熟。 對於現在通行的神經網路則不可行, 當然你如果剛好有個幾百億閒錢,同時台積電也願意接你的單, 那麼你當然可以這麼做。 但是這樣的電路, 不但造價昂貴, 而且非常耗電, 也不太有彈性。
神經網路在電腦裡的表示方式, 其實是線性代數裡講到的矩陣(matrix)。 如果神經網路是一個外送平台,那麼:
-
輸入值(x)就像是顧客的訂單資訊(3個人點餐)
-
權重(W)就像是外送員的配送路線(連接3x4和4x2的路線圖)
-
輸出值(y)就像是最終送達的結果(2個配送點)
用我們之前討論的3x4x2網路為例:
x_1 \\ x_2 \\ x_3 \end{bmatrix}$$ 第一層權重矩陣(就像外送路線表): $$\mathbf{W_1} = \begin{bmatrix} w_{11} & w_{12} & w_{13} & w_{14} \\ w_{21} & w_{22} & w_{23} & w_{24} \\ w_{31} & w_{32} & w_{33} & w_{34} \end{bmatrix}$$ 第二層權重矩陣: $$\mathbf{W_2} = \begin{bmatrix} w_{11} & w_{12} \\ w_{21} & w_{22} \\ w_{31} & w_{32} \\ w_{41} & w_{42} \end{bmatrix}$$ 最終輸出: $$\mathbf{y} = \begin{bmatrix} y_1 \\ y_2 \end{bmatrix}$$ 這就像是外送員的配送過程: > 1\. 接單:讀取輸入值 $\mathbf{x}$\ > 2. 規劃路線:乘上權重矩陣 $\mathbf{W_1}$\ > 3. 中轉站處理:加上偏差值並通過激活函數\ > 4. 最後一哩路:乘上 $\mathbf{W_2}$ 得到最終結果 用數學來說就是: $$\mathbf{y} = f(\mathbf{W_2} \cdot f(\mathbf{W_1} \cdot \mathbf{x} + \mathbf{b_1}) + \mathbf{b_2})$$ 其中 $f$ 是我們的激活函數,就像是外送員的「智慧判斷」:要不要繞路、要不要走捷徑等。 而 $\mathbf{b_1}$ 和 $\mathbf{b_2}$ 是偏差值,就像是外送員的「個人習慣」: - $\mathbf{b_1}$ 是第一層的偏差值: $$\mathbf{b_1} = \begin{bmatrix} b_1 \\ b_2 \\ b_3 \\ b_4 \end{bmatrix}$$ 就像是外送員的「基本配送時間」,不管訂單內容如何,都會加上這個基本時間。 - $\mathbf{b_2}$ 是第二層的偏差值: $$\mathbf{b_2} = \begin{bmatrix} b_1 \\ b_2 \end{bmatrix}$$ 就像是最終配送點的「固定處理時間」,比如電梯等待時間、找零錢時間等。 這些偏差值的作用就像是「調味料」,讓神經網路能更靈活地適應各種情況。沒有它們,就像是餐廳只能照菜單的配方來煮,加了它們,就能根據客人的口味來調整! 這樣的矩陣運算方式有什麼好處呢? - 非常快:矩陣運算可以利用GPU平行處理的特性,大幅提升計算速度。 - 非常整齊:所有數據都排得整整齊齊 - 好擴展:想加更多層或神經元?矩陣輕鬆搞定!