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光滑。如果 那么:
$$\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$$
注:为全局最优点,
代表学习率,在这里