向量,矩陣和張量的導(dǎo)數(shù) | 簡單的數(shù)學(xué)

前段時間看過一些矩陣求導(dǎo)的教程转砖,在看過的資料中须鼎,尤其喜歡斯坦福大學(xué)CS231n卷積神經(jīng)網(wǎng)絡(luò)課程中提到的Erik這篇文章。循著他的思路府蔗,可以逐步將復(fù)雜的求導(dǎo)過程簡化晋控、再簡化,直到發(fā)現(xiàn)其中有規(guī)律的部分姓赤。話不多說赡译,一起來看看吧。


作者:Erik Learned-Miller? ? ?翻譯:橘子? ? ?來源:橘子AI筆記(datawitch)


本文旨在幫助您學(xué)習(xí)向量不铆、矩陣和高階張量(三維或三維以上的數(shù)組)的求導(dǎo)方法蝌焚,以及如何求對向量、矩陣和高階張量的導(dǎo)數(shù)誓斥。

01.?簡化只洒,簡化,再簡化

在求關(guān)于數(shù)組的導(dǎo)數(shù)時劳坑,大部分困惑都源自于我們想要一次同時做好幾件事毕谴。這“幾件事”包括同時對多個元素求導(dǎo)、在求和符號下求導(dǎo)以及應(yīng)用鏈?zhǔn)椒▌t距芬。至少在我們積累豐富的經(jīng)驗之前涝开,想要同時做這么多件事情是很容易犯錯的。

1.1 寫出矩陣中單個元素的表達(dá)式

為了簡化給定的計算蔑穴,有一種方法是:寫出輸出中單個標(biāo)量元素的表達(dá)式忠寻,這個表達(dá)式只包含標(biāo)量變量。一旦寫出了輸出中單個標(biāo)量元素與其他標(biāo)量值的表達(dá)式存和,就可以使用標(biāo)量的微積分求導(dǎo)方法奕剃,這比同時進(jìn)行矩陣的求和、求導(dǎo)要容易得多捐腿。

例子?假設(shè)我們有一個長度為C的列向量\vec y纵朋,它是由CD列的矩陣W與長度為D的向量\vec x計算得到的:

式(1)

假設(shè)我們想求\vec y\vec x的導(dǎo)數(shù)。完整的求導(dǎo)過程需要計算\vec y中的每一個元素對\vec x中的每一個元素的(偏)導(dǎo)數(shù)茄袖,在這種情況下操软,我們會算出C \times D個元素,因為\vec y中有C個元素而\vec x中有D個元素宪祥。

讓我們先從計算其中一個元素開始聂薪,比如家乘,\vec y中的第3個元素對\vec x中的第7個元素求導(dǎo)。也就是說藏澳,我們要計算

也就是一個標(biāo)量對另一個標(biāo)量求導(dǎo)仁锯。

在求導(dǎo)之前,我們要先寫出\vec y_{3} 的表達(dá)式翔悠。根據(jù)矩陣-向量乘法的定義业崖,矩陣W的第3行與向量\vec x的點(diǎn)積就是\vec y_{3} 的值。

式(2)

此時蓄愁,我們已經(jīng)將原始矩陣方程式(1)簡化為了一個標(biāo)量方程双炕,從而更容易計算所需的導(dǎo)數(shù)。

1.2 去掉求和符號

雖然我們可以嘗試直接求式(2)的導(dǎo)數(shù)撮抓,但包含求和符號或連乘符號的表達(dá)式在求導(dǎo)時很容易出錯妇斤。為了確保萬無一失,在剛開始的時候最好去掉求和符號胀滚,把各項相加的表達(dá)式寫出來趟济。我們可以寫出以下表達(dá)式乱投,下標(biāo)由“1”開始

