手動計算矩陣梯度或者矩陣導數

2021-09-11 07:04:59 字數 794 閱讀 6153

機器學習中的引數優化需要做矩陣梯度或者求導,比如在《動手學習深度學習》中的《自動求梯度》

的例子,對函式 y=2x⊤x=2x⊤x ,求關於列向量 x 的梯度。下面用手動推到出矩陣的梯度。

假設x是

[[0.]

[1.]

[2.]

[3.]]

那麼對應的y是28,那麼這個點的梯度或者導數是怎麼計算的?

x的4個元素,讓某乙個元素加1,保持其他元素不變,計算出對應的y的變化。

比如x的第一行加1,x變成

[[1.]

[1.]

[2.]

[3.]]

此時的y變成了30,變化是2=30-28,那麼2/1=2。

類似的,x的第二行加1,x變成

[[0.]

[2.]

[2.]

[3.]]

此時的y變成34,變化是6=34-28,那麼6/1=6。

對x的第3行和第4行進行類似的運算,最終得到在這個點的矩陣梯度是

[[ 2.]

[ 6.]

[ 10.]

[ 14.]]

這樣計算出來,可以看出矩陣梯度就是在多維空間中,函式y對於自變數x的變化率。這樣就好理解了。注意每個點或者樣本的矩陣梯度都不同的。可以對每乙個樣本更新一次引數,但是這樣計算量很大。那麼就出現小批量隨機梯度計算方法。

具體在mini-batch小批量隨機梯度計算中,不是一次計算乙個點的梯度,而是一次計算10個點的梯度,取這10個點梯度的平均值來更新引數,更詳細的解釋可以看《詳解神經網路中矩陣實現的梯度計算》

Jacobian矩陣和梯度矩陣

記號標識 標量 常規小寫字母 向量 加粗的小寫字母 x x1,xm t rm bm x x 1,cdots,x m t in mathbb m x x1 x m t rm 實矩陣 加粗的大寫字母 x x1,xn t rm n bm x bm x 1,cdots,bm x n t in mathbb ...

Matlab計算矩陣和函式梯度

我自己的理解。這就是matlab的計算結果.太小的話放大些 c 4 5 9 7 2 1 5 2 6 x,y gradient c x 1.0000 2.5000 4.0000 5.0000 3.0000 1.0000 3.0000 0.5000 4.0000 y 3.0000 3.0000 8.00...

轉圈列印矩陣或者生成轉圈矩陣

public class class01 j 列往左超出乙個,加回來 k 此時行往回退的話,退到原來的下一行即可,故而k i 行切換到已經填完的上一行 while i k i 行超出邊界回到了原來的行,通過加1切換到原來行的下一行 j 列切換到下一列,相比於開始的時候,相當於從 1,1 切換到了 2...