目录

  • 正则项(惩罚项)
    • 正则项(惩罚项)的本质
    • 机器学习为什么需要正则项
    • 常见惩罚项:参数范数惩罚、稀疏表征、噪声、早停、dropout等
      • 参数范数惩罚
        • L0范数惩罚
        • L1范数惩罚(参数稀疏性惩罚)
        • L2范数惩罚:
        • l1正则与l2正则的特点是什么,各有什么优势?
        • 核范数(奇异值系数化)
        • 参数共享与参数绑定
        • 在神经网络的隐藏层或参数中注入噪声
    • 稀疏表征(表征稀疏性惩罚)
      • 稀疏自编码器 & 表征稀疏惩罚项
        • 自编码器基本原理
        • 稀疏自编码器
        • KL散度诱导稀疏---稀疏自编码器的损失函数中的稀疏惩罚项
    • 噪声与数据扩充
      • 数据扩充
      • 注入噪声
        • 在输入中注入噪声
        • 在神经网络的隐藏层或参数中注入噪声
        • 在标签中注入噪声
    • 早停
    • dropput
  • 多任务学习中各loss权重应该如何设计呢?

正则项(惩罚项)

正则项(惩罚项)的本质

惩罚因子(penalty term)与损失函数(loss function)

penalty term和loss function看起来很相似,但其实二者完全不同。
惩罚因子:
penalty term的作用就是把约束优化问题转化为非受限优化问题。
罚函数的基本思想是构造辅助函数,把原来的约束问题转化为求辅助函数极小化的无约束问题。

机器学习为什么需要正则项

我们经常看到,标准损失函数通常由两项组成,数据损失项和惩罚项,并将惩罚项乘以超参数λ,用来平衡这两项。
这是为什么呢?

如果我们只告诉分类器需要拟合训练集的话,可能会导致分类器的行为反常——过拟合,它会尝试完美分类所有的训练数据点。

事实上,如果出现了新的数据点,过拟合的分类器表现就会非常糟糕,我们更倾向于以下这条绿色直线所表示的分类器。

这里涉及到的就是机器学习中一个非常重要的基础问题——正则化。

为了得到这条绿色直线代表的分类器,我们需要为损失函数增加一个附加的项(正则项),鼓励模型以某种方式选择更简单的W,此处的“简单”取决于任务的规模和模型的种类。

常见惩罚项:参数范数惩罚、稀疏表征、噪声、早停、dropout等

深度学习 — 优化入门六(正则化、参数范数惩罚L0、L1、L2、Dropout)

正则化与矩阵范数:L0范数,L1范数,核范数(很好地解释了采用某种范数作为正则项的好处,以及各种范数的本质区别)

参数范数惩罚

机器学习中常使用的正则化措施是去限制模型的能力,最常用的方法就是L0,L1和L2范数惩罚。深度学习优化器中所用的权重衰减,通常就是L2范数惩罚。

L0范数惩罚

从不为零的参数出发进行限制,即将不等于0的个数限制在一定的范围内以此达到限制模型的目的,而这种方法就称为L0范数惩罚。

L1范数惩罚(参数稀疏性惩罚)

上面我们是使用参数不为零的个数做约束条件,这里改变的是要求参数数值的总和限制在某个范围内即参数的总和要小于某个值,这种对参数总和的限制就被称为L1范数惩罚,也称为参数稀疏性惩罚:

既然L0可以实现稀疏,为什么不用L0,而要用L1呢?
个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。

为什么要稀疏?让我们的参数稀疏有什么好处呢?这里扯两点:
1)特征选择(Feature Selection)(并且特征选择能带来更好的泛化能力):
大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
2)可解释性(Interpretability):
另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1x1+w2x2+…+w1000x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的w就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个wi都非0,医生面对这1000种因素,累觉不爱。

L2范数惩罚:

L1范数惩罚虽然可以应用,同时把问题变为求极值的问题,但是还是不完美,因为约束条件带有绝对值,这在数学中不好处理,最简单的方法和损失函数一样就是加入平方项就避免正负抵消问题,这就是L2范数惩罚,也是我们非常熟悉的权重衰减惩罚:

