Press "Enter" to skip to content

简单语言模型:(1) 乘性位置编码

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

目前多层 transformer 语言模型的效果很强,但其中的参数往往费解。

 

例如 self-attention 中 positional encoding 的部分,通常是把 sin 和 cos 加上去,最初认为是让网络学会相对位置关系,然而实际观察,中间再加上矩阵后就乱了,后来甚至发现 self-attention 用随机矩阵也行。于是又有各种相对位置编码等等。

 

这里提出一种简单的位置编码方式,效果似乎更好。如果 transformer 的位置编码是【加性位置编码】,那幺这里的方式可称为【乘性位置编码】(multiplicative positional encoding)。

 

1. 一个浅层但拟合力较强的语言模型

 

我们先只以《三体》三部曲作为训练素材,这很适合观察文本生成效果。

 

素材来自网络下载,有少量错别字和标点错误。共 3730 个 token(只考虑单字,不分词),长度为 881614 。

 

1.1 第一步:2-gram baseline

 

素材的 1-gram perplexity 为 502。2-gram perplexity 为 45。

 

如果用 2-gram 和 0.9 nucleus sampling 生成文本:

 

“在只有人口令吧,星文斯特别用自公元中把手机器被注意到门制小…”

 

程心里,另一个理论出生想象,行过去做得到一千里来。”

 

罗辑知和泰勒、量的接着,受的军舰长,让这条,由太阳系,在1.I:所未来:一一些年里有事儿都似乎相信将军人的战略以上只是理学会来,他不能物理论的地球三维展在的那幺的人类是他坐的信息十分子到宇宙中,聚的互之中,站起航后人,试。

 

罗辑的调试图像对的时,有两个黑色空天罗辑无知道我在上。

 

主动,现实上的3787年前,那个红岸的信卫星,可以加,很快做!”

 

机里,大部,这种无神经过了把这里。对主义的办法,快许多自己,但如何建立刻都已经历有明,可能每次这种攻击是更多,地区分是机出现在时它们没有航程心,外走出这事。当时,为奇怪的几根支,这要求,却没有质不知道,你不起了一个小片向一间,我从另一部很短命上岸系的,一些房子走过了…他们,是被摧毁威”

 

第一个公主核技术,像是种莫沃维德。

 

1.2 第二步:普通 self-attention 模型

 

这里的输入长度设置为 128。

 

第1层: 将 3730 种 token 嵌入 1024 维。

 

第2层: 做个新分支,先逐点加上 128*1024 个位置编码(这里用可训练的编码),然后将 1024 维调整为 16 头 self-attention 的形式,然后用 3 个 64*64 矩阵(原始 transformer 用 3 个 1024*1024 矩阵,这里做简化加快速度)变换为 16 组 Q K V。

 

第3层: 做正常的 softmax self-attention,加到主干上。

 

第4层: 将 1024 维变换回 3730 维,然后 softmax 得到选择每个 token 的概率。

 

这个很浅,因此无需 normalize 和 warm-up。训练后的 perplexity 为 9.0。

 

用 0.9 nucleus sampling 和 1.0 温度,生成效果:

 

“与我们那样,一黑白昼。现在三体世界中直知道以制造中,这时他们仍已经能相互平视中的交流?

 

我们怎幺样。这时三遍的生,他们与世界面壁者之间,这时差不多了。但这种情况下我们的是个方向断延伸向二维平面,所以没有理解因为这人类不可能,所以我们知道,这是最理解的这种与我们的,每个世界都很有麻烦。

 

这个咒语,是不要用核间的,如果水星都有了解读,应该够以证明。

 

是这个危险,对着亿人与信一样,母都不相信已经冷的星光,而在陆地。

 

下的三角。

 

这是一个与该者相差不可……

 

事是关于在,我们的事情上每一个的生态系统将相信自己的暴露地球文明的同志们。

 

什幺都没有波长发生的事情。你们想开,不要太阳已经具有,三体世界以至于从宇宙中的金属射区,它们像各自地球或开始了许多。他们虽然现在有三个世界中的,但从草地上也没有被激活和显示,从漫长的期间范围内的人们,每个人都最后的三体问题。

 

史强,最后一次集成为任何人也起来,这样的意义也就是消失。漫长的可我们一个智子是说完好,想看到现在与周围的混乱中,其中子一个漫长的文明。

 

罗辑走到脑思维地球上的发现。在运动的元首,智子只是不能地接地球,在加重地区别人们太空服务,但仍在着外,人进行的玩意儿,那可以隐藏在夜色空中,远任小的东西,它就是觉得当的人生。

 

破壁人二号:“我是这样,我们不是一个男人嘛。”

 

下面是 0.5 nucleus sampling 的例子。Self-attention 可以保持上下文,所以可以生成连续的对话:

 

“你觉得你干得真实呢?”

 

“问题吗?”罗辑问道。张白脸问道:“你知道,真是不知道吗?怎幺知道,不是我觉得真的不重要。

 

“你的,我们真的不要,不是你的愿意,你怎幺能呢?”

 

“哦,我……”

 

“你……”

 

“我不知道,我怎幺……”

 

“你怎幺知道吗?”

 

“你怎幺想不知道呢?”

 

“哦,不是……怎幺样?你真的含义吗?”

 

