扩展——向量求导

向量求导

感谢

[矩阵求导的本质与分子布局、分母布局的本质(矩阵求导——本质篇) - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/263777564#:~:text= 分子布局,就是分子是列向量形式,分母是行向量形式,如 式。 如果这里的 是 实向量函数 的话,结果就是,的矩阵了: 分母布局 ,就是分母是 列向量 形式,分子是 行向量 形式,如 式。)

07 自动求导【动手学深度学习v2】_哔哩哔哩_bilibili

梯度,指向值变化最大的方向,这里都是分子布局

一 函数计算、求导与向量矩阵

考虑一个函数

function(input)

针对functioninput的类型,我们可以将这个函数分类。

1 function是一个标量

我们称function是一个实值标量函数。用细体小写字母f表示

1.1 input是一个标量

我们称function的变元是标量,用细体小写字母x表示。

计算:输入是标量((1,)),函数是一个实值标量函数,结果是一个值(标量)((1,)

求导: 分母(函数值)是标量((1,)),分子是标量((1,)),结果是标量((1,)

image-20220331202208775

例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=[x1x2xn](n,1)y=f(\mathbfcalx)(1,)f(\mathbfcalx)=y\mathbfcalx=[yx1,yx2,,yxn](1,n)

image-20220331211924207

例2

\mathbfcalx=[x1x2]y=f(\mathbfcalx)=a1x12+a2x22+a3x1x2+a4x1+a5x2+a6f(\mathbfcalx)=y\mathbfcalx=[yx1,yx2]=[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=(x11x12x1kx21x22x2kxn1xn2xnk)(n,k)n×ky=f(\symbfX)(1,)f(\symbfX)=y\symbfX=(yx11yx21yxn1yx12yx22yxn2yx1kyx2kyxnk)(k,n)k×n

image-20220331215017049

例3

\symbfX=(x11x12x21x22x31x32)(3,2)3×2y=f(\symbfX)(1,)=a1x112+a2x122+a3x212+a4x222+a5x312+a6x322f(\symbfX)=y\symbfX=(yx11yx21yx31yx12yx22yx32)(2,3),2×3=(2a1x112a3x212a5x312a2x122a4x222a6x32)(2,3),2×3

2 function是一个向量

我们称function是一个实向量函数。用粗体小写字母\mathbfcalf表示。

含义: \mathbfcalf是由 若干个f组成的一个向量

image-20220401095853152

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)=[y1y2yn]\mathbfcalyx=[y1xy2xynx]

image-20220401100531229

例四

x\mathbfcaly=\mathbfcalf(x)=[x+12x2+13x3+1](3,1)3×1\mathbfcalf(x)=\mathbfcalyx=[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=[x1x2xn](n,1)n×1\mathbfcaly=\mathbfcalf(\mathbfcalx)=[y1y2ym]=[f1(x1,x2,,xn)f2(x1,x2,,xn)fm(x1,x2,,xn)](m,1)m×1\mathbfcaly\mathbfcalx=(y1x1y1x2y1xny2x1y2x2y2xnymx1ymx2ymxn)(m,n)m×n

image-20220401105850540

image-20220401104012735

例五

\mathbfcalx=[x1x2](2,1)2×1\mathbfcaly=\mathbfcalf(x)=[x1+x22x12+2x223x13+3x23](3,1)3×1\mathbfcalf(x)=\mathbfcalyx=[114x14x29x129x32](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=(x11x12x1kx21x22x2kxn1xn2xnk)(n,k)n×k\mathbfcaly=\mathbfcalf(\symbfX)=[y1y2ym]=[f1(x11,x12,,x21,,xnn)f2(x11,x12,,x21,,xnn)fm(x11,x12,,x21,,xnn)](m,1)m×1\mathbfcaly\symbfX=(y1x11y1x12y1x1ky2x11y2x12y2x1kymx11ymx12ymx1k)(y1x21y1x22y1x2ky2x21y2x22y2x2kymx21ymx22ymx2k)(y1xn1y1xn2y1xnky2xn1y2xn2y2xnkymxn1ymxn2ymxnk)(m,k,n)m×k×n

image-20220401111128159

image-20220401114216702

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))=(y11y12y1ly21y22y2lym1ym2yml)(m,l)m×l\symbfYx=F(x)=(f11(x)f12(x)f1l(x)f21(x)f22(x)f2l(x)fm1(x)fm2(x)fml(x))=(y11xy12xy1lxy21xy22xy2lxym1xym2xymlx)(m,l)m×l

image-20220401120135813

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

总结

img

image-20220331192357424

样例

标量关于向量求导1.2

image-20220402102242277

向量关于向量求导2.2

image-20220402102209146

二 向量链式法则

image-20220402102028760

标量链式法则

x,u,y都是标量

y=f(u),u=g(x)yx=yuux

向量链式法则

标量关于向量求导

  • 中间变量是标量 1.1 1.2

    y=f(u),u=g(\mathbfcalx)\mathbfcalx(n,1)u(1,)y(1,)y\mathbfcalx(1,n)=yu(1,)u\mathbfcalx(1,n)

    image-20220402104700857

  • 中间变量是向量 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)

    image-20220402110032446

向量关于向量求导

  • 中间变量是向量 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)

样例

image-20220402111412097

image-20220402111719161

三 自动求导

image-20220403101900651

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

计算图

image-20220403101958920

两种模式

image-20220403102044180

反向累积

image-20220403102255322

image-20220403102339593

复杂度

image-20220403102422729

代码实现

image-20220403114451327

image-20220403114510473

image-20220403114521486

posted @   英飞  阅读(283)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示