前言
关于函数求导大部分人都懂得如何求,但基本都是单变量对单变量和多变量对单变量的求导,在机器学习(深度学习)中经常性要用到向量对向量,矩阵对向量的求导等,掌握这些求导法则也是十分必要的。
本文将由简入繁,讲述如何矩阵、向量求导,也可以将本文作为手册,在需要的时候查询对应求导法则。
1. 向量与单变量求导
1.1 向量对单变量
向量包含行、列向量,对于单个变量的求导类似,也很容易理解。
一般情况下我们约定单个向量符号
x指列向量,如果要表示行向量,添加一个T
转置符号
xT
-
列向量
设
y=⎣⎢⎢⎡y1y2...yn⎦⎥⎥⎤,x是单变量,则
∂x∂y=⎣⎢⎢⎡∂x∂y1∂x∂y2...,∂x∂yn⎦⎥⎥⎤
-
行向量
设
yT=[y1,y2,...,yn],x是单变量,则
∂x∂yT=[∂x∂y1,∂x∂y2,...,∂x∂yn]
1.2 单变量对向量求导
与向量对单变量求导刚好相反,两者颠倒一下。但总体意义相似,结果是单变量分别对向量中元素的求导组成的新向量。
- 列向量
设
x=⎣⎢⎢⎡x1x2...xn⎦⎥⎥⎤,y
是单变量,则
∂x∂y=⎣⎢⎢⎢⎡∂x1∂y∂x2∂y...,∂xn∂y⎦⎥⎥⎥⎤
- 行向量
设
xT=[x1,x2,...,xn],y是单变量,则
∂xT∂y=[∂x1∂y,∂x2∂y,...,∂xn∂y]
2. 矩阵与单变量求导
2.1 矩阵对单变量求导
矩阵对单变量的求导与向量求导类似,就是每个元素分别对变量求导。
设
Y=⎣⎡y11...ym1.........y1n...ymn⎦⎤,则
∂x∂Y=⎣⎡∂x∂y11...∂x∂ym1.........∂x∂y1n...∂x∂ymn⎦⎤
2.2 单变量对矩阵求导
设
X=⎣⎡x11...xm1.........x1n...xmn⎦⎤,则
∂X∂y=⎣⎡∂x11∂y...∂xm1∂y.........∂x1n∂y...∂xmn∂y⎦⎤
3. 向量对向量的求导
向量之间的求导要比单变量的情况稍微复杂一些,但只要懂了单变量对向量的求导,就可以理解为多个单变量对向量求导组合。这里按照列行
,行列
,列列
,行行
四种情况讨论:
向量对向量的求导说起来简单但记忆起来也容易让人头晕,常常会分不清先哪一个对哪一个求导,在这里,我提供一种我自己较为喜欢的求导记忆方法:看下偏导,若是行向量,则上偏导不变,按分母划分;若是列向量,则下偏导不变,按上偏导划分,经过这样一步后,得到的每个元素都是单变量和向量的求导,易求导。
3.1 列向量对行向量求导
设
y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡y1y2...ym⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤,xT=[x1,x2,...,xn],求∂xT∂y
下偏导为行向量,
∂y不变,按
∂xT划分
则
∂xT∂y=[∂x1∂y,...,∂xn∂y]=⎣⎢⎢⎢⎢⎡∂x1∂y1...∂x1∂ym.........∂xn∂y1...∂xn∂ym⎦⎥⎥⎥⎥⎤
后一步化简是因为
∂xi∂y=⎣⎡∂xi∂y1...∂xi∂ym⎦⎤ ,n个列向量组合而成
3.2 行向量对列向量求导
设
yT=[y1,y2,...,ym],x=⎣⎢⎢⎡x1x2...xn⎦⎥⎥⎤,求∂x∂yT
下偏导为列向量,不变,按照上偏导划分
则
∂x∂yT=[∂x∂y1,...,∂x∂ym]=⎣⎡∂x1∂y1...∂xn∂y1.........∂x1∂ym...∂xn∂ym⎦⎤
后一步化简是因为
∂x∂yi=⎣⎡∂x1∂yi...∂xn∂yi⎦⎤,由m个列向量组成
3.3 列向量对列向量求导
设
y=⎣⎢⎢⎡y1y2...ym⎦⎥⎥⎤,x=⎣⎢⎢⎡x1x2...xn⎦⎥⎥⎤,求∂x∂y
下偏导为列向量,按上偏导划分
∂x∂y=⎣⎢⎢⎢⎢⎡∂x∂y1∂x∂y2...∂x∂ym⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡∂x1∂y1∂x2∂y1...∂x1∂ym∂x2∂ym...∂xn∂ym⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
最后结果是一个大列向量
3.4 行向量对行向量求导
设
yT=[y1,y2,...,ym],xT=[x1,x2,...,xn],求∂xT∂yT
下偏导是行向量,按下偏导划分
∂xT∂yT=[∂x1∂yT,∂x2∂yT,...,∂xn∂yT]=[∂x1∂y1,∂x1∂y2,...,∂x1∂ym,...,∂xn∂ym]
最后结果是一个大行向量
向量之间的求导理解和记忆会稍微难一些,但是仔细自己推敲一下就可以掌握了。
4. 矩阵和向量的求导
矩阵和向量的求导其实可以类比向量之间,矩阵由多个向量组合,我们只需将其分解为多个向量就可以一步步化简。
4.1 矩阵对列向量求导
设
Y=⎣⎡y11...ym1.........y1n...ymn⎦⎤,x=⎣⎢⎢⎡x1x2...xp⎦⎥⎥⎤,求∂x∂Y
同样的道理,
x是行向量,不变,对Y划分,这里我直接同时行列划分
∂x∂Y=⎣⎡∂x∂y11...∂x∂ym1.........∂x∂y1n...∂x∂ymn⎦⎤
4.2 矩阵对行向量求导
设
Y=⎣⎡y11...ym1.........y1n...ymn⎦⎤,xT=[x1,x2,...,xp],求∂xT∂Y
x是行向量,因此直接对下偏导划分
∂xT∂Y=[∂x1∂Y,∂x2∂Y,...,∂xp∂Y]
4.3 列向量对矩阵求导
设
y=⎣⎢⎢⎡y1y2...ym⎦⎥⎥⎤,X=⎣⎡x11...xp1.........x1q...xpq⎦⎤,求∂X∂y
在下偏导是矩阵的时候,将其分割成向量的形式,再按法则计算
令
X=[x1,x2,...,xq](列向量的组合),则可将其视为行向量,对其划分
∂X∂y=[∂x1∂y,∂x2∂y,...,∂xq∂y]
而
∂xi∂y则可按照列向量对列向量
的法则计算。
这里还有另外一种解释方法,考虑单变量对矩阵求导。当下偏导为矩阵时,可考虑上偏导,若上偏导为列向量,则按上偏导划分,否则按下偏导划分
由此有
∂X∂y=⎣⎡∂X∂y1...∂X∂ym⎦⎤
4.4 行向量对矩阵求导
设
yT=[y1,y2,...,ym],X=⎣⎡x11...xp1.........x1q...xpq⎦⎤,求∂X∂yT
一种方法依然是按照将矩阵分成向量,再按向量处理,这里直接给出第二种,根据上偏导选择划分对象,由于
yT是行向量,按下偏导划分
∂X∂yT=⎣⎢⎡∂x11∂yT...∂xp1∂yT.........∂x1q∂yT...∂xpq∂yT⎦⎥⎤
5. 矩阵对矩阵的求导
设
Y=⎣⎡y11...ym1.........y1n...ymn⎦⎤,X=⎣⎡x11...xp1.........x1q...xpq⎦⎤,求∂X∂Y
将Y做行向量划分,X做列向量划分,
Y=⎣⎢⎢⎡y1Ty2T...ymT⎦⎥⎥⎤,X=[x1,x2,...,xq] ,此时就是列向量对行向量求导
容易有
∂X∂Y=⎣⎢⎡∂x1∂y1T...∂x1∂ymT.........∂xq∂y1T...∂xq∂ymT⎦⎥⎤
6. 参考资料