I. 向量梯度

假设有一个映射函数为\(f:R^n→R^m\)和一个向量\(x=[x_1,...,x_n]^T∈R^n\),那么对应的函数值的向量为\(f(x)=[f_1(x),...,f_m(x)]^T∈R^m\)。

现在考虑\(f\)对\(x_i\)的梯度为:\(\frac{\partial{f}}{\partial{x_i}}=[\frac{\partial{f_1}}{\partial{x_i}},...,\frac{\partial{f_m}}{\partial{x_i}}]^T∈R^m\)

所以有
\[
\begin{align}
\frac{df(x)}{dx}&=
\left[
\begin{matrix}
\frac{\partial{f(x)}}{\partial{x_1}} & \cdots & \frac{\partial{f(x)}}{\partial{x_n}}
\end{matrix}
\right] \\
&=\left[
\begin{matrix}
\frac{\partial{f_1(x)}}{\partial{x_1}} & \cdots & \frac{\partial{f_1(x)}}{\partial{x_n}} \\
\vdots & \ddots & \vdots \\
\frac{\partial{f_m(x)}}{\partial{x_1}} & \cdots & \frac{\partial{f_m(x)}}{\partial{x_n}} \\
\end{matrix}
\right] ∈R^{m×n} \\
\end{align}
\]

接下来给出Jacobian定义:

\(f:R^n→R^m\)的所有一阶偏导集合叫做Jacobian。Jacobian J 是一个\(m×n\)的矩阵,形式定义如下:
\[
\begin{align}
J&=\nabla_xf=\frac{df(x)}{dx} \\
&=\left[
\begin{matrix}
\frac{\partial{f(x)}}{\partial{x_1}} & \cdots & \frac{\partial{f(x)}}{\partial{x_n}}
\end{matrix}
\right] \\
&=\left[
\begin{matrix}
\frac{\partial{f_1(x)}}{\partial{x_1}} & \cdots & \frac{\partial{f_1(x)}}{\partial{x_n}} \\
\vdots & \ddots & \vdots \\
\frac{\partial{f_m(x)}}{\partial{x_1}} & \cdots & \frac{\partial{f_m(x)}}{\partial{x_n}} \\
\end{matrix}
\right] \\
x &= \left[
\begin{matrix}
x_1 \\
\vdots \\
x_n
\end{matrix}
\right],\,\,\, J(i,j)=\frac{\partial{f_i}}{\partial{x_j}}
\end{align}
\]

II. 矩阵梯度

其实和向量梯度类似,这里不再给出推导过程,直接给出一些重要的结果:

  • 如果\(f(x)∈R^{m×n},x∈R^{p×q}\),则\(\frac{\partial{f(x)}}{\partial{x}}∈R^{(m×n)×(p×q)}\)
  • 在机器学习中常用到的计算公式:

III. 高阶梯度

上面提到的都是一阶梯度,在实际应用中会涉及到高阶梯度。而常见的有二阶梯度

海森矩阵(Hessian) 是一个多变量实值函数的二阶偏导数组成的方阵。其形式如下:

以下内容参考海森矩阵

1. 在映射 \({\displaystyle f:\mathbb {R} ^{2}\to \mathbb {R} }\) 的应用

给定二阶导数连续的映射 \({\displaystyle f:\mathbb {R} ^{2}\to \mathbb {R} }\),海森矩阵的行列式,可用于分辨 \({\displaystyle f}\)的临界点是属于鞍点还是极值点。

对于 \({\displaystyle f}\) f的临界点 \({\displaystyle (x_{0},y_{0})}\)一点,有 \({\displaystyle {\frac {\partial f(x_{0},y_{0})}{\partial x}}={\frac {\partial f(x_{0},y_{0})}{\partial y}}=0}\),然而凭一阶导数不能判断它是鞍点、局部极大点还是局部极小点。海森矩阵可能解答这个问题。

\[{\displaystyle H={\begin{vmatrix}{\frac {\partial ^{2}f}{\partial x^{2}}}&{\frac {\partial ^{2}f}{\partial x\,\partial y}}\\\\{\frac {\partial ^{2}f}{\partial y\,\partial x}}&{\frac {\partial ^{2}f}{\partial y^{2}}}\end{vmatrix}}={\frac {\partial ^{2}f}{\partial x^{2}}}{\frac {\partial ^{2}f}{\partial y^{2}}}-({\frac {\partial ^{2}f}{\partial y\,\partial x}})^{2}}\]

  • H > 0:若 \({\displaystyle {\frac {\partial ^{2}f}{\partial x^{2}}}>0}\),则 \({\displaystyle (x_{0},y_{0})})\)是局部极小点;若 \({\displaystyle {\frac {\partial ^{2}f}{\partial x^{2}}}<0}\),则 \({\displaystyle (x_{0},y_{0})}\)是局部极大点。
  • H < 0:\({\displaystyle (x_{0},y_{0})}\)是鞍点。
  • H = 0:二阶导数无法判断该临界点的性质,得从更高阶的导数以泰勒公式考虑。