为什么L1-regularization 能产生稀疏性,而L2-regularization 不能稀疏性,只能正则化。
我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。
因此,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。
L1在特征选择时候非常有用,而L2就只是一种规则化而已。

L2的好处:
1)学习理论的角度:
从学习理论的角度来说,L2范数可以防止过拟合,提升模型的泛化能力。(越小的参数说明模 型越简单,越简单的模型则越不容易产生过拟合现象。为什么越小的参数说明模型越简单?我也不懂,我的理解是:限制了参数很小,实际上就限制了多项式某些分量的影响很小)
2)优化计算的角度:
从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。

l1正则与l2正则的特点是什么,各有什么优势?

l1正则与l2正则的特点是什么,各有什么优势?

大家一般用 L2 损失函数而不用 L1 损失函数的原因就是:因为计算方便!可以直接求导获得取最小值时各个参数的取值。
此外还有一点,用 L2 一定只有一条最好的预测线,L1 则因为其性质可能存在多个最优解。(更多关于L1 L2 损失函数参考索引5)
当然 L1 损失函数难道就没有什么好处了吗,也是有的,那就是鲁棒性 (Robust) 更强,对异常值更不敏感。

如果数据损失项使用L1 Norm,很明显,L1 Norm对outlier没有L2 Norm那么敏感;如果正则化损失项使用L1的话,那么使学习到的参数倾向于稀疏,使用L2 Norm则没有这种倾向。
实践中,根据Quaro的data scientist Xavier Amatriain 的经验,实际应用过程中,L1 nrom几乎没有比L2 norm表现好的时候,优先使用L2 norm是比较好的选择。
链接:https://www.zhihu.com/question/26485586/answer/89215997

核范数(奇异值系数化)

核范数||W||*是指矩阵奇异值的和,英文称呼叫Nuclear Norm。这个相对于上面火热的L1和L2来说,可能大家就会陌生点。那它是干嘛用的呢?霸气登场:约束Low-Rank(低秩)
我们先来回忆下线性代数里面"秩"到底是啥?举个简单的例子吧:

对上面的线性方程组,第一个方程和第二个方程有不同的解,而第2个方程和第3个方程的解完全相同。从这个意义上说,第3个方程是"多余"的,因为它没有带来任何的信息量,把它去掉,所得的方程组与原来的方程组同解。为了从方程组中去掉多余的方程,自然就导出了"矩阵的秩"这一概念。

还记得我们怎么手工求矩阵的秩吗?为了求矩阵A的秩,我们是通过矩阵初等变换把A化为阶梯型矩阵,若该阶梯型矩阵有r个非零行,那A的秩rank(A)就等于r。回到上面线性方程组来说吧,因为线性方程组可以用矩阵描述嘛。秩就表示了有多少个有用的方程了。上面的方程组有3个方程,实际上只有2个是有用的,一个是多余的,所以对应的矩阵的秩就是2了。
从物理意义上讲,矩阵的秩度量的就是矩阵的行列之间的相关性。如果矩阵的各行或列是线性无关的,矩阵就是满秩的,也就是秩等于行数。

约束低秩只是约束rank(w)呀,和我们这节的核范数有什么关系呢?
他们的关系和L0与L1的关系一样。因为rank()是非凸的,在优化问题里面很难求解,那么就需要寻找它的凸近似来近似它了。对,你没猜错,rank(w)的凸近似就是核范数||W||*。

核范数的用途:

(1)低秩矩阵,特征降维,鲁棒性PCA:
既然秩可以度量相关性,而矩阵的相关性实际上有带有了矩阵的结构信息。如果矩阵之间各行的相关性很强,那么就表示这个矩阵实际可以投影到更低维的线性子空间,也就是用几个向量就可以完全表达了,它就是低秩的。所以我们总结的一点就是:如果矩阵表达的是结构性信息,例如图像、用户-推荐表等等,那么这个矩阵各行之间存在这一定的相关性,那这个矩阵一般就是低秩的。
如果X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则我们称X是低秩矩阵。低秩矩阵每行或每列都可以用其他的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,可以对缺失数据进行恢复,也可以对数据进行特征提取。
另外的见解:将系数的稀疏性,拓展到矩阵奇异值的稀疏性上,就从L1范数变成了核范数。

