用于深度学习的矩阵微积分读书笔记
书籍简介
《The Matrix Calculus You Need For Deep Learning》是旧金山大学的Terence Parr教授(ANTLR之父,fast.ai创始人)和Jeremy Howard共同推出的一篇免费教程,可以帮助你快速入门深度学习中的矩阵微积分相关知识。该教程简洁明了,通俗易懂,只需要一点微积分和神经网络的基础知识就可以直接开始学习啦!
本教程涵盖的内容
教程先快速回顾了标量求导法则、向量微积分和偏导数的概念,然后从Jacobian矩阵的推广开始介绍如何计算矩阵的导数,最后推导单个神经元输出的梯度以及神经网络损失函数的梯度。
内容总结
1.引言
导数是机器学习中的一个重要组成部分,特别是深度学习,它通过优化损失函数来对神经网络进行训练。不过它们需要的不是之前所学的标量微积分,而是所谓的矩阵微积分——线性代数和多变量微积分的“联姻”。
标量求导我们已经很熟悉的,常用的有指数法则、乘积法则和链式法则。需要注意的是这里我们已经可以引入算子的概念,即可认为 d d x \frac{d}{dx} dxd是将一个函数映射到它的导数的微分算子,这就意味着 d d x f ( x ) \frac{d}{dx}f(x) dxdf(x)和 d f ( x ) d x \frac{df(x)}{dx} dxdf(x)表示相同的概念。
进一步考虑多变量的情况。多变量函数对单个变量求导得到的是偏导数(用 ∂ ∂ x \frac{\partial}{\partial x} ∂x∂表示)。将所有的偏导数放在一个行向量内,这个向量即称为函数 f ( x , y ) f(x,y) f(x,y)的梯度,即
∇ f ( x , y ) = [ ∂ f ( x , y ) ∂ x , ∂ f ( x , y ) ∂ y ] \nabla f(x,y)=[\frac{\partial f(x,y)}{\partial x},\frac{\partial f(x,y)}{\partial y}] ∇f(x,y)=[∂x∂f(x,y),∂y∂f(x,y)].
再进一步,考虑多函数多变量的情况。除了 f ( x , y ) f(x,y) f(x,y)之外,再加上一个函数 g ( x , y ) g(x,y) g(x,y)。对于这两个函数,我们可以将它们的梯度组合成一个矩阵,称为Jacobian矩阵,矩阵的每一行对应一个函数的梯度:
J = [ ∇ f ( x , y ) ∇ g ( x , y ) ] = [ ∂ f ( x , y ) ∂ x ∂ f ( x , y ) ∂ y ∂ g ( x , y ) ∂ x ∂ g ( x , y ) ∂ y ] J=\begin{bmatrix}\nabla f(x,y)\\ \nabla g(x,y) \end{bmatrix}=\begin{bmatrix}\frac{\partial f(x,y)}{\partial x} & \frac{\partial f(x,y)}{\partial y} \\ \frac{\partial g(x,y)}{\partial x}&\frac{\partial g(x,y)}{\partial y} \end{bmatrix} J=[∇f(x,y)∇g(x,y)]=[∂x∂f(x,y)∂x∂g(x,y)∂y∂f(x,y)∂y∂g(x,y)].
这样我们就得到了本教程的核心内容:矩阵微积分!
2.Jacobian的推广
将参数用向量表示,即 x = [ x 1 x 2 . . . x n ] T \bold{x}=[ x_1 x_2 ... x_n]^T x=[x1x2...xn]T.
将函数同样用向量表示,即 y = f ( x ) = [ f 1 ( x ) f 2 ( x ) . . . f m ( x ) ] T \bold{y}=\bold{f(x)}=[f_1(\bold x) f_2(\bold x) ... f_m(\bold x)]^T y=f(x)=[f1(x)f2(x)...fm(x)]T,表示由m个标量函数构成的函数向量。
通常Jacobian矩阵即是 m ∗ n m*n m∗n个偏导数的集合,也就是相对于 x \bold x x的m个梯度的堆积:
∂ y ∂ x = [ ∇ f 1 ( x ) ∇ f 2 ( x ) . . . ∇ f m ( x ) ] = [ ∂ x f 1 ( x ) ∂ x f 2 ( x ) . . . ∂ x f m ( x ) ] = [ ∂ x 1 f 1 ( x ) ∂ x 2 f 1 ( x ) . . . ∂ x n f 1 ( x ) ∂ x 1 f 2 ( x ) ∂ x 2 f 2 ( x ) . . . ∂ x n f 2 ( x ) . . . ∂ x 1 f m ( x ) ∂ x 2 f m ( x ) . . . ∂ x n f m ( x ) ] \frac{\partial {\bold y}}{\partial {\bold x}}=\begin{bmatrix} \nabla f_1(\bold {x}) \\ \nabla f_2(\bold {x}) \\ ... \\ \nabla f_m(\bold {x}) \end{bmatrix}=\begin{bmatrix} \frac{\partial}{\bold {x}}f_1(\bold x) \\ \frac{\partial}{\bold {x}}f_2(\bold x) \\ ... \\ \frac{\partial}{\bold {x}}f_m(\bold x)\end{bmatrix}\\=\begin{bmatrix} \frac{\partial}{x_1}f_1(\bold x) & \frac{\partial}{x_2}f_1(\bold x) & ... & \frac{\partial}{x_n}f_1(\bold x)\\ \frac{\partial}{x_1}f_2(\bold x) & \frac{\partial}{x_2}f_2(\bold x) & ... & \frac{\partial}{x_n}f_2(\bold x)\\ &...& \\ \frac{\partial}{x_1}f_m(\bold x) & \frac{\partial}{x_2}f_m(\bold x) & ... & \frac{\partial}{x_n}f_m(\bold x)\end{bmatrix} ∂x∂y=⎣⎢⎢⎡∇f1(x)∇f2(x)...∇fm(x)⎦⎥⎥⎤=⎣⎢⎢⎡x∂f1(x)x∂f2(x)...x∂fm(x)⎦⎥⎥⎤=⎣⎢⎢⎡x1∂f1(x)x1∂f2(x)x1∂fm(x)x2∂f1(x)x2∂f2(x)...x2∂fm(x).........xn∂f1(x)xn∂