机器学习推导合集03-机器学习领域矩阵求导的理解和实战

版权声明:博客为个人原创,如需转载请注明出处 https://blog.csdn.net/liubai01/article/details/82290152

1 引言

我写的博客很多都是想在一些容易被劝退的地方分享一些体悟。在这之中有一个比较基本的关卡:矩阵求导。当你在面对LR(logistic regression)和最小二乘问题求梯度的时候,你会想:“这里的公式为啥是这样?”。回答你的,可能是参考书目背后零星公式的整理。若你想上网查阅,却发现鱼龙混杂(最近随着机器学习的热门情况有所好转)。我认为主要原因是:矩阵求导还没有一个统一的定义。WIKI有系统的介绍。然而,看完整篇之后可能你对实际的应用还有点云里雾里。这也是本篇博客致力于解决的问题。

声明:本文内容参考了Matrix Calculus的WIKI和Randal J. Barnes所写的Matrix Differentiation。 并且看本文前,请确保你有基本的线性代数知识。本文适合求经典问题损失函数梯度,本公式卡住的读者阅读。

2 求导简单回顾

作者数学分析一课学的并不好,在这里希望尽量解释清楚。我所学习到现代教科书上的导数定义是这样的:

$$f'(x_0)=\lim_{\triangle x \rightarrow 0}\frac{\triangle y}{\triangle x}=\lim_{\triangle x \rightarrow 0} \frac{f(x_0+\triangle x)-f(x_0)}{\triangle x}$$

在一元函数上,一个点对应的导数与在这个点函数的切线的斜率是相等的。求导在机器学习里用的很多,关键原因在于:当损失函数为凸的情况下,梯度下降能把证明收敛到全局最优,并且相比求解析解能更数值稳定(numerically stable)。看个收敛的直观结论(有兴趣可以去学习优化相关的理论):

如果f为凸函数,并且l-lipschitz光滑。如果\eta_t \equiv \eta = \frac{1}{L} 那么:

$$\lvert\lvert x^{t+1}-x^{\star}\rvert\rvert_2 \leqslant \lvert\lvert x^t -x^{\star}\rvert \rvert_2 - \frac{1}{L^2}  \lvert\lvert \nabla f(x^t) \rvert \rvert_2$$

注:x^{\star}为全局最优点,$\eta_t$代表学习率,在这里\eta_t \equiv \eta = \frac{1}{L} 代表学习率设定为常量。

深度学习里,梯度下降更是一招鲜。即使函数非凸,梯度下降无法保证收敛到全局最优,但是由于算法效果好,梯度下降更是诸多优化器的基础。BP(反向传播)为计算复杂模型的梯度指明了系统的方法。梯度下降以一己之力撑起了近些年的Ai大旗。这也是我们在这里重视求导的原因。

3 为何机器学习会倒戈分母布局大军?

矩阵求导一直分割为2大阵营。核心的分歧点在于:标量对向量(一般只考虑对列向量)求导结果到底算列向量,还是行向量。以列向量作为结果的称作是分母布局(denominator layout),以行向量作为结果的是分子布局(numerator layout)。这个决定对往后的公式都有影响。我对其的理解是:

  1. 行的位置是“座上宾”。因为自古以来都有默认列向量的传统。我们优先把元素放在每行第一位
  2. 谁坐在每行首位依次排开,这个布局就叫做分子/分母布局。

那么机器学习属于哪个阵营?严谨地说,要看作者习惯。但是,机器学习有一位前文提到的众星之子,使大家不由自主地向分母布局靠拢:那就是梯度下降。我们观察以下式子:

$$x^{t+1}=x^{t}-\eta \nabla f(x^t),\,\,\,\,\,x\in\mathbb{R}^d$$

一般梯度下降过程我们都会写成这样。毫无疑问,作为参数的x一般为列向量。那么,其梯度为了式子简洁(无需二外的转置),\nabla f(x^t)应该也为列向量。这就意味着\frac{\partial f}{\partial x}是列向量,即是采用分母布局。私以为,这是很多基本模型采用分母布局的核心原因。

4 分母布局之约定

偏导的定义有不了解就烦请读者自行查阅。这一节,我们聚焦于分母布局有哪些基本的规定。选择了分母布局,就代表了你选择了(CSDN上不会加粗数学公式,请读者注意区分常量和向量):

  1. 梯度\frac{\partial y}{\partial x}是列向量(x\in \mathbb{R}, y \in \mathbb{R}^d)。e.g: 对于f(x_1, x_2, x_3): \nabla f = [\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \frac{\partial f}{\partial x_3}]^T \in \mathbb{R}^{3\times 1}。(4.1)
  2. \frac{\partial y}{\partial x}是行向量(x\in \mathbb{R}^d, y \in \mathbb{R})。\frac{\partial y}{\partial x} \in \mathbb{R}^{1\times d}。(4.2)
  3. 如果x\in \mathbb{R}^n, y \in \mathbb{R}^m.\frac{\partial y}{\partial x} \in \mathbb{R}^{n\times m}。(4.3)

Exercise:\frac{\partial x}{\partial x} \in ? (x \in \mathbb{R}^n)

Solution: \frac{\partial x}{\partial x} = I_{n\times n}

至于常量对矩阵求导,本文不作过多展开。如有需要,可以查询WIKI。值得注意的是,有些高阶导数无法用矩阵表示时,需要用到张量(Tensor)。这就属于比较进阶的话题了。

5 从公式推导开始

我们看个样例。一般我们将推导分为两步:①确定形状②对好入座。在正式开始前,我们规定一些记号

  • 若y是(列)向量,则y_i表示向量y第i个元素
  • 若A是矩阵,A_{i,j}表示矩阵i行j列的元素。

由于例题输入letax较为繁琐,这里用图片代替。如果读者能帮助我转成letax电子版,请评论联系,我将感激不尽。

试着配合着命题1,证明一下命题2吧(不要偷看答案哦~)

此外,在单变量求导的时,碰到复杂的求导问题,我们会通过链式法则化归为基本的问题套公式求解。那么矩阵求导里呢?我有个稳妥的方案:链式法则也有公式可寻。这样就能避免形状的问题。举个例子:

第一次我从参考材料(Matrix Differentiation)里面看,心想:这结论有啥用啊?后来我注意到,这里y,x可以看做是Az等关于z的方程。这样我们复杂的求导就可以通过这些公式化归为简单的问题了。

6 以最小二乘问题为结尾

最小二乘是线性代数,机器学习里的经典问题。问题是这样的:有\{(x_i, y_i)\}^N_{i=1}, (x_i, y_i)\in \mathbb{R}^d \times \mathbb{R}:

$$\min_{w} \lVert Xw-y \rVert_2^2$$

这里:$$ X= \left[ \begin{matrix} 1 &| & - & x_1 & -\\ 1 &| & - & x_2 & -\\ \cdots&| & - & \cdots & -\\ 1 & | & - & x_n & -\\ \end{matrix} \right] $$$$ y= \left[ \begin{matrix} y_1\\y_2\\ \cdots \\ y_n \end{matrix} \right] $$,w \in \mathbb{R}^{d+1}。现在,可以证明上述损失函数是凸的。我们希望通过梯度下降的方式,求解上面的损失函数最小值。我们试着用上面的公式求解梯度:

7 总结

如果需要更多的公式,请查询WIKI。Randal J. Barnes所写的Matrix Differentiation 所写的是分子布局的教材,注意区分。

猜你喜欢

转载自blog.csdn.net/liubai01/article/details/82290152