向量微分

Junity 发布于 16 天前 377 次阅读 最后更新于 16 天前 1211 字 预计阅读时间: 6 分钟


AI 摘要

本文介绍机器学习中必备的向量微分知识,重点讲解雅可比矩阵的定义与性质,推导向量微分的链式法则及常用结论,包括向量运算、内积和矩阵运算的微分规则,为应用提供理论基础。

引言

线性代数和高等数学在几乎所有学校的计算机相关专业都会开设。然而,将两者结合起来的对向量进行微分的相关知识却少有课程涉及。本文的目的是提供 在机器学习领域必要的向量微分相关的内容

关于这部分内容,这篇文章 提供了很好的入门教程,事实上本文也是作为这篇文章的笔记而诞生的。此外,这篇文章 是一篇很好的进阶教程。

在本文中,若无特殊说明,则所以的向量都是 列向量

向量微分的结果

设有一个向量到向量的函数 f(x):RnRm ,它把一个 n 维向量变为一个 m 维向量。设fi(x)=f(x)i ,我们定义对它微分的结果是一个m×n 矩阵:

fx=[f1x1f1x2...f1xnf2x1f2x2...f2xnfmx1fmx2...fmxn]

这个矩阵被称为 雅可比矩阵 。之所以这样定义,是因为我们希望微分在向量上的扩展有与标量微分中相似的性质,即 δf=fxδx 。如果用 (fx)i 来表示这个矩阵的第 i 行,根据全微分法则很容易知道 δfi=(fx)iδx

雅可比矩阵是导数在向量微分上的推广。

向量微分链式法则

和标量微分一样,向量微分也有链式法则。向量微分的链式法则和标量下的链式法则类似:

yx=yuux

这里的 yuux 都是矩阵,它们的相乘代表矩阵相乘。这个结论可以通过展开矩阵乘法后应用标量下的链式法则得到。

类似的,还可以得到向量的全微分法则:设 y=f(u1,u2,...,un) ,其中每一个 ui 都是 x 的函数,那么:

yx=i=1nyuiuix

向量微分基础结论

向量间的运算

是一个应用于两个向量的 逐元素 (element-wise)运算符,逐元素 意味着对于两个向量 ab(ab)i 的结果只和 aibi 有关。最常见的逐元素运算符包括向量加法,向量减法以及向量的Hadamard积(即逐元素乘法)。

ab 是两个 n 维向量,那么 ab 可以写成下面的形式:

ab=[a1a2an][b1b2bn]=[a1b1a2b2anbn]

其中 aibi 是完全的标量运算。如果其中一者是变量,另外一个是常量,那么对这个式子求导的雅可比矩阵就是一个 n×n 方阵。由于 是逐元素的,因此结果只在对角线上有非 0 值,所以这是一个对角矩阵。

基于此,可以导出以下几个基本的结论:

xc 都是 n 维向量,其中 x 是变量,c 是常量,那么:

  1. (x+c)x=I
  2. (cx)x=diag(c),这里的 diag(c) 代表对角线为 c 的对角矩阵

将常量标量乘上 x 可以看成是第二个结论,因为可以将这个标量看成是 [c,c,...,c]T 这个向量。

uvn 维向量 x 的两个 m 维向量值函数,他们的逐元素乘法的结果仍然是 m 维的,因此 uv 的雅可比矩阵是 m×n 的:

(uv)x=(uv)uux+(uv)vvx=diag(v)ux+diag(u)ux

向量内积

uvn 维向量 x 的两个 m 维向量值函数,那么他们的内积是一个实数。我们把这个实数看成是一个一维向量,因此求导的结果就是一个 1×n 的雅可比矩阵:

(uv)x=i=1m[(uivi)x1,(uivi)x2,,(uivi)xn]

其中 (uivi)x1=vi(ui)x1+ui(vi)x1 ,因此:

(uv)x=i=1m[vi(ui)x1+ui(vi)x1,vi(ui)x2+ui(vi)x2,,vi(ui)xn+ui(vi)xn]=i=1m[vi(ui)x1,vi(ui)x2,,vi(ui)xn]+[ui(vi)x1,ui(vi)x2,,ui(vi)xn]=i=1mvi[(ui)x1,(ui)x2,,(ui)xn]+ui[(vi)x1,(vi)x2,,(vi)xn]

[(ui)x1,(ui)x2,,(ui)xn]=uix ,因此原来的式子可以写成:

(uv)x=i=1mviuix+uivix=vTux+uTvx

这个结论的一个特例是 x 与自身的内积:

xTxx=2xT

向量与矩阵的运算

A 是一个 m×n 的常量矩阵,x 是一个 n 维向量,那么:

(Ax)x=A

逐元素的加与乘

uvn 维向量,并且都是 x 的函数,那么:

  1. (u+v)x=ux+vx
  2. (uv)x=(uTv)x=vux+uvx ,这里的 代表逐元素乘法,而非内积。
此作者没有提供个人介绍。
最后更新于 2025-04-28