當(dāng)然咽笼,這個表達(dá)式中包括了含有\vec x_{7} 的項,這一項正是我們求導(dǎo)需要的項∑蒽牛現(xiàn)在不難看出剑刑,在求\vec y_{3} \vec x_{7} 的偏導(dǎo)數(shù)時,我們只關(guān)心這個表達(dá)式中的一項双肤,W_{3,7} \vec x_{7} 施掏。由于其他項都不包括\vec x_{7} ,他們對\vec x_{7} 的導(dǎo)數(shù)都是0茅糜。由此七芭,我們寫出

式(3)-式(6)

通過把關(guān)注點(diǎn)放在\vec y中的一個元素對\vec x中的一個元素的求導(dǎo)過程,我們盡可能地簡化了計算蔑赘。以后當(dāng)你在矩陣求導(dǎo)計算中產(chǎn)生困惑時狸驳,也可以試著將問題簡化到這個最基本的程度,這樣便于看清哪里出了問題缩赛。

1.2.1 完成求導(dǎo):雅可比矩陣

別忘了耙箍,我們的終極目標(biāo)是計算\vec y中每個元素對\vec x中每個元素的導(dǎo)數(shù),這些導(dǎo)數(shù)總共有C\times D個酥馍。以下矩陣可以表示所有這些導(dǎo)數(shù):

在這種特殊情況下辩昆,它被稱為雅可比矩陣(Jacobian maxtirx),但這個術(shù)語對理解我們的目的而言并不那么重要旨袒。

注意汁针,對于公式

\vec y_{3} \vec x_{7} 的偏導(dǎo)數(shù)可以簡單地用W_{3,7} 來表示术辐。如果挨個兒檢查整個矩陣中的所有元素,就不難發(fā)現(xiàn)施无,對所有的i和j來說术吗,都有

也就是說,偏導(dǎo)數(shù)的矩陣可以表示為

現(xiàn)在可以看出帆精,這個矩陣當(dāng)然就是矩陣W本身较屿。

因此,推導(dǎo)了這么半天卓练,我們終于能得出隘蝎,對

\vec y\vec x的導(dǎo)數(shù)相當(dāng)于

2.?如果是行向量該怎么算

在使用不同的神經(jīng)網(wǎng)絡(luò)庫時,留意權(quán)重矩陣襟企、數(shù)據(jù)矩陣等矩陣的具體表達(dá)形式是非常重要的嘱么。例如,如果一個數(shù)據(jù)矩陣X包含許多不同的向量顽悼,那么曼振,在這個矩陣中,是一個行向量表示數(shù)據(jù)集中的一個樣本蔚龙,還是一個列向量表示一個樣本冰评?

在第一部分的例子中,我們計算的向量\vec x是一個列向量木羹。然而甲雅,當(dāng)\vec x是行向量的時候你也得明白該怎么算。

2.1 第二個例子

假設(shè)\vec y是含有C個元素的行向量坑填,它是由含有D個元素的行向量\vec xDC列的矩陣W計算得到的:

雖然\vec y\vec x中的元素數(shù)量都和之前一樣抛人,但矩陣W的形狀相當(dāng)于我們在第一個例子中使用的矩陣W轉(zhuǎn)置(transpose)。尤其是因為我們現(xiàn)在是矩陣W左乘\vec x脐瑰,而不是之前的右乘妖枚,現(xiàn)在的矩陣W必須是第一個例子中矩陣W的轉(zhuǎn)置。

在這個例子中苍在,寫出\vec y_{3} 的表達(dá)式

會得到

注意這個例子中的元素序號與第一個例子中相反绝页。如果寫出完整的雅可比矩陣,我們?nèi)匀豢梢缘贸?/p>

式(7)

3.?超過二維的情形該怎么算

現(xiàn)在假設(shè)一個與前兩部分密切相關(guān)的情形忌穿,如下式

在這個情況下抒寂,\vec y沿一個坐標(biāo)軸變化,而W沿兩個坐標(biāo)軸變化掠剑。因此屈芜,整個導(dǎo)數(shù)自然會是一個三維數(shù)組。在這里,我們避免使用“三維矩陣”這樣的術(shù)語井佑,因為尚不清楚矩陣乘法和其他矩陣運(yùn)算在三維數(shù)組中是如何定義的属铁。

