机器学习/深度学习-学习笔记:概念补充(下)

学习时间:2022.05.12

概念补充(下)

在进行学习机器学习和深度学习的过程中,对于部分概念会比较陌生(可能是因为没有系统深入学习过统计学、运筹学和概率统计的相关知识;也可能是因为看的东西比较偏实践,对理论的了解不是很深入),同时对有些概念的了解仅限于熟悉的或者用过的那几个,甚至有些概念会用但不知道具体的原理,所以想对其中的几个频繁出现的概念做个系统了解。主要包括:

  • 上:极大似然估计、贝叶斯、傅里叶、马尔科夫、条件随机场;
  • 中:凸集、凸函数与凸优化,优化算法(优化器),过拟合与欠拟合;
  • 下:正则化&归一化、标准化,损失函数和伪标签等。

9. 正则化&归一化、标准化

本节主要参考内容:正则化方法小结正则化正则化 - 知乎L0,L1,L2范数及其应用

我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当用比较复杂的模型,去拟合数据时,很容易出现过拟合现象,这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。

因此,正则化是一种为了减小测试误差(注意:是针对于测试误差,对于训练误差可能是增加)的行为。

正则化的本质很简单,就是对某一问题加以先验的限制或约束以达到某种特定目的的一种手段或操作,是一种回归的形式,它将系数估计(coefficient estimate)朝零的方向进行约束、调整或缩小。也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险。

L1、L2正则化(L1、L2Regularization)又叫L1范数、L2范数。目的是对损失函数(cost function)加上一个约束(也可叫惩罚项),减小其解的范围。在正式了解这两种范数之前,我们先看下范数(LP范数)是什么。

9.1 范数 Norm(LP范数)

范数:具有“长度”概念的函数,度量某个向量空间(或矩阵)中的每个向量的长度或大小。LP范数(p-Norm)不是一个范数,而是一组范数(L1、L2是LP中的P=1和2时的情况)。

对于一个向量 x x x,它的 p p p范数定义为( p ∈ [ 1 , ∞ ] p\in[1,∞] p[1,]):

∣ ∣ x ∣ ∣ p = ( ∑ i n x i p ) 1 p ||x||_p=(\sum^n_ix^p_i)^\frac{1}{p} xp=(inxip)p1

p p p在(0,1)范围内定义的并不是范数,因为违反了三角不等式(范数要满足非负、自反、三角不等式3个条件)。

根据 p p p的变化,范数也有着不同的变化,借用一个经典的有关P范数的变化图如下:

图片

img

上图表示了p从0到正无穷变化时,单位球(unit ball)的变化情况。在P范数下定义的单位球都是凸集,但是当0≤p<1时,该定义下的单位球不是凸集(这个我们之前提过,当0<p<1时并不是范数)

L0范数

而当 p = 0 p=0 p=0时,因其不再满足三角不等性,严格的说此时 p p p已不算是范数了,但很多人仍然称之为L0范数。用公式表示如下:
∣ ∣ x ∣ ∣ 0 = # ( i )   w i t h   x i ≠ 0 ||x||_0= \# (i)\ with\ x_i≠0 x0=#(i) with xi=0
L0范数表示向量中非零元素的个数。正是L0范数的这个属性,使得其非常适合机器学习中稀疏编码、特征选择的应用。我们可以通过最小化L0范数,来寻找最少最优的稀疏特征项。

但不幸的是,L0范数的最优化(最小化)问题是一个NP hard问题(L0范数同样是非凸的)。因此,在实际应用中我们经常对L0进行凸松弛(relax),变为更高维度的范数问题,如L1范数,L2范数最优化(最小化)问题。理论上有证明,L1范数是L0范数的最优凸近似,因此通常使用L1范数来代替直接优化L0范数。

9.2 L1范数

p = 1 p=1 p=1时,我们称之为taxicab Norm,也叫Manhattan Norm。其来源是曼哈顿的出租车司机在四四方方的曼哈顿街道中从一点到另一点所需要走过的距离。也即我们所要讨论的L1范数。

