機器之心最幹的文章:機器學習中的矩陣、向量求導

2020-12-07 仙音燥物

本文的目標讀者是想快速掌握矩陣、向量求導法則的學習者,主要面向矩陣、向量求導在機器學習中的應用。因此,本教程而非一份嚴格的數學教材,而是希望幫助讀者儘快熟悉相關的求導方法並在實踐中應用。另外,本教程假定讀者熟悉一元函數的求導。

本文公式太多,微信上展示會有一些問題。所以本文適合讀者了解矩陣、向量求導,而詳細地學習與分析請下載本文的PDF版。

PDF 下載地址:https://pan.baidu.com/s/1pKY9qht

所謂矩陣求導,本質上只不過是多元函數求導,僅僅是把把函數的自變量以及求導的結果排列成了矩陣的形式,方便表達與計算 而已。複合函數的求導法則本質上也是多元函數求導的鏈式法則,只是將結果整理成了矩陣的形式。只是對矩陣的每個分量逐元素 地求導太繁瑣而且容易出錯,因此推導並記住一些常用的結論在實踐中是非常有用的。

矩陣求導本身有很多爭議,例如:

對於求導結果是否需要轉置?

不同教材對此處理的結果不一樣,這屬於不同的 Layout Convention。本文以不轉置為主,即求導結果與原矩陣/向量同型,術語叫 Mixed Layout。

矩陣對向量、向量對矩陣、矩陣對矩陣求導的結果是什麼?

最自然的結果當然是把結果定義成三維乃至四維張量,但是這並不好算。也有一些繞彎的解決辦法 (例如把矩陣抻成一個 向量等),但是這些方案都不完美 (例如複合函數求導的鏈式法則無法用矩陣乘法簡潔地表達等)。在本教程中,我們認為,這三種情形下導數沒有定義。凡是遇到這種情況,都通過其他手段來繞過,後面會有具體的示例。

因此,本教程的符號體系有可能與其他書籍或講義不一致,求導結果也可能不一致 (例如相差一次矩陣轉置,或者是結果矩陣是否平鋪成向量等),使用者需自行注意。另外,本教程中有很多筆者自己的評論,例如關於變形的技巧、如何記憶公式、如何理解其他的教程中給出的和本教程中形式不同的結果等。

文中如有錯漏,歡迎聯繫 ruanchong_ruby@163.com,我會儘快訂正。

符號表示

標量用普通小寫字母或希臘字母表示,如

等。

向量用粗體小寫字母或粗體希臘字母表示,如 x 等,其元素記作

(注意這裡

沒有加粗。加粗的小寫字母加下標,例如

等,表示這是兩個不同的常數向量)。向量默認為列向量,行向量需要用列向量的轉置表示,例如

等。

矩陣用大寫字母表示,如A 等,其元素記作

(注意這裡 a 用的是小寫字母。大寫字母加下標,例如

等,表示不同 的常數矩陣)。

用字母表中靠前的字母 (如 a,b,c等) 表示常量,用 f,g,h 或字母表中靠後的字母 (如u,v等)等表示變量或函數。

有特殊說明的除外。

綜上所述,本文進行如下約定:

矩陣/向量值函數對實數的導數:

要點:求導結果與函數值同型,且每個元素就是函數值的相應分量對自變量

求導

若函數

,則

也是一個 m×n 維矩陣,且

,也可用劈形算子將導數記作

,或記作

由於向量是矩陣的特殊情形,根據上面的定義也可以得到自變量為向量時的定義:若函數

,則

是一個 m 維向量,且

。若函數值

是行向量則結果為行向量,可記作

;若函數值 f 是列向量則求導結果為列向量,可記作

注:本文開頭即說明過,變量為向量時僅僅是將其看作多個實數,無所謂行向量與列向量之分。這裡用行向量或列向量的 說法僅僅為了把公式用矩陣相乘的方式表示出來方便,因為在數學公式總要指定向量是行向量或者列向量中的某一個,才能與公式裡的其他部分做矩陣運算時維度相容。下同。

實值函數對矩陣/向量的導數:

要點:求導結果與自變量同型,且每個元素就是f對自變量的相應分量求導

若函數

,則

也是一個 m×n 維矩陣,且

也可使用劈形算子將導數記作

由於向量是矩陣的特殊情形,根據上面的定義也可以得到自變量為向量時的定義:若函數

,則

也是一個 m 維向量,且

。若函數值

是行向量則結果為行向量,可記作