在處理三維數(shù)組的時候,嘗試去找出展示它們的方法可能會帶來不必要的麻煩躬翁。相反焦蘑,我們應(yīng)該簡單地用表達(dá)式寫出結(jié)果,用這些表達(dá)式可以計算出所需三維數(shù)組中的任何元素盒发。

讓我們繼續(xù)以標(biāo)量導(dǎo)數(shù)的計算開始例嘱,比如\vec y中的一個元素\vec y_{3} W中的一個元素W_{7,8} 。我們先用其他標(biāo)量寫出\vec y_{3} 的表達(dá)式宁舰,這個表達(dá)式還要體現(xiàn)出W_{7,8} 在其計算中所起的作用拼卵。

然而,我們發(fā)現(xiàn)W_{7,8} \vec y_{3} 的計算中沒有起到任何作用蛮艰,因為

式(8)

也就是說

不過腋腮,\vec y_{3} W中第3列元素求導(dǎo)的結(jié)果一定是非零的。例如\vec y_{3} W_{2,3} 的偏導(dǎo)數(shù)為

式(9)

其實仔細(xì)看式(8)就很容易發(fā)現(xiàn)這一點(diǎn)壤蚜。

一般情況下即寡,當(dāng)\vec y中元素的下標(biāo)等于W中元素的第二個下標(biāo)時,這個偏導(dǎo)數(shù)就是非零的袜刷,反之則為零聪富。我們由此寫出:

除此以外,三維數(shù)組中的其他元素都是0水泉。如果用F表示\vec yW求導(dǎo)得出的三維數(shù)組

其中

但是F中的其他項都為0善涨。

最終,如果我們定義一個新的二維數(shù)組G

就可以看出草则,我們需要的所有關(guān)于F的信息實際上都可以用G來儲存,也就是說蟹漓,F的非零部分其實是二維的炕横,而不是三維的。

以緊湊的形式表示導(dǎo)數(shù)數(shù)組對于神經(jīng)網(wǎng)絡(luò)的高效實現(xiàn)而言至關(guān)重要葡粒。

4.?有多條數(shù)據(jù)該怎么算

前面的例子已經(jīng)是很好的求導(dǎo)練習(xí)了份殿,但如果需要用到多條數(shù)據(jù),也就是多個向量\vec x堆疊在一起構(gòu)成矩陣X時嗽交,又該如何計算呢卿嘲?我們假設(shè)每個單獨(dú)的\vec x都是一個長度為D的行向量,矩陣X是一個ND列的二維數(shù)組夫壁。而矩陣W拾枣,和之前的例子一樣,是一個DC列的矩陣。Y的定義如下

它是一個NC列的矩陣梅肤。因此司蔬,Y的每一行將給出一個與輸入X的相應(yīng)行相關(guān)的行向量。

按照我們寫出給定元素表達(dá)式的方法姨蝴,可以寫出

我們馬上就能從這個式子中看出俊啼,對于偏導(dǎo)數(shù)

只有a = c的時候計算結(jié)果才不為零。也就是說左医,因為Y中的每一個元素都只對X中相應(yīng)的那一行求導(dǎo)授帕,YX的不同行之間的偏導(dǎo)數(shù)都為0。

我們可以進(jìn)一步發(fā)現(xiàn)

式(10)

完全不依賴于我們比較的是YX的哪一行浮梢。

事實上豪墅,矩陣W完整包含了所有的偏導(dǎo)數(shù)——我們只需要根據(jù)式(10)和下標(biāo)來找到我們想要的特定偏導(dǎo)數(shù)。

如果用Y_{i,:} 表示Y中的第i行黔寇,用X_{i,:} 表示X中的第i行偶器,可以發(fā)現(xiàn)

正是對之前式(7)的一個簡單的普遍化形式。

5.?向量和矩陣中的鏈?zhǔn)椒▌t