根据LP范数的定义我们可以很轻松的得到L1范数的数学形式:
∣ ∣ x ∣ ∣ 1 = ∑ i n ∣ x i ∣ ||x||_1=\sum^n_i|x_i| x1=inxi
因此,L1范数就是向量各元素的绝对值之和,也被称为是"稀疏规则算子"(Lasso regularization)。那么问题来了,为什么我们希望稀疏化?稀疏化有很多好处,最直接的两个:特征选择、可解释性。

直观理解L1正则化:

假设有如下带L1正则化的损失函数: J = J 0 + α ∑ w ∣ w ∣ J=J_0+\alpha\sum_w|w| J=J0+αww,其中 J 0 J_0 J0是原始的损失函数,加号后面的一项是L1正则化项, α \alpha α是正则化系数。注意到L1正则化是权值的绝对值之和, J J J是带有绝对值符号的函数,因此 J J J是不完全可微的。

机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。当我们在原始损失函数 J 0 J_0 J0后添加L1正则化项时,相当于对 J 0 J_0 J0做了一个约束。令 L = α ∑ w ∣ w ∣ L=\alpha\sum_w|w| L=αww,则 J = J 0 + L J=J_0+L J=J0+L,此时我们的任务变成 L L L的约束下求出 J 0 J_0 J0取最小值的解

考虑二维的情况:即只有两个权值 w 1 w^1 w1 w 2 w^2 w2,此时 L = ∣ w 1 ∣ + ∣ w 2 ∣ L=|w^1|+|w^2| L=w1+w2对于梯度下降法,求解 J J J的过程可以画出等值线,同时 L 1 L1 L1正则化的函数 L L L也可以在 w 1 w 2 w^1w^2 w1w2的二维平面上画出来。如下图:

在这里插入图片描述

图中等值线是 J 0 J_0 J0的等值线,黑色方形是 L L L函数的图形。在图中,当 J 0 J_0 J0等值线与 L L L图形首次相交的地方就是最优解。上图中 J 0 J_0 J0 L L L L L L的一个顶点处相交,这个顶点就是最优解。

注意到这个顶点的值是 ( w 1 , w 2 ) = ( 0 , w ) (w^1,w^2)=(0,w) (w1,w2)=(0,w)。可以直观想象,因为L函数有很多[突出的角](二维情况下四个,多维情况下更多), J 0 J_0 J0与这些角接触的机率会远大于与 L L L其它部位接触的机率,而在这些角上,会有很多权值等于0(此时 w 1 w^1 w1为0),这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择的原因。

而正则化前面的系数 α \alpha α,可以控制 L L L图形的大小。 α \alpha α越小, L L L的图形越大(上图中的黑色方框); α \alpha α越大,L的图形就越小,可以小到黑色方框只超出原点范围一点点,这时最优点的值 ( w 1 , w 2 ) = ( 0 , w ) (w^1,w^2)=(0,w) (w1,w2)=(0,w)中的 w w w就可以取到很小的值。

9.2 L2范数

而当 p = 2 p=2 p=2时,则是我们最为常见的Euclidean norm(欧几里德范数)。也称为Euclidean distance(欧几里得距离)。也即我们要讨论的L2范数。

L2范数是最熟悉的,它的公式如下:
∣ ∣ x ∣ ∣ 2 = ∑ i n ( x i ) 2 ||x||_2=\sqrt{\sum^n_i(x_i)^2} x2=in(xi)2
L2范数有很多名称,有人把它的回归叫“岭回归”(Ridge Regression),也有人叫它“权值衰减”(Weight Decay)。以L2范数作为正则项可以得到稠密解,即每个特征对应的参数w都很小,接近于0但是不为0;此外,L2范数作为正则化项,可以防止模型为了迎合训练集而过于复杂造成过拟合的情况,从而提高模型的泛化能力。

PS:由L2衍生,我们还可以定义无限范数,即L-infinity norm。无限范数是向量x中最大元素的长度。

直观理解L2正则化:

前面与L1正则化相同,其带有L2正则化的损失函数为: J = J 0 + α ∑ w w 2 J=J_0+\alpha\sum_ww^2 J=J0+αww2,同样可以画出他们在二维平面上的图形,如下:

在这里插入图片描述

二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此 J 0 J_0 J0 L L L相交时使得 w 1 w^1 w1 w 2 w^2 w2等于零的机率小了许多,这就是为什么L2正则化不具有稀疏性的原因。

