目录:
计算复杂性与NP问题
上溢和下溢
导数,偏导数及两个特殊矩阵
函数导数为零的二三事
方向导数和梯度
梯度下降法
牛顿法
读完估计需要10min,这里主要讲解第二部分,剩下部分期待下期~
函数导数为零的二三事
注意:为了便于理解,下面将详细分析导数为0在低维的情况,而在高维情况下都是类似的。下面先介绍一些概念:
以上都是在一元函数中的定义,如下图所示,而二维或以上可简单推之:
鞍点 (saddle point):目标函数在此点上的梯度(一阶导数)值为 0, 但从改点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点。
为什么叫做鞍点?鞍点这词来自于不定二次型的二维图形,它的形状就像马鞍,而鞍点就是中心那个点,图中x轴方向往上曲,在y轴方向往下曲。这样也让我们更容易理解。
判断鞍点的一个充分条件是:函数在鞍点处的Hessian矩阵为不定矩阵。这样为什么在这里不做详细解释,有兴趣可以了解。
图来自《deep learning》
上图列出临界点的类型。在一维情况下,三种临界点的示例。临界点是斜率为零的点。这样的点可以是 局部极小点(local minimum),其值低于相邻点; 局部极大点(local maximum),其值高于相邻点; 或鞍点,同时存在更高和更低的相邻点
使 f(x) 取得绝对的最小值(相对所有其他值)的点是 全局最小点。函数可能有一个全局最小点或存在多个全局最小点,还可能存在不是全局最优的局部极小点。在机器学习和深度学习的背景下,我们要优化的函数可能含有许多不是最优的局部极小点,或者还有很多处于非常平坦的区域内的鞍点。尤其是当输入是多维的时候,所有这些都将使优化变得困难。因此,我们通常寻找使 f非常小的点,但这在任何形式意义下并不一定是最小。方向导数和梯度方向导数和梯度
图来自《deep learning》
上图展示了近似最小化,当存在多个局部极小点或者平坦区域时,优化算法可能无法找到全局最小点,在机器学习和深度学习中,即使找到的解不是真正最小的,但只要它们对应于代价函数显著低的值,我们通常就能接受这样的解。
这些知识点都是基本知识,不做过多解释,低维的我们理解了,高维的就类推就行了,比如高维也临界点也有局部最优或者鞍点的情况。但在深度学习中优化算法比如SGD往往可以避免鞍点,然后使得其效果不错,这也是深度学习为什么可行的一个原因吧。
方向导数和梯度:
方向导数:在之前讲偏导数的时候,相信很多人已经看出,偏导数求的都是沿着坐标轴的变化率,不管多少维也好,都只是求的变化率,那现在问题来了,如果我想求在某个方向而不是沿着坐标轴方向的变化率怎么求呢?那方向导数,简单来说,就是我们指定任意一个方向,函数对对这个任意方向的变化率.
或者说,如下图,我们知道在一维的时候,函数的导数就是在某点对应切线的斜率,那么对于函数f(x,y)的 A点在这个方向上也是有切线的,其切线的斜率就是方向导数。当然,注意这个切线是任意的,这里我们要限定其方向,也就是图中中的矢量y的方向。
梯度:是一个矢量或者说是一个向量,其方向上的方向导数最大,其大小正好是此最大方向导数。
梯度的理解很重要,很重要,很重要!下面解决两个问题,梯度怎么求和梯度有什么用?
怎么算?--(介绍一种比较简单之间的方法)
梯度有什么用?
简单的讲,假如你在一座山上,蒙着眼睛,但是你必须到达山谷中最低点的湖泊,你该怎么办?然后我们想到一个简单的方法,在每走一步时,都是走那个离谷底最近的那个方向,那怎么求才能使得每一步都下降更大的高度,这个时候我们就完全可以用梯度来帮助我们,就可以完成任务啦!
当然了,我们是在写机器学习数学基础呐,你会说下山有什么用,我们看这篇文章又不是为了下山的。Emmm...别急,之后我们就讲会梯度的大用处
这两个概念非常重要,下面的优化算法的前提就是梯度,要重点理解。
AI遇见机器学习
mltoai
领取专属 10元无门槛券
私享最新 技术干货