这里从导数讲到梯度,梯度是y随着x的变化最快增长的方向的表达,有了梯度就可以去逼近求解函数的极值点。
这里利用梯度下降的迭代方法来逼近极值点,这个算法一般肯定会找到一个局部极值,不一定是最小值。如果要求解全局最小,可以利用二阶导数的hassin矩阵去去除鞍点,但是这种计算量大。或者可以在函数的构造上下功夫,让函数是个凸函数。
本节用了很长的时间在讲述导数已经梯度的意义,而在最后得出结论和方法,并且列出了多个不同的激活函数及其导数情况。
¥
支付方式
请使用微信扫一扫 扫描二维码支付
请使用支付宝扫一扫 扫描二维码支付
这里从导数讲到梯度,梯度是y随着x的变化最快增长的方向的表达,有了梯度就可以去逼近求解函数的极值点。
这里利用梯度下降的迭代方法来逼近极值点,这个算法一般肯定会找到一个局部极值,不一定是最小值。如果要求解全局最小,可以利用二阶导数的hassin矩阵去去除鞍点,但是这种计算量大。或者可以在函数的构造上下功夫,让函数是个凸函数。
本节用了很长的时间在讲述导数已经梯度的意义,而在最后得出结论和方法,并且列出了多个不同的激活函数及其导数情况。
4.1 反向传播
这一节主要介绍导数和梯度的概念。导数是函数值的变化,讨论如果导数是向量。
梯度是一个行向量。二姐偏导数一般用海森矩阵表示。
通常,用迭代的方法寻找极值。
回顾:
给定training set of input-output pairs:
就可以得到这整个数据集中的平均经验误差,然后取得最小值。这是最小化优化问题。
——————————————————
定义导数:
微小变化会在多大程度上影响输出?
若X是一个向量,dx指的是X在每一个方向上的变化。
公式在课件中。
关于梯度的定义。可以定义为行向量(通常),sometimes也可以定义为列向量。
1、把斜率为0作为判断是否达到最小值的依据,是不够充分的。
2、我们真正可以用来检查是否达到最大值和最小值的方法是,首先找到那些导数值为0的点,在这些点中,找到驻点,检查二次导数,若二次导数为正,说明该点是最小值;若为负,则是最大值。
PS:驻点是什么?函数值在这一点停止变化,在驻点前后,函数值的改变的方向会发生变化,要么是先减后增,要么是先增后减。
3、因为函数存在拐点。二阶导数会在拐点处变为0。若某个点,导数为0,则并不一定是极小值点。
————————————————————
对于多变量函数,如何计算驻点?
你要计算梯度的每一项是否都是0。如果有一部分为0,另外一些不是0,那么函数在某一些方向上,还是会变化。
梯度是一个向量,是唯一能使函数值增加最快的方向。
Hessian矩阵:
对有多个输入参数的函数定义二阶偏导数,就是Hessian矩阵。对角线上的元素是对单个输入变量的二阶偏导数。
————————————————————
总结:如何找到极大极小值?
首先找到梯度为0的点的集合。然后计算这些候选点的Hessian矩阵,如果这个函数的Hessian矩阵是对称矩阵。如果矩阵的某个特征向量的特征值是正数,那么沿着这个特征向量的方向,将会得到极小值点。如果某个特征向量的特征值是负数,那么沿着这个方向,将会得到极大值点。
通俗点的解释就是:我们抵达了某个点,它的梯度为0,如果它是极小值点的话,那么Hessian矩阵的每一个特征值都必须是正数。
如果你想得到最大值点,需要计算Hessian矩阵,计算量大。
————————————————
实际中,给定一个初始猜测的X0,一步步迭代后,我们最终会到达导数为0的点,也就是说,一直迭代到函数值不再减小,那么导数就可以变为0。
初始化时,应该选择函数值不为0的点。
如果梯度为正,我们沿着梯度的负方向改变。
总结:
开始迭代后,你可以检查梯度是否为0,或函数值的改变量(两次迭代之间)在变小,直到一个特定的阈值。
表示网络的函数,必须对每一个参数都可微。这样就可以用梯度下降来最小化误差。