有一千个读者就有一千个哈姆雷特——从文学作品解读视角探讨Attention机制的设计思想

一千个读者就有一千个哈姆雷特——从文学作品解读视角探讨Attention机制的设计思想

首先让我们看一下Encoder-Decoder模型的结构:
在这里插入图片描述

编码器通过编码过程将输入序列压缩为一个上下文向量,该向量作为输入序列的抽象表示,解码器基于此上下文向量进行解码操作以生成目标输出序列。注意:这里的上下文向量对于解码器来说是“固定”的,所谓“固定”就是这个上下文向量在解码过程中没有主动调整的过程,如果解码器是MLP,这个上下文向量直接作为MLP的输入,是一成不变的;如果解码器是RNN,这个上下文向量可能就是上一级的隐状态。

接下来让我看看Attention结构:
在这里插入图片描述
我们可以看到Attention 模型的特点是 Encoder 不再将整个输入序列编码为固定长度的“向量C” ,而是编码成一个向量(Context vector)的序列(“C1”、“C2”、“C3”)。这里最直观的感受是上下文信息不再是一个向量了,而是一组不同的向量了,编码的上下文信息比以前多了。如果这么理解其实是不准确的,因为我们完全可以把“C1”、“C2”、“C3”简单的拼接成一个更长的向量C,这样和Encoder-Decoder模型的本质并没有什么不同。

所以为什么要产生这么多不同的向量呢?

其实Attention的设计思想是根据Decoder的情况动态调整上下文信息,来使Target中的某些token与Source中的真正“有决定意义”的token关联起来,所以对于Target中的token来说,它们各自需要的上下文信息不再是共用的一样的,而是因token而异。这就是我想说的,正如“一千个读者就有一千个哈姆雷特”,一千个token就能找到一千个与它们相关的独一无二的上下文信息。至于中间过程需要等我完成后续学习才能补上。

好,模型介绍到此为止,接下来我们谈谈文学。大家应该看过很多小说,有些作品有不同的解读方式,哪一种比较好,哪一种比较坏,是作者说了算,还是读者说了算?

有的人肯定会说,读者说了算,看看豆瓣评分,读者的声音会远远压过创作者的声音,人多力量大。再看看语文考试中的阅读理解,题目的答案是命题人给的,不是文章作者给的,哪怕作者亲自做题,也不一定保证正确。所以文学作品的解读应该是权威人士说了算。由此可见,被误解是表达者的宿命,为什么会被误解呢?因为每个解读者的背景都不一样,这就导致他们有不同的视角Query,假设文学作品有标准的诠释Value,不同的Query与Value结合就会得到不一样的上下文信息。正所谓“有一千个读者就会有一千个哈姆雷特”。

此时想必有人会问,那个Key是什么意思呢?这么说没有Key存在的必要啊?按照上面的解释,已经说明了“有一千个读者就会有一千个哈姆雷特”,按照奥卡姆剃刀原理,如无必要,勿增实体。这个Key从何而来?其实作为读者,我们往往会认为先有作品,后有解读。作品一旦问世就永恒固定了,只能被后来读者反复评论而不能还手。但是如果作者还在,他其实是可以为自己的作品进行辩护的,也可以说谎欺骗读者,特别是正在更新的作品,它也是可以反转剧情的,这就是Key的由来。

对于模型而言,它可以看到Source中token,也可以看到Target中的token,作为一个模型,它不知道谁先谁后,谁是因谁是果,所以它就像个调解人,需要理解Source和Target两方之间的联系。比较好的做法就是一会把自己当成Source,一会把自己当成Target,站在不同的位置就有了不同的视角,然后就像小学生看到了题目,也知道了正确答案,开始凑过程。在Target的位置时视角就是Query,在Source的位置时视角就是Key。所谓的上下文信息,不仅与Query有关,也和Key有关。有些算法用Query和Key的相似度决定的Value的权重,也正应了一句话“你想看见什么,你就能看见什么”,信息茧房就是这么来的,同时兼听则明的道理也在这里。

此外在翻译任务中,Key和Value是相等的。这说明什么呢?就是作者说什么都是他内心的真实想法,所见即所得,没有阴阳怪气,请按字面翻译,不要多加揣测。

以上内容,纯属胡思乱想。可能是因为我想从文学作品解读的视角理解Attention机制,就真的看出了一点别人不曾看到的内容吧。其实我也还有一个最终的疑问需要解决,就是真的存在标准的诠释Value吗?也留给大家去思考吧,欢迎和我交流。

最后向大家推荐Datawhale的fun-transformer 教程,也欢迎大家参加Datawhale的学习活动!
开源内容:https://github.com/datawhalechina/fun-transformer
在线学习网站:http://www.datawhale.cn/learn/summary/87

内容概要:本文详细介绍了利用MATLAB进行信号与系统实验的具体步骤和技术要点。首先讲解了常见信号(如方波、sinc函数、正弦波等)的生成方法及其注意事项,强调了时间轴设置和参数调整的重要性。接着探讨了卷积积分的两种实现方式——符号运算和数值积分,指出了各自的特点和应用场景,并特别提醒了数值卷积时的时间轴重构和步长修正问题。随后深入浅出地解释了频域分析的方法,包括傅里叶变换的符号计算和快速傅里叶变换(FFT),并给出了具体的代码实例和常见错误提示。最后阐述了离散时间信号与系统的Z变换分析,展示了如何通过Z变换将差分方程转化为传递函数以及如何绘制零极点图来评估系统的稳定性。 适合人群:正在学习信号与系统课程的学生,尤其是需要完成相关实验任务的人群;对MATLAB有一定基础,希望通过实践加深对该领域理解的学习者。 使用场景及目标:帮助学生掌握MATLAB环境下信号生成、卷积积分、频域分析和Z变换的基本技能;提高学生解决实际问题的能力,避免常见的编程陷阱;培养学生的动手能力和科学思维习惯。 其他说明:文中不仅提供了详细的代码示例,还分享了许多实用的小技巧,如如何正确保存实验结果图、如何撰写高质量的实验报告等。同时,作者以幽默风趣的语言风格贯穿全文,使得原本枯燥的技术内容变得生动有趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值