9.3 L1范数和L2范数的区别

由于L2范数解范围是圆,所以相切的点有很大可能不在坐标轴上,而由于L1范数是菱形(顶点是凸出来的),其相切的点更可能在坐标轴上,而坐标轴上的点有一个特点,其只有一个坐标分量不为零,其他坐标分量为零,即是稀疏的。所以有如下结论,L1范数可以导致稀疏解,L2范数导致稠密解。

L1最优化问题的解是稀疏性的,其倾向于选择很少的一些非常大的值和很多的insignificant的小值。而L2最优化则更多的非常少的特别大的值,却又很多相对小的值,但其仍然对最优化解有significant的贡献。但从最优化问题解的平滑性来看,L1范数的最优解相对于L2范数要少,但其往往是最优解,而L2的解很多,但更多的倾向于某种局部最优解。

  • L1正则化有一个有趣的性质,它会让权重向量在最优化的过程中变得稀疏(即非常接近0)。也就是说,使用L1正则化的神经元最后使用的是它们最重要的输入数据的稀疏子集,同时对于噪音输入则几乎是不变的了。相较L1正则化,L2正则化中的权重向量大多是分散的小数字。

  • L2正则化可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量。由于输入和权重之间的乘法操作,这样就有了一个优良的特性:使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。 L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。这样做可以提高模型的泛化能力,降低过拟合的风险。

从贝叶斯先验的角度看,当训练一个模型时,仅依靠当前的训练数据集是不够的,为了实现更好的泛化能力,往往需要加入先验项,而加入正则项相当于加入了一种先验。

  • L1范数相当于加入了一个Laplacean先验;
  • L2范数相当于加入了一个Gaussian先验。

在实践中,如果不是特别关注某些明确的特征选择,一般说来L2正则化都会比L1正则化效果好。

更详细的L1范数和L2范数区别,以及对于L1范数和L2范数的理解,可见:《比较详细的L1和L2正则化解释》

正则化

在机器学习中正则化是指在损失函数中通过引入一些额外的信息(如上面“直观理解”的例子所示),来防止ill-posed问题或过拟合问题。一般这些额外的信息是用来对模型复杂度进行惩罚(Occam’s razor)。

不同的模型,其损失函数也不同,对于线性回归而言,如果惩罚项选择L1,则是我们所说的Lasso回归,而L2则是Ridge回归

正则化的影响:

  • 正则化后会导致参数稀疏,一个好处是可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据就只能常可能产生过拟合了。
  • 另一个好处是参数变少可以使整个模型获得更好的可解释性。且参数越小,模型就会越简单,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。

9.4 Dropout

Dropout是深度学习中经常采用的一种正则化方法。它的做法可以简单的理解为在DNNs训练的过程中以概率p丢弃部分神经元,即使得被丢弃的神经元输出为0。Dropout可以实例化的表示为下图:

在这里插入图片描述

我们可以从两个方面去直观地理解Dropout的正则化效果:

  • 在Dropout每一轮训练过程中随机丢失神经元的操作相当于多个DNNs进行取平均,因此用于预测具有vote的效果。
  • 减少神经元之间复杂的共适应性。当隐藏层神经元被随机删除之后,使得全连接网络具有了一定的稀疏化,从而有效地减轻了不同特征的协同效应。也就是说,有些特征可能会依赖于固定关系的隐含节点的共同作用,而通过Dropout的话,就有效地组织了某些特征在其他特征存在下才有效果的情况,增加了神经网络的鲁棒性。

9.5 归一化 & 标准化

9.5.1 归一化 Normalization

归一化的目标是找到某种映射关系,将原数据映射到[a,b]区间上。一般a,b会取[-1,1],[0,1]这些组合 。一般有两种应用场景:

  • 把数变为(0, 1)之间的小数;
  • 把有量纲的数转化为无量纲的数。

