【面筋】基础概念

本文详细介绍了正则化(包括L0、L1、L2正则化和dropout)以及归一化(包括批量归一化、层归一化)在深度学习中的作用和原理,探讨了过拟合与欠拟合的原因及解决方案,并讨论了激活函数的选择和优化算法。正则化用于防止模型过拟合,归一化则有助于加速模型训练和提高模型稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【面筋】基础概念

正则化(Regularization)

1、正则化 是什么?

我们所说的正则化,就是在原来的损失函数的基础上,加上一些正则化项或者成为惩罚项,作为限制;目标是修正拟合方向,防止过拟合;

或者说在目标函数后面添加惩罚项是其中一种方式,在深度学习中,存在很多正则化方法,比如dropout!

2、L0 正则化?

什么是L0正则化:统计值向量中非零元素的个数;数学表达式为: ∑ j = 1 , θ j 不 等 于 0 m θ j 0 \sum_{j=1, \theta_j 不等于0}^{m}{\theta_j^0 } j=1θj0mθj0

加入L0正则化限制非零元素个数,目的是希望参数是稀疏对的,大部分为0;

参数稀疏的优点:

  • 可以进行特征选择,无用特征对应的参数为0,就可以去除无用特征
  • 可解释性好:无用特征权重为0, 对结果无贡献;

直观理解:将所有的非零项都作为1加起来,然后载用步长 λ \lambda λ调节,意思很明显,每一个对预测产生了贡献的参数,我都惩罚一次,不多不少,大家都一样。就像一个法官判决,你偷了一毛钱,他杀了一个人,法官均以“价值观不正确”为由,把你们判一样的罪……只有一点都没参与的人,才不会被判刑。

缺点:难以优化(存在NP难问题)

3、L1 正则化(稀疏规则算法)

L1范数统计的是个元素的绝对值之和,数学表达式如下
∣ ∣ x ∣ ∣ 1 = ∑ j = 1 m ∣ θ j ∣ ||x||_1 = \sum_{j=1}^{m}|\theta_j| x1=j=1mθj

直观理解:即将所有的绝对值值相加。

拿法官举例子,就是,法官要按照你们的罪行量刑判罪,但是都得判,无论你影响最终是好是坏(比如你杀了个人,这个人也是个坏人,但是你还是犯了杀人罪得判刑)都按照罪行判罪。于是就都取个绝对值,表示都判,然后按照罪行大小判罪了……

优点:比L0范数容易优化求解,L1范数是L0范数的最优凸近似;使用较多;

4、L2 正则化(岭回归)

计算向量中个元素的平方和然后求平方根,防止模型出现过拟合问题;公式为
∣ ∣ x ∣ ∣ 2 2 = ∑ i w i 2 ||x||_2^2 = \sum_i w_i^2 x22=iwi2
直观理解:所有项目的平方和相加最后开根

作用:防止过拟合问题

优点:

  • 防止过拟合,提升模型的泛化能力;

4、dropout

1)什么是dropout?

通过以概率p主动临时性地屏蔽掉神经网站中的部分隐藏节点来防止过拟合,即让这些神经元以一定概率不工作;

2)dropout在训练和测试阶段?

  • 训练过程:在训练开始时,随机删除一些隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层的神经元个数不变,按照反向传播学习算法对神经网络中的参数进行学习更新(被删除的节点不参与更新)。在这个“残缺”的网络中,让神经网络学习数据中的局部特征(即部分分布式特征)。在多个“残缺”之网(相当于多个简单网络)中实施特征,总要比仅在单个健全网络上进行特征学习,其泛化能力来得更加健壮。这里的“泛化”,实际上就是适应各种情况的能力。如果神经网络仅仅在训练集合上表现好(好比“窝里横”),而在应对其他新情况表现不佳,就表明陷入“过拟合”状态,其实就是泛化能力差。
  • 测试阶段,将参与学习的节点和那些被隐藏的节点以一定的概率p加权求和,综合计算得到网络的输出。对于这样的“分分合合”的学习过程,有学者认为,“丢弃学习”可视为一种集成学习(Ensemble Learning)。

3)dropout如何防止过拟合?

从策略上说:dropout每次具有随机性,相当于使用多个简单的神经网络进行训练,最终预测的时候是所有神经元参与的预测,这种策略可以认为是一种集成学习的思路,多个分类器投票的最终结果相比单个分类器能够减少过拟合;

