机器学习之矩阵求导

简介:

无论是最小二乘法,还是神经网络反向传播算法,到处可以见到矩阵求导的身影,所以矩阵求导在机器学习中还是比较重要的。

下面将从输入x和输出f(x)的形式来分开介绍矩阵求导:

首先,我们要明确矩阵求导的本质,即\frac{dA}{dB},矩阵A对矩阵B求导的本质是矩阵A中的每一个元素对矩阵B中的每一个元素进行求导。求导结果中含有元素的大小,为矩阵A的元素个数乘以矩阵B中元素的个数。

求导秘术:YX拉伸:

  1. 标量不变,向量拉伸。
  2. 前面Y横向拉伸,后面X纵向拉伸。
  • 输入x为标量,输出f(x)为标量

这种情况,没有啥好介绍的,使用常规求导公式。

  • 输入x为标量,输出f(x)为向量

例子:输入为x,输出\begin{bmatrix} f_{1}(x)=x\\f_{2}(x)=x^{2} \end{bmatrix}

这里输出是标量无法纵向拉伸,输出是向量,可以横向拉伸,结果为:\frac{df(x)}{x} = \begin{bmatrix} \frac{\partial f_{1}(x)}{x} & \frac{\partial f_{2}(x)}{x} \end{bmatrix} = \begin{bmatrix} 1 & 2x \end{bmatrix}

  • 输入X为向量,输出f(x)为标量

例子:输入为\begin{bmatrix} x_{1}\\x _{2} \end{bmatrix},输出x_{1}+x _{2}

这里输入是向量可以纵向拉伸,输出是标量无法横向拉伸,结果为:\frac{df(x)}{X} = \begin{bmatrix} \frac{\partial(x_{1}+x_{2})}{dx_{1}}\\ \frac{\partial (x_{1}+x_{2})}{dx_{2}} \end{bmatrix} = \begin{bmatrix} x_{2}\\ x_{1} \end{bmatrix}

  • 输入x为向量,输出f(x)为向量

例子:输入为\begin{bmatrix} x_{1}\\x _{2} \end{bmatrix},输出为\begin{bmatrix} f_{1}(x_{1})\\ f_{2}(x _{2}) \end{bmatrix}

这里输入和输出都是向量,既要纵向拉伸也要横向拉伸,结果为:\begin{bmatrix} \frac{\partial (f_{1})}{x_{1}} & \frac{\partial (f_{2})}{x_{1}}\\ \frac{\partial (f_{1})}{x_{2}} & \frac{\partial (f_{2})}{x_{2}} \end{bmatrix}

  • 输入为标量,输出为矩阵

例子:输入为x,输出为\begin{bmatrix} f_{11}(x)=x &f_{12}(x)=x^{2} \\ f_{21}(x)=x^{3} & f_{22}(x)=x^{4} \end{bmatrix}

结果为:\begin{bmatrix} \frac{\partial (f_{11}(x))}{x} &\frac{\partial (f_{12}(x))}{x} \\ \frac{\partial (f_{21}(x))}{x} &\frac{\partial (f_{22}(x))}{x} \end{bmatrix}

  • 输入为向量,输出为矩阵

例子:输入为\begin{bmatrix} x_{1}\\x _{2} \end{bmatrix},输出为\begin{bmatrix} f_{11}(x)=x_{1}+x_{2} &f_{12}(x)=x_{1}^{2}+x_{2}^{2} \\ f_{21}(x)=x_{1}^{3}+x_{2}^{3} & f_{22}(x)=x_{1}^{4}+x_{2}^{4} \end{bmatrix}

结果为:\begin{bmatrix} \frac{\partial (f_{11}(x))}{\partial x_{1}}& \frac{\partial (f_{12}(x))}{\partial x_{1}}\\ \frac{\partial (f_{21}(x))}{\partial x_{2}} & \frac{\partial (f_{22}(x))}{\partial x_{2}} \end{bmatrix}

 

两种布局:

  1. 分母布局------YX拉伸术(前面使用的正是这种布局)。
  2. 分子布局------XY拉伸术(不同之处为,X为横向拉伸,Y为纵向拉伸,其他都一样)。
  • 常见矩阵求导公式推导:

公式一:f(X) = A^{T}X,其中A = \begin{bmatrix} a_{1}\\ a_{2} \\ \vdots \\ a_{n} \end{bmatrix}X = \begin{bmatrix} x_{1}\\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix},求\frac{d(f(X))}{dX}

已知f(X) = A^{T}X = \sum_{i=1}^{n}a_{i}x_{i},因此,\frac{d(f(X))}{dX} = \begin{bmatrix} \frac{\partial f(X)}{\partial x_{1}}\\ \frac{\partial f(X)}{\partial x_{2}}\\ \vdots \\ \frac{\partial f(X)}{\partial x_{n}} \end{bmatrix} = \begin{bmatrix} a_{1}\\ a_{2} \\ \vdots \\ a_{n} \end{bmatrix}=A,同时,我们知道A^{T}X = X^{T}A,因此\frac{d(A^{T}X)}{dX} = \frac{d(X^{T}A)}{dX} = A.

 

公式二:f(X) = X^{T}AX,其中A = \begin{bmatrix} a_{11} &a_{12} & \cdots & a_{1n}\\ a_{21}& a_{22}&\cdots & a_{2n}\\ \vdots & \vdots & \vdots & \vdots \\ a_{n1}& a_{n2}& \cdots & a_{nn} \end{bmatrix}X = \begin{bmatrix} x_{1}\\ x_{2} \\ \vdots \\ x_{3} \end{bmatrix},通过维度推导,我们知道f(X)为一个标量,即