;若函數值 f 是列向量則求導結果為列向量,可記作

向量值函數對向量的導數(雅克比矩陣 ):

若函數

,則

是一個 m×n 維矩陣,且

。用劈形算子表示時可記作

注:如前所述,本教程僅僅是把變量都看成多個實數,無所謂行與列之分,因此在表述從向量

的雅克比矩陣時,不區分 x 或者 f 到底是行向量還是列向量,統一用

表示,維度也都是m-by-n。有些教程可能會區分 行對列、列對列、行對行、列對行幾種不同情形的求導,認為有些結果相差一個轉置,有些組合不能求導等等。本教程則認為只有一種求導結果,就是雅克比矩陣。

有一點需要注意的是,若f退化成標量

,則 x 到 f 的雅克比矩陣

是一個行向量,是梯度 (列向量) 的轉置,即

。注意這裡使用的記號:左邊 f 加粗,是把它看做一個長度為 1 的向量,表示求向量 x 到向量 f 的雅克比矩陣;右邊

為普通字體,表示實函數

對向量 x 的導數。

劈形算子

:

在求導的變量比較明確時,可以省略劈形算子的下標寫成

劈形算子和偏導數兩種記號大體上可以認為是相同的,只不過在涉及到變量分量的推導過程 (例如用鏈式法則推神經網絡 的 BP 算法) 中,偏導數那一套符號更加常用;而劈形算子的優勢是書寫簡單,在對傳統的機器學習模型的目標函數求導 時,劈形算子有時更常用。

對於一個實函數

,其梯度記為

,也可記作gradf,是一個m 維向量。Hessian 矩陣記為

,其中

,是一個m×m的矩陣。根據上述定義可以發現,Hessian 矩陣其實是 X 到

的雅克比矩陣,因此

不光是一個形式記號,而是可以用

來計算。

註:某些教材區分對行向量和列向量求導,認為 Hessian 矩陣是先對行向量

求導,再對列向量X求導(或者反過來),因此寫作

(或者

)。

對於一個實函數

,其梯度規定為 m×n 維矩陣

,Hessian 矩陣不作定義。

對上述約定的理解

對於實值函數 f,上面的定義滿足轉置關係(f 對某個變量和其轉置的導數互為轉置):即:(其中 x 代表任意維度的向量或矩陣)。

函數增量的線性主部與自變量增量的關係:

實值函數對矩陣/向量的導數:

,此式用到的技巧非常重要:兩個同型矩陣對應元素相乘再求和時常用上面第二個等式轉化為跡,從而簡化表達和運算。從另一個角度講,這是矩陣導數的另一種定義。即:對於函數

,若存在矩陣 A,使得

時(||*|| 為任意範數),成立

,則定義

。矩陣乘積的跡是一個線性算子。事實上,如果有兩個同型矩陣 A、B,他們的內積即定義為 <A, B> = tr(A^T * B)。容易驗證,向量內積也符合這個定義,因此此式可以看成是向量內積的推廣。

實值函數對矩陣/向量的導數:,此式右邊是向量內積,可看做前一個式子的退化情形。

向量值函數對向量的導數:

,此式即為重積分換元時用於坐標變換的Jacobian矩陣。

變量多次出現的求導法則

規則:若在函數表達式中,某個變量出現了多次,可以單獨計算函數對自變量的每一次出現的導數,再把結果加起來。

這條規則很重要,尤其是在推導某些共享變量的模型的導數時很有用,例如 antoencoder with tied weights(編碼和解碼部分的權重矩陣互為轉置的自動編碼器)和卷積神經網絡(同一個 feature map 中卷積核的權重在整張圖上共享)等。

舉例(該規則對向量和矩陣也是成立的,這裡先用標量舉一個簡單的例子):假設函數表達式是

,可以先把三個 x 看成三個不同的變量,即把 f 的表達式看成

,然後分別計算

,最後總的導數就是這三項加起來:

,此時再把 x 的下標抹掉並化簡,就得到 6x+1。熟悉這個過程之後,可以省掉添加下標再移除的過程。

如果用計算圖(computation graph,描述變量間依賴關係的示意圖,後面會舉例)的語言來描述本條法則,就是:若變量 x 有多條影響函數 f 的值的路徑,則計算

