本文是我在閱讀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 (二維碼自動識别)