矩阵论专栏:专栏(文章按照顺序排序)
做机器学习的几乎避免不了矩阵求导,尤其是神经网络方面的,反向传播算法说白了就是在做矩阵求导,拿到代价函数对模型中每个参数矩阵的导数,才能找到一个下降方向,进而更新这些参数来降低损失。虽然实际编程时大可不必考虑这些繁琐的数学计算,但是要真正理解凸优化中的一些方法,掌握这个基本的数学工具还是有必要的。
【1】下面的探讨均在实数域内进行。
【2】虽然RnR^nRn定义为实数域RRR中的nnn个数组成的有序数组(x1,x2,...,xn)(x_1,x_2,...,x_n)(x1,x2,...,xn)的集合,但当我们讨论RnR^nRn中向量时,总是约定它是列向量的形式,即总是一个n×1n\times 1n×1矩阵。这样更符合一般的习惯,比如线性方程组的表达:Ax=b,A∈Rm×n,x∈Rn,b∈RmAx=b, A\in R^{m\times n},x\in R^n,b\in R^mAx=b,A∈Rm×n,x∈Rn,b∈Rm。
【3】我们讨论三种情形。向量对向量求导、矩阵对标量求导、标量对矩阵求导。标量对标量求导、标量对向量求导、向量对标量求导都可以看作是向量对向量求导的特例,而向量对矩阵求导、矩阵对向量求导和矩阵对矩阵求导涉及到高阶张量的运算,可以通过把矩阵向量化,从而把高阶运算用低阶运算代替。这样的方法需要向量化运算vec和kronecker积的基础,本篇博客不引入这两个概念,后面的博客探讨矩阵函数的微分时再引入。
【4】符号∂y∂x\frac{\partial y}{\partial x}∂x∂y表示偏导,本文为表示方便,用∂y∂x(a)\frac{\partial y}{\partial x}(a)∂x∂y(a)表示在点aaa处的偏导的值(原本的表示应为∂y∂x∣x=a\frac{\partial y}{\partial x}|_{x=a}∂x∂y∣x=a或∂f(x)∂x∣x=a\frac{\partial f(x)}{\partial x}|_{x=a}∂x∂f(x)∣x=a)
矩阵微分与矩阵求导 布局约定向量对向量求导 可微与可导的关系复合函数的链式求导法则微分的形式不变性例子 矩阵对标量求导 链式法则几个公式 标量对矩阵求导 微分的定义复合函数的微分常用的微分公式例子 应用 线性回归问题的最小二乘解 L2正则化情形 多层前馈网络(BP网络)的反向传播循环神经网络(RNN)的反向传播
矩阵微分与矩阵求导
布局约定
详细请见数学-矩阵计算(4)两种布局。在本文中,多数情况下采用分子布局。分子布局和分母布局实际上无需刻意区分,只要两种布局采用不同的符号就可以了。然而,有时候有些作者对分子布局和分母布局采用相同的符号,这时候就必须事先知道作者采用的是什么样的布局,才能确定该符号表达的布局是怎样的。例如,设有m维向量yyy和n维向量xxx,∂y∂x\frac{\partial y}{\partial x}∂x∂y如果采用的是分子布局,则是m×nm\times nm×n矩阵,而如果采用的是分母布局,则是n×mn\times mn×m矩阵。在本文中,我们通过符号来区分分子布局和分母布局(实际上,有了符号的约定以后,可以抛却这两个概念不谈)。
首先,正如文章开头所提,我们默认一个未显式指出究竟是行还是列的向量为列的形式,即任取x∈Rnx\in R^nx∈Rn,我们默认xxx是列向量。接下来,导数的布局通过微商符号的分子和分母的形式推定。以向量对向量的偏导为例,∂y∂xT\frac{\partial y}{\partial x^T}∂xT∂y分子上(即yyy)是列向量,分母上(即xTx^TxT)是行向量,则在该矩阵的布局中,yyy的分量y1,y2,...,ymy_1,y_2,...,y_my1,y2,...,ym是按列排布的,xxx的分量x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn是按行排布的(这里真不知道怎么表达才好,实际上我是想说∂y1,∂y2,...∂ym\partial y_1,\partial y_2,...\partial y_m∂y1,∂y2,...∂ym这样的顺序总是出现在矩阵的一列上,∂x1,∂x2,...∂xn\partial x_1,\partial x_2,...\partial x_n∂x1,∂x2,...∂xn总是出现在矩阵的一行上),即∂y∂xT=[∂y1∂x1∂y1∂x2...∂y1∂xn∂y2∂x1∂y2∂x2...∂y2∂xn............∂ym∂x1∂ym∂x2...∂ym∂xn]\frac{\partial y}{\partial x^T}=\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&\frac{\partial y_1}{\partial x_2}&...&\frac{\partial y_1}{\partial x_n}\\\frac{\partial y_2}{\partial x_1}&\frac{\partial y_2}{\partial x_2}&...&\frac{\partial y_2}{\partial x_n}\\...&...&...&...\\\frac{\partial y_m}{\partial x_1}&\frac{\partial y_m}{\partial x_2}&...&\frac{\partial y_m}{\partial x_n}\end{bmatrix}∂xT∂y=⎣⎢⎢⎢⎡∂x1∂y1∂x1∂y2...∂x1∂ym∂x2∂y1∂x2∂y2...∂x2∂ym............∂xn∂y1∂xn∂y2...∂xn∂ym⎦⎥⎥⎥⎤
这就是所谓的分子布局。而∂yT∂x=[∂y1∂x1∂y2∂x1...∂ym∂x1∂y1∂x2∂y2∂x2...∂ym∂x2............∂y1∂xn∂y2∂xn...∂ym∂xn]\frac{\partial y^T}{\partial x}=\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&\frac{\partial y_2}{\partial x_1}&...&\frac{\partial y_m}{\partial x_1}\\\frac{\partial y_1}{\partial x_2}&\frac{\partial y_2}{\partial x_2}&...&\frac{\partial y_m}{\partial x_2}\\...&...&...&...\\\frac{\partial y_1}{\partial x_n}&\frac{\partial y_2}{\partial x_n}&...&\frac{\partial y_m}{\partial x_n}\end{bmatrix}∂x∂yT=⎣⎢⎢⎢⎡∂x1∂y1∂x2∂y1...∂xn∂y1∂x1∂y2∂x2∂y2...∂xn∂y2............∂x1∂ym∂x2∂ym...∂xn∂ym⎦⎥⎥⎥⎤就是所谓的分母布局。这两种布局间的关系是∂yT∂x=(∂y∂xT)T\frac{\partial y^T}{\partial x}=(\frac{\partial y}{\partial x^T})^T∂x∂yT=(∂xT∂y)T。总结一下就是,我们可以通过符号推定导数的布局是什么样的,在符号(微商)中,一个向量本来是什么形式,它在导数中就是怎样的排布,矩阵也同理。例如设有标量x∈Rx\in Rx∈R和矩阵Y=[Yij]∈Rm×nY=[Y_{ij}]\in R^{m\times n}Y=[Yij]∈Rm×n,则∂x∂Y=[∂x∂Y11∂x∂Y12...∂x∂Y1n∂x∂Y21∂x∂Y22...∂x∂Y2n............∂x∂Ym1∂x∂Ym2...∂x∂Ymn]\frac{\partial x}{\partial Y}=\begin{bmatrix}\frac{\partial x}{\partial Y_{11}}&\frac{\partial x}{\partial Y_{12}}&...&\frac{\partial x}{\partial Y_{1n}}\\\frac{\partial x}{\partial Y_{21}}&\frac{\partial x}{\partial Y_{22}}&...&\frac{\partial x}{\partial Y_{2n}}\\...&...&...&...\\\frac{\partial x}{\partial Y_{m1}}&\frac{\partial x}{\partial Y_{m2}}&...&\frac{\partial x}{\partial Y_{mn}}\end{bmatrix}∂Y∂x=⎣⎢⎢⎡∂Y11∂x∂Y21∂x...∂Ym1∂x∂Y12∂x∂Y22∂x...∂Ym2∂x............∂Y1n∂x∂Y2n∂x...∂Ymn∂x⎦⎥⎥⎤而∂x∂YT=[∂x∂Y11∂x∂Y21...∂x∂Ym1∂x∂Y12∂x∂Y22...∂x∂Ym2............∂x∂Y1n∂x∂Y2n...∂x∂Ymn]\frac{\partial x}{\partial Y^T}=\begin{bmatrix}\frac{\partial x}{\partial Y_{11}}&\frac{\partial x}{\partial Y_{21}}&...&\frac{\partial x}{\partial Y_{m1}}\\\frac{\partial x}{\partial Y_{12}}&\frac{\partial x}{\partial Y_{22}}&...&\frac{\partial x}{\partial Y_{m2}}\\...&...&...&...\\\frac{\partial x}{\partial Y_{1n}}&\frac{\partial x}{\partial Y_{2n}}&...&\frac{\partial x}{\partial Y_{mn}}\end{bmatrix}∂YT∂x=⎣⎢⎢⎡∂Y11∂x∂Y12∂x...∂Y1n∂x∂Y21∂x∂Y22∂x...∂Y2n∂x............∂Ym1∂x∂Ym2∂x...∂Ymn∂x⎦⎥⎥⎤
向量对向量求导
在谈求导前,有必要谈一下微分的概念。一方面在后面可以看到可微是比可导更强的概念,在可微的条件下运用一阶微分的形式不变性可以简化复合函数的求导运算;另一方面,凸优化中的很多结论都是以可微为前提的,仅仅可导是远远不够的。
可微的定义:
定义1:设c∈Rnc\in R^nc∈Rn,函数f:D→Rmf:D\rightarrow R^mf:D→Rm在ccc的某个半径为r>0r>0r>0的邻域U(c)U(c)U(c)内有定义。若存在矩阵A∈Rm×nA\in R^{m\times n}A∈Rm×n,使得对于任意的u∈U˚(0)u\in \mathring U(0)u∈U˚(0)(0∈Rn0\in R^n0∈Rn是零向量,去心邻域U˚(0)\mathring U(0)U˚(0)的半径为rrr)有如下关系成立:f(c+u)−f(c)=Au+ο(∣∣u∣∣2)f(c+u)-f(c)=Au+\omicron(||u||_2)f(c+u)−f(c)=Au+ο(∣∣u∣∣2),其中ο(∣∣u∣∣2)\omicron(||u||_2)ο(∣∣u∣∣2)是当u→0u\rightarrow 0u→0时的一个高阶无穷小,则称fff在点ccc处是可微的,称uuu的线性函数AuAuAu(又叫fff在点ccc处的线性主部)为fff在点ccc处的微分,记作df(c)=Audf(c)=Audf(c)=Au,并称AAA是fff在点ccc处的一阶导数矩阵,简称一阶导数。
【注1】“fff在ccc的某个半径为r>0r>0r>0的邻域U(c)U(c)U(c)内有定义”中“某个”的意思是指存在一个邻域U(c)U(c)U(c),它在fff的定义域内
【注2】当点ccc给定后,AAA就是一个常矩阵,即要求AAA与uuu是无关的,AAA可以看做是ccc的函数A(c)A(c)A(c)
【注3】微分的基本思想是将非线性函数局部线性化。f(c+u)−f(c)f(c+u)-f(c)f(c+u)−f(c)可以看做是fff在点ccc处,自变量改变量为uuu时的函数值改变量(因变量改变量),若忽略高阶无穷小项ο(∣∣u∣∣2)\omicron(||u||_2)ο(∣∣u∣∣2)则得到f(c+u)−f(c)=Auf(c+u)-f(c)=Auf(c+u)−f(c)=Au,即在点ccc的某个邻域内(即“局部”的意思)将fff用一个线性函数AuAuAu替代
【注4】符号df(c)df(c)df(c)直观上可以理解为fff在点ccc处的一个微小改变量,相应地uuu则是fff的自变量的一个微小改变量,常记作dcdcdc,故微分的式子可以写作df(c)=Adcdf(c)=Adcdf(c)=Adc(为什么自变量的改变量要采用微分符号d,实际上后面证明了一阶微分的形式不变性后就知道了)
【注5】高阶无穷小ο(∣∣u∣∣2)\omicron(||u||_2)ο(∣∣u∣∣2)在u=0u=0u=0处是无定义的,常补充定义ο(0)=0\omicron(0)=0ο(0)=0,这样定义中的关系式无论uuu是否为零都成立
可微是比可导更强的概念,我们在说一个多元向量值函数可导时,往往是指它的每个分量对自变量的每个分量的偏导都存在。再严格一点的,就是指函数的每个分量对自变量的任意方向导数都存在。可微一定可导,可导不一定可微(在一元数量值函数的情形下,这个结论退化成可微与可导等价)。下面给出偏导的概念并证明可微与可导间的关系。
偏导的定义:
定义2:设c∈Rnc\in R^nc∈Rn,函数f:D→Rmf:D\rightarrow R^mf:D→Rm在ccc的某个半径为r>0r>0r>0的邻域U(c)U(c)U(c)内有定义。设0≠t<r0\neq t<r0=t<r,称极限(若存在的话)limt→0fi(c+tej)−fi(c)t\lim_{t\rightarrow 0}\frac{f_i(c+te_j)-f_i(c)}{t}t→0limtfi(c+tej)−fi(c)(其中eje_jej是第j个标准向量,其第jjj个分量为1,其他分量为零)为fff的分量fif_ifi在点ccc处对自变量x∈Rnx\in R^nx∈Rn的第jjj个分量的偏导,记作∂fi∂xj(c)\frac{\partial f_i}{\partial x_j}(c)∂xj∂fi(c)。定义3(Jacobian矩阵):函数f:D→Rm(D⊆Rn)f:D\rightarrow R^m(D\subseteq R^n)f:D→Rm(D⊆Rn)在点ccc处对自变量xxx的Jacobian矩阵定义如下∂f∂xT(c)=[∂f1∂x1(c)∂f1∂x2(c)...∂f1∂xn(c)∂f2∂x1(c)∂f2∂x2(c)...∂f2∂xn(c)............∂fm∂x1(c)∂fm∂x2(c)...∂fm∂xn(c)]\frac{\partial f}{\partial x^T}(c)=\begin{bmatrix}\frac{\partial f_1}{\partial x_1}(c)&\frac{\partial f_1}{\partial x_2}(c)&...&\frac{\partial f_1}{\partial x_n}(c)\\\frac{\partial f_2}{\partial x_1}(c)&\frac{\partial f_2}{\partial x_2}(c)&...&\frac{\partial f_2}{\partial x_n}(c)\\...&...&...&...\\\frac{\partial f_m}{\partial x_1}(c)&\frac{\partial f_m}{\partial x_2}(c)&...&\frac{\partial f_m}{\partial x_n}(c)\end{bmatrix}∂xT∂f(c)=⎣⎢⎢⎢⎡∂x1∂f1(c)∂x1∂f2(c)...∂x1∂fm(c)∂x2∂f1(c)∂x2∂f2(c)...∂x2∂fm(c)............∂xn∂f1(c)∂xn∂f2(c)...∂xn∂fm(c)⎦⎥⎥⎥⎤
【注1】当fff是数量值函数时,Jacobian矩阵退化为一维行向量,即fff的梯度的转置(梯度常常写作列向量);需要注意的是,Jacobian矩阵的第i行就是fff的第i个分量fif_ifi的梯度的转置;当fff是一元数量值函数时,Jacobian矩阵退化为一元情形下的导数的概念。
【注2】需要区分Jacobian矩阵和梯度矩阵的概念:梯度矩阵是Jacobian矩阵的转置
可微与可导间的关系:
定理1:设c∈Rnc\in R^nc∈Rn,若fff在点ccc处可微,则fff在ccc处的Jacobian矩阵存在,且导数矩阵A(c)=∂f∂xT(c)A(c)=\frac{\partial f}{\partial x^T}(c)A(c)=∂xT∂f(c)。
证明:
根据可微的定义,存在r>0r>0r>0,对任意uuu满足0<∣∣u∣∣2<r0<||u||_2<r0<∣∣u∣∣2<r,有f(c+u)−f(c)=A(c)u+ο(∣∣u∣∣2)f(c+u)-f(c)=A(c)u+\omicron (||u||_2)f(c+u)−f(c)=A(c)u+ο(∣∣u∣∣2),故limu→0f(c+u)−f(c)−A(c)u∣∣u∣∣2=0\lim_{u\rightarrow 0}\frac{f(c+u)-f(c)-A(c)u}{||u||_2}=0u→0lim∣∣u∣∣2f(c+u)−f(c)−A(c)u=0令u=tej,t<ru=te_j,t<ru=tej,t<r,则limt→0f(c+tej)−f(c)−tA(c)ejt=0\lim_{t\rightarrow 0}\frac{f(c+te_j)-f(c)-tA(c)e_j}{t}=0t→0limtf(c+tej)−f(c)−tA(c)ej=0故对任意i=1,2,...,mi=1,2,...,mi=1,2,...,m及j=1,2,...,nj=1,2,...,nj=1,2,...,n有∂fi∂xj∣c=limt→0fi(c+tej)−fi(c)t=eiTA(c)ej=aij\frac{\partial f_i}{\partial x_j}|_c=\lim_{t\rightarrow 0}\frac{f_i(c+te_j)-f_i(c)}{t}=e_i^TA(c)e_j=a_{ij}∂xj∂fi∣c=t→0limtfi(c+tej)−fi(c)=eiTA(c)ej=aij其中aija_{ij}aij是导数矩阵A(c)A(c)A(c)的(i,j)(i,j)(i,j)元素。得证。
这个定理告诉我们,可微一定可导,且导数矩阵就是Jacobian矩阵。可导不一定可微,有很多反例,这里不再列举。反向传播算法是以复合函数链式求导法则为基础的,实际上,链导法是复合函数微分法则的一个附带结果,下面给出复合函数微分法则,并导出复合函数的链导法则。
定理2:若函数f:Df→Rm(Df⊆Rn)f:D_f\rightarrow R^m(D_f\subseteq R^n)f:Df→Rm(Df⊆Rn)在点aaa处可微,函数g:Dg→Rr(Dg⊇R(f))g:D_g\rightarrow R^r(D_g\supseteq R(f))g:Dg→Rr(Dg⊇R(f))在点b=f(a)b=f(a)b=f(a)处可微,则复合函数g∘fg\circ fg∘f在点aaa处可微,且dg(f(a))=B(b)A(a)dadg(f(a))=B(b)A(a)dadg(f(a))=B(b)A(a)da,其中B(b)B(b)B(b)是ggg在点bbb处的导数,A(a)A(a)A(a)是fff在点aaa处的导数
证明:(下面涉及到的所有高阶无穷小都在点000处补充定义ο(0)=0\omicron(0)=0ο(0)=0)
由可微的定义,存在半径为r1>0r_1>0r1>0的邻域U(a)U(a)U(a),使得任意∣∣u∣∣2<r1||u||_2<r_1∣∣u∣∣2<r1有f(a+u)−f(a)=A(a)u+ο1(∣∣u∣∣2)(1)f(a+u)-f(a)=A(a)u+\omicron_1 (||u||_2)\qquad (1)f(a+u)−f(a)=A(a)u+ο1(∣∣u∣∣2)(1)存在半径为r2>0r_2>0r2>0的邻域U(b)U(b)U(b),其中b=f(a)b=f(a)b=f(a),使得任意∣∣v∣∣2<r2||v||_2<r_2∣∣v∣∣2<r2有g(b+v)−g(b)=B(b)v+ο2(∣∣v∣∣2)(2)g(b+v)-g(b)=B(b)v+\omicron_2 (||v||_2)\qquad (2)g(b+v)−g(b)=B(b)v+ο2(∣∣v∣∣2)(2)令Δf=f(a+u)−f(a)\Delta f=f(a+u)-f(a)Δf=f(a+u)−f(a),令(1)式两端u→0u\rightarrow 0u→0得到Δf→0\Delta f\rightarrow 0Δf→0,故∣∣Δf∣∣2→0||\Delta f||_2\rightarrow 0∣∣Δf∣∣2→0,由极限的定义知存在r3>0r_3>0r3>0使得任意∣∣u∣∣2<r3||u||_2<r_3∣∣u∣∣2<r3有∣∣Δf∣∣2<r2||\Delta f||_2<r_2∣∣Δf∣∣2<r2。由(2)知可将v=Δfv=\Delta fv=Δf代入,得g(b+Δf)−g(b)=B(b)Δf+ο2(∣∣Δf∣∣2)g(b+\Delta f)-g(b)=B(b)\Delta f+\omicron_2 (||\Delta f||_2)g(b+Δf)−g(b)=B(b)Δf+ο2(∣∣Δf∣∣2),即g(f(a+u))−g(f(a))=B(b)A(a)u+αg(f(a+u))-g(f(a))=B(b)A(a)u+\alphag(f(a+u))−g(f(a))=B(b)A(a)u+α对任意∣∣u∣∣2<min{r1,r3}||u||_2<\min\{r_1,r_3\}∣∣u∣∣2<min{r1,r3}成立,其中α=B(b)ο1(∣∣u∣∣2)+ο2(∣∣Δf∣∣2)\alpha=B(b)\omicron_1 (||u||_2)+\omicron_2(||\Delta f||_2)α=B(b)ο1(∣∣u∣∣2)+ο2(∣∣Δf∣∣2)。要证明g∘fg\circ fg∘f在点aaa处可微,只需证明limu→0α∣∣u∣∣2=0\lim_{u\rightarrow 0}\frac{\alpha}{||u||_2}=0limu→0∣∣u∣∣2α=0即可。由于limu→0B(b)ο1(∣∣u∣∣2)∣∣u∣∣2=0\lim_{u\rightarrow 0}B(b)\frac{\omicron_1(||u||_2)}{||u||_2}=0limu→0B(b)∣∣u∣∣2ο1(∣∣u∣∣2)=0,故只需证明limu→0ο2(∣∣Δf∣∣2)∣∣u∣∣2=0\lim_{u\rightarrow 0}\frac{\omicron_2(||\Delta f||_2)}{||u||_2}=0limu→0∣∣u∣∣2ο2(∣∣Δf∣∣2)=0。引入函数Q(u)={ο2(∣∣Δf∣∣2)∣∣Δf∣∣2Δf≠00Δf=0Q(u)=\begin{cases}\frac{\omicron_2(||\Delta f||_2)}{||\Delta f||_2}&\Delta f\neq 0\\0&\Delta f=0\end{cases}Q(u)={∣∣Δf∣∣2ο2(∣∣Δf∣∣2)0Δf=0Δf=0,其中∣∣u∣∣2<min{r1,r3}||u||_2<\min\{r_1,r_3\}∣∣u∣∣2<min{r1,r3},可以证明当u→0u\rightarrow 0u→0时Q(u)→0Q(u)\rightarrow 0Q(u)→0,此处略去,证明见注释。由于ο2(∣∣Δf∣∣2)∣∣u∣∣2=Q(u)∣∣Δf∣∣2∣∣u∣∣2\frac{\omicron_2(||\Delta f||_2)}{||u||_2}=Q(u)\frac{||\Delta f||_2}{||u||_2}∣∣u∣∣2ο2(∣∣Δf∣∣2)=Q(u)∣∣u∣∣2∣∣Δf∣∣2,∣∣Δf∣∣2∣∣u∣∣2⩽∣∣A(a)u∣∣2∣∣u∣∣2+∣∣ο1(∣∣u∣∣2)∣∣2∣∣u∣∣2\frac{||\Delta f||_2}{||u||_2}\leqslant \frac{||A(a)u||_2}{||u||_2}+\frac{||\omicron_1(||u||_2)||_2}{||u||_2}∣∣u∣∣2∣∣Δf∣∣2⩽∣∣u∣∣2∣∣A(a)u∣∣2+∣∣u∣∣2∣∣ο1(∣∣u∣∣2)∣∣2,由矩阵不等式A(a)TA(a)⩽λ(a)IA(a)^TA(a)\leqslant \lambda(a)IA(a)TA(a)⩽λ(a)I,其中λ(a)\lambda(a)λ(a)是A(a)TA(a)A(a)^TA(a)A(a)TA(a)的最大特征值,得到∣∣A(a)u∣∣2∣∣u∣∣2⩽λ(a)\frac{||A(a)u||_2}{||u||_2}\leqslant \sqrt{\lambda(a)}∣∣u∣∣2∣∣A(a)u∣∣2⩽λ(a),又由limu→0∣∣ο1(∣∣u∣∣2)∣∣2∣∣u∣∣2=0\lim_{u\rightarrow 0}\frac{||\omicron_1(||u||_2)||_2}{||u||_2}=0limu→0∣∣u∣∣2∣∣ο1(∣∣u∣∣2)∣∣2=0,得到∣∣ο1(∣∣u∣∣2)∣∣2∣∣u∣∣2\frac{||\omicron_1(||u||_2)||_2}{||u||_2}∣∣u∣∣2∣∣ο1(∣∣u∣∣2)∣∣2是局部有界的,故∣∣Δf∣∣2∣∣u∣∣2\frac{||\Delta f||_2}{||u||_2}∣∣u∣∣2∣∣Δf∣∣2是局部有界的。综上有limu→0ο2(∣∣Δf∣∣2)∣∣u∣∣2=0\lim_{u\rightarrow 0}\frac{\omicron_2(||\Delta f||_2)}{||u||_2}=0limu→0∣∣u∣∣2ο2(∣∣Δf∣∣2)=0,证毕。
【注1】矩阵不等式见矩阵的正定性
【注2】limu→0Q(u)=0\lim_{u\rightarrow 0}Q(u)=0limu→0Q(u)=0的证明:
利用limu→0Δf=0lim_{u\rightarrow 0}\Delta f=0limu→0Δf=0以及limv→0ο2(∣∣v∣∣2)∣∣v∣∣2=0lim_{v\rightarrow 0}\frac{\omicron_2(||v||_2)}{||v||_2}=0limv→0∣∣v∣∣2ο2(∣∣v∣∣2)=0这两个条件即可。∀ϵ>0,∃δ>0,∀v\forall \epsilon>0,\exist \delta>0,\forall v∀ϵ>0,∃δ>0,∀v满足0<∣∣v∣∣2<δ0<||v||_2<\delta0<∣∣v∣∣2<δ都有∣∣ο2(∣∣v∣∣2)∣∣v∣∣2∣∣2<ϵ||\frac{\omicron_2(||v||_2)}{||v||_2}||_2<\epsilon∣∣∣∣v∣∣2ο2(∣∣v∣∣2)∣∣2<ϵ,∃δ1>0,∀u\exist \delta_1>0,\forall u∃δ1>0,∀u满足0<∣∣u∣∣2<δ10<||u||_2<\delta_10<∣∣u∣∣2<δ1都有∣∣Δf∣∣2<δ||\Delta f||_2<\delta∣∣Δf∣∣2<δ,故由如下结论:∀ϵ>0,∃δ1>0,∀u\forall \epsilon >0,\exist \delta_1>0,\forall u∀ϵ>0,∃δ1>0,∀u满足0<∣∣u∣∣2<δ10<||u||_2<\delta_10<∣∣u∣∣2<δ1,若Δf=0\Delta f=0Δf=0,则∣∣Q(u)∣∣2=0<ϵ||Q(u)||_2=0<\epsilon∣∣Q(u)∣∣2=0<ϵ,若0<∣∣Δf∣∣2<δ0<||\Delta f||_2<\delta0<∣∣Δf∣∣2<δ,则∣∣Q(u)∣∣2=∣∣ο2(∣∣Δf∣∣2)∣∣Δf∣∣2∣∣2<ϵ||Q(u)||_2=||\frac{\omicron_2(||\Delta f||_2)}{||\Delta f||_2}||_2<\epsilon∣∣Q(u)∣∣2=∣∣∣∣Δf∣∣2ο2(∣∣Δf∣∣2)∣∣2<ϵ,即无论∣∣Δf∣∣2||\Delta f||_2∣∣Δf∣∣2是否为零都有∣∣Q(u)∣∣2<ϵ||Q(u)||_2<\epsilon∣∣Q(u)∣∣2<ϵ,故limu→0Q(u)=0\lim_{u\rightarrow 0}Q(u)=0limu→0Q(u)=0。
下面由复合函数的微分法则导出复合函数的链式求导法则:
推论:若函数y=f(x)(Df⊆Rn,y∈Rm)y=f(x)(D_f\subseteq R^n,y\in R^m)y=f(x)(Df⊆Rn,y∈Rm)在点aaa处可微,函数z=g(y)(Dg⊇R(f),z∈Rr)z=g(y)(D_g\supseteq R(f),z\in R^r)z=g(y)(Dg⊇R(f),z∈Rr)在点b=f(a)b=f(a)b=f(a)处可微,则复合函数g∘fg\circ fg∘f在点aaa处可微,且其在点aaa处的导数∂z∂xT(a)=∂z∂yT(b)∂y∂xT(a)\frac{\partial z}{\partial x^T}(a)=\frac{\partial z}{\partial y^T}(b)\frac{\partial y}{\partial x^T}(a)∂xT∂z(a)=∂yT∂z(b)∂xT∂y(a)
通过一阶微分的形式不变性,我们可以通过求微分来计算复合函数的导数,这在很多情况下是有用的,例如,在矩阵求导中通过计算微分,可以一次性得到多个参变量矩阵的导数。下面给出一阶微分的形式不变性:
一阶微分的形式不变性:
设函数f:Df→Rm(Df⊆Rn)f:D_f\rightarrow R^m(D_f\subseteq R^n)f:Df→Rm(Df⊆Rn)在点aaa处可微,其微分为df(a)=A(a)dadf(a)=A(a)dadf(a)=A(a)da,函数g:Dg→Rr(Dg⊇R(f))g:D_g\rightarrow R^r(D_g\supseteq R(f))g:Dg→Rr(Dg⊇R(f))在点b=f(a)b=f(a)b=f(a)处可微,其微分为dg(b)=B(b)dbdg(b)=B(b)dbdg(b)=B(b)db,则由复合函数的微分法则知,函数g∘fg\circ fg∘f在点aaa处的微分为dg(f(a))=B(b)A(a)dadg(f(a))=B(b)A(a)dadg(f(a))=B(b)A(a)da。注意到df(a)=A(a)dadf(a)=A(a)dadf(a)=A(a)da,于是dg(f(a))=B(b)A(a)da=B(b)df(a)dg(f(a))=B(b)A(a)da=B(b)df(a)dg(f(a))=B(b)A(a)da=B(b)df(a),即dg(b)=B(b)dbdg(b)=B(b)dbdg(b)=B(b)db,这恰好就是ggg在bbb处的微分的形式。这说明无论函数ggg的变量是自变量还是中间变量,其微分形式就和ggg只有自变量时一样(这里可以这样理解:给定一个函数,其微分是一个线性函数,即一个线性映射,即使该函数与其他函数复合,这并不影响该函数本身的微分这个线性映射)。
【注】一阶微分的形式不变性说明了为什么自变量的微小增量也用微分符号d表示:df(a)=A(a)dadf(a)=A(a)dadf(a)=A(a)da中,dadada既能表示fff在aaa处的微分这个线性函数的自变量(这是人为规定的),又能表示把fff的自变量当成因变量(中间变量),其取值为aaa时的微小增量(这是由形式不变性决定的)。
对于函数有多个自变量的情况,例如y=f(x1,x2,...,xn)y=f(x_1,x_2,...,x_n)y=f(x1,x2,...,xn),其中x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn分别是m1,m2,...,mnm_1,m_2,...,m_nm1,m2,...,mn维向量,实际上可以看成只有一个自变量xxx,其中x=(x1T,x2T,...,xnT)T∈R∑i=1nmix=(x_1^T,x_2^T,...,x_n^T)^T\in R^{\sum_{i=1}^nm_i}x=(x1T,x2T,...,xnT)T∈R∑i=1nmi,fff的微分的定义仍适用。实际上,可以把fff的微分的定义等价地拆开写成f(x1+u1,x2+u2,...,xn+un)−f(x1,x2,...,xn)=A1u1+A2u2+...+Anun+ο(∣∣u1∣∣22+∣∣u2∣∣22+...+∣∣un∣∣22)\begin{aligned}&f(x_1+u_1,x_2+u_2,...,x_n+u_n)-f(x_1,x_2,...,x_n)\\=&A_1u_1+A_2u_2+...+A_nu_n+\omicron(\sqrt{||u_1||_2^2+||u_2||_2^2+...+||u_n||_2^2})\end{aligned}=f(x1+u1,x2+u2,...,xn+un)−f(x1,x2,...,xn)A1u1+A2u2+...+Anun+ο(∣∣u1∣∣22+∣∣u2∣∣22+...+∣∣un∣∣22)相应地微分写成dy=A1dx1+A2dx2+...+Andxn=Adxdy=A_1dx_1+A_2dx_2+...+A_ndx_n=Adxdy=A1dx1+A2dx2+...+Andxn=Adx,其中AiA_iAi是yyy对xix_ixi的导数,A=[A1A2...An],dx=(dx1T,dx2T,...,dxnT)TA=\begin{bmatrix}A_1&A_2&...&A_n\end{bmatrix},dx=(dx_1^T,dx_2^T,...,dx_n^T)^TA=[A1A2...An],dx=(dx1T,dx2T,...,dxnT)T。
对于函数有多个中间变量的情况,复合函数的微分法则与一阶微分的形式不变性仍适用。例如z=g(y1,y2,...,ym)z=g(y_1,y_2,...,y_m)z=g(y1,y2,...,ym),yi=fi(x1,x2,...,xn)y_i=f_i(x_1,x_2,...,x_n)yi=fi(x1,x2,...,xn),若f1,f2,...,fmf_1,f_2,...,f_mf1,f2,...,fm都在点x0=(c1T,c2T,..,cnT)Tx_0=(c_1^T,c_2^T,..,c_n^T)^Tx0=(c1T,c2T,..,cnT)T可微,ggg在点(f1T(x0),f2T(x0),...,fmT(x0))T(f_1^T(x_0),f_2^T(x_0),...,f_m^T(x_0))^T(f1T(x0),f2T(x0),...,fmT(x0))T可微,那么复合函数z=g(f1(x),f2(x),...,fm(x)),x=(x1T,x2T,..,xnT)Tz=g(f_1(x),f_2(x),...,f_m(x)),x=(x_1^T,x_2^T,..,x_n^T)^Tz=g(f1(x),f2(x),...,fm(x)),x=(x1T,x2T,..,xnT)T是否在点x0x_0x0可微呢?答案是肯定的,有如下定理保证:
定理3:函数f:Df→Rm(Df⊆Rn)f:D_f\rightarrow R^m(D_f\subseteq R^n)f:Df→Rm(Df⊆Rn)在点aaa处可微的充要条件为fff的每个分量都在点aaa处可微(证明略)
【注】比较fff的微分dfdfdf和分量fif_ifi的微分dfidf_idfi可知,df=(df1,df2,...,dfm)Tdf=(df_1,df_2,...,df_m)^Tdf=(df1,df2,...,dfm)T
对于上述情形,利用该定理可知fif_ifi的任意分量都在x0x_0x0可微(i=1,2,..,mi=1,2,..,mi=1,2,..,m),再利用该定理知f=(f1T,f2T,...,fmT)Tf=(f_1^T,f_2^T,...,f_m^T)^Tf=(f1T,f2T,...,fmT)T在x0x_0x0可微,于是由复合函数微分法则得到上述结论。由于多个中间变量可以看成只有一个中间变量,故一阶微分的形式不变性仍成立。
例1:设z=f(x,y)=xTAy,x∈Rm,y∈Rnz=f(x,y)=x^TAy,x\in R^m,y\in R^nz=f(x,y)=xTAy,x∈Rm,y∈Rn,求∂z∂x\frac{\partial z}{\partial x}∂x∂z和∂z∂y\frac{\partial z}{\partial y}∂y∂z。
法1:根据梯度矩阵(梯度)的定义
∂z∂x=[∂z∂x1⋮∂z∂xm]=[∂∑iaiyxi∂x1⋮∂∑iaiyxi∂xm]=[a1y⋮amy]=Ay\begin{aligned}\frac{\partial z}{\partial x}&=\begin{bmatrix}\frac{\partial z}{\partial x_1}\\\vdots\\\frac{\partial z}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}\frac{\partial \sum_ia_iyx_i}{\partial x_1}\\\vdots\\\frac{\partial \sum_ia_iyx_i}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}a_1y\\\vdots\\a_my\end{bmatrix}\\&=Ay\end{aligned}∂x∂z=⎣⎢⎡∂x1∂z⋮∂xm∂z⎦⎥⎤=⎣⎢⎢⎡∂x1∂∑iaiyxi⋮∂xm∂∑iaiyxi⎦⎥⎥⎤=⎣⎢⎡a1y⋮amy⎦⎥⎤=Ay式中aia_iai是矩阵AAA的第i行。同理可得∂z∂y=ATx\frac{\partial z}{\partial y}=A^Tx∂y∂z=ATx。
法2:利用一阶微分的形式不变性
根据一阶微分的形式不变性容易证明以下几个微分公式:
d(xTy)=yTdx+xTdyd(x^Ty)=y^Tdx+x^Tdyd(xTy)=yTdx+xTdyd(Ax)=Adxd(Ax)=Adxd(Ax)=Adx
所以d(xTAy)=(Ay)Tdx+xTd(Ay)=(Ay)Tdx+xTAdy=(Ay)Tdx+(ATx)Tdyd(x^TAy)=(Ay)^Tdx+x^Td(Ay)=(Ay)^Tdx+x^TAdy=(Ay)^Tdx+(A^Tx)^Tdyd(xTAy)=(Ay)Tdx+xTd(Ay)=(Ay)Tdx+xTAdy=(Ay)Tdx+(ATx)Tdy,由微分与导数的关系和梯度与导数的关系得∂z∂x=Ay\frac{\partial z}{\partial x}=Ay∂x∂z=Ay和∂z∂y=ATx\frac{\partial z}{\partial y}=A^Tx∂y∂z=ATx。
例2:设z=f(x,y)=(Ax)⊙(By),x∈Rm,y∈Rn,z∈Rtz=f(x,y)=(Ax)\odot(By),x\in R^m,y\in R^n,z\in R^tz=f(x,y)=(Ax)⊙(By),x∈Rm,y∈Rn,z∈Rt,求∂z∂xT\frac{\partial z}{\partial x^T}∂xT∂z和∂z∂yT\frac{\partial z}{\partial y^T}∂yT∂z
【注】⊙\odot⊙是Hardamard积,即逐元素乘积
法1:根据Jacobian矩阵(导数)的定义
∂z∂xT=[∂z1∂x1⋯∂z1∂xm⋮⋱⋮∂zt∂x1⋯∂zt∂xm]=[∂(a1x)(b1y)∂x1⋯∂(a1x)(b1y)∂xm⋮⋱⋮∂(atx)(bty)∂x1⋯∂(atx)(bty)∂xm]=[a11(b1y)⋯a1m(b1y)⋮⋱⋮at1(bty)⋯atm(bty)]=diag(By)A\begin{aligned}\frac{\partial z}{\partial x^T}&=\begin{bmatrix}\frac{\partial z_1}{\partial x_1}&\cdots&\frac{\partial z_1}{\partial x_m}\\\vdots&\ddots&\vdots\\\frac{\partial z_t}{\partial x_1}&\cdots&\frac{\partial z_t}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}\frac{\partial (a_1x)(b_1y)}{\partial x_1}&\cdots&\frac{\partial (a_1x)(b_1y)}{\partial x_m}\\\vdots&\ddots&\vdots\\\frac{\partial (a_tx)(b_ty)}{\partial x_1}&\cdots&\frac{\partial (a_tx)(b_ty)}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}a_{11}(b_1y)&\cdots&a_{1m}(b_1y)\\\vdots&\ddots&\vdots\\a_{t1}(b_ty)&\cdots&a_{tm}(b_ty)\end{bmatrix}\\&=diag(By)A\end{aligned}∂xT∂z=⎣⎢⎡∂x1∂z1⋮∂x1∂zt⋯⋱⋯∂xm∂z1⋮∂xm∂zt⎦⎥⎤=⎣⎢⎢⎡∂x1∂(a1x)(b1y)⋮∂x1∂(atx)(bty)⋯⋱⋯∂xm∂(a1x)(b1y)⋮∂xm∂(atx)(bty)⎦⎥⎥⎤=⎣⎢⎡a11(b1y)⋮at1(bty)⋯⋱⋯a1m(b1y)⋮atm(bty)⎦⎥⎤=diag(By)A其中ai,bia_i,b_iai,bi分别是AAA,BBB的第i行。同理可得∂z∂yT=diag(Ax)B\frac{\partial z}{\partial y^T}=diag(Ax)B∂yT∂z=diag(Ax)B。
法2:利用一阶微分的形式不变性
根据一阶微分的形式不变性可以证明如下微分公式:
d(x⊙y)=y⊙dx+x⊙dy=diag(y)dx+diag(x)dyd(x\odot y)=y\odot dx+x\odot dy=diag(y)dx+diag(x)dyd(x⊙y)=y⊙dx+x⊙dy=diag(y)dx+diag(x)dy
所以dz=(By)⊙d(Ax)+(Ax)⊙d(By)=(By)⊙(Adx)+(Ax)⊙(Bdy)=diag(By)Adx+diag(Ax)Bdydz=(By)\odot d(Ax)+(Ax)\odot d(By)=(By)\odot (Adx)+(Ax)\odot (Bdy)=diag(By)Adx+diag(Ax)Bdydz=(By)⊙d(Ax)+(Ax)⊙d(By)=(By)⊙(Adx)+(Ax)⊙(Bdy)=diag(By)Adx+diag(Ax)Bdy,故由微分与导数的关系得∂z∂xT=diag(By)A\frac{\partial z}{\partial x^T}=diag(By)A∂xT∂z=diag(By)A和∂z∂yT=diag(Ax)B\frac{\partial z}{\partial y^T}=diag(Ax)B∂yT∂z=diag(Ax)B。
矩阵对标量求导
矩阵对标量求导用的不多,只简单提一下。
仿照定义1,我们可以写出以标量为自变量的矩阵函数的微分的定义,但由定理3启发,我们可以给出一个等价的定义:
定义4:若矩阵函数A(t)A(t)A(t)的每个元素aij(t)a_{ij}(t)aij(t)在点t0∈Rt_0\in Rt0∈R处可微,则称A(t)A(t)A(t)在t0t_0t0处可微,且其在该点的导数为∂A∂t(t0)=[∂a11∂t(t0)⋯∂a1n∂t(t0)⋮⋱⋮∂am1∂t(t0)⋯∂amn∂t(t0)]\frac{\partial A}{\partial t}(t_0)=\begin{bmatrix}\frac{\partial a_{11}}{\partial t}(t_0)&\cdots&\frac{\partial a_{1n}}{\partial t}(t_0)\\\vdots&\ddots&\vdots\\\frac{\partial a_{m1}}{\partial t}(t_0)&\cdots&\frac{\partial a_{mn}}{\partial t}(t_0)\end{bmatrix}∂t∂A(t0)=⎣⎢⎡∂t∂a11(t0)⋮∂t∂am1(t0)⋯⋱⋯∂t∂a1n(t0)⋮∂t∂amn(t0)⎦⎥⎤
【注】A(t)A(t)A(t)在t0t_0t0处的微分写作dA(t0)=(dt0)∂A∂t(t0)dA(t_0)=(dt_0)\frac{\partial A}{\partial t}(t_0)dA(t0)=(dt0)∂t∂A(t0)
定理4(链式法则):设A=A(α)A=A(\alpha)A=A(α)在α=α0\alpha=\alpha_0α=α0处可微,标量α(t)\alpha(t)α(t)在t0t_0t0处可微,α0=α(t0)\alpha_0=\alpha(t_0)α0=α(t0),则A(α(t))A(\alpha(t))A(α(t))在t0t_0t0可微,且∂A∘α∂t(t0)=∂α∂t(t0)∂A∂t(α(t0))\frac{\partial A\circ\alpha}{\partial t}(t_0)=\frac{\partial \alpha}{\partial t}(t_0)\frac{\partial A}{\partial t}(\alpha(t_0))∂t∂A∘α(t0)=∂t∂α(t0)∂t∂A(α(t0))。
矩阵对标量求导有一些简单的公式,在此作为例子:
设A(t),B(t)A(t),B(t)A(t),B(t)在t0t_0t0处可微,则有
若AAA,BBB可加,则∂(A+B)∂t(t0)=∂A∂t(t0)+∂B∂t(t0)\frac{\partial (A+B)}{\partial t}(t_0)=\frac{\partial A}{\partial t}(t_0)+\frac{\partial B}{\partial t}(t_0)∂t∂(A+B)(t0)=∂t∂A(t0)+∂t∂B(t0)若AAA,BBB可乘,则∂AB∂t(t0)=∂A∂t(t0)B(t0)+A(t0)∂B∂t(t0)\frac{\partial AB}{\partial t}(t_0)=\frac{\partial A}{\partial t}(t_0)B(t_0)+A(t_0)\frac{\partial B}{\partial t}(t_0)∂t∂AB(t0)=∂t∂A(t0)B(t0)+A(t0)∂t∂B(t0)设标量函数α(t)\alpha(t)α(t)在t0t_0t0处可微,则∂αA∂t(t0)=∂α∂t(t0)B(t0)+α(t0)∂B∂t(t0)\frac{\partial \alpha A}{\partial t}(t_0)=\frac{\partial \alpha}{\partial t}(t_0)B(t_0)+\alpha(t_0)\frac{\partial B}{\partial t}(t_0)∂t∂αA(t0)=∂t∂α(t0)B(t0)+α(t0)∂t∂B(t0)
标量对矩阵求导
这部分内容才是机器学习中需要用到的矩阵微分的核心内容。神经网络往往以一个标量值的代价函数作为优化目标,网络参数往往是矩阵形式的,前向传播的过程可以视为计算一个以多个矩阵为自变量的复合函数的值,反向传播的过程可以视为运用链式法则(或复合函数的微分法则)计算该标量函数对各个矩阵参数的导数。
鉴于以(多个)矩阵为自变量的标量函数本质上是多元数量值函数,我们先研究多元数量值函数的微分和导数的定义,然后将它们推广。由于多元数量值函数的微分可以视作多元向量值函数的微分的特例,因此在定义1中令m=1m=1m=1,就得到了多元数量值函数微分的概念:
定义5:设c∈Rnc\in R^nc∈Rn,函数f:D→Rf:D\rightarrow Rf:D→R在ccc的某个半径为r>0r>0r>0的邻域U(c)U(c)U(c)内有定义。若存在向量a∈Rna\in R^{n}a∈Rn,使得对于任意的u∈U˚(0)u\in \mathring U(0)u∈U˚(0)(0∈Rn0\in R^n0∈Rn是零向量,去心邻域U˚(0)\mathring U(0)U˚(0)的半径为rrr)有如下关系成立:f(c+u)−f(c)=aTu+ο(∣∣u∣∣2)=∑iaiui+ο(∑iui2)f(c+u)-f(c)=a^Tu+\omicron(||u||_2)=\sum_{i}a_iu_i+\omicron(\sqrt{\sum_{i}u_i^2})f(c+u)−f(c)=aTu+ο(∣∣u∣∣2)=i∑aiui+ο(i∑ui2),其中ο(∣∣u∣∣2)\omicron(||u||_2)ο(∣∣u∣∣2)是当u→0u\rightarrow 0u→0时的一个高阶无穷小,则称fff在点ccc处是可微的,称uuu的线性函数aTua^TuaTu为fff在点ccc处的微分,记作df(c)=aTudf(c)=a^Tudf(c)=aTu,并称aaa是fff在点ccc处的梯度向量,简称梯度。
注意到微分的本质是把函数局部线性化,得到函数在某一点的邻域内的线性主部,故很容易将定义5推广到以矩阵为自变量的标量函数的情形:
定义6:设(aij)m×n=A∈Rm×n(a_{ij})_{m\times n}=A\in R^{m\times n}(aij)m×n=A∈Rm×n,存在r>0r>0r>0,数量值函数y=f(X)y=f(X)y=f(X)当∣∣X−A∣∣F<r||X-A||_F<r∣∣X−A∣∣F<r时有定义。若存在(bij)m×n=B∈Rm×n(b_{ij})_{m\times n}=B\in R^{m\times n}(bij)m×n=B∈Rm×n,使得对于任意的(uij)m×n=U∈Rm×n(u_{ij})_{m\times n}=U\in R^{m\times n}(uij)m×n=U∈Rm×n满足0<∣∣U∣∣F<r0<||U||_F<r0<∣∣U∣∣F<r有如下关系成立:f(A+U)−f(A)=∑ijbijuij+ο(∑ijuij2)=tr(BTU)+ο(∣∣U∣∣F)f(A+U)-f(A)=\sum_{ij}b_{ij}u_{ij}+\omicron(\sqrt{\sum_{ij}u_{ij}^2})=tr(B^TU)+\omicron(||U||_F)f(A+U)−f(A)=ij∑bijuij+ο(ij∑uij2)=tr(BTU)+ο(∣∣U∣∣F),则称fff在点AAA处是可微的,称UUU的m×nm\times nm×n个元素的线性函数tr(BTU)tr(B^TU)tr(BTU)为fff在点AAA处的微分,记作df(A)=tr(BTU)df(A)=tr(B^TU)df(A)=tr(BTU),并称BBB是fff在点AAA处的梯度矩阵,简称梯度。UUU是自变量在AAA处的增量,常记作U=dAU=dAU=dA,即df(A)=tr(BTdA)df(A)=tr(B^TdA)df(A)=tr(BTdA)
【注】tr(∙)tr(\bullet)tr(∙)是指矩阵的迹;∣∣∙∣∣F||\bullet||_F∣∣∙∣∣F是指矩阵的Frobenius范数,当矩阵为行向量或列向量时,∣∣∙∣∣F||\bullet||_F∣∣∙∣∣F就是向量的Frobenius范数,即2范数,矩阵范数的内容见矩阵的条件数
用类似定理1的证明方法,可以证明B=∂f∂X(A)=(∂f∂xij(A))m×nB=\frac{\partial f}{\partial X}(A)=(\frac{\partial f}{\partial x_{ij}}(A))_{m\times n}B=∂X∂f(A)=(∂xij∂f(A))m×n即梯度矩阵与fff对XXX的偏导相等(需要注意的是,以矩阵为自变量的实值函数也有Jacobian矩阵的定义,Jacobian矩阵是梯度矩阵的转置)
利用该结论可以证明如下微分公式:
d∣X∣=tr(X∗dX)d|X|=tr(X^*dX)d∣X∣=tr(X∗dX),其中∣X∣|X|∣X∣是方阵XXX(阶数大于等于2)的行列式,X∗X^*X∗是XXX的伴随矩阵
证:
由行列式的定义,∣X∣=∑jxijAij|X|=\sum_jx_{ij}A_{ij}∣X∣=∑jxijAij对任意i=1,2,...,ni=1,2,...,ni=1,2,...,n成立,其中AijA_{ij}Aij是xijx_{ij}xij的代数余子式(注意xijx_{ij}xij不是AijA_{ij}Aij的自变量,即AijA_{ij}Aij的取值与xijx_{ij}xij无关),则∂∣X∣∂xij=Aij\frac{\partial |X|}{\partial x_{ij}}=A_{ij}∂xij∂∣X∣=Aij,故∂∣X∣∂X=(X∗)T\frac{\partial |X|}{\partial X}=(X^*)^T∂X∂∣X∣=(X∗)T,d∣X∣=tr(X∗dX)d|X|=tr(X^*dX)d∣X∣=tr(X∗dX)
还可以证明如下导数公式:
设f(X),g(X)f(X),g(X)f(X),g(X)是以矩阵XXX为自变量的数量值函数,若fff和ggg在AAA处可微,则f(X)g(X),f(X)+g(X)f(X)g(X),f(X)+g(X)f(X)g(X),f(X)+g(X)在AAA处可微,且:
∂f(X)g(X)∂X=∂f(X)∂Xg(X)+f(X)∂g(X)∂X\frac{\partial f(X)g(X)}{\partial X}=\frac{\partial f(X)}{\partial X}g(X)+f(X)\frac{\partial g(X)}{\partial X}∂X∂f(X)g(X)=∂X∂f(X)g(X)+f(X)∂X∂g(X)∂f(X)±g(X)∂X=∂f(X)∂X±∂g(X)∂X\frac{\partial f(X)\pm g(X)}{\partial X}=\frac{\partial f(X)}{\partial X}\pm\frac{\partial g(X)}{\partial X}∂X∂f(X)±g(X)=∂X∂f(X)±∂X∂g(X)
现在我们依次考虑两种复合函数的情形:
内层函数是以矩阵为自变量的数量值函数,外层函数是一元数量值函数内层函数是以矩阵为自变量的矩阵值函数(称为矩阵函数),外层函数是以矩阵为自变量的数量值函数
第一种情形:
定理5:设y=f(X),y∈R,X∈Rm×ny=f(X),y\in R, X\in R^{m\times n}y=f(X),y∈R,X∈Rm×n在点AAA处可微,z=g(y),z∈R,y∈Rz=g(y),z\in R,y\in Rz=g(y),z∈R,y∈R在点b=f(A)b=f(A)b=f(A)处可微,则z=g(f(X))z=g(f(X))z=g(f(X))在点AAA处可微,且在点AAA处的微分为dg(f(A))=tr((g′(b)∂f∂X(A))TdX)dg(f(A))=tr((g'(b)\frac{\partial f}{\partial X}(A))^TdX)dg(f(A))=tr((g′(b)∂X∂f(A))TdX)
证明思路与定理2是类似的,证明的关键在于limΔX→Oο(∣Δy∣)∣∣ΔX∣∣F=0lim_{\Delta X\rightarrow O}\frac{\omicron(|\Delta y|)}{||\Delta X||_F}=0limΔX→O∣∣ΔX∣∣Fο(∣Δy∣)=0,基本思路是改写为limΔX→Oο(∣Δy∣)∣Δy∣∣Δy∣∣∣ΔX∣∣F=0lim_{\Delta X\rightarrow O}\frac{\omicron(|\Delta y|)}{|\Delta y|}\frac{|\Delta y|}{||\Delta X||_F}=0limΔX→O∣Δy∣ο(∣Δy∣)∣∣ΔX∣∣F∣Δy∣=0,证明limΔX→Oο(∣Δy∣)∣Δy∣=0lim_{\Delta X\rightarrow O}\frac{\omicron(|\Delta y|)}{|\Delta y|}=0limΔX→O∣Δy∣ο(∣Δy∣)=0且∣Δy∣∣∣ΔX∣∣F\frac{|\Delta y|}{||\Delta X||_F}∣∣ΔX∣∣F∣Δy∣局部有界即可。利用绝对值不等式放缩,∣Δy∣⩽∣tr((∂f∂X(A))TΔX)∣+∣ο(∣∣ΔX)∣∣F)∣|\Delta y|\leqslant|tr((\frac{\partial f}{\partial X}(A))^T\Delta X)|+|\omicron(||\Delta X)||_F)|∣Δy∣⩽∣tr((∂X∂f(A))TΔX)∣+∣ο(∣∣ΔX)∣∣F)∣,∣ο(∣∣ΔX)∣∣F)∣∣∣ΔX∣∣F\frac{|\omicron(||\Delta X)||_F)|}{||\Delta X||_F}∣∣ΔX∣∣F∣ο(∣∣ΔX)∣∣F)∣局部有界是显然的,而∣tr((∂f∂X(A))TΔX)∣∣∣ΔX∣∣F⩽∑ij∣(∂f∂Xij(Aij)∣∣ΔXij∣∣∣ΔX∣∣F⩽∑ij∣(∂f∂Xij(Aij)∣\frac{|tr((\frac{\partial f}{\partial X}(A))^T\Delta X)|}{||\Delta X||_F}\leqslant\sum_{ij}\frac{|(\frac{\partial f}{\partial X_{ij}}(A_{ij})||\Delta X_{ij}|}{||\Delta X||_F}\leqslant\sum_{ij}|(\frac{\partial f}{\partial X_{ij}}(A_{ij})|∣∣ΔX∣∣F∣tr((∂X∂f(A))TΔX)∣⩽∑ij∣∣ΔX∣∣F∣(∂Xij∂f(Aij)∣∣ΔXij∣⩽∑ij∣(∂Xij∂f(Aij)∣,也是局部有界的。
第二种情形:
需要考虑矩阵函数的微分,下面给出矩阵函数的微分的定义。
这里不引入向量化和kronecker积的运算,在定义6的基础上仿照定义4的方式给出矩阵函数的微分的定义:
定义7:设有矩阵函数Y=F(X),X∈Rm×n,Y∈Rp×qY=F(X),X\in R^{m\times n},Y\in R^{p\times q}Y=F(X),X∈Rm×n,Y∈Rp×q,若F(X)F(X)F(X)的每个元素fij(X),i=1,2,...,p,j=1,2,...,qf_{ij}(X),i=1,2,...,p,j=1,2,...,qfij(X),i=1,2,...,p,j=1,2,...,q都在点AAA处可微,则称F(X)F(X)F(X)在点AAA处可微,且点AAA处的微分为dF(A)=[df11(A)...df1q(A)⋮⋱⋮dfp1(A)⋯dfpq(A)]dF(A)=\begin{bmatrix}df_{11}(A)&...&df_{1q}(A)\\\vdots&\ddots&\vdots\\df_{p1}(A)&\cdots&df_{pq}(A)\end{bmatrix}dF(A)=⎣⎢⎡df11(A)⋮dfp1(A)...⋱⋯df1q(A)⋮dfpq(A)⎦⎥⎤该矩阵称为微分矩阵
复合矩阵函数的微分法则是成立的(从而微分的形式不变性也是成立的),但在不使用vec+kronecker计算的情况下应该是无法证明的,这个在后面的博客中再说(vec+kronecker可以参考数学-矩阵计算(2)矩阵函数微积分前奏)
下面考虑有多个矩阵自变量的情况:
定义8:设Ai∈Rmi×ni,i=1,2,...,kA_i\in R^{m_i\times n_i},i=1,2,...,kAi∈Rmi×ni,i=1,2,...,k,存在r>0r>0r>0,数量值函数y=f(X1,X2,...,Xk),Xi∈Rmi×niy=f(X_1,X_2,...,X_k),X_i\in R^{m_i\times n_i}y=f(X1,X2,...,Xk),Xi∈Rmi×ni当∑i∣∣Xi−Ai∣∣F2<r\sqrt{\sum_{i}||X_i-A_i||_F^2}<r∑i∣∣Xi−Ai∣∣F2<r时有定义。若存在Bi∈Rmi×ni,i=1,2,...,kB_i\in R^{m_i\times n_i},i=1,2,...,kBi∈Rmi×ni,i=1,2,...,k,使得对于任意的Ui∈Rmi×ni,i=1,2,...,kU_i\in R^{m_i\times n_i},i=1,2,...,kUi∈Rmi×ni,i=1,2,...,k满足0<∑i∣∣Ui∣∣F2<r0<\sqrt{\sum_i||U_i||_F^2}<r0<∑i∣∣Ui∣∣F2<r有如下关系成立:f(A1+U1,A2+U2,...,Ak+Uk)−f(A1,A2,...,Ak)=∑itr(BiTUi)+ο(∑i∣∣Ui∣∣F2)f(A_1+U_1,A_2+U_2,...,A_k+U_k)-f(A_1,A_2,...,A_k)=\sum_itr(B_i^TU_i)+\omicron(\sqrt{\sum_i||U_i||_F^2})f(A1+U1,A2+U2,...,Ak+Uk)−f(A1,A2,...,Ak)=i∑tr(BiTUi)+ο(i∑∣∣Ui∣∣F2),则称fff在(A1,A2,...,Ak)(A_1,A_2,...,A_k)(A1,A2,...,Ak)处是可微的,记作df(A1,...Ak)=∑itr(BiTdAi)df(A_1,...A_k)=\sum_itr(B_i^TdA_i)df(A1,...Ak)=∑itr(BiTdAi)
可以证明定义中的BiB_iBi恰好是fff对XiX_iXi在AiA_iAi处的偏导∂f∂Xi(Ai)\frac{\partial f}{\partial X_i}(A_i)∂Xi∂f(Ai),微分形式不变性等仍成立,不再赘述。
下面根据定义7以及一阶微分的形式不变性证明若干常用的微分矩阵的计算公式,前面的例子中出现的微分公式都可以视作下面的公式的特例:(以下设α∈R\alpha\in Rα∈R为常数,β∈R\beta \in Rβ∈R为变量,A=(aij)A=(a_{ij})A=(aij)为常矩阵,X=(xij)X=(x_{ij})X=(xij),Y=(yij)Y=(y_{ij})Y=(yij)为变量,这三个矩阵的大小视公式中出现的运算而定)
dA=OdA=OdA=O
证:
dA=[da11⋯da1n⋮⋱⋮dam1⋯damn]=OdA=\begin{bmatrix}da_{11}&\cdots&da_{1n}\\\vdots&\ddots&\vdots\\da_{m1}&\cdots&da_{mn}\end{bmatrix}=OdA=⎣⎢⎡da11⋮dam1⋯⋱⋯da1n⋮damn⎦⎥⎤=Od(αX)=αdXd(\alpha X)=\alpha dXd(αX)=αdX
证:
d(αX)=[d(αx11)⋯d(αx1n)⋮⋱⋮d(αxm1)⋯d(αxmn)]=[αdx11⋯αdx1n⋮⋱⋮αdxm1⋯αdxmn]=αdXd(\alpha X)=\begin{bmatrix}d(\alpha x_{11})&\cdots&d(\alpha x_{1n})\\\vdots&\ddots&\vdots\\d(\alpha x_{m1})&\cdots&d(\alpha x_{mn})\end{bmatrix}=\begin{bmatrix}\alpha dx_{11}&\cdots&\alpha dx_{1n}\\\vdots&\ddots&\vdots\\\alpha dx_{m1}&\cdots&\alpha dx_{mn}\end{bmatrix}=\alpha dXd(αX)=⎣⎢⎡d(αx11)⋮d(αxm1)⋯⋱⋯d(αx1n)⋮d(αxmn)⎦⎥⎤=⎣⎢⎡αdx11⋮αdxm1⋯⋱⋯αdx1n⋮αdxmn⎦⎥⎤=αdXd(βX)=(dβ)X+βdXd(\beta X)=(d\beta)X+\beta dXd(βX)=(dβ)X+βdX
证:
d(βX)=[d(βx11)⋯d(βx1n)⋮⋱⋮d(βxm1)⋯d(βxmn)]=[x11dβ+βdx11⋯x1ndβ+βdx1n⋮⋱⋮xm1dβ+βdxm1⋯xmndβ+βdxmn]=(dβ)X+βdXd(\beta X)=\begin{bmatrix}d(\beta x_{11})&\cdots&d(\beta x_{1n})\\\vdots&\ddots&\vdots\\d(\beta x_{m1})&\cdots&d(\beta x_{mn})\end{bmatrix}=\begin{bmatrix}x_{11}d\beta+\beta dx_{11}&\cdots&x_{1n}d\beta+\beta dx_{1n}\\\vdots&\ddots&\vdots\\x_{m1}d\beta+\beta dx_{m1}&\cdots&x_{mn}d\beta+\beta dx_{mn}\end{bmatrix}=(d\beta)X+\beta dXd(βX)=⎣⎢⎡d(βx11)⋮d(βxm1)⋯⋱⋯d(βx1n)⋮d(βxmn)⎦⎥⎤=⎣⎢⎡x11dβ+βdx11⋮xm1dβ+βdxm1⋯⋱⋯x1ndβ+βdx1n⋮xmndβ+βdxmn⎦⎥⎤=(dβ)X+βdXdXT=(dX)TdX^T=(dX)^TdXT=(dX)T
证:
dXT=[dx11⋯dxm1⋮⋱⋮dx1n⋯dxmn]=(dX)TdX^T=\begin{bmatrix}dx_{11}&\cdots&dx_{m1}\\\vdots&\ddots&\vdots\\dx_{1n}&\cdots&dx_{mn}\end{bmatrix}=(dX)^TdXT=⎣⎢⎡dx11⋮dx1n⋯⋱⋯dxm1⋮dxmn⎦⎥⎤=(dX)Tdtr(X)=tr(dX)dtr(X)=tr(dX)dtr(X)=tr(dX)
证:
dtr(X)=d∑ixii=∑idxii=tr(dX)dtr(X)=d\sum_ix_{ii}=\sum_idx_{ii}=tr(dX)dtr(X)=d∑ixii=∑idxii=tr(dX)设FFF是一个逐元素函数,即F(X)=[f(x11)⋯f(x1n)⋮⋱⋮f(xm1)⋯f(xmn)],f:R→RF(X)=\begin{bmatrix}f(x_{11})&\cdots&f(x_{1n})\\\vdots&\ddots&\vdots\\f(x_{m1})&\cdots&f(x_{mn})\end{bmatrix},f:R\rightarrow RF(X)=⎣⎢⎡f(x11)⋮f(xm1)⋯⋱⋯f(x1n)⋮f(xmn)⎦⎥⎤,f:R→R,则dF(X)=F′(X)⊙dXdF(X)=F'(X)\odot dXdF(X)=F′(X)⊙dX,其中F′F'F′也是逐元素函数
证:
dF(X)=[df(x11)⋯df(x1n)⋮⋱⋮df(xm1)⋯df(xmn)]=[f′(x11)dx11⋯f′(x1n)dx1n⋮⋱⋮f′(xm1)dxm1⋯f′(xmn)dxmn]=F′(X)⊙dXdF(X)=\begin{bmatrix}df(x_{11})&\cdots&df(x_{1n})\\\vdots&\ddots&\vdots\\df(x_{m1})&\cdots&df(x_{mn})\end{bmatrix}=\begin{bmatrix}f'(x_{11})dx_{11}&\cdots&f'(x_{1n})dx_{1n}\\\vdots&\ddots&\vdots\\f'(x_{m1})dx_{m1}&\cdots&f'(x_{mn})dx_{mn}\end{bmatrix}=F'(X)\odot dXdF(X)=⎣⎢⎡df(x11)⋮df(xm1)⋯⋱⋯df(x1n)⋮df(xmn)⎦⎥⎤=⎣⎢⎡f′(x11)dx11⋮f′(xm1)dxm1⋯⋱⋯f′(x1n)dx1n⋮f′(xmn)dxmn⎦⎥⎤=F′(X)⊙dXd(X±Y)=dX±dYd(X\pm Y)=dX\pm dYd(X±Y)=dX±dY
证:
d(X±Y)=[d(x11±y11)...d(x1n±y1n)⋮⋱⋮d(xm1±ym1)...d(xmn±ymn)]=[dx11±dy11...dx1n±dy1n⋮⋱⋮dxm1±dym1...dxmn±dymn]=dX±dYd(X\pm Y)=\begin{bmatrix}d(x_{11}\pm y_{11})&...&d(x_{1n}\pm y_{1n})\\\vdots&\ddots&\vdots\\d(x_{m1}\pm y_{m1})&...&d(x_{mn}\pm y_{mn})\end{bmatrix}=\begin{bmatrix}dx_{11}\pm dy_{11}&...&dx_{1n}\pm dy_{1n}\\\vdots&\ddots&\vdots\\dx_{m1}\pm dy_{m1}&...&dx_{mn}\pm dy_{mn}\end{bmatrix}=dX\pm dYd(X±Y)=⎣⎢⎡d(x11±y11)⋮d(xm1±ym1)...⋱...d(x1n±y1n)⋮d(xmn±ymn)⎦⎥⎤=⎣⎢⎡dx11±dy11⋮dxm1±dym1...⋱...dx1n±dy1n⋮dxmn±dymn⎦⎥⎤=dX±dYd(XY)=(dX)Y+XdYd(XY)=(dX)Y+XdYd(XY)=(dX)Y+XdY
证:
由于(d(XY))ij=d∑kxikykj=∑k(ykjdxik+xikdykj)=((dX)Y)ij+(XdY)ij(d(XY))_{ij}=d\sum_kx_{ik}y_{kj}=\sum_k(y_{kj}dx_{ik}+x_{ik}dy_{kj})=((dX)Y)_{ij}+(XdY)_{ij}(d(XY))ij=d∑kxikykj=∑k(ykjdxik+xikdykj)=((dX)Y)ij+(XdY)ij,故d(XY)=(dX)Y+XdYd(XY)=(dX)Y+XdYd(XY)=(dX)Y+XdY。d(X⊙Y)=dX⊙Y+X⊙dYd(X\odot Y)=dX\odot Y+X\odot dYd(X⊙Y)=dX⊙Y+X⊙dY
证:
由于(d(X⊙Y))ij=d(xijyij)=yijdxij+xijdyij=(dX⊙Y)ij+(X⊙dY)ij(d(X\odot Y))_{ij}=d(x_{ij}y_{ij})=y_{ij}dx_{ij}+x_{ij}dy_{ij}=(dX\odot Y)_{ij}+(X\odot dY)_{ij}(d(X⊙Y))ij=d(xijyij)=yijdxij+xijdyij=(dX⊙Y)ij+(X⊙dY)ij,故d(X⊙Y)=dX⊙Y+X⊙dYd(X\odot Y)=dX\odot Y+X\odot dYd(X⊙Y)=dX⊙Y+X⊙dY。
【注】⊙\odot⊙是逐元素乘积d(X⊘Y)=(dX⊙Y−X⊙dY)⊘(Y⊙Y)d(X\oslash Y)=(dX\odot Y-X\odot dY)\oslash(Y\odot Y)d(X⊘Y)=(dX⊙Y−X⊙dY)⊘(Y⊙Y)
证:
由于(d(X⊘Y))ij=dxijyij=yijdxij−xijdyijyij2=Zij(d(X\oslash Y))_{ij}=d\frac{x_{ij}}{y_{ij}}=\frac{y_{ij}dx_{ij}-x_{ij}dy_{ij}}{y_{ij}^2}=Z_{ij}(d(X⊘Y))ij=dyijxij=yij2yijdxij−xijdyij=Zij,其中Z=(dX⊙Y−X⊙dY)⊘(Y⊙Y)Z=(dX\odot Y-X\odot dY)\oslash(Y\odot Y)Z=(dX⊙Y−X⊙dY)⊘(Y⊙Y),故d(X⊘Y)=Z=(dX⊙Y−X⊙dY)⊘(Y⊙Y)d(X\oslash Y)=Z=(dX\odot Y-X\odot dY)\oslash(Y\odot Y)d(X⊘Y)=Z=(dX⊙Y−X⊙dY)⊘(Y⊙Y)。
【注】⊘\oslash⊘是逐元素除法
上面的公式基本就够用了,这些公式可以用来计算复合函数等复杂函数的微分矩阵,进而计算梯度矩阵/偏导矩阵。下面举几个微分矩阵和标量对矩阵求导的例子:(我们当然可以直接根据Jacobian矩阵或梯度矩阵的定义计算,但下面利用定义7/8+上面的微分公式+微分形式不变性来推导这些结果)
【注】关于矩阵的迹的运算律参考链接。
微分矩阵:
dX−1=−X−1(dX)X−1dX^{-1}=-X^{-1}(dX)X^{-1}dX−1=−X−1(dX)X−1
证:
对X−1X=IX^{-1}X=IX−1X=I两边微分,得(dX−1)X+X−1dX=O(dX^{-1})X+X^{-1}dX=O(dX−1)X+X−1dX=O,用X−1X^{-1}X−1右乘式的两端,得dX−1+X−1(dX)X−1=OdX^{-1}+X^{-1}(dX)X^{-1}=OdX−1+X−1(dX)X−1=O,即dX−1=−X−1(dX)X−1dX^{-1}=-X^{-1}(dX)X^{-1}dX−1=−X−1(dX)X−1。dln(X)=dX⊘Xd\ln(X)=dX \oslash Xdln(X)=dX⊘X,其中ln(X)\ln(X)ln(X)是将以e为底的对数函数逐元素应用到矩阵XXX上
证:
dln(X)=(1⊘X)⊙dX=dX⊘Xd\ln(X)=(1\oslash X)\odot dX=dX\oslash Xdln(X)=(1⊘X)⊙dX=dX⊘Xdσ(X)=σ(X)⊙σ(−X)⊙dXd\sigma(X)=\sigma(X)\odot\sigma(-X)\odot dXdσ(X)=σ(X)⊙σ(−X)⊙dX,其中σ(X)\sigma(X)σ(X)是将sigmoid函数逐元素应用到矩阵XXX上
【注】sigmoid函数是神经网络中常用的激活函数,定义为σ:R→R+,σ(z)=11+e−z\sigma:R\rightarrow R_+,\sigma(z)=\frac{1}{1+e^{-z}}σ:R→R+,σ(z)=1+e−z1
证:
只需证明∀z∈R,σ′(z)=σ(z)σ(−z)\forall z\in R,\sigma'(z)=\sigma(z)\sigma(-z)∀z∈R,σ′(z)=σ(z)σ(−z)。由sigmoid函数的定义得(1+e−z)σ(z)=1(1+e^{-z})\sigma(z)=1(1+e−z)σ(z)=1,两端微分得−e−zσ(z)dz+(1+e−z)σ′(z)dz=0-e^{-z}\sigma(z)dz+(1+e^{-z})\sigma'(z)dz=0−e−zσ(z)dz+(1+e−z)σ′(z)dz=0,故−e−zσ(z)+(1+e−z)σ′(z)=0-e^{-z}\sigma(z)+(1+e^{-z})\sigma'(z)=0−e−zσ(z)+(1+e−z)σ′(z)=0,σ′(z)=e−zσ(z)1+e−z=σ(z)1+ez=σ(z)σ(−z)\sigma'(z)=\frac{e^{-z}\sigma(z)}{1+e^{-z}}=\frac{\sigma(z)}{1+e^{z}}=\sigma(z)\sigma(-z)σ′(z)=1+e−ze−zσ(z)=1+ezσ(z)=σ(z)σ(−z)。dg(x)=1Texdiag(ex)−ex(ex)T(1Tex)2dxdg(x)=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}dxdg(x)=(1Tex)21Texdiag(ex)−ex(ex)Tdx,其中g(x)=ex1Tex,x∈Rng(x)=\frac{e^x}{1^Te^x},x\in R^ng(x)=1Texex,x∈Rn,exe^xex是将以eee为底的指数函数逐元素应用到向量xxx上
【注】这里定义的函数ggg就是softmax函数,softmax函数是神经网络中常用的激活函数,在分类问题中常用于输出层得到概率分布
证:
由g(x)=ex1Tex,x∈Rng(x)=\frac{e^x}{1^Te^x},x\in R^ng(x)=1Texex,x∈Rn得1Texg(x)=ex1^Te^xg(x)=e^x1Texg(x)=ex,两端微分得1T(ex⊙dx)g(x)+1Texdg(x)=ex⊙dx1^T(e^x\odot dx)g(x)+1^Te^xdg(x)=e^x\odot dx1T(ex⊙dx)g(x)+1Texdg(x)=ex⊙dx,又因为1T(ex⊙dx)=tr(1T(ex⊙dx))=tr((1⊙ex)Tdx)=(ex)Tdx1^T(e^x\odot dx)=tr(1^T(e^x\odot dx))=tr((1\odot e^x)^Tdx)=(e^x)^Tdx1T(ex⊙dx)=tr(1T(ex⊙dx))=tr((1⊙ex)Tdx)=(ex)Tdx,故dg(x)=ex⊙dx−(ex)Tdxg(x)1Tex=diag(ex)dx−g(x)(ex)Tdx1Tex=1Texdiag(ex)−ex(ex)T(1Tex)2dxdg(x)=\frac{e^x\odot dx-(e^x)^Tdxg(x)}{1^Te^x}=\frac{diag(e^x)dx-g(x)(e^x)^Tdx}{1^Te^x}=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}dxdg(x)=1Texex⊙dx−(ex)Tdxg(x)=1Texdiag(ex)dx−g(x)(ex)Tdx=(1Tex)21Texdiag(ex)−ex(ex)Tdx。
梯度矩阵/Jacobian矩阵:
∂tr(X)∂X=I\frac{\partial tr(X)}{\partial X}=I∂X∂tr(X)=I
证:
由dtr(X)=tr(dX)dtr(X)=tr(dX)dtr(X)=tr(dX)及定义7即证。∂tr(XTX)∂X=2X\frac{\partial tr(X^TX)}{\partial X}=2X∂X∂tr(XTX)=2X
证:
由d(tr(XTX))=tr(d(XTX))=tr((dXT)X+XTdX)=tr((dX)TX)+tr(XTdX)=2tr(XTdX)d(tr(X^TX))=tr(d(X^TX))=tr((dX^T)X+X^TdX)=tr((dX)^TX)+tr(X^TdX)=2tr(X^TdX)d(tr(XTX))=tr(d(XTX))=tr((dXT)X+XTdX)=tr((dX)TX)+tr(XTdX)=2tr(XTdX)及定义7即证。设y=g(x),x,y∈Rny=g(x),x,y\in R^ny=g(x),x,y∈Rn,其中ggg是softmax函数,则∂y∂xT=[y1(1−y1)−y1y2⋯−y1yn−y2y1y2(1−y2)⋯−y2yn⋯⋯⋯⋯−yny1−yny2⋯yn(1−yn)]\frac{\partial y}{\partial x^T}=\begin{bmatrix}y_1(1-y_1)&-y_1y_2&\cdots&-y_1y_n\\-y_2y_1&y_2(1-y_2)&\cdots&-y_2y_n\\\cdots&\cdots&\cdots&\cdots\\-y_ny_1&-y_ny_2&\cdots&y_n(1-y_n)\end{bmatrix}∂xT∂y=⎣⎢⎢⎡y1(1−y1)−y2y1⋯−yny1−y1y2y2(1−y2)⋯−yny2⋯⋯⋯⋯−y1yn−y2yn⋯yn(1−yn)⎦⎥⎥⎤
证:
利用dg(x)=1Texdiag(ex)−ex(ex)T(1Tex)2dxdg(x)=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}dxdg(x)=(1Tex)21Texdiag(ex)−ex(ex)Tdx(这个例子也可以直接根据Jacobian矩阵的定义计算)。∂y∂xT=1Texdiag(ex)−ex(ex)T(1Tex)2=1(∑iexi)2(∑iexi[ex1ex2⋯exn]−[ex1ex1ex1ex2⋯ex1exnex2ex1ex2ex2⋯ex2exn⋯⋯⋯⋯exnex1exnex2⋯exnexn])=[ex1∑iexi(1−ex1∑iexi)−ex1∑iexiex2∑iexi⋯−ex1∑iexiexn∑iexi−ex2∑iexiex1∑iexiex2∑iexi(1−ex2∑iexi)⋯−ex2∑iexiexn∑iexi⋯⋯⋯⋯−exn∑iexiex1∑iexi−exn∑iexiex2∑iexi⋯exn∑iexi(1−exn∑iexi)]=[y1(1−y1)−y1y2⋯−y1yn−y2y1y2(1−y2)⋯−y2yn⋯⋯⋯⋯−yny1−yny2⋯yn(1−yn)]\begin{aligned}\frac{\partial y}{\partial x^T}&=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}\\&=\frac{1}{(\sum_ie^{x_i})^2}(\sum_ie^{x_i}\begin{bmatrix}e^{x_1}&&&\\&e^{x_2}&&\\&&\cdots&\\&&&e^{x_n}\end{bmatrix}-\begin{bmatrix}e^{x_1}e^{x_1}&e^{x_1}e^{x_2}&\cdots&e^{x_1}e^{x_n}\\e^{x_2}e^{x_1}&e^{x_2}e^{x_2}&\cdots&e^{x_2}e^{x_n}\\\cdots&\cdots&\cdots&\cdots\\e^{x_n}e^{x_1}&e^{x_n}e^{x_2}&\cdots&e^{x_n}e^{x_n}\end{bmatrix})\\&=\begin{bmatrix} \frac{e^{x_1}}{\sum_ie^{x_i}}(1-\frac{e^{x_1}}{\sum_ie^{x_i}})&-\frac{e^{x_1}}{\sum_ie^{x_i}}\frac{e^{x_2}}{\sum_ie^{x_i}}&\cdots&-\frac{e^{x_1}}{\sum_ie^{x_i}}\frac{e^{x_n}}{\sum_ie^{x_i}}\\-\frac{e^{x_2}}{\sum_ie^{x_i}}\frac{e^{x_1}}{\sum_ie^{x_i}}&\frac{e^{x_2}}{\sum_ie^{x_i}}(1-\frac{e^{x_2}}{\sum_ie^{x_i}})&\cdots&-\frac{e^{x_2}}{\sum_ie^{x_i}}\frac{e^{x_n}}{\sum_ie^{x_i}}\\\cdots&\cdots&\cdots&\cdots\\-\frac{e^{x_n}}{\sum_ie^{x_i}}\frac{e^{x_1}}{\sum_ie^{x_i}}&-\frac{e^{x_n}}{\sum_ie^{x_i}}\frac{e^{x_2}}{\sum_ie^{x_i}}&\cdots&\frac{e^{x_n}}{\sum_ie^{x_i}}(1-\frac{e^{x_n}}{\sum_ie^{x_i}})\end{bmatrix}\\&=\begin{bmatrix}y_1(1-y_1)&-y_1y_2&\cdots&-y_1y_n\\-y_2y_1&y_2(1-y_2)&\cdots&-y_2y_n\\\cdots&\cdots&\cdots&\cdots\\-y_ny_1&-y_ny_2&\cdots&y_n(1-y_n)\end{bmatrix}\end{aligned}∂xT∂y=(1Tex)21Texdiag(ex)−ex(ex)T=(∑iexi)21(i∑exi⎣⎢⎢⎡ex1ex2⋯exn⎦⎥⎥⎤−⎣⎢⎢⎡ex1ex1ex2ex1⋯exnex1ex1ex2ex2ex2⋯exnex2⋯⋯⋯⋯ex1exnex2exn⋯exnexn⎦⎥⎥⎤)=⎣⎢⎢⎢⎡∑iexiex1(1−∑iexiex1)−∑iexiex2∑iexiex1⋯−∑iexiexn∑iexiex1−∑iexiex1∑iexiex2∑iexiex2(1−∑iexiex2)⋯−∑iexiexn∑iexiex2⋯⋯⋯⋯−∑iexiex1∑iexiexn−∑iexiex2∑iexiexn⋯∑iexiexn(1−∑iexiexn)⎦⎥⎥⎥⎤=⎣⎢⎢⎡y1(1−y1)−y2y1⋯−yny1−y1y2y2(1−y2)⋯−yny2⋯⋯⋯⋯−y1yn−y2yn⋯yn(1−yn)⎦⎥⎥⎤
应用
线性回归问题的最小二乘解
机器学习中的线性回归问题表述如下:
设有m个样本s1,s2,...,sms_1,s_2,...,s_ms1,s2,...,sm(为表示方便,假设sis_isi是行向量),每个样本包含n个特征(siT∈Rns_i^T\in R^nsiT∈Rn),样本的标签分别是y1,y2,...,ym∈Ry_1,y_2,...,y_m\in Ry1,y2,...,ym∈R。现要求得一线性模型yi=siθ+by_i=s_i\theta+byi=siθ+b对于任意i成立,其中θ∈Rn\theta\in R^nθ∈Rn和b∈Rb\in Rb∈R是要求解的参数。该问题可写成如下矩阵形式:设ai=[1si]a_i=\begin{bmatrix}1&s_i\end{bmatrix}ai=[1si],A=[a1a2...am]A=\begin{bmatrix}a_1\\a_2\\...\\a_m\end{bmatrix}A=⎣⎢⎢⎡a1a2...am⎦⎥⎥⎤(A称为设计矩阵),x=[bθ]x=\begin{bmatrix}b\\\theta\end{bmatrix}x=[bθ],y=[y1y2...ym]y=\begin{bmatrix}y_1\\y_2\\...\\y_m\end{bmatrix}y=⎣⎢⎢⎡y1y2...ym⎦⎥⎥⎤,求解参数向量x使得Ax=yAx=yAx=y。可见线性回归问题实质上就是求解一个线性方程组。
在前面的博客中,曾给出线性方程组最小二乘解的广义逆解法和投影矩阵解法,并证明了这些方法的正确性。现在利用矩阵微分的方法解决这个问题:
根据最小二乘解的定义,我们要最小化f(x)=∣∣Ax−y∣∣2f(x)=||Ax-y||_2f(x)=∣∣Ax−y∣∣2,这等价于最小化z=f(x)2=∣∣Ax−y∣∣22=(Ax−y)T(Ax−y)z=f(x)^2=||Ax-y||_2^2=(Ax-y)^T(Ax-y)z=f(x)2=∣∣Ax−y∣∣22=(Ax−y)T(Ax−y)。dz=(Adx)T(Ax−y)+(Ax−y)TAdx=2(Ax−y)TAdxdz=(Adx)^T(Ax-y)+(Ax-y)^TAdx=2(Ax-y)^TAdxdz=(Adx)T(Ax−y)+(Ax−y)TAdx=2(Ax−y)TAdx,得∂z∂x=2AT(Ax−y)\frac{\partial z}{\partial x}=2A^T(Ax-y)∂x∂z=2AT(Ax−y)。d∂z∂x=2ATAdxd\frac{\partial z}{\partial x}=2A^TAdxd∂x∂z=2ATAdx,故Hessian矩阵为∂∂xT(∂z∂x)=2ATA\frac{\partial}{\partial x^T}(\frac{\partial z}{\partial x})=2A^TA∂xT∂(∂x∂z)=2ATA,是对称半正定的,故zzz是凸函数。令∂z∂x=0\frac{\partial z}{\partial x}=0∂x∂z=0即得到全局最优解,得正规方程ATAx=ATyA^TAx=A^TyATAx=ATy,这就证明了求最小二乘解等价于解正规方程。
L2正则化情形
正则化是一种提高模型泛化能力的技术,通过“权值衰减”的方式,缓解模型的过拟合问题。在线性回归中讨论L2正则化,不仅是因为这项技术能够增强模型的泛化能力,还因为对于线性回归问题来说,只要进行L2正则化,那么最优解存在且唯一。
令S=[s1s2...sm]S=\begin{bmatrix}s_1\\s_2\\...\\s_m\end{bmatrix}S=⎣⎢⎢⎡s1s2...sm⎦⎥⎥⎤,P=[001×n0n×1In]P=\begin{bmatrix}0&0_{1\times n}\\0_{n\times 1}&I_n\end{bmatrix}P=[00n×101×nIn],则A=[1m×1S]A=\begin{bmatrix}1_{m\times 1}&S\end{bmatrix}A=[1m×1S],θ=Px\theta=Pxθ=Px。加入正则化项λ∣∣θ∣∣22,λ>0\lambda ||\theta||_2^2,\lambda>0λ∣∣θ∣∣22,λ>0后,我们要优化的函数为f(x)=∣∣Ax−y∣∣22+λ∣∣θ∣∣22=∣∣Ax−y∣∣22+λ∣∣Px∣∣22f(x)=||Ax-y||^2_2+\lambda ||\theta||_2^2=||Ax-y||^2_2+\lambda ||Px||_2^2f(x)=∣∣Ax−y∣∣22+λ∣∣θ∣∣22=∣∣Ax−y∣∣22+λ∣∣Px∣∣22对该式微分得12df=(Ax−y)TAdx+λxTPTPdx=(Ax−y)TAdx+λxTPdx\begin{aligned}\frac{1}{2}df&=(Ax-y)^TAdx+\lambda x^TP^TPdx\\&=(Ax-y)^TAdx+\lambda x^TPdx\end{aligned}21df=(Ax−y)TAdx+λxTPTPdx=(Ax−y)TAdx+λxTPdx于是12∂f∂x=AT(Ax−y)+λPTx=AT(Ax−y)+λPx\frac{1}{2}\frac{\partial f}{\partial x}=A^T(Ax-y)+\lambda P^Tx=A^T(Ax-y)+\lambda Px21∂x∂f=AT(Ax−y)+λPTx=AT(Ax−y)+λPx再求一次微分可得Hessian矩阵,易验证其为对称半正定的,于是带有L2正则化的线性回归仍是凸优化问题。令∂f∂x=0\frac{\partial f}{\partial x}=0∂x∂f=0得如下方程(ATA+λP)x=ATy(A^TA+\lambda P)x=A^Ty(ATA+λP)x=ATy只要ATA+λPA^TA+\lambda PATA+λP可逆,则方程的解存在且唯一。为此,我们证明如下结论:
定理:ATA+λPA^TA+\lambda PATA+λP是对称正定矩阵
证明:
对称性易证。现证明正定性:由A=[1m×1S]A=\begin{bmatrix}1_{m\times 1}&S\end{bmatrix}A=[1m×1S]及P=[001×n0n×1In]P=\begin{bmatrix}0&0_{1\times n}\\0_{n\times 1}&I_n\end{bmatrix}P=[00n×101×nIn]知ATA=[m1m×1TSST1m×1STS]A^TA=\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS\end{bmatrix}ATA=[mST1m×11m×1TSSTS]ATA+λP=[m1m×1TSST1m×1STS+λIn]A^TA+\lambda P=\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS+\lambda I_n\end{bmatrix}ATA+λP=[mST1m×11m×1TSSTS+λIn]任意0≠z∈Rn+10\neq z\in R^{n+1}0=z∈Rn+1,zTATAz=(Az)T(Az)=∣∣Az∣∣22⩾0z^TA^TAz=(Az)^T(Az)=||Az||_2^2\geqslant 0zTATAz=(Az)T(Az)=∣∣Az∣∣22⩾0(即ATAA^TAATA是对称半正定的),令z=(z1,z˜T)z=(z_1,\text{\~{z}}^T)z=(z1,z˜T),其中z˜∈Rn\text{\~{z}}\in R^nz˜∈Rn,则zTATAz=zT[m1m×1TSST1m×1STS]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜⩾0\begin{aligned}z^TA^TAz&=z^T\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS\end{bmatrix}z\\&=mz_1^2+2(\text{\~{z}}^TS^T1_{m\times 1})z_1+\text{\~{z}}^TS^TS\text{\~{z}}\\&\geqslant 0\end{aligned}zTATAz=zT[mST1m×11m×1TSSTS]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜⩾0zT(ATA+λP)z=zT[m1m×1TSST1m×1STS+λIn]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜+λ∣∣z˜∣∣22=zTATAz+λ∣∣z˜∣∣22\begin{aligned}z^T(A^TA+\lambda P)z&=z^T\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS+\lambda I_n\end{bmatrix}z\\&=mz_1^2+2(\text{\~{z}}^TS^T1_{m\times 1})z_1+\text{\~{z}}^TS^TS\text{\~{z}}+\lambda||\text{\~{z}}||_2^2\\&=z^TA^TAz+\lambda||\text{\~{z}}||_2^2\end{aligned}zT(ATA+λP)z=zT[mST1m×11m×1TSSTS+λIn]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜+λ∣∣z˜∣∣22=zTATAz+λ∣∣z˜∣∣22当z˜=0\text{\~{z}}=0z˜=0时,由z≠0z\neq 0z=0知z1≠0z_1\neq 0z1=0,zT(ATA+λP)z=mz12>0z^T(A^TA+\lambda P)z=mz_1^2\gt 0zT(ATA+λP)z=mz12>0;当z˜≠0\text{\~{z}}\neq 0z˜=0时,λ∣∣z˜∣∣22>0\lambda||\text{\~{z}}||_2^2\gt 0λ∣∣z˜∣∣22>0,故zT(ATA+λP)z=zTATAz+λ∣∣z˜∣∣22>0z^T(A^TA+\lambda P)z=z^TA^TAz+\lambda||\text{\~{z}}||_2^2\gt 0zT(ATA+λP)z=zTATAz+λ∣∣z˜∣∣22>0。
综上,只要z≠0z\neq 0z=0就有zT(ATA+λP)z>0z^T(A^TA+\lambda P)z>0zT(ATA+λP)z>0,故ATA+λPA^TA+\lambda PATA+λP是对称正定矩阵。
因为ATA+λPA^TA+\lambda PATA+λP是对称正定矩阵,故ATA+λPA^TA+\lambda PATA+λP一定可逆。这就证明了f(x)f(x)f(x)的最优解存在且唯一,且为x=(ATA+λP)−1ATyx=(A^TA+\lambda P)^{-1}A^Tyx=(ATA+λP)−1ATy。
多层前馈网络的反向传播
多层前馈网络又称多层感知机或BP网络,是回归问题/分类问题中常用的模型。
在推导反向传播前,先看一下前向传播是怎么进行的。
单样本:
设a[l]∈Rnla^{[l]}\in R^{n_l}a[l]∈Rnl是神经网络中第lll层的激励值,其中nln_lnl是第lll层的神经元个数,g[l]g^{[l]}g[l]是第lll层的激活函数,W[l]W^{[l]}W[l]和b[l]b^{[l]}b[l]是第lll层的参数。设输入层是第0层,即对于样本x∈Rn0x\in R^{n_0}x∈Rn0,有a[0]=xa^{[0]}=xa[0]=x,n0n_0n0即该样本的特征数量。输出层是第LLL层,即对于样本xxx,网络的预测值y^=a[L]∈RnL\hat y=a^{[L]}\in R^{n_L}y^=a[L]∈RnL。则前向传播的过程形式化如下:
依次对l=1,2,...,Ll=1,2,...,Ll=1,2,...,L计算下式:z[l]=W[l]a[l−1]+b[l]a[l]=g[l](z[l])z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]}\\a^{[l]}=g^{[l]}(z^{[l]})z[l]=W[l]a[l−1]+b[l]a[l]=g[l](z[l])得到神经网络的预测值y^=a[L]\hat y=a^{[L]}y^=a[L]后,计算损失函数的值L(y^,y)L(\hat y,y)L(y^,y),其中yyy是样本xxx的真实标签。
多样本:
设有mmm个样本x(1),x(2),...,x(m)x^{(1)},x^{(2)},...,x^{(m)}x(1),x(2),...,x(m)按列构成矩阵XXX,即X∈Rn0×mX\in R^{n_0\times m}X∈Rn0×m,它们的标签y(1),y(2),...,y(m)y^{(1)},y^{(2)},...,y^{(m)}y(1),y(2),...,y(m)按列构成矩阵YYY,Y∈RnL×mY\in R^{n_L\times m}Y∈RnL×m(在分类问题中,样本的标签是one-hot向量,即目标概率分布)。多样本的情形实际上只是让mmm个样本同时前向传播,神经网络的参数和单样本时是相同的。设A[l]=[a[l](1)a[l](2)⋯a[l](m)]A^{[l]}=\begin{bmatrix}a^{[l](1)}&a^{[l](2)}&\cdots&a^{[l](m)}\end{bmatrix}A[l]=[a[l](1)a[l](2)⋯a[l](m)],其中a[l](i)∈Rnla^{[l](i)}\in R^{n_l}a[l](i)∈Rnl是第lll层第iii个样本的激励值。多样本情形下的前向传播可形式化如下:
依次对l=1,2,...,Ll=1,2,...,Ll=1,2,...,L计算下式:Z[l]=W[l]A[l−1]+b[l]1m×1TA[l]=G[l](Z[l])Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}1_{m\times 1}^T\\A^{[l]}=G^{[l]}(Z^{[l]})Z[l]=W[l]A[l−1]+b[l]1m×1TA[l]=G[l](Z[l])函数G[l]:Rnl×m→Rnl×mG^{[l]}:R^{n_l\times m}\rightarrow R^{n_l\times m}G[l]:Rnl×m→Rnl×m满足G[l](Z[l])=[g[l](z[l](1))g[l](z[l](2))⋯g[l](z[l](m))]G^{[l]}(Z^{[l]})=\begin{bmatrix}g^{[l]}(z^{[l](1)})&g^{[l]}(z^{[l](2)})&\cdots&g^{[l]}(z^{[l](m)})\end{bmatrix}G[l](Z[l])=[g[l](z[l](1))g[l](z[l](2))⋯g[l](z[l](m))],其中g[l]g^{[l]}g[l]是第lll层的激活函数(实际上多数激活函数是逐元素函数(softmax等除外),此时G[l]G^{[l]}G[l]与g[l]g^{[l]}g[l]可以统一定义为一个以矩阵为自变量的逐元素函数,不需要区分开)。神经网络的预测值为A[L]=Y^=[y^(1)y^(2)⋯y^(m)]A^{[L]}=\hat Y=\begin{bmatrix}\hat y^{(1)}&\hat y^{(2)}&\cdots&\hat y^{(m)}\end{bmatrix}A[L]=Y^=[y^(1)y^(2)⋯y^(m)],其中y^(i)=g[L](z[L](i))\hat y^{(i)}=g^{[L]}(z^{[L](i)})y^(i)=g[L](z[L](i)),损失函数J(Y^,Y)J(\hat Y,Y)J(Y^,Y)的值一般取每个样本的损失函数值的平均值,即J(Y^,Y)=1m∑iL(y^(i),y(i))J(\hat Y,Y)=\frac{1}{m}\sum_iL(\hat y^{(i)},y^{(i)})J(Y^,Y)=m1i∑L(y^(i),y(i))
常用的损失函数:
对于回归问题,常用均方误差函数MSE:L(y^,y)=∣∣y^−y∣∣22L(\hat y,y)=||\hat y-y||_2^2L(y^,y)=∣∣y^−y∣∣22容易推导出对于多样本的情形有J(Y^,Y)=1m∣∣Y^−Y∣∣F2J(\hat Y, Y)=\frac{1}{m}||\hat Y-Y||_F^2J(Y^,Y)=m1∣∣Y^−Y∣∣F2对于分类问题,常用交叉熵代价函数CrossEntropyLoss:
如果输出层的激励函数采用sigmoid函数的话,则L(y^,y)=−∑i=1nL(yilny^i+(1−yi)ln(1−y^i))=−(yTlny^+(1−y)Tln(1−y^))L(\hat y,y)=-\sum_{i=1}^{n_L}(y_i\ln\hat y_i+(1-y_i)\ln(1-\hat y_i))=-(y^T\ln\hat y+(1-y)^T\ln(1-\hat y))L(y^,y)=−i=1∑nL(yilny^i+(1−yi)ln(1−y^i))=−(yTlny^+(1−y)Tln(1−y^))容易推导出对于多样本的情形有J(Y^,Y)=−1mtr(YTlnY^+(1−Y)Tln(1−Y^))J(\hat Y, Y)=-\frac{1}{m}tr(Y^T\ln\hat Y+(1-Y)^T\ln(1-\hat Y))J(Y^,Y)=−m1tr(YTlnY^+(1−Y)Tln(1−Y^))如果输出层的激励函数采用softmax函数的话,则L(y^,y)=−∑i=1nLyilny^i=−yTlny^L(\hat y,y)=-\sum_{i=1}^{n_L}y_i\ln\hat y_i=-y^T\ln\hat yL(y^,y)=−i=1∑nLyilny^i=−yTlny^对于多样本的情形有J(Y^,Y)=−1mtr(YTlnY^)J(\hat Y,Y)=-\frac{1}{m}tr(Y^T\ln\hat Y)J(Y^,Y)=−m1tr(YTlnY^)
一句话总结,前向传播就是在计算以多个矩阵为自变量的非线性实值函数f(X,Y,Θ)=J(Y^,Y)f(X,Y,\Theta)=J(\hat Y, Y)f(X,Y,Θ)=J(Y^,Y),其中Θ\ThetaΘ是神经网络的参数组,包含神经网络中的所有参数W[1],b[1],W[2],b[2],...,W[L],b[L]W^{[1]},b^{[1]},W^{[2]},b^{[2]},...,W^{[L]},b^{[L]}W[1],b[1],W[2],b[2],...,W[L],b[L](很多资料中前向传播的概念是仅仅计算到输出层的值就可以了,但由于反向传播是从代价函数开始的,因此这里我们把使用输出层的值计算代价函数也视为前向传播的一部分)。由于计算过程是从输入层到输出层逐层传递的,因此称为“前向传播”。
由凸优化的相关理论知,最小化代价函数需要找到函数的一个下降方向,而负梯度方向是一个自然存在的下降方向,因此需要一个算法求出代价函数对网络的各个参数矩阵的梯度矩阵。反向传播算法(BP)以复合函数的微分法则(或复合函数的链导法则)为理论基础,从输出层(准确说是从代价函数)开始到输入层,逐层求解代价函数对各层参数的梯度矩阵,从而得到代价函数的一个下降方向。
下面以分类问题为例推导BP算法,输出层激励函数采用Softmax,代价函数采用交叉熵代价函数。由于单样本的前向、反向传播过程可以视为多样本情形的特例(即m=1m=1m=1),因此下面只推导多样本情形:
一些前提结论(这些结论将在推导过程中直接使用):
dg(x)⊘g(x)=dx−1n×1g(x)Tdx,x∈Rndg(x)\oslash g(x)=dx-1_{n\times 1}g(x)^Tdx,x\in R^ndg(x)⊘g(x)=dx−1n×1g(x)Tdx,x∈Rn,其中ggg是softmax函数
证:
由于dg(x)⊘g(x)=dlng(x)dg(x)\oslash g(x)=d\ln g(x)dg(x)⊘g(x)=dlng(x),因此先计算lng(x)\ln g(x)lng(x)。lng(x)=lnex1Tex=ln(ex⊘(1Tex1n×1))=lnex−ln(1Tex1n×1)=x−ln(1Tex1n×1)\begin{aligned}\ln g(x)&=\ln \frac{e^x}{1^Te^x}\\&=\ln(e^x\oslash(1^Te^x1_{n\times 1}))\\&=\ln e^x-\ln(1^Te^x1_{n\times 1})\\&=x-\ln(1^Te^x1_{n\times 1})\end{aligned}lng(x)=ln1Texex=ln(ex⊘(1Tex1n×1))=lnex−ln(1Tex1n×1)=x−ln(1Tex1n×1)dlng(x)=dx−dln(1Tex1n×1)=dx−(1T(dex)1n×1)⊘(1Tex1n×1)=dx−1T(ex⊙dx)1n×11Tex=dx−(ex)Tdx1n×11Tex=dx−1n×1g(x)Tdx\begin{aligned}\begin{aligned}d\ln g(x)&=dx-d\ln(1^Te^x1_{n\times 1})\\&=dx-(1^T(de^x)1_{n\times 1})\oslash(1^Te^x1_{n\times 1})\\&=dx-\frac{1^T(e^x\odot dx)1_{n\times 1}}{1^Te^x}\\&=dx-\frac{(e^x)^Tdx1_{n\times 1}}{1^Te^x}\\&=dx-1_{n\times 1}g(x)^Tdx\end{aligned}\end{aligned}dlng(x)=dx−dln(1Tex1n×1)=dx−(1T(dex)1n×1)⊘(1Tex1n×1)=dx−1Tex1T(ex⊙dx)1n×1=dx−1Tex(ex)Tdx1n×1=dx−1n×1g(x)Tdx设[a1a2⋯an]=A∈Rm×n,[b1b2⋯bn]=B∈Rm×n\begin{bmatrix}a_1&a_2&\cdots&a_n\end{bmatrix}=A\in R^{m\times n},\begin{bmatrix}b_1&b_2&\cdots&b_n\end{bmatrix}=B\in R^{m\times n}[a1a2⋯an]=A∈Rm×n,[b1b2⋯bn]=B∈Rm×n,则tr([a1Tb11n×1a2Tb21n×1⋯anTbn1n×1])=tr(ATB)tr(\begin{bmatrix}a_1^Tb_11_{n\times 1}&a_2^Tb_21_{n\times 1}&\cdots&a_n^Tb_n1_{n\times 1}\end{bmatrix})=tr(A^TB)tr([a1Tb11n×1a2Tb21n×1⋯anTbn1n×1])=tr(ATB)
(它们的值都是∑ijaijbij\sum_{ij}a_{ij}b_{ij}∑ijaijbij)在分类问题中有YT1nL×1=1m×1Y^T1_{n_L\times 1}=1_{m\times 1}YT1nL×1=1m×1,其中Y∈RnL×mY\in R^{n_L\times m}Y∈RnL×m是m个样本的标签(one-hot形式)按列排成的矩阵,nLn_LnL是网络的输出层的神经元数目,即类别数
(这是因为概率分布的总和是1,也可以从one-hot向量的格式看出来,one-hot向量只有一个分量是1,其他分量都是0)前面提到过的一些微分公式
推导过程:
从代价函数开始到输出层(输出层激励函数g[L]g^{[L]}g[L]是softmax函数):
dJ=−1mtr(YTdlnY^)=−1mtr(YT(dY^⊘Y^))\begin{aligned}dJ&=-\frac{1}{m}tr(Y^Td\ln\hat Y)\\&=-\frac{1}{m}tr(Y^T(d\hat Y\oslash \hat Y))\end{aligned}dJ=−m1tr(YTdlnY^)=−m1tr(YT(dY^⊘Y^))dY^⊘Y^=dG[L](Z[L])⊘G[L](Z[L])=[dg[L](z[L](1))⋯dg[L](z[L](m))]⊘[g[L](z[L](1))⋯g[L](z[L](m))]=[dg[L](z[L](1))⊘g[L](z[L](1))⋯dg[L](z[L](m))⊘g[L](z[L](m))]=[dz[L](1)−1nL×1g[L](z[L](1))Tdz[L](1)⋯dz[L](m)−1nL×1g[L](z[L](m))Tdz[L](m)]=dZ[L]−[1nL×1(y^(1))Tdz[L](1)⋯1nL×1(y^(m))Tdz[L](m)]\begin{aligned}d\hat Y\oslash \hat Y&=dG^{[L]}(Z^{[L]})\oslash G^{[L]}(Z^{[L]})\\&=\begin{bmatrix}dg^{[L]}(z^{[L](1)})&\cdots&dg^{[L]}(z^{[L](m)})\end{bmatrix}\oslash\begin{bmatrix}g^{[L]}(z^{[L](1)})&\cdots&g^{[L]}(z^{[L](m)})\end{bmatrix}\\&=\begin{bmatrix}dg^{[L]}(z^{[L](1)})\oslash g^{[L]}(z^{[L](1)})&\cdots&dg^{[L]}(z^{[L](m)})\oslash g^{[L]}(z^{[L](m)})\end{bmatrix}\\&=\begin{bmatrix}dz^{[L](1)}-1_{n_L\times 1}g^{[L]}(z^{[L](1)})^Tdz^{[L](1)}&\cdots&dz^{[L](m)}-1_{n_L\times 1}g^{[L]}(z^{[L](m)})^Tdz^{[L](m)}\end{bmatrix}\\&=dZ^{[L]}-\begin{bmatrix}1_{n_L\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&1_{n_L\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix}\end{aligned}dY^⊘Y^=dG[L](Z[L])⊘G[L](Z[L])=[dg[L](z[L](1))⋯dg[L](z[L](m))]⊘[g[L](z[L](1))⋯g[L](z[L](m))]=[dg[L](z[L](1))⊘g[L](z[L](1))⋯dg[L](z[L](m))⊘g[L](z[L](m))]=[dz[L](1)−1nL×1g[L](z[L](1))Tdz[L](1)⋯dz[L](m)−1nL×1g[L](z[L](m))Tdz[L](m)]=dZ[L]−[1nL×1(y^(1))Tdz[L](1)⋯1nL×1(y^(m))Tdz[L](m)]−mdJ=tr(YT(dY^⊘Y^))=tr(YT(dZ[L]−[1nL×1(y^(1))Tdz[L](1)⋯1nL×1(y^(m))Tdz[L](m)]))=tr(YTdZ[L])−tr([YT1nL×1(y^(1))Tdz[L](1)⋯YT1nL×1(y^(m))Tdz[L](m)])=tr(YTdZ[L])−tr([1m×1(y^(1))Tdz[L](1)⋯1m×1(y^(m))Tdz[L](m)])=tr(YTdZ[L])−tr(Y^TdZ[L])=tr((Y−Y^)TdZ[L])\begin{aligned}-mdJ&=tr(Y^T(d\hat Y\oslash \hat Y))\\&=tr(Y^T(dZ^{[L]}-\begin{bmatrix}1_{n_L\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&1_{n_L\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix}))\\&=tr(Y^TdZ^{[L]})-tr(\begin{bmatrix}Y^T1_{n_L\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&Y^T1_{n_L\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix})\\&=tr(Y^TdZ^{[L]})-tr(\begin{bmatrix}1_{m\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&1_{m\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix})\\&=tr(Y^TdZ^{[L]})-tr(\hat Y^TdZ^{[L]})\\&=tr((Y-\hat Y)^TdZ^{[L]})\end{aligned}−mdJ=tr(YT(dY^⊘Y^))=tr(YT(dZ[L]−[1nL×1(y^(1))Tdz[L](1)⋯1nL×1(y^(m))Tdz[L](m)]))=tr(YTdZ[L])−tr([YT1nL×1(y^(1))Tdz[L](1)⋯YT1nL×1(y^(m))Tdz[L](m)])=tr(YTdZ[L])−tr([1m×1(y^(1))Tdz[L](1)⋯1m×1(y^(m))Tdz[L](m)])=tr(YTdZ[L])−tr(Y^TdZ[L])=tr((Y−Y^)TdZ[L])由微分和梯度矩阵的关系得∂J∂Z[L]=1m(Y^−Y)\frac{\partial J}{\partial Z^{[L]}}=\frac{1}{m}(\hat Y-Y)∂Z[L]∂J=m1(Y^−Y),可见梯度矩阵的形式十分简单。这就是机器学习框架(如Tensorflow和Pytorch)中CrossEntropyLoss的实现要把softmax集成到loss函数中的原因,因为这样的话在反向传播时能节省大量不必要的运算,做个矩阵减法就是导数了(还有一点就是前向传播时log和softmax结合也可以简化运算)。
【注】当输出层的激励函数采用sigmoid函数,代价函数采用交叉熵代价函数时,反向传播有类似的结果,感兴趣的读者可以自己试一下。
输出层还没算完:dZ[L]=(dW[L])A[L−1]+W[L]dA[L−1]+(db[L])1m×1TdZ^{[L]}=(dW^{[L]})A^{[L-1]}+W^{[L]}dA^{[L-1]}+(db^{[L]})1_{m\times 1}^TdZ[L]=(dW[L])A[L−1]+W[L]dA[L−1]+(db[L])1m×1TdJ=tr((∂J∂Z[L])TdZ[L])=tr((∂J∂Z[L])T(dW[L])A[L−1])+tr((∂J∂Z[L])TW[L]dA[L−1])+tr((∂J∂Z[L])T(db[L])1m×1T)=tr((∂J∂Z[L](A[L−1])T)TdW[L])+tr(((W[L])T∂J∂Z[L])TdA[L−1])+tr((∂J∂Z[L]1m×1)Tdb[L])\begin{aligned}dJ&=tr((\frac{\partial J}{\partial Z^{[L]}})^TdZ^{[L]})\\&=tr((\frac{\partial J}{\partial Z^{[L]}})^T(dW^{[L]})A^{[L-1]})+tr((\frac{\partial J}{\partial Z^{[L]}})^TW^{[L]}dA^{[L-1]})+tr((\frac{\partial J}{\partial Z^{[L]}})^T(db^{[L]})1_{m\times 1}^T)\\&=tr((\frac{\partial J}{\partial Z^{[L]}}(A^{[L-1]})^T)^TdW^{[L]})+tr(((W^{[L]})^T\frac{\partial J}{\partial Z^{[L]}})^TdA^{[L-1]})+tr((\frac{\partial J}{\partial Z^{[L]}}1_{m\times 1})^Tdb^{[L]})\end{aligned}dJ=tr((∂Z[L]∂J)TdZ[L])=tr((∂Z[L]∂J)T(dW[L])A[L−1])+tr((∂Z[L]∂J)TW[L]dA[L−1])+tr((∂Z[L]∂J)T(db[L])1m×1T)=tr((∂Z[L]∂J(A[L−1])T)TdW[L])+tr(((W[L])T∂Z[L]∂J)TdA[L−1])+tr((∂Z[L]∂J1m×1)Tdb[L])故由微分与梯度矩阵的关系得∂J∂W[L]=∂J∂Z[L](A[L−1])T\frac{\partial J}{\partial W^{[L]}}=\frac{\partial J}{\partial Z^{[L]}}(A^{[L-1]})^T∂W[L]∂J=∂Z[L]∂J(A[L−1])T,∂J∂b[L]=∂J∂Z[L]1m×1\frac{\partial J}{\partial b^{[L]}}=\frac{\partial J}{\partial Z^{[L]}}1_{m\times 1}∂b[L]∂J=∂Z[L]∂J1m×1,∂J∂A[L−1]=(W[L])T∂J∂Z[L]\frac{\partial J}{\partial A^{[L-1]}}=(W^{[L]})^T\frac{\partial J}{\partial Z^{[L]}}∂A[L−1]∂J=(W[L])T∂Z[L]∂J。这就得到了代价函数对输出层参数W[L],b[L]W^{[L]},b^{[L]}W[L],b[L]的梯度。通过将∂J∂A[L−1]\frac{\partial J}{\partial A^{[L-1]}}∂A[L−1]∂J保存下来,求导运算可以继续传播下去。为了后面表示方便,我们把上面的微分式中的每一项用单个符号代替,即简写为dJ=dJW[L]+dJA[L−1]+dJb[L]dJ=dJ_{W^{[L]}}+dJ_{A^{[L-1]}}+dJ_{b^{[L]}}dJ=dJW[L]+dJA[L−1]+dJb[L],注意后面计算时只会把dJA[L−1]dJ_{A^{[L-1]}}dJA[L−1]展开,dJW[L]dJ_{W^{[L]}}dJW[L]和dJb[L]dJ_{b^{[L]}}dJb[L]是不会再变的。同理,对于任意变量VVV,dJVdJ_{V}dJV表示JJJ对VVV的微分项。
从第lll层到第l−1l-1l−1层:
假设第lll层的梯度已得出,即已知∂J∂W[l]\frac{\partial J}{\partial W^{[l]}}∂W[l]∂J,∂J∂b[l]\frac{\partial J}{\partial b^{[l]}}∂b[l]∂J,∂J∂A[l−1]\frac{\partial J}{\partial A^{[l-1]}}∂A[l−1]∂J,则通过∂J∂A[l−1]\frac{\partial J}{\partial A^{[l-1]}}∂A[l−1]∂J可以计算第l−1l-1l−1层的梯度:dA[l−1]=dG[l−1](Z[l−1])=[dg[l−1](z[l−1](1))⋯dg[l−1](z[l−1](m))]=[∂g[l−1]∂z[l−1](1)Tdz[l−1](1)⋯∂g[l−1]∂z[l−1](m)Tdz[l−1](m)]\begin{aligned}dA^{[l-1]}&=dG^{[l-1]}(Z^{[l-1]})\\&=\begin{bmatrix}dg^{[l-1]}(z^{[l-1](1)})&\cdots&dg^{[l-1]}(z^{[l-1](m)})\end{bmatrix}\\&=\begin{bmatrix}\frac{\partial g^{[l-1]}}{\partial z^{[l-1](1)^T}}dz^{[l-1](1)}&\cdots&\frac{\partial g^{[l-1]}}{\partial z^{[l-1](m)^T}}dz^{[l-1](m)}\end{bmatrix}\end{aligned}dA[l−1]=dG[l−1](Z[l−1])=[dg[l−1](z[l−1](1))⋯dg[l−1](z[l−1](m))]=[∂z[l−1](1)T∂g[l−1]dz[l−1](1)⋯∂z[l−1](m)T∂g[l−1]dz[l−1](m)]dJA[l−1]=tr((∂J∂A[l−1])TdA[l−1])=tr([(∂J∂A[l−1])T∂g[l−1]∂z[l−1](1)Tdz[l−1](1)⋯(∂J∂A[l−1])T∂g[l−1]∂z[l−1](m)Tdz[l−1](m)])=tr((B[l−1])TdZ[l−1])\begin{aligned}dJ_{A^{[l-1]}}&=tr((\frac{\partial J}{\partial A^{[l-1]}})^TdA^{[l-1]})\\&=tr(\begin{bmatrix}(\frac{\partial J}{\partial A^{[l-1]}})^T\frac{\partial g^{[l-1]}}{\partial z^{[l-1](1)^T}}dz^{[l-1](1)}&\cdots&(\frac{\partial J}{\partial A^{[l-1]}})^T\frac{\partial g^{[l-1]}}{\partial z^{[l-1](m)^T}}dz^{[l-1](m)}\end{bmatrix})\\&=tr((B^{[l-1]})^TdZ^{[l-1]})\end{aligned}dJA[l−1]=tr((∂A[l−1]∂J)TdA[l−1])=tr([(∂A[l−1]∂J)T∂z[l−1](1)T∂g[l−1]dz[l−1](1)⋯(∂A[l−1]∂J)T∂z[l−1](m)T∂g[l−1]dz[l−1](m)])=tr((B[l−1])TdZ[l−1])其中B[l−1]=[(∂g[l−1]T∂z[l−1](1)∂J∂A[l−1])1⋯(∂g[l−1]T∂z[l−1](m)∂J∂A[l−1])m]B^{[l-1]}=\begin{bmatrix}(\frac{\partial g^{[l-1]^T}}{\partial z^{[l-1](1)}}\frac{\partial J}{\partial A^{[l-1]}})_1&\cdots&(\frac{\partial g^{[l-1]^T}}{\partial z^{[l-1](m)}}\frac{\partial J}{\partial A^{[l-1]}})_m\end{bmatrix}B[l−1]=[(∂z[l−1](1)∂g[l−1]T∂A[l−1]∂J)1⋯(∂z[l−1](m)∂g[l−1]T∂A[l−1]∂J)m]故由微分与梯度矩阵的关系得∂J∂Z[l−1]=B[l−1]\frac{\partial J}{\partial Z^{[l-1]}}=B^{[l-1]}∂Z[l−1]∂J=B[l−1]。
实际上,大多激活函数都是逐元素函数(例如sigmoid,tanh,relu等等),此时G[l−1]G^{[l-1]}G[l−1]也是一个逐元素函数,故dA[l−1]=dG[l−1](Z[l−1])=G[l−1]′(Z[l−1])⊙dZ[l−1]dA^{[l-1]}=dG^{[l-1]}(Z^{[l-1]})=G^{[l-1]'}(Z^{[l-1]})\odot dZ^{[l-1]}dA[l−1]=dG[l−1](Z[l−1])=G[l−1]′(Z[l−1])⊙dZ[l−1]dJA[l−1]=tr((∂J∂A[l−1])TdA[l−1])=tr((∂J∂A[l−1])T(G[l−1]′(Z[l−1])⊙dZ[l−1]))=tr((∂J∂A[l−1]⊙G[l−1]′(Z[l−1]))TdZ[l−1]))\begin{aligned}dJ_{A^{[l-1]}}&=tr((\frac{\partial J}{\partial A^{[l-1]}})^TdA^{[l-1]})\\&=tr((\frac{\partial J}{\partial A^{[l-1]}})^T(G^{[l-1]'}(Z^{[l-1]})\odot dZ^{[l-1]}))\\&=tr((\frac{\partial J}{\partial A^{[l-1]}}\odot G^{[l-1]'}(Z^{[l-1]}))^TdZ^{[l-1]}))\end{aligned}dJA[l−1]=tr((∂A[l−1]∂J)TdA[l−1])=tr((∂A[l−1]∂J)T(G[l−1]′(Z[l−1])⊙dZ[l−1]))=tr((∂A[l−1]∂J⊙G[l−1]′(Z[l−1]))TdZ[l−1]))故由微分与梯度矩阵的关系得∂J∂Z[l−1]=∂J∂A[l−1]⊙G[l−1]′(Z[l−1])\frac{\partial J}{\partial Z^{[l-1]}}=\frac{\partial J}{\partial A^{[l-1]}}\odot G^{[l-1]'}(Z^{[l-1]})∂Z[l−1]∂J=∂A[l−1]∂J⊙G[l−1]′(Z[l−1])。得到了∂J∂Z[l−1]\frac{\partial J}{\partial Z^{[l-1]}}∂Z[l−1]∂J后,计算代价函数对第l−1l-1l−1层的参数W[l−1],b[l−1]W^{[l-1]},b^{[l-1]}W[l−1],b[l−1]的梯度的方法与输出层是相同的,故不再赘述。