Candes等人提出了Robust PCA,通过对矩阵施加奇异值的稀疏性(从l1变成了nuclear norm)来自动学得降维的维数,同时还能对原始矩阵去噪(可以看我写的另一个答案如何理解矩阵的「秩」? - 过拟合的回答)。这也引出了另一个新思路:一般来说数据矩阵可能存在野点,即少部分行被污染了,因此可以求取某个行稀疏的野点矩阵,来“净化”原始矩阵。这里稀疏性就是施加在待求解的野点矩阵上。
链接:https://www.zhihu.com/question/26602796/answer/36470745

与经典PCA一样,Robust PCA(鲁棒主成分分析)本质上也是寻找数据在低维空间上的最佳投影问题。当观测数据较大时,PCA无法给出理想的结果,而Robust PCA能够从较大的且稀疏噪声污染的观测数据中恢复出本质上低秩的数据。Robust PCA考虑的是这样一个问题:一般的数据矩阵D包含结构信息,也包含噪声。那么可以将这个矩阵分解为两个矩阵相加:D = A + E,A是低秩的(由于内部有一定的结构信息造成各行或列间是线性相关的),E是稀疏的(含有噪声,则是稀疏的),则Robust PCA可以写成以下的优化问题:

摘自:正则化与矩阵范数:L0范数,L1范数,核范数
此外,可以参考和学习的网文:(1)PCA 与 Robust PCA区别 (2)张量(三):张量鲁棒主成分分析(TRPCA)(3)https://github.com/nwbirnie/rpca/blob/master/rpca.py(RPCA代码)

(2)秩最大化与多样性:
核范数是矩阵秩的凸逼近
矩阵秩越大,则多样性越好
神经网络的输出是一个矩阵[B x C](其中,B是batchsize,C是类别数,采用了one-hot编码),输出矩阵的秩越大,则表示样本之间是独立的(矩阵的行之间独立,不能归于同一类),独立则说明有好的多样性。
详见:2020-CVPR oral Towards Discriminability and Diversity: Batch Nuclear-norm Maximization under Label Insufficient Situations
(3)Frobenius范数最大化与判别性
核范数是Frobenius范数的上界
Frobenius范数越大,则判别性越好(即预测出来的样本越接近one-hot编码,也即信息熵越小)。
详见:2020-CVPR oral Towards Discriminability and Diversity: Batch Nuclear-norm Maximization under Label Insufficient Situations

参数共享与参数绑定

目前为止,我们讨论的正则化措施都是通过限制模型参数的方法来限制模型的能力,但这种通用的限制太过宽泛。
卷积操作,其实就是参数共享。参数共享使得卷积网络极大地降低了参数的规模,是另一种形式的参数惩罚项。

在神经网络的隐藏层或参数中注入噪声

对于某些模型,注入噪声也相当于对参数进行范数惩罚。通常而言,注入噪声要比简单地收缩参数更有效,尤其是将噪声注入到隐藏层中。而隐藏层注入噪声是一个重要的主题,我们将在差算法中重点介绍,该方法也可以看作是通过加入噪声重构新输入的一种正则化策略。
除了在隐藏层输入中注入噪声,在权重(参数)中注入噪声也是一种有效的正则化措施。这种方法在某种程度上可以等价地解释为传统的范数惩罚,该方法鼓励参数找到一个参数空间,而该空间对于微小的参数变化所引起的输出变化的影响很小。换而言之,就是将模型送进了一个对于微小变化不敏感的区域,我们不仅找到了最小值,我们还找到了一个宽扁的最小值区域

稀疏表征(表征稀疏性惩罚)