f(X)= \sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}x_{i}x_{j},故\frac{d(f(X))}{X} = \begin{bmatrix} \frac{\partial f(X)}{\partial x_{1}}\\ \frac{\partial f(X)}{\partial x_{2}}\\ \vdots \\ \frac{\partial f(X)}{\partial x_{n}} \end{bmatrix} =\begin{bmatrix} \sum_{j=1}^{n}a_{1j}x_{j} + \sum_{i=1}^{n}a_{i1}x_{j}\\ \sum_{j=1}^{n}a_{2j}x_{j} + \sum_{i=1}^{n}a_{i2}x_{j}\\ \vdots \\ \sum_{j=1}^{n}a_{nj}x_{j} + \sum_{i=1}^{n}a_{in}x_{j} \end{bmatrix}

=\begin{bmatrix} \sum_{j=1}^{n}a_{1j}x_{j}\\ \sum_{j=1}^{n}a_{2j}x_{j}\\ \vdots \\ \sum_{j=1}^{n}a_{nj}x_{j} \end{bmatrix} + \begin{bmatrix} \sum_{i=1}^{n}a_{i1}x_{j}\\ \sum_{i=1}^{n}a_{i2}x_{j}\\ \vdots \\ \sum_{i=1}^{n}a_{in}x_{j} \end{bmatrix} = \begin{bmatrix} a_{11} &a_{12} & \cdots & a_{1n}\\ a_{21}& a_{22}&\cdots & a_{2n}\\ \vdots & \vdots & \vdots & \vdots \\ a_{n1}& a_{n2}& \cdots & a_{nn} \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2} \\ \vdots \\ x_{3} \end{bmatrix} = \begin{bmatrix} a_{11} &a_{21} & \cdots & a_{n1}\\ a_{12}& a_{22}&\cdots & a_{n2}\\ \vdots & \vdots & \vdots & \vdots \\ a_{1n}& a_{2n}& \cdots & a_{nn} \end{bmatrix} \begin{bmatrix} x_{1}\\ x_{2} \\ \vdots \\ x_{3} \end{bmatrix}

= AX+A^{T}X = (A+A^{T})X

即:\frac{d( X^{T}AX)}{dX} = (A+A^{T})X

Hessian矩阵

好了,有了前面的知识,我们来看看Hessian矩阵是个什么东东,简单来说,Hessian矩阵就是一个来储存函数的二阶导数信息。若已知n元函数f(x_{1},x_{2}\cdots x_{n})的二阶导数存在,那么对应的Hessian矩阵为如下所示:

H= \begin{bmatrix} \frac{\partial ^{2}f}{\partial x_{1}^{2}} & \frac{\partial ^{2}f}{\partial x_{1}x_{2}} & \cdots &\frac{\partial ^{2}f}{\partial x_{1}x_{n}} \\ \frac{\partial ^{2}f}{\partial x_{2}x_{1}} & \frac{\partial ^{2}f}{\partial x_{2}x_{2}} &\cdots & \frac{\partial ^{2}f}{\partial x_{2}x_{n}} \\ \vdots &\vdots & \vdots &\vdots \vdots \\ \frac{\partial ^{2}f}{\partial x_{n}x_{1}} & \frac{\partial ^{2}f}{\partial x_{n}x_{2}} &\cdots & \frac{\partial ^{2}f}{\partial x_{n}^{2}} \end{bmatrix}

下面举个例子:f(x)= 5x_{1}^{2} +6x_{1}x_{2}+8x_{2}^{2}的Hessian矩阵为A+A^{T} = \begin{bmatrix} 5 & 3\\ 3 &8 \end{bmatrix} + \begin{bmatrix} 5 & 3\\ 3& 8 \end{bmatrix} = \begin{bmatrix} 10 & 6\\ 6& 16 \end{bmatrix}.

如果直接套用Hessian矩阵的公式为:\begin{bmatrix} \frac{\partial ^{2}f}{\partial x_{1}^{2}} & \frac{\partial ^{2}f}{\partial x_{1}x_{2}}\\ \frac{\partial ^{2}f}{\partial x_{2}x_{1}}& \frac{\partial ^{2}f}{\partial x_{2}^{2}} \end{bmatrix} = \begin{bmatrix} 10 &6 \\ 6&16 \end{bmatrix},那么为啥A+A^{T}为啥直接是该多项式的Hessian矩阵呢?我们知道Hessian矩阵就是一个来储存函数的二阶导数信息,即Hessian矩阵为\frac{\partial f}{\partial X} = (A+A^{T})X,,于是\frac{\partial f^{2}}{\partial X} = (A+A^{T})

Hessian矩阵常用于牛顿法解决优化问题,利用Hessian矩阵可判定多元函数的极值问题。在工程实际问题的优化设计中,所列的目标函数往往很复杂,为了使问题简化,常常将目标函数在某点邻域展开成泰勒多项式来逼近原函数,此时函数在某点泰勒展开式的矩阵形式中会涉及到Hessian矩阵。

jacobin矩阵

得知了Hessian矩阵我们接下来看看jacobin矩阵又是个什么东东,我们知道了Hessian矩阵就是一个来储存函数的二阶导数信息,而jacobin矩阵存储的是一阶导数信息,即:

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值