机器学习中常用的矩阵求导公式
2016-04-12 15:31
190 查看
主要copy自新浪微博MachineLearner的博客希望作为自己学习机器学习的工具。
矩阵求导好像从来没有学过,讲矩阵的课不讲求导,讲求导的课不讲矩阵。像维基百科什么的查找起来又费劲。其实在实际机器学习工作中,最常用的就是实值函数yy对向量x\bf x求导。定义如下:
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x1∂y∂x2⋮∂y∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
\frac{\partial y}{\partial \bf x}=\left[
\begin {array}{c}
\frac{\partial y}{\partial x_1}\\
\frac{\partial y}{\partial x_2}\\
\vdots\\
\frac{\partial y}{\partial x_n}
\end {array}\right ]
实值函数yy对矩阵X\bf X求导:
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x11∂y∂x21⋮∂y∂xn1∂y∂x12∂y∂x22⋮∂y∂xn2⋯⋯⋱⋯∂y∂x1n∂y∂x2n⋮∂y∂xnn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥\frac{\partial y}{\partial \bf X}=\left[ \begin {array}{c}
\begin{array}{ccc}
\frac{\partial y}{\partial x_{11}} & \frac{\partial y}{\partial x_{12}}& \cdots &\frac{\partial y}{\partial x_{1n}}\\
\frac{\partial y}{\partial x_{21}} & \frac{\partial y}{\partial x_{22}}&\cdots &\frac{\partial y}{\partial x_{2n}}\\
\vdots & \vdots & \ddots & \vdots\\
\frac{\partial y}{\partial x_{n1}} & \frac{\partial y}{\partial x_{n2}}&\cdots &\frac{\partial y}{\partial x_{nn}}\\
\end{array}
\end {array}\right ]
因为有监督的机器学习的一般套路是给定输入x\bf x,选择一个模型ff作为决策函数,由f(xf(\bf{x}))预测出y¯\bar {y}。而要得到ff的参数θ\bf{\theta},需要定义一个loss函数来定义当前的预测值y¯\bar {y}和实际值yy之间的接近程度,模型学习的过程就是求使得loss函数L(f(xL(f(\bf x),y)y)最小的参数θ\theta。这是一个最优化的问题,实际应用中都是用和梯度相关的最优化方法,如梯度下降,共轭梯度,拟牛顿法等等。
为方便推倒有以下公式:
∂βTx∂x=β\frac{\partial \beta^T\bf x}{\partial \bf x}=\beta∂xTx∂x=2x\frac{\partial \bf x^T\bf x}{\partial \bf x}=2\bf x∂xTAx∂x=(A+AT)x\frac{\partial \bf x^T Ax}{\partial \bf x}=(\bf{A+A}^T)x
Andrew Ng使用矩阵的迹相关公式:
tr(a)=a\text{tr}(a)=atr(AB)=tr(BA)\text{tr}(AB)=\text{tr}(BA)tr(ABC)=tr(CAB)=tr(BCA)\text{tr}(ABC)=\text{tr}(CAB)=\text{tr}(BCA)∂tr(AB)A=BT\frac{\partial{\text{tr}(AB)}}{A}=B^Ttr(A)=tr(AT)\text{tr}(A)=\text{tr}(A^T)∂tr(ABATC)A=CAB+CTABT\frac{\partial{\text{tr}(ABA^TC)}}{A}=CAB+C^TAB^T
矩阵求导好像从来没有学过,讲矩阵的课不讲求导,讲求导的课不讲矩阵。像维基百科什么的查找起来又费劲。其实在实际机器学习工作中,最常用的就是实值函数yy对向量x\bf x求导。定义如下:
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x1∂y∂x2⋮∂y∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
\frac{\partial y}{\partial \bf x}=\left[
\begin {array}{c}
\frac{\partial y}{\partial x_1}\\
\frac{\partial y}{\partial x_2}\\
\vdots\\
\frac{\partial y}{\partial x_n}
\end {array}\right ]
实值函数yy对矩阵X\bf X求导:
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x11∂y∂x21⋮∂y∂xn1∂y∂x12∂y∂x22⋮∂y∂xn2⋯⋯⋱⋯∂y∂x1n∂y∂x2n⋮∂y∂xnn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥\frac{\partial y}{\partial \bf X}=\left[ \begin {array}{c}
\begin{array}{ccc}
\frac{\partial y}{\partial x_{11}} & \frac{\partial y}{\partial x_{12}}& \cdots &\frac{\partial y}{\partial x_{1n}}\\
\frac{\partial y}{\partial x_{21}} & \frac{\partial y}{\partial x_{22}}&\cdots &\frac{\partial y}{\partial x_{2n}}\\
\vdots & \vdots & \ddots & \vdots\\
\frac{\partial y}{\partial x_{n1}} & \frac{\partial y}{\partial x_{n2}}&\cdots &\frac{\partial y}{\partial x_{nn}}\\
\end{array}
\end {array}\right ]
因为有监督的机器学习的一般套路是给定输入x\bf x,选择一个模型ff作为决策函数,由f(xf(\bf{x}))预测出y¯\bar {y}。而要得到ff的参数θ\bf{\theta},需要定义一个loss函数来定义当前的预测值y¯\bar {y}和实际值yy之间的接近程度,模型学习的过程就是求使得loss函数L(f(xL(f(\bf x),y)y)最小的参数θ\theta。这是一个最优化的问题,实际应用中都是用和梯度相关的最优化方法,如梯度下降,共轭梯度,拟牛顿法等等。
为方便推倒有以下公式:
∂βTx∂x=β\frac{\partial \beta^T\bf x}{\partial \bf x}=\beta∂xTx∂x=2x\frac{\partial \bf x^T\bf x}{\partial \bf x}=2\bf x∂xTAx∂x=(A+AT)x\frac{\partial \bf x^T Ax}{\partial \bf x}=(\bf{A+A}^T)x
Andrew Ng使用矩阵的迹相关公式:
tr(a)=a\text{tr}(a)=atr(AB)=tr(BA)\text{tr}(AB)=\text{tr}(BA)tr(ABC)=tr(CAB)=tr(BCA)\text{tr}(ABC)=\text{tr}(CAB)=\text{tr}(BCA)∂tr(AB)A=BT\frac{\partial{\text{tr}(AB)}}{A}=B^Ttr(A)=tr(AT)\text{tr}(A)=\text{tr}(A^T)∂tr(ABATC)A=CAB+CTABT\frac{\partial{\text{tr}(ABA^TC)}}{A}=CAB+C^TAB^T
相关文章推荐
- .net 非阻塞事件获取返回异步回调结果
- Ubuntu 14.04报“leaking memory”错误
- 记一次配置oh my zsh的坑
- 容器中的迭代方法Iterator
- C++临时变量的生命周期
- SVN服务器搭建和使用(二)
- 阿里2016实习offer五面经验与总结
- leetcode 33. Search in Rotated Sorted Array
- 【数据结构】使用栈Stack解决迷宫问题
- 转载----使用 Retrofit 操作 SOAP Web Service
- 百度聚合代码
- linux 安装pip
- 循环队列队空与队满两个状态的判断算法分析
- OpenCV计算反向投影
- HDU-4292-Food(最大流)
- 编程之美 1.16 24点游戏
- Servlet教程
- 数据结构与算法——散列表类的C++实现(分离链接散列表)
- ipvsadm heartbeat 双机热备 Ubuntu
- strcpy