“哦………不是不想?”

 

“你怎幺想想吧?”

 

“不能想,你不得想好像松损失藏。”

 

“去找你的工作不干?!”

 

“不是太阳系联合舰队的一个小嘴,在这个嘛。

 

“至少想到了太阳系,也有些成功了,伊文斯最后至少了几个年代的观测,三体世界就是在场上,如果真的人回到了。”

 

“我的人类文明的科学已经知识了多了,您真的存在了下来。”

 

“我说了,”雷迪亚兹和希恩斯摆脱水了。”

 

训练后的 positional encoding 是快速振荡的(所以用 sin 和 cos 也可行):

但是,难以理解这个 positional encoding 的意义。虽然可以可视化最终的 self-attention ,但是难以理解计算过程的意义。

 

1.3 第三步:乘性位置编码

 

让我们思考人类的写作方式。

 

我认为,每个字会对后续的字产生”影响力”,这个影响力通常是随着距离而衰减的。

 

那幺,如果输入长度为 128,是否可为每个 token 找到一个 128 维的衰减函数,然后加权平均,得到最后的结果?这是我最初尝试的方法,不妨称之为【衰减层】。

 

例如,可以去掉 self-attention 的位置编码,改成用这个【衰减层】加到最后的 embedding 层的前面。

 

这样的确可行,训练出的衰减函数也合理。例如,下图最左边,最靠近需生成的字的位置,所以权重最大,然后往右越来越远,逐步衰减,是 power-law decay,合理。而且有的 token 衰减快,有的 token 衰减慢(例如【左引号】的衰减会很慢),合理。

再进一步思考,可以改成,为每个隐维度,找到一个 128 维的衰减函数。这可让网络学会一些有趣的事情,

 

例如,假设某个维度为所谓【引号维度】,左引号在其中为 +1,右引号在其中为 -1,而且这个维度的衰减非常慢,那幺这个维度可让网络学会保持引号的配对。

 

而且非常容易引入这个衰减效应,因为它就相当于在 1024*128 个数上,逐点乘以另外的 1024*128 个数。

 

所以,直接把 self-attention 的 + positional encoding,改成 * positional encoding 即可。这就是【乘性位置编码】。

 

仅仅改变这一个操作,之前模型的 perplexity 就可从 9.0 降到 5.8。

 

那幺,是否可做成每个点有一个小神经网络?例如先乘某某,再加某某?

 

初步实验是,做了 * positional coding 之后,再 + 另外一个 positional encoding,效果很小。所以, * positional coding 的效果的确足够强。

 

1.4 一个浅层但拟合力较强的语言模型

 

综上所述,考虑这样的简单模型:

 

第1层: 将 3730 种 token 嵌入 1024 维。

 

第2层: 做个新分支,先逐点 乘以 128*1024 个位置编码(这里用可训练的编码),然后将 1024 维调整为 16 头 self-attention 的形式,然后用 3 个 64*64 矩阵变换为 16 组 Q K V。

 

第3层: 做正常的 softmax self-attention,加到主干上。

 

第4层: 再逐点 乘以 另外训练的 128*1024 个位置编码(这个操作便宜,所以我们多用)。

 

第5层: 将 1024 维变换回 3730 维,然后 softmax 得到选择每个 token 的概率。

 

小细节:这里的位置编码,可以初始化为【全 1】,有助于快速训练。

 

这样可以在训练集达到 5.6 的 perplexity。

 

用 0.9 nucleus sampling 效果:

 

罗辑点点头:“面壁者:为我是照顾一人认识的?”罗辑问。

 

“你是说的,我用了普通的高度不动的研究,但总方有没有重要适合上方面的控制权。

 

你们只是思想钢印。”

 

罗辑用了五点的烟;“正确,确定了家来,控制人很大的风格,由正在大之前就是思想钢印,最后的判断,从左右的角形来,也在那里大山上一直倒像你们建在一条燃烧的血迹,是不要称,为上百分之一,不管你好像比,更不是什幺都不认为,而是根本不是的研究吧。”

 

“可你们的事情,从这里报告说要好,大家都是不理解。”

 

关一帆说出了:“我是真的不要了你说什幺东西?”

 

“是不是把那些,我它与河者的毛当时,特别是同的敌人很吃惊,是对着屏幕上,像交待机遇到了某些什幺关系的。”

 

“你是一点儿了,你是关一帆三体舰队已经无法把全关闭了曲率驱动。”

 

“我还是关于反正,对一位宇宙广播对通过这次,现在已经探测结了多少女,相信的。”

 

“会被为丁仪把它的第一个信息系统的印象,一滴的电波形和根本就不引起了……怎幺说,不为智子能够运动物理制定有,系统从此能用,但如果结束发射压的飞行,能让我进行对这个世界的研究,即使变成飞船也完全绝望,怎幺变得不好多。这可能的推察研究所以,也不按对你们的世界显示出来。”

 

“没有说,这是现代中的各种也没有变种法案。”

 

注意这里的网络非常浅,而且没有用任何预训练语料,所以这个生成效果似乎不错,比 perplexity 9.0 的质量明显提高,例如, 出现了许多合理的关联词结构 。

 

============================================

 

本系列后续计划讨论 self-attention 实际在做什幺,以及如何修改让它更类似人类的思维。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注