从结构层面上来说:由于每次训练随机屏蔽调不同的神经元,这就避免了神经网络对某些固有结点的依赖,提升模型的鲁棒性;

Normalization

Normalization是一个广义上的正则化概念,其包含了Min-max Scaling(严格意义上的归一化),Z-score normalization(标准化);所以有人会混用这个概念,归一化和标准化都叫Normalization这是没错的;但你需要知道指代特定的方法和相应的计算方法;所以作为一个广义的概念,Normalization就译作叫归一化;

关于归一化,正则化,标准化,中心化的概念网上误导太多了,导致这个概念很多人混淆,这里具体总结一下,导致混淆的原因在于中英文翻译和理解偏差:

正则化翻译为Regularization, 他是一个优化函数的限制项,并不是数据处理的手段;而归一化,标准化,中心化都是数据处理手段;

中心化很简单,就是数据减去均值,从而使得数据分布的中心平移到某各位置;那么对应的还有一个缩放,本质是数据除以一个固定值,从而将数据范围缩放到某个范围之内;

重点:归一化,严格意义上应该指代的是:Min-max Scaling; 这里所指代的是特定的归一化方法,公式如下,将其变化到[a, b]之间 默认a=0,b=1;
x ∗ = a + x − m i n ( x ) ∗ ( b − a ) m a x ( x ) − m i n ( x ) x^ *= a + \frac{x-min(x)*(b-a)}{max(x)-min(x)} x=a+max(x)min(x)xmin(x)(ba)
标准化:英文翻译为Standardization又称为Z-score normalization; 也是也是指代特定的归一化方法,指数据减均值后除以标准差;从而使得数据服从均值为0,标准差为1的分布;

所以标准化是归一化广义范围下的一种,应该两者说都是normalization;最大的歧义在于normalization的中文翻译,最早将其翻译为归一化就很有问题,误导一批学者;

1、归一化 是什么?

狭义上讲,归一化是将数据的不同特征归一化同一个量纲范围[0,1]区间之内;广义上定义为,规范特征量纲到同一个幅度之下就可以了;

归一化的目的是为了避免数据特征因为量纲(单位)不同导致的数分布的不同;避免了模型因为量纲的数据差异对结果的影响;

2、归一化的方法

常用的方法有 线性比例变换法,最大最小值归一化,0均值归一化;

  • 线性比例变换法:除最大值,公式为 y i = x i m a x ( x ) y_i = \frac{x_i}{max(x)} yi=max(x)xi
  • 最大最小值归一化:也叫极差变换法:减去最小值,除幅度;公式为, 一般说归一化或者normalization都是特指这个:

y i = x i − m i n ( x ) m a x ( x ) − m i n ( x ) y_i = \frac{x_i -min(x)}{max(x)-min(x)} yi=max(x)min(x)ximin(x)

  • Z-score Normalization:减均值除标准差, 完成平移和缩放,就是所说的标准化;

y i = x i − m e a n ( x ) σ y_i = \frac{x_i-mean(x)}{\sigma} yi=σximean(x)

各自缺点:线性比例变换法和极差变换法都极度依赖最大值最小值这两个极端, 而和数据其他值无关;因此使得该方法受数据的离群点牵制;

Z-score Normalization:即无量纲化的同时还消除了各变量在变异程度上的差异;从而转换后的各变量在聚类分析中的重要性程度是同等看待的。而实际分析中,经常根据各变量在不同单位间取值的差异程度大小来决定其在分析中的重要性程度,差异程度大的其分析权重也相对较大。

3、哪些机器学习算法 需要 做归一化?

  • 基于距离计算的模型:KNN;
  • 通过梯度下降法求解的模型:线性回归、逻辑回归、支持向量机、神经网络

4、哪些机器学习算法 不需要 做归一化?

  • 机器学习算法算法:
    • 树形模型:决策树、随机森林(Random Forest)
  • 为什么:
    • 原因1:因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率;
    • 原因2:因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。

BN 和 LN

在神经网络中进行Normalization能够将不同层的数据规范成相同的分布(均值为0, 方差为1)

1、为什么神经网络中要进行Normalization

数据在神经网络传播中,因为非线性变换会导致的数据分布发生改变,从而使得数据分布到激活函数的饱和区,导致梯度变换,训练变慢;引入Normalization是为了解决这个问题;神经网络中的BN和LN都是为了加快模型收敛,减少训练时间;