参考:
(1)深度学习 — 优化入门六(正则化、参数范数惩罚L0、L1、L2、Dropout)
(2)稀疏表达的意义在于?为什么稀疏表达得到广泛的应用?
(3)稀疏表示去噪的理解

在上面参数范数惩罚中,我们通过直接限制可用参数规模,如L1,L2参数惩罚,来限制模型的能力,从而降低过拟合风险。
接下来,我们介绍一种通过作用在神经网络激活单元的惩罚策略,来提高隐藏层的稀疏性,该方法可算作是一种间接的模型参数惩罚。

生物进化的一个重要趋势就是尽可能地节约能源,而我们的大脑也符合节能的原则大脑。中每个神经元都连接着成千上万的神经元,但其实大部分神经元都是处于抑制状态,只有少部分的神经元接受刺激会处于激活状态,因此我们需要将特定的信息交给特定的神经元进行处理。受此启发,我们就期望使用某种惩罚措施来抑制大部分神经元。当信息输入进神经网络时,只有关键部分神经元才能够处于激活状态,这就是稀疏表征(稀疏表示)
我们已经讨论过凵范数如何致使参数稀疏化,这就意着大多 数都为零或接近于零,而表征稀疏化描述的其实就是隐藏层的输出大多数为零或接近零。
为了简明地阐述这些区别我们以一个线性回归为例,如下图所示,是一个参数稀疏化的线性回归模型:一个是使用稀疏表征的线性回归。

虽然表征正则化与参数正则化(一个使得输出稀疏,一个使得参数稀疏)有些区别,但幸运的是它们都使用相同的机理来实现。如下式所示,表征范数惩罚也是通过在代价函数中一项添加惩罚表征项 来实现表征稀疏化。

表征惩罚的具体计算方法:

  • 方法一:使用和L1惩罚相同的方式:Ω\OmegaΩ (h)= ∥h∥=∑∣hi∣\left\| h \right\| =\sum\left| h_i \right|∥h∥=∑∣hi​∣。
  • 方法二:KL散度(KLdivergence),又称相对熵(RelativeEntropy)也是一种十分常用的方法(稀疏自编码器就是用的KL散度)。

稀疏自编码器 & 表征稀疏惩罚项

自编码器基本原理

自动编码器的作用之稀疏编码

如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?
我们加一个decoder解码器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。
因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。

(1)逐层训练
自编码器的训练方法:通过编码器产生特征,然后训练下一层,这样逐层训练。

首选训练一个只有一层的编码器。

那上面我们就得到第一层的code,我们的重构误差最小让我们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的(表达不一样,反映的是一个东西)。

那第二层和第一层的训练方式就没有差别了,我们将第一层输出的code当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信息的第二个表达了。

其他层就同样的方法炮制就行了(训练这一层,前面层的参数都是固定的,并且他们的decoder已经没用了,都不需要了)。
(2)有监督微调:

经过上面的方法,我们就可以得到很多层了。至于需要多少层(或者深度需要多少,这个目前本身就没有一个科学的评价方法)需要自己试验调了。每一层都会得到原始输入的不同的表达。当然了,我们觉得它是越抽象越好了,就像人的视觉系统一样。

到这里,这个AutoEncoder还不能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。

那么,为了实现分类,我们就可以在AutoEncoder的最顶的编码层添加一个分类器(例如罗杰斯特回归、SVM等),然后通过标准的多层神经网络的监督训练方法(梯度下降法)去训练。

也就是说,这时候,我们需要将最后层的特征code输入到最后的分类器,通过有标签样本,通过监督学习进行微调,这也分两种:

  • 只调整分类器
  • 微调整个编码器+分类器
稀疏自编码器

当然,我们还可以继续加上一些约束条件得到新的Deep Learning方法,如:如果在AutoEncoder的基础上加上 L1 的正则限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到Sparse AutoEncoder法。

上面公式中:h是编码

如上图,其实就是限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分的神经元是受到抑制的)。

