研一零基础菜鸟自学笔记,欢迎大佬们批评、建议、指正。
有什么好的学习建议也欢迎评论私信我。
目录
二、Logistic Regression Gradient descent
2.1Logistic regission derivatives
2.2Logistics regression on m examples
一、梯度下降法(Gradient Descent,GD)
1.1概述
Recap:
want to find spatial parameters that minimize
注:In practice can be much higher dimensional.
This picture illustrate parameters as real number.
1.2Implement Gradient Desent
梯度下降法是一个不断重复的过程,目的是为了求函数的极小值点。
梯度下降算法的思想:
先取任意值,求 在该点 的导数 ,再用 减去导数值 ,计算所得的结果就是新的 ,新的值会比初始的损失函数更小,根据新值调整拟合函数的位置,然后继续迭代,再用 减去导数值 即为 ......如此循环往复,将 值无限接近于极小值点。
通俗地解释:
一个人困在山上的某个位置,想要从有着大雾,能见度很低的山上下山到达最低点(山谷),此时下山的路径无法确定,需要利用周围信息一步一步找到下山的路。这个时候如果利用梯度下降算法来下山,便是,以当前位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,接着又以现在位置为基准,寻找当前位置最陡峭的地方,再走一步,如此循环往复,直到走到最低处(山谷)。
loss function 是用来衡量机器学习模型的精确度的。一般来说,loss function 的值越小,模型的精确度就越高,为了最小化loss function ,我们一般采用梯度下降这个说法。
公式:
在python中,我们通常使用 “dvar” 来表示导数的含义。
1.3三种梯度下降算法
梯度下降算法的问题:
首先,我们需要计算出所有样本的损失函数梯度,然后求平均值来更新参数。
如果将全部样本都保存下来参与计算,这叫做批量梯度下降算法(Batch Gradient Descent,BGD),优点是下降的非常平稳,能够保证算法的精确度,进而找到全局最优解;缺点是需要很大的内存开销,且收敛速度慢。
改进方法:
每次只用少部分的数据更新。
假设从n个随机样本中选择m个样本,且每次都不重复,每下降一步只用一个样本进行计算,这样就可以解决内存开销和迭代速度问题了。这种改进方法被称为随机梯度下降(Stochastic Gradient Descent,SGD)。且当样本较少时,这种方法虽然会引入噪声,但仍然可以按照正确的趋势来收敛函数;缺点是下降非常不平稳,虽然提升了速度,但牺牲了一定的精确度。
改进方法:
结合前两种方法的优点,每次只选用一小批样本进行计算的方法叫小批量梯度下降(Mini-Batch Gradient Descent,MBGD),它的下降过程虽然不如批量梯度下降算法BGD平稳有规律,但是速度较快;虽然没有随机梯度下降算法SGD下降速度快,但是精确性高。
1.4动量(Moment)随机梯度下降
然而深度学习网络训练往往是一个非凸的优化过程,在参数空间里分布着各类的山脊和山谷。
如图一,面对这样的山脊和初始位置,按照随机下降梯度算法,它的移动轨迹也许会在山谷两侧来回震荡,难以收敛到更低的位置,如果能加上一个运动阻尼,让它的运动更平滑一些,也许可以下降到更低点。
因此,为了改进这个问题,我们引入了一个新的量——动量,在选定下一个位置时,我们除了算出新的梯度,还要保留上一次的一部分梯度,将两个方向叠加在一起,构成新的方向,这样就可以得到一个更加合理的优化效果了,这个方法我们称之为动量随机梯度下降。
1.5 学习率
学习率在下山的例子中相当于步长,即每一步的长度。步子太大,容易便宜路线;步子太小,所耗费的时间过长,计算量过多。因此,要学会选择合适的 ,这能够帮我们快速找到收敛方向,细致优化防止震荡。
然而,人工调整学习率非常的困难,因为为了能让梯度自动调整,我们引入了一个新的量——r。
r是指梯度大小随时间的累积量,如果让 放在学习率 的分母上,那么梯度波动很大时,学习率就会快速下降,以达到帮助我们缩小步长,快速找到收敛方向;若梯度波动很小时,学习率就会下降的慢一些,这样就实现了自动调整,如下式。
这里的 是一个小量,用来稳定数值计算,防止 为0造成该式无意义。
这就是2011年提出的AdaGrad算法,2012年提出了RMSProp算法,在r中加入了可以手动调节的 ,来控制优化过程。
1.6动量&自适应学习Adam算法
在2014年提出的adam算法则兼顾了以上两种优点——动量和自动调节
二、Logistic Regression Gradient descent
Recap:
2.1Logistic regission derivatives
假设样本有两个特征 和 ,输入参数 、 和 ,从而计算出 的偏导数计算公式。
在Logistic回归中我们所需要做的就是变换参数 和 的值,从而最小化损失函数。
偏导数流程图
反向传播计算偏导数:
在代码中,我们使用“da”来表示 ,
在代码中,我们使用“dz”来表示,
由链式法则可以求出;
特别地,关于 的导数 ,变量名为“” ;
同样地,关于 的导数 ,变量名为“” ;
其中,;
则,、 、更新为
;
;
;
以上,就是单个样本实例的一次梯度更新的步骤,但是训练Logistics回归模型不仅仅只有一个训练样本,下面来看一下有m个训练样本的整个训练集。
2.2Logistics regression on m examples
Recap:
那么,
其中,
以上为公式分析,下面让我们放入一个具体的算法实例,同时需要一起应用Logistic回归和梯度下降法。
假设,,,
For i=1 to m
#这里的i对应单个样本的
# ```````` 同上
;;
;;
#没有上标是因为看作累加器去求取整个训练集上的和
;
;
#应用一步梯度下降法
重复以上内容多次以应用多次的梯度下降法。
缺点:
运用了For循环,若应用深度学习算法,在代码中显式地应用For循环会使算法效率变低,因此使用向量化技术能够帮助我们的代码摆脱For循环。
下一周会具体学习正则化。
来源:【梯度下降】3D可视化讲解通俗易懂_哔哩哔哩_bilibili[5分钟深度学习] #01 梯度下降算法_哔哩哔哩_bilibili