这个现象称为:神经网络的内部协变量偏移问题(internal Covariate Shift, ICS问题)

深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。Google将这一现象总结为ICS问题;

随着网络深度的加深,输入分布经过多次非线性变化,原始的输入数据分布已经发生了变化;

每个神经元的输入数据不再是“独立同分布, 这就导致了一些问题;

  1. 上层参数需要不断适应新的输入数据分布,导致学习速度下降;
  2. 下层输入的变化可能趋于变大或变小,导致上层落入饱和区,从而学习过早停止;
  3. 每层的更新都会影响到其他层,因此每层参数更新策略需要尽可能谨慎;

神经网络中使用白化的话计算成本太高,而且限制主成分限制了数据的表达能力,同时还要保证白化操作是可微的,所以不使用;替代的是Normalization。

神经网络的研究中有这样一个事实:独立同分布的数据可以简化常规机器学习模型的训练,提升机器学习模型的预测能力;

独立同分布: 指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且互相独立;

数据预处理过冲中,白化(whitening) 操作是解决这类问题的一个方法;

白化:利用PCA去除冗余信息,即排除特征的相关性,然后normalization,使其特征同分布;

也就是说特征之间如果有很强的相关性,那么可以认为是冗余信息,我可以用其他信息推理得到,白化能去除冗余, 使用PCA求出特征向量,然后把数据X映射到新的特征空间,这样的一个映射过程,其实就是满足了我们白化的第一个性质:除去特征之间的相关性。因此白化算法的实现过程,第一步操作就是PCA,求出新特征空间中X的新坐标,然后再对新的坐标进行方差归一化操作。

作用:

  • 去除特征间的相关性 -> 独立;
  • 使所有特征具有相同的均值和方差 (即:同分布)

2、Batch Normalization是什么?

BN针对每一个神经元,对所有数据计算normalization; 也就是对batch这个维度来计算;

存在什么问题:

  • 对小batch不适用,因为BN 独立地规范化每一个 mini-batch ,好的情况下mini_batch的统计量是整体统计量的近似估计,或者说每一个 mini-batch 彼此之间,以及和整体数据,都应该是近似同分布的。如果采样比例太小,mini_batch太小的话,没办法反应整体变化,每一轮训练变换一次,这就增加了模型训练的难度。
  • 由于 BN 需要在运行过程中统计每个 mini-batch 的一阶统计量和二阶统计量,因此不适用于 动态的网络结构 和 RNN 网络
  • BN只在训练时候用,推理的时候不会用到,因为推理的输入通常不是批量输入;

3、Layer Normalization是什么?

综合考虑一层所有维度的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入。

LN 针对单个训练样本进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小mini-batch场景、动态网络场景和 RNN,特别是自然语言处理领域。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间。

LN是和BN非常近似的一种归一化方法,不同的是BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征。在BN和LN都能使用的场景中,BN的效果一般优于LN,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。

但是有些场景是不能使用BN的,例如batchsize较小或者在RNN中,这时候可以选择使用LN,LN得到的模型更稳定且起到正则化的作用。RNN能应用到小批量和RNN中是因为LN的归一化统计量的计算是和batchsize没有关系的。

过拟合和欠拟合

1、过拟合的表现

训练集误差很小,测试集误差很大;观察模型在训练集和测试集上的损失函数随着epoch的变化情况,模型在测试集上的损失值先下降后上升,则可能出现过拟合

2、过拟合原因

1)训练样本不足,样本类型单一;

2)模型复杂度过高

3、解决过拟合的办法

1)丰富样本类型,样本尽可能均衡

2)降低训练模型复杂度,在训练和建立模型的时候,从相对简单的模型开始;

3)正则化:在损失函数中添加惩罚项来防止模型过拟合,常见的有L1, L2, dropout正则化等;

4)采用bagging策略;使用继承学习来防止过拟合;

5)交叉检验,利用交叉验证方法,来让模型得到充分训练,以得到较优的模型参数

6)early stop策略;

7)Dropout: 最简单

4、欠拟合的表现

表现为高偏差,尽管训练集和测试集的误差收敛,但是收敛值很高;训练集和验证集准确率都很低,表现为模型无法很好的拟合数据,导致表现不佳;

5、导致欠拟合的原因

