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. springboot 新模板 呵呵了

    <html> <head> <title>批处理任务管理</title> <meta name="decorator" con ...

  2. NoClassDefFoundError com/google/inject/Injector

    一个maven项目莫名其妙的遇上了NoClassDefFoundError com/google/inject/Injector,在maven-surefire-plugin插件中配置 了<fo ...

  3. springboot配置jsp

    spring.mvc.view.prefix= /WEB-INF/jsp/ spring.mvc.view.suffix= .jsp pom.xml <!--jsp支持--> <!- ...

  4. STM32学习笔记:【002】BIN文件通过ST-LINK烧录STM32芯片

    以下提供2种下载方式 KEIL编译下载 KEIL 5 在开发中还算是比较强大的一种平台.在开发中通过编译再下载会显得很方便. 尽管这个是老生常谈的问题,但还是在这里补全这个设置步骤 1.点击“魔法棒” ...

  5. 腾讯云部署javaWeb项目之一应用服务器

    1.登录腾讯云,点击登录选择浏览器登录.输入用户名 按回车键 然后输入 密码. 2.安装java环境,直接命令:yum -y install java-1.8.0-openjdk java-1.8.0 ...

  6. sqlyog创建数据库表关系图

    作为一个后台前端,数据库,需求分析,运维,PPT全包的码农来说.uml建模不存在的,对不起我没有时间,就用sqlyog拉几个你看看吧.看的懂的一眼就看清了,看不懂的整再好也是白瞎. 第一步:选择增强工 ...

  7. javasrcipt的作用域和闭包(二)

    这篇博客主要对词法作用域与欺骗词法作用域.函数作用域与块级作用域.函数内部的变量提成原理进行详细的分析,在这篇博客之前,关于作用域.编译原理.浏览器引擎的原理及关系在javaScript的作用域和闭包 ...

  8. 前台ajax传参数,后台spring mvc用对象接受

    第二种方法:利用spring mvc的机制,调用对象的get方法,要求对象的属性名和传的参数名字一致(有兴趣的同学看 springmvc源码) 1.将参数名直接写成对象的属性名 $.ajax({ ur ...

  9. BIO和NIO

    在了解BIO,NIO,AIO之前先了解一下IO的几个概念:   1.同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous com ...

  10. C/C++内存分配和管理

    1. 内存分配和管理 1.1 malloc.calloc.realloc.alloca malloc:申请指定字节数的内存.申请到的内存中的初始值不确定. calloc:为指定长度的对象,分配能容纳其 ...