KL散度诱导稀疏—稀疏自编码器的损失函数中的稀疏惩罚项

先来看一下稀疏自编码器的完整损失函数:

损失函数分为三项:

  • 第一项是普通的损失函数,用来指示输入输出的相似度,使得重构误差小;
  • 第二项是表征稀疏惩罚项,诱导隐层中的激活值向量稀疏。可以用L1范数,也可以用KL散度(大多用KL散度);
  • 第三项是防止过拟合而添加的正则化项是权重衰减项!

为什么稀疏自编码器的正则项选用了相对熵(KL散度)的函数?

如果事先设定某个较小的值 ρ∗\rho^*ρ∗,那么稀疏性度量就可以采用两个概率分布 ρj\rho_jρj​和 ρ∗\rho^*ρ∗ 之间的差异来表示。

下面看一个github上的实例:Sparse Autoencoders (Sparsity constraint is imposed here by using a KL-Divergence penalty. The FashionMNIST dataset was used for this implementation.)


github项目:Semi Supervised Learning Using Sparse Autoencoder(稀疏自编码器与半监督)
github项目:Crosswise Sparse Autoencoder(稀疏自编码器与医疗图像,相关paper:Sparse autoencoder for unsupervised nucleus detection and representation in histopathology images)

噪声与数据扩充

数据扩充

在机器学习中,想要降低泛化错误率最好的方法是训练更多的数据,但在现实中,数据总是有限的,并且还需要大量的成本。那么问题就来了,更多的数据使得模型性能更好,但我们又没有更多的数据,那该怎么办呢?其中一个有用而高效的方法就是生成伪造数据(fakedata),然后将这些数据添加到训练集中进行数据扩充(DataAugmentation)。虽然听上去似乎在教大家“造假”,但对于某些机器学习任务而言,创造新的伪造数据是非常合理的。
在分类任务中,分类器需要使用复杂高维的输入数据X以及数据所对应的类标进行关联学习。这也意味着,分类器面临的主要任务是从各种变化的数据中获得某种稳定分布的不变性。既然平移,旋转后的图像都是同一个对象,那么在训练数据中扭曲一定程度的输入数据X,分类器也应该将该数据 进关联,但这一方法的应用范围还比较窄。例如在密度估计任务中,要生成新的伪造数据是非常困难的,因为生成新数据的前提是我们己经解决了密度估计问题。
生成伪造数据最佳的应用场景是一类特定的分类任务。 - 对象识别图片是一种高维复杂的数据“并且有着平移,旋转不变性等特点在上面,介绍了如果一幅图片全部向右平移一个像素,那对于机器学习算法来说,便彻底成了一幅新冬像,因此我们需要先验地加入参数共享等措施来学习网络。那我们不妨换个角度,我们将这些先验知识加入到数据中去,即平移,旋转,拉伸之后的图像数据依然是原数据对象。我们将这些生成的“新图像数据”加入训练集中训练,那训练数据就可能增加十余倍的数据量,这样训练出来的模型同样也可以其备这种空间不变性能力,但我们必须谨慎地去变换这些 。例如在字符识别中,将b,和d,水平翻转,旋转180°,那就都成了同一个数据。此时的伪造数据,就真的变成了错误数据。

注入噪声

在输入中注入噪声

数据扩充也可以看作是在输入数据中注入噪声,从而迫使算法拥有更强的健壮性(也可以将注入噪声看作是一种数据扩充)。神经网络容易过拟合的原因之一就是对于噪声没有太好的抗噪能力。正所谓“你怕什么,就应该勇敢地去面对什么。”最简单的提高网络抗噪声能力方法,就是在训练时加入随机噪声一起训练。比如在非监督学习算法降噪自动编码器(Denoising Autoencoder)中,在输入层进行噪声注入然后学习无噪声的冬片,便是一种很好的提高网络健壮性的方式。

在神经网络的隐藏层或参数中注入噪声

