1、向量鏈式法則
內(nèi)積<x,w>=x^T*w=[x1*w1,x2*w2,...xn*wn]是個標量旦万,標量對向量求導莽红,是向量的轉置維度
2竭业、自動求導
(1)神經(jīng)網(wǎng)絡動不動幾百層嘱兼,很難手動計算
符號求導指把導數(shù)公式求出來国葬。數(shù)值求導指不需要知道具體的f(x)形式。
(2)自動求導怎么做的:計算圖——本質上等價于用鏈式法則求導的過程芹壕。
計算圖是一個無環(huán)的圖
(3)顯示構造:Tensorflow汇四、Theano、MXNet
(4)隱式構造:PyTorch踢涌、MXNet
(4)有了計算圖后通孽,兩種自動求導的方式
前向需要把所有中間值存下來,反向時(那倆灰的導數(shù)如果不需要就可以不算了)睁壁,需要把中間結果拿過來用
反向累積前背苦,需要先正著來一遍計算復雜度0(n)互捌,然后反向累積的計算復雜度O(n)。
反向累積內(nèi)存復雜度高O(n)行剂,因為需要把正向的中間結果儲存下疫剃。所以深度神經(jīng)網(wǎng)絡很耗GPU資源。
下圖中硼讽,上面的正向只反向的第一步,下面的正向指正向累積牲阁。
正向累積的好處是固阁,內(nèi)存復雜度O(1),不管多深城菊,不用存儲中間結果备燃,但是缺點是,每計算一個變量的梯度需要掃一遍O(n)凌唬。所以神經(jīng)網(wǎng)絡中不太用并齐,因為神經(jīng)網(wǎng)絡需要對每一層算梯度,正向累積計算復雜度太高客税。
chapter_preliminaries/autograd.ipynb
x是tensor([0., 1., 2., 3.])况褪。y是一個向量,但是機器學習中很少對一個向量函數(shù)來求導更耻,所以大部分情況都是對標量求導测垛,絕大部分情況,會對y進行一個求和sum再求導秧均。
這是因為機器學習的loss經(jīng)常是一個標量食侮。