机器学习故事汇-梯度下降
今天咱们的故事继续上一次线性回归来说,还不熟悉的小伙伴机票在这!机票直达-线性回归
当时咱们怎么唠的,是不是很多情况下要求解的目标没办法直接求呀!那该怎么办呢?咱们来用机器学习中最常用的套路-优化求解,也就是一步一步朝着最优解的方向前进!
首先给出目标函数(还记得线性回归中的目标函数吗?)也就是我们要达到的目标是使得目标函数最小(最小对应着梯度下降问题,也就是下山,那么最大也就是梯度上升,求极大值)可以把我们的优化目标看成一座山,山是由我们两个参数组成的,从上图可以看出在山中有一个山谷的最低点,这个最低点所对应的参数就是我们要求解的值!
那该怎么求解呢?下山要一步一步来,第一步要找到合适的下山方向,也就是参数所对应的梯度方向(偏导)因为我们要沿着最快的方向去下山,所以梯度的方向是最合适的(多个参数的时候需要各自求其偏导)。找到方向之后我们就该实际的去走啦,那一次走多大呢?经验表明一次走那么一小小小小步是比较合适的,因为如果步伐太大容易偏离全局最优解只得到局部最优解。方向与步长都搞定了,接下来按着我们设计好的路线更新参数就可以啦!
下山的方式也有很多种,我们来对比一下。
批量梯度下降:如上式需要综合考虑所有养那本,这就太慢了,但是效果还是蛮好的。
随机梯度下降:观察发现,每一次进行参数更新,只选择了一个样本,这样速度极快,但是代价就是一旦样本有瑕疵,会对结果产生很大的干扰!所以随机梯度下降会产生很大的浮动。
小批量梯度下降:这个就友好多了,综合了上面两位的优缺点,在迭代的时候选择一批(32,64,128比较常见)个样本来平均计算梯度的更新方向,这个就是现在应用最广的梯度下降方法啦!一个字,实用!
接下来我们再来研究一下步长(学习率)对结果产生的影响,从图中可以看到很多条线并且它们之间有着明显的差异,为啥模型不收敛!效果不好!没达标!罪魁祸首就是学习率了,它对我们结果会产生非常大的影响,一般情况下我们都是用较小的学习率,较多的迭代次数来满足它!
这张图是一个在真实数据集下使用逻辑回归进行迭代的目标函数变化情况,可以看到当我们使用梯度下降的时候目标函数最终达到了一个收敛状态,现在已经最好了吗?我们可以再增大些迭代次数再看看!
继续增大迭代次数,发现目标函数又发生了变化,所以要让模型更完美,需要更多轮次的训练!我们再来对比下不同的梯度下降策略!
这张图看起来有点乱呀,没有达到熟练状态,损失函数值还在乱蹦跶,这个就是随机梯度下降的结果,可以看出来这样的模型是不好的,只用一个样本来更新参数是不够的!所以现在我们很少使用随机梯度下降来解决实际问题。(那真的没办法用它了吗?也可以代价就是用极小的学习率配上极大的迭代次数,那为啥不用小批量的呢?)
最后的这张图就是收尾图啦,首先观察只用了4000次迭代就比之前的效果要好很多!这里做了如下两个工作。
(1):对数据进行了标准化,让数据各个特征均值为0方差为(数据预处理的常规套路)
(2):使用了小批量梯度下降进行迭代(保证了收敛性同时也加快了速度)
两个简单的操作就使得我们的模型效果快速达到了收敛状态,请记住这俩套路,你会一直沿用下去的!