对于某些模型,注入噪声也相当于对参数进行范数惩罚。通常而言,注入噪声要比简单地收缩参数更有效,尤其是将噪声注入到隐藏层中。而隐藏层注入噪声是一个重要的主题,我们将在差算法中重点介绍,该方法也可以看作是通过加入噪声重构新输入的一种正则化策略。
除了在隐藏层输入中注入噪声,在权重(参数)中注入噪声也是一种有效的正则化措施。这种方法在某种程度上可以等价地解释为传统的范数惩罚,该方法鼓励参数找到一个参数空间,而该空间对于微小的参数变化所引起的输出变化的影响很小。换而言之,就是将模型送进了一个对于微小变化不敏感的区域,我们不仅找到了最小值,我们还找到了一个宽扁的最小值区域

在标签中注入噪声

数据集中或多或少都带有错误的类标签,如果我们使用这些数据进行训练,那这就好比一个专心听讲且对老师十分尊敬的好学生,认真学习老师教给他的所有知识,但老师教给他的却是错误的知识。最不幸的是,学生还对老师深信不疑,即使发现了错误,也只会认为是自己愚钝,不断地否定自己,不断地在痛苦中挣扎。虽然我们竭尽全力地避免错误标记数据,但这并不如我们想象得那么美好,人为地添加错误在所难免。与其小心翼翼地标记数据做个完美的“老师”,还不如直接就告诉学生“老师”并不完美,“老师”也会犯错。
解决这种问题的具体措施就是在标签中加入一定的噪声,例如可以设置一个很小的常数λ\lambdaλ,我们将训练数据的标签Y错误的概率设置为λ\lambdaλ.

早停

目前为止,我们针对过拟合现象所做的正则化措施总结起来有两点:

  • 一是限制模型或表征的能力,包括(参数惩罚,表征惩罚),就如同“孤已天下无敌(训练错误率很低),让你双手又如何”。
  • 二是不断地加入噪声,给自己增加麻烦,就如同’放一碗水在头顶扎马步,穿着加沙的背心去奔跑,最终目的是使自己更强壮’。

而下面,我们介绍的这种正则化方法就非常简单了。
基于梯度下降的深度学习算法都存在一个训练周期的问题,训练的次数越多,训练错误率就越低。由于我们真正目的是降低测试错误率,因此我们期望验证错误率也与训练错误率有相似的曲线。但期望总是事与愿违,真实环境中的验证错误率并没有随着训练次数的增多而减少,而是形成了一种“U型“曲线,验证错误率先减小后上升。那很自然地,我们就期望能在验证错误率的最低点(或最低点附近)停止训练算法,这就是所谓的早停(EarlyStopping)

dropput

Dropout可以看作是多个模型的集成,即通过结合几个模型降低泛化误差的技术。分别训练几个不同的模型,然后让所有模型表决测试样例的输出,也被称为模型平均。模型平均奏效的原因是不同的模型通常不会再测试集上产生完全相同的误差。

多任务学习中各loss权重应该如何设计呢?

多任务学习中各loss权重应该如何设计呢?
Multi-task中的多任务loss平衡问题
多任务学习权重的动态调整

