机器学习理解
序
本次记录内容包括但不限于:
○ 监督学习与非监督学习
○ 监督学习
○ 监督学习的理解
○ 模型简单的理解
○ 规则项理解
○ L0与L1正则
○ L2正则
○λ选取
机器学习是什么
机器学习就是计算机根据大量数据通过计算获得某种可以被增进的表现(譬如是某种特征规律啥的)。再形式化一点说机器学习就是通过数据,利用学习算法(learning algorithm)从假设集合(hypothesis set)中去挑选一个和实际目标函数最接近的假设的过程。
监督学习与非监督学习
监督学习是有标签的训练,且训练前我们对最终的输出是有预期的;
非监督学习是无标签的学习,训练前我们无法产生一个预期,例如对西瓜进行聚类,最后聚类为多少类是需要尝试的,同时聚类之后也没有一个很好的衡量标准来衡量你聚成k类的好坏。
监督学习
1、监督学习的理解
监督机器学习问题无非就是“minimize your error while regularizing your parameters”,也就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。我们的目的并不仅仅是使得训练误差最小,而是需要在测试集上表现良好,因此,我们需要在保证模型简单的基础上最小化训练误差。
2、模型简单的理解
模型简单就是通过规则函数来进行约束,不仅约束了模型参数的范围及复杂度,同时约束我们模型的特性,什么叫能够约束模型特性呢?我们常常在加入规则项时是有一定先验知识作为前提的,也就是认为的加入一些人们的先验知识使得模型往我们想要的方向训练。这种先验对于我们进行统计机器学习是十分有用的,人们的先验使得我们会少走很多弯路。
3、规则项理解
规则项是保证模型遵循奥卡姆剃刀原理的一种手段
○ 从贝叶斯角度来看,规则化项对应于模型的先验概率,例如L1和L2正则,其实都是贝叶斯学派的产物。
○从经验风险角度来看,经验风险被定义为平均损失函数,也就是单纯的损失函数,而结构化风险被定义为:损失函数+正则项,也就是说,正则化项是结构风险最小化策略的体现。
那么现在我们来看一下广义的机器学习目标函数:
其实机器学习全部的目标函数几乎一模一样,无非就是变换损失函数项或是规则化项。
既然规则化项是为了约束模型的复杂度,那么一般情况下,正则化项都被设计为复杂度的单调递增函数,例如参数向量的范数。
L0正则与L1正则
L0正则指的是W向量中非0元素的个数,L0正则项的目的就是为了参数集合大多为0,使得W变得稀疏,那么L0与L1有什么区别和联系呢?
L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”。
L1为何会产生稀疏权值?
-
贝叶斯解释
任何的规则化算子,如果他在Wi=0的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。
实质上,L1的先验是拉普拉斯先验,而拉普拉斯分布的特性使得参数容易取到0. -
数学解释
首先来看看L1和L2的梯度(导数的反方向):
不失一般性,我们假定:wi等于不为0的某个正的浮点数,学习速率η 为0.5
L1的权值更新公式为wi= wi- η * 1 = wi- 0.5 * 1,也就是说权值每次更新都固定减少一个特定的值(比如0.5),那么经过若干次迭代之后,权值就有可能减少到0。
L2的权值更新公式为wi= wi- η * wi= wi- 0.5 * wi,也就是说权值每次都等于上一次的1/2,那么,虽然权值不断变小,但是因为每次都等于上一次的一半,所以很快会收敛到较小的值但不为0。 -
为什么不用L0而用L1?
很显然一点是,L0不是一个凸函数,而L1可以作为L0的一个最优凸近似,因此可以与损失函数一起进行优化算法。 -
为什么需要稀疏?
- 特征选择
也就是自动去掉某些无贡献的特征,将其权重置为0 - 可解释性
在某些特定任务中,我们的特征维度可能高达上千,例如预测某种病的概率,其相关特征可能高达1000维,通过正则项的筛选,可能最后只有几项是对疾病预测起到很大作用的特征,这样筛选出来的特征对于医生来讲是具有参考性和可解释性的。
L2正则
L2正则化是指权值向量w中各个元素的平方和然后再求平方根。其被称为“权值衰减”
- 为什么都说L2可以防止过拟合?
我们的目标是使得结构化风险函数最小,当然这会使得L2正则项的w参数很小,但是不会为0,这是与L1有所区别的,L2正则先验是参数服从正态分布,因此很大概率取到0值附近,这样依赖,参数空间被约束,模型相对变得简单,各项参数较小,多项式分量也就不会因此有很大的影响,从而在一定程度上避免了过拟合。(越小的参数说明模型越简单,越简单的模型越不容易产生过拟合现象。) - L2的好处
- 学习角度
□ 防止过拟合,提升模型泛化能力 - 优化计算角度
□ 让我们的优化求解变得稳定和快速,原因如下:
□ 有助于处理condition number不好情况下的矩阵求逆困难问题。
condition number指的是在优化算法过程中,条件数=函数梯度最大变化速度 / 梯度最小变化速度,其实也就是反应了目标函数在整个特征空间内的优化速度。如果条件数大,那么就表示在有些地方目标函数优化地快,有些地方慢,很不规律,从而很难用当前的梯度去比较准确地预测最优点所在的位置。换句话说,宏观层面上condition number衡量了当输入发生微小变化时,输出会发生多大变化,也就是系统对外界变化的敏感度。
那么对于一个优化问题来说,主要两大难题就是 1)局部最优,2)ill-condition问题。病态条件问题就是condition number过大。
实际中的condition number:
如果我样本数远小于特征维度,此时矩阵无法求逆,那么w就没法计算出来,更确切地说w会有无穷解,此时的模型就是不可信的。
但是加上L2之后,上式变为下面的情况:
总的来说,优化算法的收敛速度受condition number影响,若条件数小,则表示上届小,那么收敛就快。
正则化参数λ
λ是用来调和损失函数和正则化项的,λ越大表示模型训练更看重规则项。我么希望模型既能看重损失项,来拟合好我们的训练集,同时又能够有约束的特征在里面。
我们再训练之前,可以大概计算一下此时的loss值是多大,正则化值是多大,然后针对他们的比例来设置λ,进而缩小我们的搜索空间;
此外,还可采用交叉验证的方法,将数据分成几份,一部分训练,一部分测试,然后选不同的λ值在一个训练集上训练多个模型,然后取测试集测试,取其中表现最好模型对应的λ来作为最终取值。