正则化理解+负采样理解以及神经网络中的负采样
发布日期:2021-06-29 21:37:26 浏览次数:2 分类:技术文章

本文共 4004 字,大约阅读时间需要 13 分钟。

纯转载文章,旨在便于自己空的时候观看。

一直很好奇,模式识别理论中,常提到的正则化到底是干什么的?在这里真心感谢 迷雾forest 那么费脑组织语言、那么费卡路里打字、那么有责任心的分享!

正则化:

  1. 正则化的目的:防止过拟合!

  2. 正则化的本质:约束(限制)要优化的参数。

关于第1点,过拟合指的是给定一堆数据,这堆数据带有噪声,利用模型去拟合这堆数据,可能会把噪声数据也给拟合了,这点很致命,一方面会造成模型比较复杂(想想看,本来一次函数能够拟合的数据,现在由于数据带有噪声,导致要用五次函数来拟合,多复杂!),另一方面,模型的泛化性能太差了(本来是一次函数生成的数据,结果由于噪声的干扰,得到的模型是五次的),遇到了新的数据让你测试,你所得到的过拟合的模型,正确率是很差的。

关于第2点,本来解空间是全部区域,但通过正则化添加了一些约束,使得解空间变小了,甚至在个别正则化方式下,解变得稀疏了。这一点不得不提到一个图,相信我们都经常看到这个图,但貌似还没有一个特别清晰的解释,这里我尝试解释一下,图如下:

在这里插入图片描述

   这里的w1,w2都是模型的参数,要优化的目标参数,那个红色边框包含的区域,其实就是解空间,正如上面所说,这个时候,解空间“缩小了”,你只能在这个缩小了的空间中,寻找使得目标函数最小的w1,w2。左边图的解空间是圆的,是由于采用了L2范数正则化项的缘故,右边的是个四边形,是由于采用了L1范数作为正则化项的缘故,大家可以在纸上画画,L2构成的区域一定是个圆,L1构成的区域一定是个四边形。

再看看那蓝色的圆圈,再次提醒大家,这个坐标轴和特征(数据)没关系,它完全是参数的坐标系,每一个圆圈上,可以取无数个w1,w2,这些w1,w2有个共同的特点,用它们计算的目标函数值是相等的!那个蓝色的圆心,就是实际最优参数,但是由于我们对解空间做了限制,所以最优解只能在“缩小的”解空间中产生。

蓝色的圈圈一圈又一圈,代表着参数w1,w2在不停的变化,并且是在解空间中进行变化(这点注意,图上面没有画出来,估计画出来就不好看了),直到脱离了解空间,也就得到了图上面的那个w*,这便是目标函数的最优参数。

对比一下左右两幅图的w*,我们明显可以发现,右图的w*的w1分量是0,有没有感受到一丝丝凉意?稀疏解诞生了!是的,这就是我们想要的稀疏解,我们想要的简单模型。

还记得模式识别中的剃刀原理不?倾向于简单的模型来处理问题,避免采用复杂的。【剃刀原理:剃刀是一种经验法则,用于允许排除(刮掉)不可能的解释或者情况。另提一句,剃刀是一种有效的思维方式,但事实上并不是严格意义上的“定理”。】

这里必须要强调的是,这两幅图只是一个例子而已,没有说采用L1范数就一定能够得到稀疏解,完全有可能蓝色的圈圈和四边形(右图)的一边相交,得到的就不是稀疏解了,这要看蓝色圈圈的圆心在哪里。

此外,正则化其实和“带约束的目标函数”是等价的,二者可以互相转换。关于这一点,我试着给出公式进行解释:

针对上图(左图),可以建立数学模型如下:

在这里插入图片描述

通过熟悉的拉格朗日乘子法(注意这个方法的名字),可以变为如下形式:

在这里插入图片描述
这两个等价公式说明了,正则化的本质就是,给优化参数一定约束,所以,正则化与加限制约束,只是变换了一个样子而已。

此外,我们注意,正则化因子,也就是里面的那个lamda,如果它变大了,说明目标函数的作用变小了,正则化项的作用变大了,对参数的限制能力加强了,这会使得参数的变化不那么剧烈(仅对如上数学模型),直接的好处就是避免模型过拟合。反之,自己想想看吧。。。

个人感觉,“正则化”这几个字叫的实在是太抽象了,会吓唬到人,其实真没啥。如果改成“限制化”或者是“约束化”,岂不是更好?

正则化文章来源:

以下来源:
负采样简单理解:

比如说 love 和me两个单词;

使用特殊思维模式;假设整个词汇表只有100个单词;love 表示成one-hot向量; me表示成one-hot向量;

模型输入为love的one-hot向量;模型输出为me的one-hot向量;

假设模型的神经网络结构为 100 ∗ 10 ∗ 100 100*10*100 10010100;输出层100个;

输出层中除了me对应位置的1外,其他全是0;称这为负样本;参数数量为 10 ∗ 100 10*100 10100

采样就是从这样负样本中抽样;比如说抽取5个;那么在此次梯度更新中就只更新10*5;更新数量为原来的1/20

