《Python大规模机器学习》— 2.3 ​随机学习

举报
华章计算机 发表于 2019/06/12 21:57:31 2019/06/12
【摘要】 本节书摘来自华章计算机《Python大规模机器学习》一书中的第2章,第2.3.1节,作者是[荷]巴斯蒂安·贾丁(Bastiaan Sjardin)[意]卢卡·马萨罗(Luca Massaron)[意]阿尔贝托·博斯凯蒂(Alberto Boschetti)王贵财刘春明译。

2.3    随机学习

在定义数据流化过程之后,下面开始讨论学习过程,因为正是

学习及其特定需求决定了在

预处理阶段处理数据并对其进行转换的最佳方式。

与批量学习相反,在线学习要经过大量迭代,并且每次从单个实例获取方向,相比于批量学习的优化(它能立即找到通过数据整体表达的正确方向),在线学习更容易出错。

2.3.1    批处理梯度下降

为适应在线学习,需要重新引入机器学习的核心算法:梯度下降。处理批数据时,相比于统计学算法,梯度下降法可以使用少很多的计算量,从而使线性回归分析的成本函数最小化。梯度下降秩的复杂度量级为O(n*p),使学习回归系数具有可行性,即使在n(观测样本数)和p(变量数)的值很大时。数据训练中,即使特征高度相关甚至相同,训练结果也令人满意。

所有一切都基于一个简单的优化方法:经多次迭代后参数集以某种方式逐渐收敛成从随机状态开始的最优解。梯度下降法与回归问题一样,是理论上成熟并且具有收敛性保证的优化算法。下面首先以图2-1为例进行说明,该图表示参数的允许值(超空间)与结果之间在成本函数最小化方面的复杂映射(典型的神经网络)。

 image.png

图2-1成本与参数映射关系

 

梯度下降法就像蒙着眼睛在山上行走一样,你想到谷底却看不到路,只能沿着你觉得下坡的方向前进,试一试然后停下来感觉一下地形,之后继续沿你感觉的下坡方向前进,如此往复。如果一直在朝着下坡方向前进,你最终会到达某个点,因为这里地形平坦不能再下降,这个点就是你希望到达的目的地。

采用这种方法,需要执行如下操作:

  •  确定出发点。通常通过对函数参数进行初始随机猜测来实现(多次重启将确保初始化不会导致算法到达局部最优值)。

  •  确定何时下降,数学术语中意味着你应该对目标变量的实际参数化函数求导,也就是求待优化成本函数的偏导数。注意,梯度下降适用于所有数据,能一次性优化所有实例并给出预测。

  •  确定沿导数方向的步长。数学术语中,权重(通常称为alpha)对应于你在每步中参数的变化率。这方面可看作为学习因素,因为它指出每次优化时应该从数据中学习多少。和其他超参数一样,alpha的最佳值可以通过对验证集的性能评估来决定。

  •  确定何时停止,考虑到成本函数相对于上一步的改进太小。这样你能注意到可能出现的错误并意识到你可能不在正确方向上,因为学习中使用的alpha值太大。这实际上是个动量问题,也就是速度问题,此速度上算法收敛于最优。这就像把球从山上扔下去一样,它会滚过表面上的小凹坑,但是当它速度过高时,它就不会在正确的点停止。因此,如果alpha被正确设置,如图2-2所示,当算法接近时,动量自然会变慢。然而,如果设置不准确,它会跳过全局最优,如图2-2右边所示,发生偏离导致最小化的错误,此时优化过程导致参数值选择不合适,未能达到所需的错误最小化。

 image.png

image.png

图2-2梯度下降法的成本函数与参数关系

 

为更好描述梯度下降法,现以一个线性回归为例来说明,其参数通过下面过程优化。从成本函数J开始,给定权值向量w:

image.png

训练数据矩阵X和系数向量w之间的矩阵向量乘积Xw代表线性模型的预测,对响应y的偏差进行平方,然后求和,最后除以2倍n(实例个数)。

最初,向量w用标准正态分布中的随机数实例化,其均值为零,标准差为1。(实际上,初始化有多种不同方法,所有方法都能近似为成本函数为碗形的线性回归,有一个唯一最小值。)这允许算法沿着优化路径开始,可以有效加快收敛过程的收敛速度。优化线性回归时,初始化不会给算法带来太***烦(最坏情况是,一个错误开始只会使它慢下来)。相反,使用梯度下降优化不同机器学习算法(如神经网络)时,可能会因为错误的初始化而陷入困境。例如,如果初始值w中填充了零值,就会发生这种情况(冒着被困在一个完全对称的山顶上的风险,没有方向性能立即带来比任何其他情况更好的优化)。这也可能发生在具有多个局部极小值的优化过程中。

 

给定起始随机系数向量w,可以立即计算成本函数J(w),并通过从偏导数的每一部分减去α(学习率)以确定每个单系数的初始方向,用下公式解释:

image.png

求解偏导数后,这一点能更好地表达,如下所示:

image.png

值得注意的是,更新量对特征向量xj的每个奇异系数进行的,但同时基于所有预测(因此求和)。

迭代w中的所有系数后,完成系数更新。通过计算偏导数和更新w向量再重新启动优化。

此过程的一个有趣特点是,当w向量趋近最优模型时,更新会越来越少。因此,当w中相对于先前操作引起的变化小时,该过程就停止。不管怎样,当alpha(学习率)设置适当时确实会减少更新。实际上如果值太大会导致迂回和失败,在某些情况下,导致过程完全相反,并且不可能最终收敛到一个解。事实上,优化看上去趋于目标,实际上却在远离它。

另一面,优化过程太小的α值不仅移向其目标时速度太慢,而且还容易在局部最小值中某个地方被卡住。对于更复杂算法尤其如此,就像神经网络一样。线性回归及其分类对应的逻辑回归,由于优化曲线为碗形,就像凹形曲线一样,其特点是有最小值,而无局部极小值。

在所演示的实例实现中,alpha是固定常数(固定学习率梯度下降)。由于α在收敛到最优解中非常重要,为此设计不同策略使其在优化过程中开始变大,并随着优化继续而缩小。我们将讨论这些不同的方法在Scikit-learn中的实现。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。