常用的归一化方法(参考:[一文搞定深度学习中的规范化BN,LN,IN,GN,CBN](https://zhuanlan.zhihu.com/p/115949091#:~:text=BN LN IN GN都是对神经元状态(输入数据)的规范化,而WN提出对权重进行规范化,其实本质上都是对数据的规范化。,WN是个神奇的操作,但效果上被BN LN IN GN碾压,所以这里只简单提一下有这么个操作。)):

  • Min-Max Normalization 最大-最小归一化: x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x' = \frac{x-min(x)}{max(x)-min(x)} x=max(x)min(x)xmin(x)
  • Batch Normalization(BN)批规范化:严格意义上讲属于归一化手段,主要用于加速网络的收敛,但也具有一定程度的正则化效果。
    • 大家都知道在统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如transfer learning/domain adaptation等。而covariate shift就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同。大家细想便会发现,的确,对于神经网络的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能“指示”的样本标记(label)仍然是不变的,这便符合了covariate shift的定义;
    • BN的基本思想其实相当直观,因为神经网络在做非线性变换前的激活输入值(X = WU + B,U是输入),随着网络深度加深,其分布逐渐发生偏移或者变动(即上述的covariate shift)。之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值(X = WU + B)是大的负值和正值。所以这导致后向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。而 BN 就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,避免因为激活函数导致的梯度弥散问题。所以与其说BN的作用是缓解covariate shift,倒不如说BN可缓解梯度弥散问题。
  • Layer Normalization(LN)层规范化:
    • BN操作的效果受batchsize影响很大,如果batchsize较小,每次训练计算的均值方差不具有代表性且不稳定,甚至使模型效果恶化;而且BN很难用在RNN这种序列模型中,且效果不好;
    • LN是对当前隐藏层整层的神经元进行规范化,这样LN就与batchsize无关了,小的batchsize也可以进行归一化训练,LN也可以很轻松地用到RNN中。
  • Instance Normalization(IN):
    • BN注重对batchsize数据归一化,但是在图像风格化任务中,生成的风格结果主要依赖于某个图像实例,所以对整个batchsize数据进行归一化是不合适的,因而提出了IN只对H、W维度进行归一化;因此,在图像风格化任务中,更合适使用IN来做规范化。
  • Group Normalization(GN):
    • BN依赖大batchsize,LN虽然不依赖batchsize,但是在CNN中直接对当前层所有通道数据进行规范化也不太好;
    • GN先对通道进行分组,每个组内的所有C_i,W,H维度求均值方差进行规范化,也与batchsize无关。
  • Weight Normalization(WN):
    • BN、LN、IN、GN都是对神经元状态(输入数据)的规范化,而WN提出对权重进行规范化,其实本质上都是对数据的规范化;
    • WN是个神奇的操作,但效果上被BN、LN、IN、GN碾压。
  • Ada BN:
    • AdaBN也不算是对BN的改进,只是在迁移学习中,由于输入数据的源domain不同,BN层参数无法直接用(毕竟是从训练数据中求出来的),这时使用一种策略来缓解这个问题,就是所谓的AdaBN;
    • 实现方法如下:把模式设置为训练模式(torch.is_grad_enabled=True),但是在“训练”过程中不更新模型参数,而是在每一次iteration中只更新global mean和global variance,相当于是在新的数据集上“假装训练一遍”,得到在新数据集上的均值和方差,这样就可以用于新数据集上的推理了(当然可能模型参数并不一定适用于新数据,可能需要finetune甚至重新训练,但至少BN参数是在新数据集上自适应adaptive了)。
  • Cross-Iteration BN(CBN):
    • 将前几次iteration的BN参数保存起来,当前iteration的BN参数由当前batch数据求出的BN参数和保存的前几次的BN参数共同推算得出(顾名思义 Cross-Interation BN);训练前期BN参数记忆长度短一些,后期训练稳定了可以保存更长时间的BN参数来参与推算,效果更好;
    • 可以将CBN粗糙地总结为 “前几次训练的BN(LN/GN应该都可以)参数” + 当前batch数据计算的BN(LN/GN)参数 来计算得出当前次训练iteration真正的CBN参数。

总的来说,BN是最传统的,如果batchsize允许够大的话,用在CNN中的效果依然是最好的;LN适合RNN;IN适合图像风格化任务;GN更适合小batchsize的CNN训练。

9.5.2 标准化 Standardization

用大数定理将数据变换为均值为0,标准差为1的分布(切记,并非一定是正态的),标准化公式为: x ′ = x − μ σ x' = \frac{x-μ}{σ} x=σ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新四石路打卤面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值