天天看點

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

本文是我在閱讀Erik Learned-Miller的《Vector, Matrix, and Tensor Derivatives》時的記錄,點此下載下傳。

本文的主要内容是幫助你學習如何進行向量、矩陣以及高階張量(三維及以上的數組)的求導。并一步步引導你來進行向量、矩陣和張量的求導。

1 簡化、簡化,還是簡化(重要的事情說三遍)

在求解涉及到數組的導數時,大部分的困難是因為試圖一次性做太多事情。比如說同時求解多個組成部分的導數,在求和符号存在的情況下求解導數,或者使用鍊式法則。在有豐富的求導經驗之前,同時執行所有的這些操作,我們就很容易出錯。

1.1 将矩陣計算分解為單個标量的計算

為了簡化給定的計算,我們将矩陣的求導分解為每個單獨标量元素的表達式,每個表達式隻包含标量變量。在寫出單個标量元素與其他标量值的表達式後,就可以使用微積分來計算。這比同時進行矩陣的求和以及求導要容易一些。(看起來有點暈,沒關系,看後面的案例就清晰了)。

In order to simplify a given calculation, it is often useful to write out the explicit formula for a single scalar element of the output in terms of nothing but scalar variables. Once one has an explicit formula for a single scalar element of the output in terms of other scalar values, then one can use the calculus that you used as a beginner, which is much easier than trying to do matrix math, summations, and derivatives all at the same time.
例如:

假設我們有一個

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

階列向量

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

,它是由

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

維矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

階列向量

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

計算得到:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

假設我們計算

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

關于

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的導數。要完完全全的求解導數,就需要計算

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的每一個元素對

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的每一個元素的(偏)導數。那麼在本例中,因為

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中有

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

個元素,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中有

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

個元素,是以一個包含

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

次運算。

比如說,我們要計算

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的第3個元素對

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的第7個元素的(偏)導數,這就是向量中的一個标量對其他向量中的一個标量求導:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

在求導之前,首先要做的就是寫下計算

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的公式, 根據矩陣-向量乘法的定義,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

等于矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的第3行和向量

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的點積。

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

現在,我們将原始的矩陣方程式(1)簡化成了标量方程式。此時再進行求導就簡單多了。

1.2 去除求和符号

雖然可以直接在公式(2)中求導,但是在包含求和符号(

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

)或者連乘符号(

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

)的方程式中求導很容易出錯。在求導之前,最好先去掉求和符号,把各項相加的表達式寫出來,確定每一項不出錯。去掉求和符号的表達式如下所示(下标從1開始):

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

在這個表達式中,我們專門把

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

凸顯出來,這是因為這一項正是我們要求導的項。顯然,可以看出在求

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的偏導數時,我們隻需要關心

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

這一項即可。因為其他項都不包含

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

,它們對

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的偏導數均為0。接下來就很清晰了:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

在求導過程中,隻關注

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的一個量和

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的一個量,能夠把求導過程簡化很多。如果以後進行求導時遇到問題,采取這種方式可以幫助我們把問題簡化至最基礎的程度,這樣便于理清思緒、找出問題所在。

1.2.1 完成求導:雅可比矩陣

我們的最終目标是計算出

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的每個元素對

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中每個元素的導數,共計

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

個。下面的這個雅克比矩陣直覺的表示了這些導數:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

對于公式

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來說,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的偏導數可以用

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來表示。實際上對于所有的

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來說,都有

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

即上述的偏導數矩陣等于:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

顯然,就是

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

本身嘛。

是以,我們最終可以得出,對于

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

對于

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的偏導數為:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

2 行向量的情況

現在關于神經網絡的第三方包特别多,在使用這些包的時候,要特别關注權值矩陣、資料矩陣等的排列。例如:資料矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中包含非常多的向量,每個向量代表一個輸入,那到底是矩陣中的每一行代表一個輸入,還是每一列代表一個輸入呢?

在第一節中,我們介紹的示例中使用的向量

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

是列向量。不過當

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

是行向量時,求導的基本思想是一緻的。

2.1 示例2

在本例中,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

是一個

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

階行向量,它是由

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

階行向量

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

維矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

和計算得到:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