時需要對每條路經求導最後再加和。 如果想更多地了解計算圖和反向傳播,推薦閱讀 [Colah 君的文章](http://colah.github.io/posts/2015-08-Backprop/)。其中詳細講述了計算圖如何工作,不僅講反向傳播還講了前向傳播(前向傳播對於目前的機器學習算法來說似乎沒有太大的用處,但是對於加深計算圖的理解很有幫助。RNN 有一種學習算法叫 RTRL 就是基於前向傳播的,不過近年來不流行了)。

有了上面的基礎,我們就可以推導 Batch normalization(以下簡稱 BN)的求導公式了。 BN 的計算過程為:

其中 m 是批的大小,x_1 到 x_m 分別是 m 個不同樣本對於某個神經元的輸入,l 是這個批的總的損失函數,所有變量都是標量。求導的第一步是畫出變量依賴圖,如下所示(根據左邊的變量可以計算出右邊的變量,如果為了強調,也可以在邊上添加從左向右的箭頭):

左側,右上,右下分別是三種不同的畫法(讀者也可以嘗試其他的畫法):左邊的圖是把所有變量 x_i 都畫了出來,比較清楚,如果想不清楚變量之間是如何相互依賴的,這樣畫可以幫助梳理思路;右上是我自創的一種方法,借鑑了概率圖模型中的盤記號(plate notation),把帶下標的變量用一個框框起來,在框的右下角指明重複次數;右下我只畫了一個局部,只是為了說明在有些資料中,相同的變量(如本例中的

)只出現一次,而非像左圖那樣出現多次,從而圖中會出現環。不過要不要複製同一個變量的多個拷貝沒有本質的區別。在右下這種表示法中,如果要求 partial σ^2 除以 partial x_i,需要對

這兩條路徑求導的結果做加和。(事實上,這種帶下標的畫法有點兒醜,因為我們現在的計算圖裡的變量都是標量……如果用 X 表示

組成的向量,計算圖會更簡潔,看起來更舒服。不過這種醜陋的表示對於我們現在的目的已經夠用了。 )

BN 原論文中也給出了反向傳播的公式,不過我們不妨試著自己手算一遍:

x_i hat 影響損失函數只有唯一的路徑

,根據鏈式法則,得到:

λ 影響損失函數有 m 條路徑:對任意一個 i,

都是一條路徑,需要對這些路徑分別求導再加和:

partial l 除以 partial β 的計算與上面類似:

影響損失函數的路徑也有 m 條:

(此處忽略中間變量 y_i,直接把 l 看成的 x_i hat 函數。)所以

。注意求導的時候把

當成一個整體,想像這就是一個字母,而不要把它想成標準差的平方。

影響損失函數共有 2m 條路徑:

(分別對應於右上圖中較短和較長的路徑)。故有:

。其中最後一步的理由是根據

的定義,後一項為零。

影響損失函數有 3 條路徑:

,所以

常用公式

向量求導的鏈式法則

易發現雅克比矩陣的傳遞性:若多個向量的依賴關係為

,則:

證明:只需逐元素求導即可。

,即

元等於矩陣

的 i 行 和 矩陣

的第 j 列的內積,這正是矩陣乘法的定義。

註:將兩項乘積的和轉化成向量內積或矩陣相乘來處理,是很常用的技巧。

雅克比矩陣的傳遞性可以很容易地推廣到多層中間變量的情形,採用數學歸納法證明即可。

若中間變量都是向量,但最後的結果變量是一個實數,例如變量依賴關係形如

,則:

由雅克比矩陣的傳遞性知:

再根據 f 退化時雅克比矩陣和函數導數的關係,有:

以上三式相結合,可以得到如下鏈式法則:

上面的結果顯然也可以推廣到任意多層複合的情形(可用於 RNN 的 BPTT 的推導)。

上面的公式是把導數視為行向量(即以

的形式)給出的。如果需要把導數視為列向量,只需將公式兩邊同時轉置即可。由於實踐中複合一次的情形較常用,這裡只給出將變量視為列向量時複合一次的公式:

,則:

或寫作

這裡再給出一個特例:若變量依賴關係為

,u 和x 維度相同且

僅由

計算出而與 x 的其他分量無關,則易知

是對角陣,所以上面的公式可以化簡為:

其中

表示取對角矩陣 D 的對角線上的元素組成列向量,

表示兩個向量逐元素相乘。

由於最終的結果是兩個向量逐元素相乘,所以也可以交換一下相乘的順序,寫成:

本條規則在神經網絡中也很常用,常見的情形包括但不限於:逐元素地應用激活函數

,以及現代 RNN 單元中的門限操作(以 LSTM 為例:

* 因為依賴關係簡單,本公式也可以直接根據導數逐分量的定義直接推出來:

此即前述公式的分量形式。

記憶:只需記住結果是一堆雅克比矩陣的乘積,相乘的順序根據維度相容原則調整即可(假設每個中間變量的維度都不一樣,看怎麼擺能把雅克比矩陣的維度擺成矩陣乘法規則允許的形式。只要把矩陣維度倒騰順了,公式也就對了。)

註:網絡上各種資料質量參差不齊,在其他教程中時常會見到向量對矩陣求導的表達式。例如介紹 RNN 的梯度消失問題的文章中,經常會見到

這種式子。如果文中出現這個式子是定性的,只是為了說明鏈式法則中出現了很多連乘項導致了梯度消失,那麼讀者也只需定性地理解即可。如果文中出現這個式子是定量的,是為了推導反向傳播的公式,那麼筆者建議讀者用如下兩種方式之一理解:

其一是把

理解成一種簡寫形式:先把 W 抻成一個向量,然後公式中的每一個雅克比矩陣就都可以計算了,最後再把結果向量重新整理成 W 的同型矩陣。但是這種方法非常複雜,因為把 W 抻成向量以後目標函數關於 W 的表達式就變了,很難推導

這個雅克比矩陣。一個具體的算例見《Optimizing RNN performance》(https://svail.github.io/rnn_perf/)一文中最後的推導。(如果你不打算熟練掌握這種方法,只瀏覽一下看看大意即可。相信我,如果你學了本文中的方法,你不會再想用這種把矩陣抻開的方法求導的。)

其二是把最後一項分母中的 W 理解成矩陣 W 中的任一個元素 w_ij,從而上述表達式中的四項分別是向量(此處看作行向量)、矩陣、矩陣、向量(列向量),從而該表達式可以順利計算。但是這也很麻煩,因為得到的結果不是直接關於 W 的表達式,而是關於其分量的,最後還要合併起來。

其他理解方式,恕我直言,基本上都是作者自己就沒弄懂瞎糊弄讀者的。

實值函數對向量求導

未作特殊說明即為對變量 x 求導。

幾個基本的雅克比矩陣:

,特別地,

向量內積的求導法則:

內積是一個實數,因此本節相當於實數對向量求導,結果是與自變量同型的向量。

這是最基本的公式,正確性是顯然的,因為

正確性是顯然的,因為

。另外,也可以用變量多次出現的求導法則結合上一條公式證明。

利用變量多次出現的求導法則以及前面的公式容易證明。另外,若 A 是對稱矩陣,上式右邊可以化簡為 2A_x。

向量內積的求導法則:

利用變量多次出現的求導法則(x 同時在 u、v 中出現)+ 複合函數求導法則(列向量形式)易證。

向量數乘求導公式

推導:

,兩邊逐分量對比一下便知等式成立。

記憶:按兩個標量函數相乘的求導法則記,再注意一下維度相容原理即可。向量數乘的結果還是一個向量,所以此處相當於向量對向量求導,結果是一個雅克比矩陣,形狀為 f 的維度乘 x 的維度。

矩陣跡求導

未作特殊說明即為對 X 求導。跡是一個實數,所以相當於實數對矩陣求導,結果是一個和 X 同型的矩陣。

先回顧一下跡的基本性質:

線性性質:

轉置不變性:

輪換不變性:

特別地,

。注意,輪換不變性不等於交換性。例如:

,但是一般情況下

基本公式:

推導:逐元素求導驗證

:(事實上這個公式就是矩陣導數的另一種定義,前面也有敘述。)

根據此式容易得到另一個式子:

跡方法的核心公式(非常重要):

推導:利用變量多次出現的求導法則:

(X_c 表示將 X 的此次出現視作常數)

這個公式非常重要,在推導最小二乘解等問題上都會遇到。公式的名字是我瞎起的,我不知道它叫什麼名字。

其他與矩陣跡有關的公式

大部分都是上述核心公式的簡單推論,不必強記

推導:

註:將實數看作是 1*1 矩陣的跡是很常用的技巧。

推導:使用跡方法的核心公式。過程略。

推導:將左式的括號相乘展開,然後用上面的關於矩陣跡的公式。

推導同上,只需注意到

即可。特別地,

(此式也可逐元素求導直接驗證)

行列式的求導公式:

實數對矩陣求導,結果是和 X 同型的矩陣。此條證明較繁瑣,大致過程是用逐元素求導+伴隨矩陣的性質推導,過程可參考 math overflow。最好能直接記住。

矩陣求導的鏈式法則

,則:

,或簡寫為

關於維度的說明:X 是矩陣,中間變量 U 也是矩陣(未必與 X 同型),最終結果 y 是實數。因此求導結果是和 X 同型的矩陣。

註:此式似乎用的不多,畢竟這僅僅是對 x_ij 這一個分量求導的結果,很難直接得到對 X 求導的結果。而且這個式子只是最基礎的多元函數複合的鏈式法則而已,沒有得到什麼特別有趣或者重要的結論。

,則:

(等式右邊是實數和矩陣的數乘)

關於維度的說明: X,u,y 分別是矩陣、實數、實數,因此相當於實數對矩陣求導,結果是 X 同型的矩陣。

證明是顯然的,逐元素求導驗證即可:

線性變換的導數(非常重要。由於線性變換很常用,記住此式可以簡化很多公式的推導過程):

設有

及線性映射

(因此

),則:

推導:

,而

是 Kronecker delta 符號:若l=j 值為 1,否則為 0),將後式代入前式,得:

,即矩陣 A^T的第 i 行 和 矩陣

的第 j 列的內積。

向量的線性變換是上式的退化情形,即:

向量的線性變換還可以求二階導:

推導:記

,則

記憶:同上,記住大概的形狀(對線性變換來說,求一次導就是乘一個矩陣),然後根據維度相容原則擺順了就行。

由於線性變換很常用,這裡不妨把給 X 右乘一個矩陣時的公式一併給出,以便查閱:設有

及線性映射

(因此

),則:

證明:若令

,則變量依賴關係變為:

,且

,根據線性變換的求導法則,知:

,所以

記憶:先做線性變換再求導就等於先求導再做線性變換。剩下的細節(如左乘還是右乘等)根據維度相容原則倒騰即可。

註:此式很有用,在神經網絡中,經常有形如

的依賴關係。其中 x 是神經網絡某一層的輸入數據(不是訓練神經網絡時要求導的變量!不過在構造對抗樣本時可能需要對 x 求導), W,b 是該層的參數(這才是訓練神經網絡時要求導的變量),z 是經過變換後預備輸入給下一層的值,l 是最終的損失函數。根據上述線性變換的求導公式,立即可以得到 BP 算法的核心步驟:

。(另註:標準的 BP 算法通常將

定義為變量δ。)

其他公式

這一部分在機器學習中遇到的不多(畢竟常見的情況是求一個標量損失函數對其他變量的導數),不是特別重要,不過偶爾在凸優化裡會碰到一些。這裡收集整理這幾個式子主要是為了資料完整、查閱方便。以下假定 F 是可逆方陣:

自變量和函數值都是實數,求導結果也是實數。推導過程較困難,主要用到了矩陣的雅克比公式(不是雅克比矩陣)。建議記住,或者用時查表。

自變量和函數值都是實數,求導結果也是實數。

推導:根據最基本的一元函數複合的求導法則即可。令

,則:

矩陣對實數求導,結果是和 F^-1 同型的矩陣(也即和 F 同型的矩陣)。

推導:對恆等式

兩邊同時求導,再結合 |F| 的導數易得。

常見技巧及注意事項

實數在與一堆矩陣、向量作數乘時可以隨意移動位置。且實數乘行向量時,向量數乘與矩陣乘法(1x1 矩陣和 1xm 矩陣相乘)的規則是一致的。

遇到相同下標求和就聯想到矩陣乘法的定義,即

。特別地,一維下標求和聯想到向量內積

,二維下標求和聯想到跡

(A,B 應為同型矩陣)。

如果在一個求和式中,待求和項不是實數而是矩陣的乘積,不要想著展開求和式,而要按照上面的思路,看成分塊矩陣的相乘!

向量的模長平方(或實數的平方和)轉化為內積運算:

。矩陣的 F 範數的平方轉化為跡運算:

多個矩陣相乘時,多用矩陣跡的求導公式轉化、循環移動各項。實數也可看成 1X1 矩陣的跡!

需要用到向量(或矩陣)對矩陣求導的情形,要麼把矩陣按列拆開轉化成向量對向量求導(最終很有可能通過分塊矩陣乘法再合併起來。本文後面的算例 PRML(3.33) 說明了這種方法怎麼用),要麼套用線性變換的求導公式(常見於神經網絡的反向傳播過程)。

算例

最小二乘法

方法一:展開括號,再使用幾個常用公式化簡即可:

方法二:使用線性變換的求導公式:

F 範數的求導公式推導

方法一:先轉化為跡,再裂項,最後通過恰當的輪換,用跡方法的核心公式處理。

方法二:用線性變換的求導公式證。(注意矩陣轉置不改變其 F 範數,並且實值函數對 X 和 X_T 的導數互為轉置)

方法三:根據定義逐元素地算,然後合併成向量、再合併成矩陣。(太原始,易出錯,不推薦)

PRML (3.33) 求導

題目:

關於 W 的導數。

說明:上面的

的結果應當是一個向量,但是希臘字母打不出加粗的效果。

方法一:用矩陣的 F 範數推導:

上述幾步的依據分別是:

將若干個列向量拼成一個矩陣,因此它們的二範數平方和就等於大矩陣的 F 範數的平方。

矩陣轉置不改變其 F 範數。

矩陣數乘 (-1) 不改變其 F 範數。

線性變換的求導公式 + F 範數的求導公式。

實數在和矩陣作數乘時位置可以任意移動。

有了導數,再另導數等於零,即得 W 的最大似然解:

方法二: 將向量二範數用內積代替,然後逐項展開,最後利用分塊矩陣相乘消掉求和號:

最後一步的化簡的思考過程是把對 n 求和視為兩個分塊矩陣的乘積:

第一個矩陣是分塊行向量,共 1xN 個塊,且第 n 個分量是

。因此第一個矩陣是

第二個矩陣是分塊列向量,共 Nx1 個塊,且第 n 個分量是

。因此,第二個矩陣是:

,注意第二個等號的推導過程中,前一項能夠拆開是因為它被看做兩個分塊矩陣的乘積,兩個分塊矩陣分別由 Nx1和 1x1 個塊組成。

這種方法雖然比較繁瑣,但是更具有一般性。

RNN 的梯度消失爆炸問題

通常 RNN 的狀態方程的更新定義為

(f 表示一個逐元素的激活函數,例如

等。),而這裡我們採用 Pascanu 等人的論文 On the difficulty of training Recurrent Neural Networks 中的定義,即認為

(這兩種方程其實是等價的,只是前一種表述把隱層狀態定義成激活後的值,後一種表述把隱層狀態定義成激活前的值,前述論文中的腳註裡也有說明。這裡採用後一種方式,是因為它稍微好算一點)。展開後的網絡結構示意圖參見 中的 Slide 15。以下內容建議對照這份講義的 15-19 頁一起觀看(另註:建議用 Stanford 的講義梳理大致的思路,但是按照本講稿下述步驟進行具體的求導運算。個人認為本講稿中的過程更加清楚)。

現在我們來計算損失函數 l 對循環連接的權重矩陣 W 的導數:假設每一時間步都有一個誤差 l_t(例如建立一個語言模型,每一步都要預測下一個詞的概率分布,與語料庫裡的真實值計算交叉熵),總的誤差等於每一步的誤差加起來:

,因此

(對一元函數來說,和的導數等於導數的和。根據多元函數偏導數的定義,很容易推廣到多元函數上,進而推廣到矩陣求導上)。

考慮到矩陣 W 出現了多次,計算

需要計算 l_t 對 W 的每一次出現的導數,然後再求和。若用 W^(k) 表示 h_k-1 與 h_k之間的轉移矩陣 W,則

。其中第二個等號用到的是線性變換的求導公式(類似標準 BP 算法的核心步驟)

然後根據雅克比矩陣的運算規則計算損失函數對隱層的導數

(表示將括號裡的向量變成一個對角矩陣,跟前文的

互為逆運算。):

,再將該式帶入上一步中的式子,就得到

,這就是 vanilla RNN 的 BPTT 的公式。(中間很多個隱層之間的雅克比相乘那一部分可以用求積符號來書寫,這裡的寫法更直觀一些)

註:實踐中具體計算梯度的時候,一般還是先定義一組類似於 BP 神經網絡 δ_t 的變量,使用循環逐層進行求導,而不是強行直接展開。這裡展開是為了理論分析方便。

另註:Stanford 的講義和前述論文中,均認為

,這一點應該是錯的,矩陣 W 不應該被轉置,根據雅克比矩陣的定義寫一個梯度檢查的程序即可快速驗證這一點。

Autoencoder with Tied-weight

求函數

對 W 的導數,其中

是逐元素求 Sigmoid。

根據變量多次出現的求導法則計算即可:

,其中 W_c 的含義是將 W 此次出現看做常數。

上式右邊第一項計算如下:

第二項計算如下:

,其中第三個等號裡定義

最終結果就是將以上兩項合併起來,並去掉所有 W_c 中的下標,從略。

相關焦點

  • 機器學習第一步,從向量和矩陣開始!
    但機器學習的邏輯卻與這完全不同。如果說前者是演繹法,那麼機器學習則是歸納法,對於機器學習模型最重要的,就是理解單位數據本身。我們最有控制權和控制可能性的,是通過獎勵信號訓練模型,讓計算機在自己的推理邏輯下,給出我們想要的答案。這就意味著,在機器學習中,我們需要一個更加靈活的東西,讓機器可以為不同數據之間的聯繫賦予權重,而不僅僅只有指向。
  • 算法中的微積分:5大函數求導公式讓你在面試中脫穎而出
    事實上,所有機器學習算法的本質都是數學問題,無論是支持向量機、主成分分析還是神經網絡最終都歸結為對偶優化、譜分解篩選和連續非線性函數組合等數學問題。只有徹底理解數學,才能正真掌握這些機器學習算法。Python中的各種資料庫能幫助人們利用高級算法來完成一些簡單步驟。
  • 想入門機器學習?機器之心為你準備了一份中文資源合集
    機器之心整理參與:機器之心編輯部機器學習日益廣為人知,越來越多的計算機科學家和工程師投身其中。不幸的是,理論、算法、應用、論文、書籍、視頻等信息如此之多,很容易讓初學者迷失其中,不清楚如何才能提升技能。本文作者依據自身經驗給出了一套快速上手的可行方法及學習資源的分類匯總,機器之心在其基礎上做了增益,希望對讀者有所幫助。
  • 資料| 機器學習中的數學
    以下書籍介紹來自豆瓣內容簡介 · · · · · ·《機器學習中的數學》是一本系統介紹機器學習中涉及的數學知識的入門圖書,本書從機器學習中的數學入門開始,以展示數學的友好性為原則,講述了機器學習中的一些常見的數學知識
  • 另一個角度看矩陣分析
    按照求解線性方程組的思路,矩陣的逆、廣義逆、偽逆、矩陣的秩出現得就自然而然了。求解過程中需要應用到矩陣的滿秩分解,範數等知識。2. 矩陣計算的根本是什麼 當然,計算過程中,不是求解一個線性方程組的解就夠了的。就拿優化問題來說,解決問題的基本思路中要使用求導(求梯度)。
  • 機器學習與數據分析常用術語-基礎篇(一)
    本篇文章將著重介紹機器學習與數據挖掘領域常用的專業術語,希望能在機器學習路上的你帶來幫助,假如你正準備學機器學習或數據挖掘建議你先了解該篇文章後在去學習。一.基礎1.數據集(DataSet)數據集,又稱為資料集、數據集合或資料集合,是一種由數據所組成的集合。程式設計師可以簡單的理解成資料庫表。
  • 教程| 基礎入門:深度學習矩陣運算的概念和代碼實現
    本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注。本文從向量的概念與運算擴展到矩陣運算的概念與代碼實現,對機器學習或者是深度學習的入門者提供最基礎,也是最實用的教程指導,為以後的機器學習模型開發打下基礎。
  • 機器學習 線性代數基礎 | 1.4 矩陣乘向量的新視角:變換基底
    我們即將步入這一章的尾聲,在本章前面的三個小節中,我們學習了矩陣和向量的表示方法以及加法、乘法等基本運算的規則,並能夠熟練利用Python語言工具正確的對其進行描述和表示。但是顯然我們不能僅僅滿足於此,那麼在這一小節裡,我們一起回過頭來靜靜的思考這樣一個問題:矩陣A和列向量x的乘法運算Ax有沒有其他更深層次的幾何含義呢?
  • 矩陣的特徵值與特徵向量
    五、實對稱矩陣特徵分解的性質:        (1) 實對稱矩陣的特徵值都是實數;        (2) 實對稱矩陣A的屬於不同特徵值的特徵向量相互正交;        (3) 設A是n×n的實對稱矩陣,則存在正交陣Q,使為對角陣(正交陣的逆等於其轉置,A有n個線性無關的特徵向量)。
  • 矩陣的瑰寶:深入挖掘特徵值和特徵向量,直觀地看抽象概念
    特徵值和特徵向量可能看起來是很抽象的概念,但它們在你周圍的世界中扮演著不可或缺的角色。因為一切都是由數據定義的,矩陣是處理數據的最佳工具,而它們又是矩陣中的瑰寶,可以揭示矩陣的性質。理解特徵值和特徵向量是什麼,如何推導它們,以及它們的應用,對于欣賞矩陣之美,以及更廣泛地理解數據和數學在世界中扮演的角色,都是不可或缺的。
  • 量子機器學習入門科普:解讀量子力學和機器學習的共生關係
    在這篇文章中,計算機科學碩士Reena Shaw將用通俗的語言和形象的比喻帶你入門量子機器學習。△ 本文作者Reena Shaw在2017年的微軟Ignite大會上,微軟CEO Satya Nadella用玉米迷宮的形象比喻解釋了經典計算機和量子計算機之間的差異——為了找到迷宮的出口,經典計算機先開啟一條搜索路徑,遇到障礙物後會沿原路返回。
  • 矩陣的重要特性:特徵向量
    特別指出的是,核是「變換」(Transform) 中的概念,矩陣變換中有一個相似的概念叫「零空間」。有的材料在談到變換的時候使用T 來表示,聯繫到矩陣時才用A,本文把矩陣直接看作「變換」。核所在的空間定義為V空間,也就是全部向量原來在的空間。
  • 機器學習之sklearn中的降維算法
    雖然是入門算法,卻不代表PCA和SVD簡單:下面兩張圖是我在一篇SVD的論文中隨意截取的兩頁,可以看到滿滿的數學公式(基本是線性代數)。要想給大家講明白這些公式,我講完不吐血大家聽完也吐血了。所以今天,我會用最簡單的方式為大家呈現降維算法的原理,但這註定意味著大家無法看到這個算法的全貌,在機器學習中逃避數學是邪道,所以更多原理大家自己去閱讀。
  • 深度學習和機器學習的線性代數入門
    本文目錄引言機器學習ML和深度學習NN中的線性代數矩陣向量矩陣乘法轉置矩陣逆矩陣正交矩陣對角矩陣正確理解機器學習和深度學習的概念,掌握以下這些數學領域至關重要:機器學習和深度學習中的線性代數在機器學習中,很多情況下需要向量化處理,為此,掌握線性代數的知識至關重要。
  • 417頁《機器學習中的數學》免費開放下載!| 好書分享
    然而,機器學習不等同於深度學習(深度神經網絡),要學好機器學習並不容易。工欲善其事必先利其器,對機器學習而言,這把利器無疑就是數學。AI科技評論今天給大家介紹一本今年由劍橋大學出版社出版的一本新書:《Mathematics for machine learing》~
  • 觀點| 我們該如何學習機器學習中的數學
    選自ycombinator博客,機器之心編譯,作者:Vincent Chen,參與:機器之心編輯部。數學在機器學習中非常重要,不論是在算法上理解模型代碼,還是在工程上構建系統,數學都必不可少。通常離開學校後很難有機會靜下心學習數學知識,因此我們最好能通過閱讀小組或讀書會等形式營造環境,並專注學習那些在實踐中常常需要用到的數學知識。
  • ,用幾何思維理解矩陣的「逆」和向量的「點積」
    這是《機器學習中的數學基礎》系列的第5篇。人的一生總是需要許多「Aha!」(啊哈!)時刻,也就是讓你頓悟的時刻。面對線性代數中複雜的概念和公式,如果我們從幾何的角度去審視它們,就好比我們擁有了上帝視角,可以從大局上掌控它們,也可以更深入的理解它們的內涵。逆先來看矩陣的逆。
  • 【新書推薦】《機器學習及R應用》目錄
    編者薦語:  《機器學習及R應用》終於上市啦!不少讀者想知道《機器學習及R應用》的目錄。這裡附上詳細的二、三級目錄清單,讓我們先睹為快!  以下文章來源於計量經濟學及Stata應用,作者愛計量。  目錄  第1章 緒論  1.1什麼是機器學習  1.2機器學習的分類  1.3機器學習的術語  1.4機器如何學習  1.5機器學習與統計學
  • R語言筆記1:數據類型(向量、數組、矩陣、 列表和數據框)
    而對OTU表開始的組間比較、網絡分析、機器學習等會有上百種方法和展示方式,每一篇優秀的文章,都是數據反覆咀嚼上百次優化出來的結果(3個月-3年),而這一漫長的科研之路有R語言技能的相伴,可將統計分析可視化操作一網打盡,定能助你事半功倍。前期公眾號己分享了擴增子、宏基因組分析流程及可視化文章上百篇,但一直缺少基礎入門的知識。