1)特征太少或者太复杂,模型没有充分学习到数据中的特征信息;

2)模型结构不合理

6、欠拟合的解决方法是什么?

1)特征工程,添加更多特征来增大假设空间;

2)集成学习,如GBDT能有效解决高偏差

3)提升模型复杂度,当 所采用的模型比较简单,不能够应对复杂的任务。可以考虑 提升 模型复杂度,选用复杂度更好、学习能力更强的模型。比如说可以使用 SVM 的核函数,增加了模型复杂度,把低维不可分的数据映射到高维空间,就可以线性可分,减小欠拟合;

4)减小正则化系数。

激活函数

1、为甚么神经网络中要加入激活函数?

1)大多数数据是线性不可分的,如果采用线性化,那么需要复杂的线性组合去逼近问题,因此需要非线性变换对数据分布进行重新映射;

2)线性模型的表达力问题:由于线性模型的表达能力不够,引入激活函数添加非线性因素

2、常见的激活函数

  • sigmoid函数
    y = 1 1 + e − x y = \frac{1}{1+e^{-x}} y=1+ex1

sigmoid特点:sigmoid 函数 能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.

缺点:

  1. 如果我们初始化神经网络的权值为[0,1]之间的随机数,由反向传播算法的数学推导可以知道,梯度从后向前传播时,每传递一层梯度值都会下降为原来原来的0.25倍,如果神经网络层比较多是时,那么梯度会穿过多层之后变得接近于0,也就出现梯度消失问题,当权值初始化为 [1,+]期间内的值时,则会出现梯度爆炸问题;
  2. 幂函数耗时;
  3. 输出不是0均值,这会导致后续的梯度传播过程中存在协变量偏移问题;
  • tanh函数

t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=ex+exexex

特点:输出范围为[-1,1], 解决了sigmoid的0均值问题

缺点:

  1. 梯度爆炸和梯度消失
  2. 幂函数耗时
  • relu函数
    f ( x ) = m a x ( 0 , x ) f(x)=max(0, x) f(x)=max(0,x)

特点:

  1. 解决了gradient vanishing问题 (在正区间)
  2. 计算速度非常快,只需要判断输入是否大于0
  3. 收敛速度远快于sigmoid和tanh

缺点:

  1. ReLU的输出不是zero-centered;
  2. Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新;

3、如何选择激活函数

  1. 深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度;
  2. 如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout;
  3. 最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.

优化算法

1、优化函数的基本框架是什么?

基本框架:定义当前时刻待优化参数为 θ t ∈ R d \theta_t\in R^{d} θtRd,损失函数为 J ( θ ) J(\theta) J(θ),学习率为 η \eta η,参数更新框架为:

  1. 计算损失函数关于当前参数的梯度: g t = ∇ J ( θ t ) g_t=\nabla J(\theta_t) gt=J(θt)
  2. 根据历史梯度计算一阶动量(一次项)和二阶动量(二次项): m t = ϕ ( g 1 , g 2 , . . . , g t ) , V t = ψ ( g 1 , g 2 , . . . , g t ) m_t=\phi(g_1,g_2,...,g_t),V_t=\psi(g_1,g_2,...,g_t) mt=ϕ(g1,g2,...,gt),Vt=ψ(g1,g2,...,gt)
  3. 计算当前时刻的下降梯度: Δ θ t = − η ⋅ m t V t \Delta\theta_t=-\eta\cdot\cfrac{m_t}{\sqrt{V_t}} Δθt=ηVt mt
  4. 根据下降梯度更新参数: θ t + 1 = θ t + Δ θ t \theta_{t+1}=\theta_t+\Delta\theta_t θt+1=θt+Δθt

2、优化函数介绍篇

梯度下降法:每次使用一批数据进行梯度的计算,而非计算全部数据的梯度,因为如果每次计算全部数据的梯度,会导致运算量加大,运算时间变长,容易陷入局部最优解,而随机梯度下降可能每次不是朝着真正最小的方向,这样反而可以跳出局部的最优解。

1)SGD(随机梯度下降)

梯度下降法正常操作,每次计算一批梯度然后更新参数,缺点是下降速度慢;而且可能在沟壑(还有鞍点)两遍持续震荡,停留在一个局部最优点;

2)SGD-M(带动量的随机梯度下降)

为了抑制SGD的震荡,SGDM认为梯度下降过程可以加入惯性。下坡的时候,如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值