【Math for ML】向量微积分(Vector Calculus)
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}}\) 不是局部极值
【Math for ML】向量微积分(Vector Calculus)的更多相关文章
- <<Vector Calculus>>笔记
现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...
- 【Math for ML】矩阵分解(Matrix Decompositions) (下)
[Math for ML]矩阵分解(Matrix Decompositions) (上) I. 奇异值分解(Singular Value Decomposition) 1. 定义 Singular V ...
- <Vector Calculus>(by Paul C, Matthews) Notes
现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...
- R语言编程艺术# 数据类型向量(vector)
R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...
- 精解Mat类(一):基本数据类型-固定大小的 矩阵类(Matx) 向量类(Vector)
一.基础数据类型 1.(基础)固定大小矩阵类 matx 说明: ① 基础矩阵是我个人增加的描述,相对于Mat矩阵类(存储图像信息的大矩阵)而言. ② 固定大小矩阵类必须在编译期间就知晓其维 ...
- R语言编程艺术#01#数据类型向量(vector)
R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...
- Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动
如果我们习惯于数学坐标系,那么对于Silverlight中的坐标系可能会有些不习惯.因为在Silverlight中的坐标系与Flash中的坐标系一样,一切都的颠倒的.在标准的数学坐标系中,X轴表示水平 ...
- 向量容器vector操作
1.向量容器vector 1.1 vector说明 进行vector操作前应添加头文件#include<vector>: vector是向量类型,可以容纳许多类型的数据,因此也被称为容器: ...
- 向量时钟Vector Clock in Riak
Riak 是以 Erlang 编写的一个高度可扩展的分布式数据存储,Riak的实现是基于Amazon的Dynamo论文,Riak的设计目标之一就是高可用.Riak支持多节点构建的系统,每次读写请求不需 ...
随机推荐
- 打印流(PrintWriter )
PrintWriter package cn.lijun.demo1; import java.io.File; import java.io.FileNotFoundException; impor ...
- Dubbo优雅关机原理
Dubbo是通过JDK的ShutdownHook来完成优雅停机的 所以如果用户使用 kill -9 PID 等强制关闭命令,是不会执行优雅停机的 只有通过 kill PID时,才会执行 原理: · 服 ...
- VS2015快捷键大全
Ctrl+E,D —-格式化全部代码 Ctrl+E,F —-格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SH ...
- bootstrap开发微票儿网站首页
1.html代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...
- redis安全问题【原】
前提 假设redis安装在 IP 地址为 192.168.0.123 的linux服务器 . 我的本机Win10操作系统 IP地址为 192.168.0.45 , 有一套java客户端代码可调用lin ...
- 自学python 8.
1.有如下文件,a1.txt,里面的内容为:LNH是最好的培训机构,全心全意为学生服务,只为学生未来,不为牟利.我说的都是真的.哈哈分别完成以下的功能:a,将原文件全部读出来并打印.b,在原文件后面追 ...
- SQL 编程技巧
Ø 简介 本文主要介绍编写 SQL 时的一些编程技巧,方便有时候忘了便于查看,主要包含以下内容: 1. SQL 语句中使用 +=.-=.*=./= 运算符 2. 值为 NULL 的列或局部变 ...
- python中的深拷贝和浅拷贝
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...
- c# c/s 框架读取的配置文件时是app.exe.config
c# c/s 框架读取的配置文件时是app.exe.config, 一般在bin中间中俄debug中或者Release中
- php函数:解决数组转对象时数组内中文乱码问题
function to_urlencode(&$arr){//解决数组转对象时数组内中文乱码问题 foreach($arr as $key => $value){ if(is_array ...