这几天看机器相关的书籍,对一些概念有了新的理解,分享给大家,欢迎大家批评指正。
V2EX 似乎不能显示 Latex,可以在以下两个网址查看原文:
以下为正文:
在机器学习中,我们通常需要对问题进行建模,然后可以得到一个成本函数(cost function),通过对这个成本函数进行最小化,我们可以得到我们所需要的参数,从而得到具体的模型。这些优化问题中,只有少部分可以得到解析解(如最小二乘法),而大部分这类优化问题只能迭代求解,而迭代求解中两种最常用的方法即梯度下降法与牛顿法。为了使用这两种方法,我们需要计算成本函数的梯度与海森矩阵,这篇文章简要说明了如何使用 python 的符号计算库 sympy 来计算特定函数的梯度与海森矩阵,求解机器学习中的最优化问题。
对梯度的直观理解
梯度概念是建立在偏导数与方向导数概念基础上的。所谓偏导数,简单来说是对于一个多元函数,选定一个自变量并让其他自变量保持不变,只考察因变量与选定自变量的变化关系。数学上说,是指对于多元函数$$y=f(x_1,x_2,...x_n)$$,假设其偏导数都存在,则该函数共有$$n$$个偏导数,可以表示为:
$$
{f_{ {x_1}}} = { {\partial y} \over {\partial {x_1}}},{f_{ {x_2}}} = { {\partial y} \over {\partial {x_2}}}...{f_{ {x_n}}} = { {\partial y} \over {\partial {x_n}}}
$$
偏导数只能表示多元函数沿某个坐标轴方向的导数,如对于二元函数$$z=x^2+y^2$$ ,$${ {\partial z} \over {\partial x}} = 2x$$表示函数沿$$X$$轴方向的导数,而$${ {\partial z} \over {\partial y}} = 2y$$表示