2. 在高维情况下的推广

当函数 \({\displaystyle f:\mathbb {R} ^{n}\to \mathbb {R} }\) 二阶连续可导时,Hessian矩阵H在临界点 \({\displaystyle x_{0}}\) 上是一个 \({\displaystyle n\times n}\)阶的对称矩阵。

  • 当H是正定矩阵时,临界点 \({\displaystyle x_{0}}\) 是一个局部的极小值。
  • 当H是负定矩阵时,临界点 \({\displaystyle x_{0}}\) 是一个局部的极大值。
  • H=0,需要更高阶的导数来帮助判断。
  • 在其余情况下,临界点 \({\displaystyle x_{0}}\) 不是局部极值

MARSGGBO♥原创







2018-12-24

【Math for ML】向量微积分(Vector Calculus)的更多相关文章

  1. <<Vector Calculus>>笔记

    现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...

  2. 【Math for ML】矩阵分解(Matrix Decompositions) (下)

    [Math for ML]矩阵分解(Matrix Decompositions) (上) I. 奇异值分解(Singular Value Decomposition) 1. 定义 Singular V ...

  3. <Vector Calculus>(by Paul C, Matthews) Notes

    现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...

  4. R语言编程艺术# 数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  5. 精解Mat类(一):基本数据类型-固定大小的 矩阵类(Matx) 向量类(Vector)

    一.基础数据类型 1.(基础)固定大小矩阵类 matx 说明: ①    基础矩阵是我个人增加的描述,相对于Mat矩阵类(存储图像信息的大矩阵)而言. ②    固定大小矩阵类必须在编译期间就知晓其维 ...

  6. R语言编程艺术#01#数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  7. Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动

    如果我们习惯于数学坐标系,那么对于Silverlight中的坐标系可能会有些不习惯.因为在Silverlight中的坐标系与Flash中的坐标系一样,一切都的颠倒的.在标准的数学坐标系中,X轴表示水平 ...

  8. 向量容器vector操作

    1.向量容器vector 1.1 vector说明 进行vector操作前应添加头文件#include<vector>: vector是向量类型,可以容纳许多类型的数据,因此也被称为容器: ...

  9. 向量时钟Vector Clock in Riak

    Riak 是以 Erlang 编写的一个高度可扩展的分布式数据存储,Riak的实现是基于Amazon的Dynamo论文,Riak的设计目标之一就是高可用.Riak支持多节点构建的系统,每次读写请求不需 ...

随机推荐

  1. 离线提取目标机hash

    ##看了大佬的文章学习到一个姿势在此将其记录一下复现过程 github项目地址:https://github.com/SecureAuthCorp/impacket.git python setup ...

  2. 【Mac进销存管理软件】Daily Sales Pro Mac

        [简介] Daily Sales Mac版是Mac平台上的一款进销存软件,库存管理系统.Daily Sales Mac版是一款易于使用的进出库存管理软件,让您及时了解库存状况.销售收入.采购成 ...

  3. GDB调试qemu-kvm

    GDB调试qemu-kvm 前面几篇博文都是记录一些kvm相关包编译安装及使用,但都没深入去代码看看.看源码在配合上相关原理才能更好的理解kvm.但qemu-kvm的代码量很多,对我来讲直接看源码收获 ...

  4. python django基础三 模版渲染

    request对象 当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象.Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 reque ...

  5. C#设计模式(1)——简单工厂模式

    1.什么是简单工厂 现实中的工厂负责生产产品,顾名思义,编程中的简单工厂就是一个生产对象的类,它的主要作用是创建具体的产品类实例.我们以一个生产鼠标为例来分析简单工厂的作用,鼠标有两种:戴尔鼠标和惠普 ...

  6. android 与html交互java调js与js调java操作

    1.首先在项目下建一个assets目录(右击app->New->Folder->Assets Flolder),直接放在项目根目录下和res目录同级别(把所html,js,图片,cs ...

  7. es6之箭头函数

    => 箭头函数是ES6增加的函数表达式.将function关键字和函数名都删掉,并使用“=>”连接参数列表和函数体(低版本浏览器不支持) 箭头函数看上去只是语法的变动,其实也影响了this ...

  8. 基本数据类型转String,String转基本数据类型

    基本数据类型 --> 字符串 1.基本数据类型+"" String s = 5 + ""; 2.使用包装类的静态方法toString(参数),参数是要转化 ...

  9. Chimee - 简单易用的H5视频播放器解决方案

    Chimee是由奇舞团开源的一套H5视频播放器解决方案,由奇舞团视频云前端团队结合在业务和视频编解码方向的沉淀积累倾心打造.Chimee支持MP4.M3U8.FLV等多种媒体格式,同时它也帮我们解决了 ...

  10. 对两个数求和的str_echo函数

    void str_echo(int sockfd) { long arg1, arg2; ssize_t n; char line[MAXLINE]; for ( ; ; ) { ) { return ...