雖然

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的元素數量和之前的列向量是一樣的,但矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

相當于第一節使用的矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的轉置。并且本例中是矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

左乘

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

,而不是之前的右乘。

在本例中,我們同樣可以寫出

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的表達式:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

同樣地,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

注意本例中的

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的下标和第一節中的相反。如果我們寫出完整的雅克比矩陣的話, 我們仍然可以得出完整的求導結果:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

3 次元大于2的情況

讓我們考慮另一個密切相關的情形,如下式:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

在這種情形中,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

沿着一個坐标變化,而

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

沿着兩個坐标變化。是以,整個導數自然是一個三維數組。一般避免使用“三維矩陣”這種術語,因為矩陣乘法和其他矩陣操作在三維數組中的定義尚不明确。

在處理三維數組時,試圖去找到一種展示它們的方法可能帶來不必要的麻煩。直接将結果定義為公式會更簡單一些,這些公式可用于計算三維中的任何元素。

我們繼續從計算标量的導數開始,比如

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的一個元素

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的一個元素

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

。首先要做的還是寫出

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的表達式:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

顯然,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的表達式中沒有起到任何作用,是以,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

同時,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中第3列元素的求導結果是非零的,正如公式(5)中展示的那樣。例如

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的偏導數為:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

一般來說,當

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中元素的下标等于

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中元素的第二個下标時,其偏導數就是非零的,其他情況則為零。整理如下:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

除此之外,三維數組中其他的元素都是0。如果我們用

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來表示

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的導數,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

那麼,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

,其餘的情況等于0

此時如果我們使用一個二維數組

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來表示三維數組

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

可以看出,三維數組

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的全部資料實際上都可以使用二維數組

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來存儲,也就是說,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的非零部分其實是二維的,而非三維的。

以更加緊湊的方式來表示導數數組對于神經網絡的高效實作來說,意義重大。

4 多元資料

前面提到的執行個體中,不論是

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

還是

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

都隻是一個向量。當需要多條資料時,例如多個向量

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

組成一個矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

時,又該如何計算呢?

我們假設每個單獨的

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

都是一個

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

階行向量,矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

則是一個

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的二維數組。而矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

和之前執行個體中的一樣,為

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的矩陣。此時

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的表達式為:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧
二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

是一個

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

列的矩陣。是以,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的每一行給出一個與輸入

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中對應行相關的行向量。按照之前的方式,可以寫出如下表達式:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

從這個方程式可以看出,對于偏導數

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

,隻有當

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的情況下不為0,其他情況均為0。因為

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的每一個元(X_{i,:})素都隻對與

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中對應的那一行求導,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的不同行元素之間的導數均為0。

還可以進一步看出,計算偏導數

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的行沒關系。

實際上,矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

包含了所有的偏導數,我們隻需要根據公式(8)來找到我們想要的某個具體地偏導數。

如果用

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來表示

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的第

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

行,用

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

來表示

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的第

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

行,那麼

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

5 鍊式法則

上面介紹了兩個基本示例和求導方法,本節将上述方法和鍊式法則結合起來。同樣,假設

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

為兩個列向量,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

在計算

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的導數時,我們可以直覺地将兩個矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

的乘積視為另一個矩陣

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

,則

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

但是,我們想明确使用鍊式法則來定義中間量的過程,進而觀察非标量求導是如何應用鍊式法則的。我們将中間量定義為

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

此時,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

那麼在求導時,我們使用鍊式法則:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

為了確定确切地清楚該式的含義,我們還是使用每次隻分析一個元素的方法,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的一個元素對

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的一個元素的導數為:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

鍊式法則的思想是當某個函數由複合函數表示,那麼該複合函數的導師,可以用構成複合函數的各個函數的導數乘積來表示。

如果

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中有M個元素,那麼上式可以寫成:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

回憶一下之前向量對向量的求導方法,我們可以發現,

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

整理可得:

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

至此,我們用

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

二進制函數對xy同時求導_讓向量、矩陣和張量的求導更簡潔些吧

中的元素表示出了求導表達

歡迎關注我的公衆号:一刻AI

http://weixin.qq.com/r/kChDW_bEAbt_raI4932C (二維碼自動識别)