负采样的本质:每次让一个训练样本只更新部分权重,其他权重全部固定;减少计算量;(一定程度上还可以增加随机性)

以下来源:

神经网络中的负采样
   对于绝大多数的有监督学习,神经网络的训练过程其实就是不断地调整网络权重的过程。最常用的方法就是 back-propagation。然而,对于庞大的神经网络而言,反向更新权重并不是一件容易的事情,这个时候我们就需要用到负采样(negative sampling)的技术。在这篇博客,我将简单地介绍一下负采样的作用以及两种比较著名的负采样方法。

为什么需要负采样

   当前对于绝大多数的神经网络而言,更新参数使用的都是反向传播(back propagation)的方式。这意味着,对于那些结果与标签值的不一致的节点,都需要做反向传播,更新权重。字面说可能很难理解,这里我使用 Skip-Gram 来做讲解,通过计算来说明负采样的必要性。

Skip-Gram 的输出和输出都是 one-hot 编码的向量,假设我们的词典的 size 是 10000,即输入的向量是 10000 维的向量,然后嵌入成 400 维的向量,这样隐层就有 400 个节点,输出层也是一个 10000 维的向量。我们重点关注隐层 - 输出层这里的权重,这里总共有 400∗10000=4,000,000 个权重。也就是说,如果我们不做任何改进的话,每一次的训练都需要更新 4,000,000 个权重。显然,这样大量的计算会极大地拖慢训练的速度。

为了提升训练的速度,减少更新权重的数量,我们就需要对节点进行负采样。首先来了解两个概念 postive word 和 negative word。positive word 指的是在输出向量中期待为 1 的那个节点,negative word 指的是在输出向量中期待为 0 的节点。在 Skip-Gram 中,输出向量一般只有一个位置为 1,其余的 9999 个位置都为 0。负采样的目的就是在 negative word 中,找出一部分节点进行权重的更新,而不需要全部都更新。比如我们找 5 个 negative word 节点,最后,我们更新的节点就是 1 个 positive word + 5 个 negative word 节点,总共是 6 个节点。在这种情况下,需要更新的权重数量是 6∗400=2400,相比起前面计算的 4,000,000,是不是少了很多!

负采样的方式

   知道了为什么要做负采样之后,我们就要考虑如何去做好这个采样。一般来说采样讲求随机性,尽可能公平地选择每一个节点。同时我们还必须兼顾效率,采样的计算复杂度也是非常重要的。

Unigram Table

核心思想: 某个词被选中的概率和它出现的次数有关。

这个方法非常好理解,非常符合直观逻辑。如果一个词出现的越多,我们就认为它被选择的概率会比较大。在 word2vec 论文中,提出了一个非常神奇的采样公式:

   在这里插入图片描述
在这里插入图片描述
Alias Table
   在介绍 Alias Table 前,先来看看 Unigram Table 有什么不足之处。每次取样的时候,先产生一个 [0,1] 的随机数 c,然后顺序遍历 Unigram Table,找到第一个大于 c 的数所对应的下标,即是采样的类别。这种方法的复杂度是 O(N),如果使用二分搜索,复杂度降至 O(logN)。

Alias Table 就是为了继续降低复杂度而引进的方法,它的单次采样复杂度为 O(1)。接下来我们来看一下它是怎么做的。

假设我们有 4 个类别的数据,其概率分布为:[1/2,1/3,1/12,1/12]。

每个类别的概率乘上类别数,使得总和为 4,结果为:[2,4/3,1/3,1/3]。以 1 为分界,划分为两类:一类是大于 1 的,另一类是小于 1 的。
通过拼凑,使得每一个类别都为 1,且每一个类别只能有两种类别,所以我们需要从最少的开始补,保证较少的通过一次拼凑就能满足。
将第 1 列拿 2/3 给第 3 列,结果为:[4/3,4/3,1,13]
将第 1 列拿 2/3 给第 4 列,结果为:[2/3,4/3,1,1]
将第 2 列拿 1/3 给第 1 列,结果为:[1,1,1,1]
完成拼凑
最后,就得到了两个数组:Probability TableAlias Table
Probability Table:指的是某一类落在原类型的概率,即自己类别组成 1 的部分。以上述的为例,应该为: [2/3,1,1/3,1/3]
Alias Table:用于指明某一类别的其他组成类别。前面提到,每一个类别只能有两种类别,一个是自己,另一个则是通过拼凑补过来的类别。所以这个表就是用来指明拼凑过来的那个类别。以上述的为例,应该为:[2,0,1,1]
每一次采样,首先随机选取某一个类别 k,然后随机产生一个 [0,1] 的随机数 c,首先比较 Prob[k] 和 c 的大小,如果 Prob[k]>c,那么说明原有类别所占比例比较大,采样 k,否则,说明拼凑的类别所占比例大,采样 Alias[k]。可以看出,采样过程中全部都是下标访问,复杂度是 O(1),因此这个方法应用很广。

转载地址:https://dh-butterfly.blog.csdn.net/article/details/109106033 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【SpringBoot+Mybatis】bootstrap/sematic UI与pagehelper实现分页
下一篇:移动2020面试题:斗地主

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月20日 00时12分35秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章