向量求导
感谢
[矩阵求导的本质与分子布局、分母布局的本质(矩阵求导——本质篇) - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/263777564#:~:text= 分子布局,就是分子是列向量形式,分母是行向量形式,如 式。 如果这里的 是 实向量函数 的话,结果就是,的矩阵了: 分母布局 ,就是分母是 列向量 形式,分子是 行向量 形式,如 式。)
07 自动求导【动手学深度学习v2】_哔哩哔哩_bilibili
梯度,指向值变化最大的方向,这里都是分子布局
一 函数计算、求导与向量矩阵
考虑一个函数
function(input)
针对function、input的类型,我们可以将这个函数分类。
1 function是一个标量
我们称function是一个实值标量函数。用细体小写字母f表示
1.1 input是一个标量
我们称function的变元是标量,用细体小写字母x表示。
计算:输入是标量((1,)),函数是一个实值标量函数,结果是一个值(标量)((1,))
求导: 分母(函数值)是标量((1,)),分子是标量((1,)),结果是标量((1,))

例1
f(x)=2x+2f′(x)=2
1.2 input是一个向量
我们称function的变元是向量,用粗体小写字母\mathbfcalx表示。
计算:输入是列向量((n,1)n×1),函数是一个实值标量函数,结果是一个标量(数)((1,))
求导:分母(函数值)是标量((1,)),分子是列向量((n,1)n×1),结果是行向量((1,n)1×n)
\mathbfcalx=⎡⎢
⎢
⎢
⎢⎣x1x2⋮xn⎤⎥
⎥
⎥
⎥⎦(n,1)y=f(\mathbfcalx)(1,)f′(\mathbfcalx)=∂y∂\mathbfcalx=[∂y∂x1,∂y∂x2,⋯,∂y∂xn](1,n)

例2
\mathbfcalx=[x1x2]y=f(\mathbfcalx)=a1x21+a2x22+a3x1x2+a4x1+a5x2+a6f′(\mathbfcalx)=∂y∂\mathbfcalx=[∂y∂x1,∂y∂x2]=[2a1+a3x2+a4,2a2+a3x1+a5]
1.3 input是一个矩阵
我们称function的变元是矩阵,用粗体大写字母\symbfX表示。
计算:输入是矩阵((n,k)n×k),函数是一个实值标量函数,结果是一个标量(数)((1,))
求导:分母(函数值)是标量((1,)),分子是矩阵((n,k)n×k),结果是矩阵((k,n)k×n)
\symbfX=⎛⎜
⎜
⎜
⎜⎝x11x12⋯x1kx21x22⋯x2k⋮⋮⋮xn1xn2⋯xnk⎞⎟
⎟
⎟
⎟⎠(n,k)n×ky=f(\symbfX)(1,)f′(\symbfX)=∂y∂\symbfX=⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝∂y∂x11∂y∂x21⋯∂y∂xn1∂y∂x12∂y∂x22⋯∂y∂xn2⋮⋮⋮∂y∂x1k∂y∂x2k⋯∂y∂xnk⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠(k,n)k×n

例3
\symbfX=⎛⎜⎝x11x12x21x22x31x32⎞⎟⎠(3,2)3×2y=f(\symbfX)(1,)=a1x211+a2x212+a3x221+a4x222+a5x231+a6x232f′(\symbfX)=∂y∂\symbfX=⎛⎜⎝∂y∂x11∂y∂x21∂y∂x31∂y∂x12∂y∂x22∂y∂x32⎞⎟⎠(2,3),2×3=(2a1x112a3x212a5x312a2x122a4x222a6x32)(2,3),2×3
2 function是一个向量
我们称function是一个实向量函数。用粗体小写字母\mathbfcalf表示。
含义: \mathbfcalf是由 若干个f组成的一个向量
2.1 input是一个标量
计算:输入(变元)是标量((1,)),函数是列向量函数((m,1)m×1),输出结果是列向量((m,1)m×1)
求导: 求导分母(函数值)是列向量((m,1)m×1),分子是标量((1,)),求导结果是列向量((m,1)m×1)
x\mathbfcaly=\mathbfcalf(x)=⎡⎢
⎢
⎢
⎢
⎢⎣y1y2⋮yn⎤⎥
⎥
⎥
⎥
⎥⎦∂\mathbfcaly∂x=⎡⎢
⎢
⎢
⎢
⎢
⎢
⎢⎣∂y1∂x∂y2∂x⋮∂yn∂x⎤⎥
⎥
⎥
⎥
⎥
⎥
⎥⎦

例四
x\mathbfcaly=\mathbfcalf(x)=⎡⎢⎣x+12x2+13x3+1⎤⎥⎦(3,1)3×1\mathbfcalf′(x)=∂\mathbfcaly∂x=⎡⎢⎣14x9x2⎤⎥⎦(3,1)3×1
2.2 input是一个向量
计算:输入(变元)是向量((n,1)n×1),函数是列向量函数((m,1)m×1),输出结果是列向量((m,1)m×1)
求导: 求导分母(函数值)是列向量((m,1)m×1),分子是向量((n,1)n×1),求导结果是列向量((m,n)m×n)
Jacobian矩阵
- Jacobian矩阵可被视为是一种组织梯度向量的方法。
- 梯度向量可以被视为是一种组织偏导数的方法。
- 故,Jacobian矩阵可以被视为一个组织偏导数的矩阵。
\mathbfcalx=⎡⎢
⎢
⎢
⎢⎣x1x2⋮xn⎤⎥
⎥
⎥
⎥⎦(n,1)n×1\mathbfcaly=\mathbfcalf(\mathbfcalx)=⎡⎢
⎢
⎢
⎢
⎢⎣y1y2⋮ym⎤⎥
⎥
⎥
⎥
⎥⎦=⎡⎢
⎢
⎢
⎢
⎢⎣f1(x1,x2,⋯,xn)f2(x1,x2,⋯,xn)⋮fm(x1,x2,⋯,xn)⎤⎥
⎥
⎥
⎥
⎥⎦(m,1)m×1∂\mathbfcaly∂\mathbfcalx=⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝∂y1∂x1∂y1∂x2⋯∂y1∂xn∂y2∂x1∂y2∂x2⋯∂y2∂xn⋮⋮⋮∂ym∂x1∂ym∂x2⋯∂ym∂xn⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠(m,n)m×n


例五
\mathbfcalx=[x1x2](2,1)2×1\mathbfcaly=\mathbfcalf(x)=⎡⎢
⎢⎣x1+x22x21+2x223x31+3x32⎤⎥
⎥⎦(3,1)3×1\mathbfcalf′(x)=∂\mathbfcaly∂x=⎡⎢⎣114x14x29x219x23⎤⎥⎦(3,2)3×2
2.3 input是一个矩阵
计算:输入(变元)是矩阵((n,k)n×k),函数是列向量函数((m,1)m×1),输出结果是列向量((m,1)m×1)
求导: 求导分母(函数值)是列向量((m,1)m×1),分子是矩阵((n,k)n×k),求导结果是张量((m,k,n)m×k×n)
\symbfX=⎛⎜
⎜
⎜
⎜⎝x11x12⋯x1kx21x22⋯x2k⋮⋮⋮xn1xn2⋯xnk⎞⎟
⎟
⎟
⎟⎠(n,k)n×k\mathbfcaly=\mathbfcalf(\symbfX)=⎡⎢
⎢
⎢
⎢
⎢⎣y1y2⋮ym⎤⎥
⎥
⎥
⎥
⎥⎦=⎡⎢
⎢
⎢
⎢
⎢⎣f1(x11,x12,⋯,x21,⋯,xnn)f2(x11,x12,⋯,x21,⋯,xnn)⋮fm(x11,x12,⋯,x21,⋯,xnn)⎤⎥
⎥
⎥
⎥
⎥⎦(m,1)m×1∂\mathbfcaly∂\symbfX=⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝∂y1∂x11∂y1∂x12⋯∂y1∂x1k∂y2∂x11∂y2∂x12⋯∂y2∂x1k⋮⋮⋮∂ym∂x11∂ym∂x12⋯∂ym∂x1k⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝∂y1∂x21∂y1∂x22⋯∂y1∂x2k∂y2∂x21∂y2∂x22⋯∂y2∂x2k⋮⋮⋮∂ym∂x21∂ym∂x22⋯∂ym∂x2k⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠⋯⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝∂y1∂xn1∂y1∂xn2⋯∂y1∂xnk∂y2∂xn1∂y2∂xn2⋯∂y2∂xnk⋮⋮⋮∂ym∂xn1∂ym∂xn2⋯∂ym∂xnk⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠(m,k,n)m×k×n


3 function是一个矩阵
我们称function是一个实矩阵函数。用粗体大写字母F表示。
含义: F是由 若干个f组成的一个矩阵
3.1 input是一个标量
计算:输入是标量((1,)),函数是一个实矩阵函数,结果是一个矩阵((m,l))
求导: 分母(函数值)是矩阵((m,l)),分子是标量((1,)),结果是矩阵((m,l))
x\symbfY=F(x)=⎛⎜
⎜
⎜
⎜
⎜⎝f11(x)f12(x)⋯f1l(x)f21(x)f22(x)⋯f2l(x)⋮⋮⋮fm1(x)fm2(x)⋯fml(x)⎞⎟
⎟
⎟
⎟
⎟⎠=⎛⎜
⎜
⎜
⎜⎝y11y12⋯y1ly21y22⋯y2l⋮⋮⋮ym1ym2⋯yml⎞⎟
⎟
⎟
⎟⎠(m,l)m×l∂\symbfY∂x=F′(x)=⎛⎜
⎜
⎜
⎜
⎜⎝f′11(x)f′12(x)⋯f′1l(x)f′21(x)f′22(x)⋯f′2l(x)⋮⋮⋮f′m1(x)f′m2(x)⋯f′ml(x)⎞⎟
⎟
⎟
⎟
⎟⎠=⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝∂y11∂x∂y12∂x⋯∂y1l∂x∂y21∂x∂y22∂x⋯∂y2l∂x⋮⋮⋮∂ym1∂x∂ym2∂x⋯∂yml∂x⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠(m,l)m×l

3.2 input是一个向量
计算:输入是向量((n,1)),函数是一个实矩阵函数,结果是一个矩阵((m,l))
求导: 分母(函数值)是矩阵((m,l)),分子是向量((n,1)),结果是矩阵((m,l,n)m×l×n)
3.3 input是一个矩阵
计算:输入是矩阵((n,k)),函数是一个实矩阵函数,结果是一个矩阵((m,l))
求导: 分母(函数值)是矩阵((m,l)),分子是矩阵((n,k)),结果是矩阵((m,l,k,n)m×l×k×n)
总结


样例
标量关于向量求导1.2

向量关于向量求导2.2

二 向量链式法则

标量链式法则
x,u,y都是标量
y=f(u),u=g(x)∂y∂x=∂y∂u∂u∂x
向量链式法则
标量关于向量求导
-
中间变量是标量 1.1 1.2
y=f(u),u=g(\mathbfcalx)\mathbfcalx(n,1)、u(1,)、y(1,)∂y∂\mathbfcalx(1,n)=∂y∂u(1,)∂u∂\mathbfcalx(1,n)

-
中间变量是向量 1.2 , 2.2
y=f(\mathbfcalu),\mathbfcalu(k,1)=\mathbfcalg(\mathbfcalx)\mathbfcalx(n,1)、\mathbfcalu(k,1)、y(1,)∂y∂\mathbfcalx(1,n)=∂y∂\mathbfcalu(1,k)∂\mathbfcalu∂\mathbfcalx(k,n)

向量关于向量求导
- 中间变量是向量 2.2 2.2
\mathbfcaly(m,1)=\mathbfcalf(m,1)(\mathbfcalu(k,1)),\mathbfcalu(k,1)=\mathbfcalg(k,1)(\mathbfcalx(n,1))\mathbfcalx(n,1)、\mathbfcalu(k,1)、\mathbfcaly(m,1)∂\mathbfcaly∂\mathbfcalx(m,n)=∂\mathbfcaly∂\mathbfcalu(m,k)∂\mathbfcalu∂\mathbfcalx(k,n)
样例


三 自动求导

自动求导,是求导计算一个函数在指定值上的导数
计算图

两种模式

反向累积


复杂度

代码实现



【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通