损失函数与正则项(惩罚项),多loss间权重设计相关推荐

  1. 深度学习(2)基础2 -- 分类:得分函数损失函数(损失、正则化惩罚项、梯度下降、学习率)概率

    目录 一.得分函数 1.10分类 2.5分类 二.损失函数 0.引言 1.损失函数(数据损失) 2.损失函数应用 3.损失函数(数据损失与正则化惩罚项) 1.数据损失 2.正则化惩罚项 三.概率 1. ...

  2. 机器学习中的损失函数 (着重比较:hinge loss vs softmax loss)

    https://blog.csdn.net/u010976453/article/details/78488279 1. 损失函数 损失函数(Loss function)是用来估量你模型的预测值 f( ...

  3. 常见损失函数及正则项

    损失函数(Loss function)是用来估量你模型的预测值 f(x)与真实值 Y 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x))来表示.损失函数越小,模型的鲁棒性就越好.损失函数是 ...

  4. 机器学习中目标函数、损失函数以及正则项的通俗解释

    目录: 前言: 1.什么是目标函数? 2.损失函数 3.正则化 总结: 目录: 前言: 今天看到一篇很精简的文章来说明目标函数.损失函数以及正则项是什么.以下是文章正文. 转自:https://xia ...

  5. SVM训练时候样本不均衡怎么设置惩罚项

    问题: 在做气泡检测项目时候,利用svm对训练集进行训练的时候,我的数据集存在这严重的不均衡现象,具体情况如下: 训练集数据情况: 正样本(有气泡):150 标签:+1 负样本(无气泡):800 标签 ...

  6. [读书笔记] 自然语言处理中的损失函数和正则项

    书: 基于深度学习的自然语言处理 Neural Network Methods for Natural Language Processing 作者:Yoav Goldberg 出版社:机械工业出版社 ...

  7. 弹性网惩罚项的可视化分析(R语言)

    目录 0引言 1.函数构建 1.1代码 1.2图片 1.3动图 2.总结 0引言 在博客<变量选择--lasso.SCAD.MCP的实现(R语言>中介绍了R语言做变量选择常用的函数和包,其 ...

  8. 抖音直播间权重怎么提高?抖音直播间权重低怎么办

    为什么我的账号粉丝20W+直播间人气只有100+而别人的账号粉丝只有100+直播间人气却有3000+? 出现这种现象的原因是,你的抖音直播间权重不如别人的高,要知道并不是抖音账号粉丝越多,直播间权重越 ...

  9. 线性回归 正则项(惩罚项)原理、正则项的分类与Python代码的实现

    文章目录 1 正则项的含义 2 L1与L2正则项的区别 3 正则的python实现 3.1 Lasso 正则 3.2 Ridge正则 3.3 Elastic Net正则 4 案例实例 本篇博客预备知识 ...

最新文章

  1. linux curl 使用详解 常见应用
  2. java json 转map_Java对接Omni/USDT教程「OmniTool.Java」
  3. 第五章、寻找满足条件的两个或多个数
  4. 中点击按钮新建widget_iOS 14-Widget开发
  5. python3ide手机端怎么样_各大Python IDE的优缺点,看看哪种最适合你?
  6. 指针运算不同于算数运算,不能简单加减
  7. eclipse新建的maven项目没有dependencies_Maven中dependencies与dependencyManagement的区别
  8. STM32F103基本定时器使用
  9. 铅笔道区块链实验班_你们抢着要的道地药材,必须用上区块链了
  10. tomcat端口被占用了怎么办
  11. c++怎么输入带有空格的字符串_字符串,啥东东?
  12. Netty4.0学习笔记系列之五:自定义通讯协议
  13. ubuntu安装gcc失败怎么办?
  14. [转载][路由器] k2p支持ipv6相关设置
  15. MyEclipse10破解过程
  16. Android云真机原理以及云真机平台搭建实践
  17. Android Jni OpenCV-绘制朱利亚(Julia)集合图形
  18. KubeSphere——KubeSphere集群构建实战
  19. 这三款软件让你实现PDF批量转图片
  20. android 屏蔽实体按键,Android中屏蔽返回键,home键以及其他实体按键

热门文章

  1. 什么是SpringData
  2. 吊炸天之Android 如何实现无网络传输文件
  3. scrapy框架之全站数据的爬取
  4. java 公式计算_java 实现的公式计算
  5. UE4--材质地形篇——地形材质的运用(混合材质)
  6. 北语计算机基础知识作业1,【图】- 北京语言大学20秋《计算机基础》作业1 - 昆山经济开发区其他教育培训 - 昆山百姓网...
  7. 2020.9.10丨Pacbio技术三代建库、测序原理
  8. 射频信号布板时为什么要打密密麻麻的过孔?
  9. JavaMail:使用163,QQ和本地服务器邮件发送
  10. 做柜员还是程序员_放弃月薪2万的程序员,被爸妈喊回家干公务员,看到工资悔不当初...