在學習或編程深度神經網絡時,最重要的是以矩陣的形式排列數據。而使用Keras就像將數據以矩陣的形式排列並提供給它一樣簡單。沒有必要定義權重和偏差。
本文是為那些想要使用numpy或低級TensorFlow來編寫深度模型的人的指南。
這篇文章描述:
- 我們可以通過多少方式安排輸入數據。
- 增加輸入和權重的不同方法。
- 如何根據輸入數據佈局定義權重和偏差。
- 如何使尺寸正確。
- 推廣上述尺寸問題,根據層計算權重和偏差的尺寸。
矩陣尺寸:
有兩種類型我們可以在矩陣中排列數據:
- 1)將特徵排列為列
- 2)將特徵排列為行
作為列的特徵:
在這種類型中,特徵被排列為列,並且樣本被排列為行。
例如,具有n特徵和1樣本的矩陣如下所示:
這得到了Keras和其他在線教程的支持。
行的特徵:
在這種類型中,特徵排列為行,樣本排列為列。
例如,具有n特徵和1樣本的矩陣如下所示:
這是由Andrew Ng支持的。
矩陣運算:
操作順序取決於我們如何安排數據。
- 如果數據按列排列的特徵: X*W + B
- 如果數據按行排列的特徵: W*X + B
其中,W =權重矩陣,X =輸入矩陣,B =偏差矩陣
如果輸入數據排列發生變化,為什麼公式會發生變化?
我們需要將輸入乘以其相應的權重並將它們全部相加。
簡化為
通常矩陣乘法如下:
注意:為簡單起見,請忽略上圖中的淡黃色圓點。
想象一下,黃色 =輸入,深黃色 =樣品-1和紅色 =權重。(這裡我們按照列排列的特徵)
上圖代表我們的等式:
因此,如果我們將數據排列為列的特徵,我們必須使用X*W+B
同樣的事情適用於排列為行的特徵(只需反轉上述符號,如黃色 =權重,深黃色 =權重對應於樣本-1,紅色 =樣本-1)。
所以,現在我們知道輸入排列如何影響我們需要使用的公式。
矩陣的維數:
與Keras不同,在TensorFlow和Numpy中,我們需要定義每個權重和偏差。
現在,基於輸入維數和輸出維數,我們得到了偏置和權值矩陣的維數。
排列為行的特徵:
首先,我們顯然決定每層中的層數和節點數。
所以,這裡我們已經知道輸入層和輸出層的矩陣尺寸。
即
第0層有4個輸入和6個輸出
第1層有6個輸入和6個輸出
第2層有6個輸入和2個輸出
第3層有2個輸入和2個輸出
現在我們只需要計算權重和偏差的尺寸。
我們考慮作為輸入和輸出維度的排列為列的特徵。
一次,計算機每個線程/核心只能使用1個樣本。
因此,如果我們有1024個內核(GPU),那麼它使用1個樣本x 1024
這是我們的基本等式:我們不知道W&B的維度
我們知道1st Matrix列應該等於2nd Matrix行以執行矩陣乘法。
所以,我們用X的列更新W的行。
接下來,我們更新偏差。我們知道Matrix Addition不會更改生成的Matrix維度。因此,B的維數必須等於得到的矩陣Y.
現在,我們只剩下找到W的列。
我們知道矩陣相乘會改變輸出矩陣的維數。
因此,當我們將X和W相乘時,結果尺寸必須等於B才能執行矩陣加法。
我們得到了Layer-1的尺寸。
對於Layer-2和Layer-3:
最後我們得到了帶有1x2維的輸出Y。
推廣上述方法:
我們可以推廣上述方程式來計算基於層的尺寸。
為此,我們只考慮計算的層和Layer-0不需要任何計算,因為它是輸入層。
如果我們觀察上面的3個方程,我們可以看到模式:
以列排列的特徵:
基本方程式:
對於權重:
對於偏差:
其中n = 1,2,3 ......,輸出層數
排列為行的特徵:
基本方程式:
對於權重:
對於偏差:
其中n = 1,2,3 ......,輸出層數。
我們可以看到“特徵排列為行”的W&B維度只是“以列排列的特徵”的W&B的轉置。
那麼,使用哪一個?功能排列為列或行?
使用按列排列的特徵非常有意義。
因為,默認情況下,W是權重向量,在數學中,向量被視為列,而不是行。
要正確地將兩者相乘並在正確的特徵中使用正確的權重,您必須使用X * W + B :
通過X * W將每個特徵乘以其相應的權重並添加B,您可以在每個預測中添加偏差項。
這就是像Keras這樣的框架使用這種表示法的原因。因此,我們被迫遵循排列為輸入列的特徵。如果我們使用低級TensorFlow,那麼我們可以使用我們想要的符號,因為我們執行計算並明確定義權重和偏差。
閱讀更多 不靠譜的貓 的文章