深度學習:所有矩陣尺寸和計算的深層指南!

深度學習:所有矩陣尺寸和計算的深層指南!

深度神經網絡

在學習或編程深度神經網絡時,最重要的是以矩陣的形式排列數據。而使用Keras就像將數據以矩陣的形式排列並提供給它一樣簡單。沒有必要定義權重和偏差。

本文是為那些想要使用numpy或低級TensorFlow來編寫深度模型的人的指南。

這篇文章描述:

  • 我們可以通過多少方式安排輸入數據。
  • 增加輸入和權重的不同方法。
  • 如何根據輸入數據佈局定義權重和偏差。
  • 如何使尺寸正確。
  • 推廣上述尺寸問題,根據層計算權重和偏差的尺寸。

矩陣尺寸:

有兩種類型我們可以在矩陣中排列數據:

  • 1)將特徵排列為列
  • 2)將特徵排列為行

作為列的特徵:

深度學習:所有矩陣尺寸和計算的深層指南!

特徵排列為列

在這種類型中,特徵被排列為列,並且樣本被排列為行。

例如,具有n特徵和1樣本的矩陣如下所示:

深度學習:所有矩陣尺寸和計算的深層指南!

這得到了Keras和其他在線教程的支持。

行的特徵:

深度學習:所有矩陣尺寸和計算的深層指南!

特徵排列為行

在這種類型中,特徵排列為行,樣本排列為列。

例如,具有n特徵和1樣本的矩陣如下所示:

深度學習:所有矩陣尺寸和計算的深層指南!

這是由Andrew Ng支持的。

矩陣運算:

操作順序取決於我們如何安排數據。

  • 如果數據按列排列的特徵: X*W + B
  • 如果數據按行排列的特徵: W*X + B

其中,W =權重矩陣,X =輸入矩陣,B =偏差矩陣

如果輸入數據排列發生變化,為什麼公式會發生變化?

深度學習:所有矩陣尺寸和計算的深層指南!

Multi-perceptron

我們需要將輸入乘以其相應的權重並將它們全部相加。

深度學習:所有矩陣尺寸和計算的深層指南!

簡化為

深度學習:所有矩陣尺寸和計算的深層指南!

通常矩陣乘法如下:

深度學習:所有矩陣尺寸和計算的深層指南!

矩陣乘法

注意:為簡單起見,請忽略上圖中的淡黃色圓點。

想象一下,黃色 =輸入,深黃色 =樣品-1和紅色 =權重。(這裡我們按照列排列的特徵)

上圖代表我們的等式:

深度學習:所有矩陣尺寸和計算的深層指南!

矩陣乘法

因此,如果我們將數據排列為列的特徵,我們必須使用X*W+B

同樣的事情適用於排列為行的特徵(只需反轉上述符號,如黃色 =權重,深黃色 =權重對應於樣本-1,紅色 =樣本-1)。

所以,現在我們知道輸入排列如何影響我們需要使用的公式。

矩陣的維數:

與Keras不同,在TensorFlow和Numpy中,我們需要定義每個權重和偏差。

現在,基於輸入維數和輸出維數,我們得到了偏置和權值矩陣的維數。

排列為行的特徵:

首先,我們顯然決定每層中的層數和節點數。

深度學習:所有矩陣尺寸和計算的深層指南!

具有2個隱藏層的深度神經網絡

所以,這裡我們已經知道輸入層和輸出層的矩陣尺寸。

第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的行。

深度學習:所有矩陣尺寸和計算的深層指南!

更新W的行維度

接下來,我們更新偏差。我們知道Matrix Addition不會更改生成的Matrix維度。因此,B的維數必須等於得到的矩陣Y.

深度學習:所有矩陣尺寸和計算的深層指南!

更新B的尺寸

現在,我們只剩下找到W的列。

我們知道矩陣相乘會改變輸出矩陣的維數。

因此,當我們將X和W相乘時,結果尺寸必須等於B才能執行矩陣加法。

深度學習:所有矩陣尺寸和計算的深層指南!

更新W的列維度

我們得到了Layer-1的尺寸。

對於Layer-2和Layer-3:

深度學習:所有矩陣尺寸和計算的深層指南!

對於Layer - 2

深度學習:所有矩陣尺寸和計算的深層指南!

對於Layer - 3

最後我們得到了帶有1x2維的輸出Y。

推廣上述方法:

我們可以推廣上述方程式來計算基於層的尺寸。

為此,我們只考慮計算的層和Layer-0不需要任何計算,因為它是輸入層。

如果我們觀察上面的3個方程,我們可以看到模式:

以列排列的特徵:

基本方程式:

深度學習:所有矩陣尺寸和計算的深層指南!

基本公式,用於乘以權重併為排列為列的特徵添加偏差

對於權重:

深度學習:所有矩陣尺寸和計算的深層指南!

用於確定W維數的廣義方程

對於偏差:

深度學習:所有矩陣尺寸和計算的深層指南!

廣義方程決定B的維數

其中n = 1,2,3 ......,輸出層數

排列為行的特徵:

基本方程式:

深度學習:所有矩陣尺寸和計算的深層指南!

基本公式,用於乘以權重併為排列為行的特徵添加偏差

對於權重:

深度學習:所有矩陣尺寸和計算的深層指南!

用於確定W維數的廣義方程

對於偏差:

深度學習:所有矩陣尺寸和計算的深層指南!

廣義方程決定B的維數

其中n = 1,2,3 ......,輸出層數。

我們可以看到“特徵排列為行”的W&B維度只是“以列排列的特徵”的W&B的轉置。

那麼,使用哪一個?功能排列為列或行?

使用按列排列的特徵非常有意義。

因為,默認情況下,W是權重向量,在數學中,向量被視為列,而不是行。

要正確地將兩者相乘並在正確的特徵中使用正確的權重,您必須使用X * W + B :

通過X * W將每個特徵乘以其相應的權重並添加B,您可以在每個預測中添加偏差項。

這就是像Keras這樣的框架使用這種表示法的原因。因此,我們被迫遵循排列為輸入列的特徵。如果我們使用低級TensorFlow,那麼我們可以使用我們想要的符號,因為我們執行計算並明確定義權重和偏差。


分享到:


相關文章: