?????作者簡(jiǎn)介:一位即將上大四,正專攻機(jī)器學(xué)習(xí)的保研er
??上期文章:機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——圖像分類數(shù)據(jù)集
??訂閱專欄:機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)
希望文章對(duì)你們有所幫助
這篇文章的本意還是再一次復(fù)盤一下向量求導(dǎo)問(wèn)題,很多時(shí)候的例子都直接推著就過(guò)去了,但是重新遇到總會(huì)卡殼一會(huì),因?yàn)橄蛄壳髮?dǎo)問(wèn)題會(huì)分多種情況,所以我們?cè)谶@里特意做個(gè)理解與總結(jié)。
標(biāo)量對(duì)列向量求導(dǎo)
已知列向量x:
x
=
[
x
1
,
x
2
,
.
.
.
,
x
n
]
T
x=[x_1,x_2,...,x_n]^T
x=[x1?,x2?,...,xn?]T
將標(biāo)量y對(duì)x進(jìn)行求導(dǎo),得到:
?
y
?
x
=
[
?
y
?
x
1
,
?
y
?
x
2
,
.
.
.
,
?
y
?
x
n
]
\frac{\partial y}{\partial x}=[\frac{\partial y}{\partial x_1},\frac{\partial y}{\partial x_2},...,\frac{\partial y}{\partial x_n}]
?x?y?=[?x1??y?,?x2??y?,...,?xn??y?]
明明也就只有這么一個(gè)輸出,而行表示輸出,當(dāng)然就是只有一行,而每列就代表每個(gè)偏導(dǎo)。
比如:對(duì)||x||2求導(dǎo):
?
y
?
x
=
2
x
T
\frac{\partial y}{\partial x}=2x^T
?x?y?=2xT
或者y對(duì)<u,v>這個(gè)點(diǎn)積進(jìn)行求導(dǎo),u、v是關(guān)于x的向量,則:
?
y
?
x
=
u
T
?
v
?
x
+
v
T
?
u
?
x
\frac{\partial y}{\partial x}=u^T\frac{\partial v}{\partial x}+v^T\frac{\partial u}{\partial x}
?x?y?=uT?x?v?+vT?x?u?
列向量對(duì)標(biāo)量求導(dǎo)
已知y是列向量,x是標(biāo)量,那么y對(duì)x求導(dǎo)依舊是列向量。
畢竟y是列向量就已經(jīng)說(shuō)明了其具有多個(gè)輸出,自然需要保證導(dǎo)數(shù)以后,輸出的量依舊為那么多。
兩個(gè)向量求導(dǎo)
這邊要講一下分子布局和分母布局的意義:
1、分子布局:分子為列向量,分母為行向量
2、分母布局:分子為行向量,分母為列向量
按照之前的想法來(lái)看,向量對(duì)向量求導(dǎo),那么就先將y的每一行都對(duì)x求導(dǎo),最后把每行的x拓展成多列的行向量,最終會(huì)得到一個(gè)矩陣。
例如:
?
x
T
A
?
x
=
A
T
\frac{\partial x^TA}{\partial x}=A^T
?x?xTA?=AT
我們的輸入也可以拓展到矩陣,原理都一樣
向量鏈?zhǔn)椒▌t
我們從標(biāo)量鏈?zhǔn)椒▌t:
y
=
f
(
u
)
,
u
=
g
(
x
)
則
?
y
?
x
=
?
y
?
u
?
u
?
x
y=f(u),u=g(x)則\frac{\partial y}{\partial x}=\frac{\partial y}{\partial u}\frac{\partial u}{\partial x}
y=f(u),u=g(x)則?x?y?=?u?y??x?u?
拓展到向量:
自動(dòng)求導(dǎo)
計(jì)算圖
將代碼分解為操作子,將計(jì)算表示成一個(gè)無(wú)環(huán)圖
自動(dòng)求導(dǎo)的原理
首先,有兩種求導(dǎo)的方式,一種是從x開始求導(dǎo),叫做正向累積,一種是從最上面的根結(jié)點(diǎn)開始向下求導(dǎo),叫做反向累積也叫做反向傳遞。我們通常用反向累積
1、構(gòu)造計(jì)算圖
2、前向:執(zhí)行圖,存儲(chǔ)中間結(jié)果(如下圖b=a-y,a=<x,w>)
3、反向:從相反方向執(zhí)行圖(要去除不需要的枝)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-616484.html
正向累積和反向累積的對(duì)比
對(duì)于我們常用的反向累積,他的計(jì)算復(fù)雜度是O(n),而內(nèi)存復(fù)雜度是O(n),畢竟前向要走一遍來(lái)存儲(chǔ)各個(gè)中間結(jié)果,所以需要耗費(fèi)內(nèi)存復(fù)雜度(這也就是為什么深度學(xué)習(xí)非常耗費(fèi)GPU)。
而正向累積,計(jì)算復(fù)雜度是O(n),而內(nèi)存復(fù)雜度是O(1),根本不需要存儲(chǔ)中間結(jié)果,由下往上逐個(gè)求導(dǎo)即可。但是正向累積一般不使用,因?yàn)槊看斡?jì)算梯度都要掃一遍。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-616484.html
到了這里,關(guān)于機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——向量求導(dǎo)問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!