我們已經(jīng)通過幾個例子學(xué)會了一些基本形式的計算缝裤,現(xiàn)在通過鏈?zhǔn)椒▌t把這些例子結(jié)合在一起屏轰。再次假設(shè)\vec y\vec x是兩個列向量,讓我們從下式開始

嘗試計算\vec y\vec x的導(dǎo)數(shù)憋飞。我們可以簡單地觀察到兩個矩陣VW的乘積就是另一個矩陣U霎苗,因此可以寫出

然而,我們想通過鏈?zhǔn)椒▌t來定義中間結(jié)果榛做,以觀察在非標(biāo)量求導(dǎo)過程中是如何應(yīng)用鏈?zhǔn)椒▌t的唁盏。

我們把中間結(jié)果定義為

于是有

然后我們可以運(yùn)用鏈?zhǔn)椒▌t寫出

為了確保我們確切地知道該式的含義,再次采用每次分析一個元素的老辦法检眯,從\vec y中的一個元素和\vec x中的一個元素開始:

右邊的乘積該怎么解釋呢厘擂?鏈?zhǔn)椒▌t的思想是將\vec y_{i} 每個標(biāo)量中間變量的導(dǎo)數(shù)與中間變量對\vec x_{j} 的導(dǎo)數(shù)相乘。特別地锰瘸,如果\vec mM個元素刽严,那么可以寫出

回憶之前關(guān)于向量對向量求導(dǎo)的計算方法,發(fā)現(xiàn)

其實是V_{i,k} 避凝,而

其實是W_{k,j} 舞萄。所以可以寫出

這就是用VW中的元素寫出的求導(dǎo)表達(dá)式,至此我們得出了答案管削。

綜上所述倒脓,我們可以用鏈?zhǔn)椒▌t來表示向量和矩陣的導(dǎo)數(shù),只需要注意:

清楚說明中間結(jié)果和表示中間結(jié)果的變量含思,

表示出最終導(dǎo)數(shù)中各個元素的鏈?zhǔn)椒▌t崎弃,

對鏈?zhǔn)椒▌t表達(dá)式中的中間結(jié)果適當(dāng)求和。


參考資料:

http://cs231n.stanford.edu/vecDerivs.pdf

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吊履,隨后出現(xiàn)的幾起案子安皱,更是在濱河造成了極大的恐慌,老刑警劉巖艇炎,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌伊,死亡現(xiàn)場離奇詭異,居然都是意外死亡缀踪,警方通過查閱死者的電腦和手機(jī)居砖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驴娃,“玉大人奏候,你說我怎么就攤上這事〈匠ǎ” “怎么了蔗草?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疆柔。 經(jīng)常有香客問我咒精,道長,這世上最難降的妖魔是什么旷档? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任模叙,我火速辦了婚禮,結(jié)果婚禮上鞋屈,老公的妹妹穿的比我還像新娘范咨。我一直安慰自己,他們只是感情好厂庇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布渠啊。 她就那樣靜靜地躺著,像睡著了一般宋列。 火紅的嫁衣襯著肌膚如雪昭抒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天炼杖,我揣著相機(jī)與錄音,去河邊找鬼盗迟。 笑死坤邪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罚缕。 我是一名探鬼主播艇纺,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了黔衡?” 一聲冷哼從身側(cè)響起蚓聘,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盟劫,沒想到半個月后夜牡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侣签,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年塘装,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影所。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹦肴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猴娩,到底是詐尸還是另有隱情阴幌,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布卷中,位于F島的核電站矛双,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仓坞。R本人自食惡果不足惜背零,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望无埃。 院中可真熱鬧徙瓶,春花似錦、人聲如沸嫉称。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽织阅。三九已至壳繁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荔棉,已是汗流浹背闹炉。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留润樱,地道東北人渣触。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像壹若,于是被迫代替她去往敵國和親嗅钻。 傳聞我的和親對象是個殘疾皇子皂冰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容