对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?

如题
收藏者
0
被浏览
111

5 个回答

彭小鲜 LV

发表于 2025-4-9 13:10:34

B站有个大佬,王树森,他讲这些模型,会带着你完整走一遍各种原理和运算。
我第一次听的时候都惊了,讲attention机制的时候,硬是走了三个词,把计算过程重复了三遍。有耐心到吓人。
鉴于有人找不到,我贴一下链接:
【RNN模型与NLP应用(1/9):数据处理基础-哔哩哔哩】
https://b23.tv/gkuoapF这个系列层层递进,从普通的RNN一直谈到Transformer和bert,还谈了一下transformer架构在视觉的应用ViT模型。每个视频10多分钟,非常清晰易懂。
下面是对于入门深度学习的建议(入门阶段):
1️⃣动手 > 看论文/看课本。大概了解模型原理之后可以先用成熟的开源库,来进行一些小任务。如果自己写不出完整的程序,可以先找一个别人写完的小项目进行修改。大家都是从改代码、调参数开始的。
2️⃣有问题随时问deepseek/chatgpt。代码不会写、框架不会用、原理有疑惑、计算细节不懂,都可以问大模型。
3️⃣不需要强迫自己把看懂的模型手动实现一遍。你不太懂的时候,强行实现一版模型,也没法悟透原理,甚至无法帮你记住各种细节。还是那句话,用的多了、调的细了,自然就通了。
4️⃣深度学习最大的好处就是,你为了实现一个任务,很多时候都可以把模型看作是黑箱,用起来一点阻力都没有。你不太懂的时候,就已经有能力进行实践。
5️⃣学习不止一遍,早期要抑制你的学习欲望,尤其是看论文的欲望。等你动手有感觉了,回去再看一遍这些基本论文,你会发现特别清晰,特别容易懂。有个好的起点,后面再拓宽到别的论文就非常顺。早期不要轻易拓展论文,你不要自己越学越多,你不需要了解这些论文的前因后果也能读懂他们。扩展读论文,要让任务带着你读,实际的需要,会教会你怎么从论文之中筛选自己需要的东西。
6️⃣最后是要有耐心。入门深度学习说长不长,说短也不短,至少半年还是需要的。认真搞半年,整个人就脱胎换骨了。

死扛 LV

发表于 2025-4-9 13:21:14

在没有基础的情况下直接读Transformer和BERT,肯定是读不懂的。再详尽通俗的解释也没法在毫无基础的情况下讲清楚Transformer。这就像让小学生直接学习求解方程,如果没有掌握基本的四则运算,不理解为什么要设未知数,是根本无法学习解方程的。学习还是要循序渐进,跳过音阶和练习曲直接来大作品,大概天才音乐家才能做到。
好的学习路线是追本溯源,打牢基础,不要死磕这两篇论文,看看他们引用的参考文献,看看前序工作,更加有助于理解Transformer和BERT。对于Transformer来说,学习路径应该是“基于MLP神经语言模型”,“词嵌入(Word2Vec)”,"基于RNN的序列到序列模型(Seq2Seq)",“注意力机制”,然后Transformer和BERT就完全是水到渠成了。基础知识是简单的多层前馈神经网络(多层感知机MLP)和循环神经网络(RNN/LSTM)。不要以为Transformer替代了RNN就可以跳过他,跳过RNN,大概是无法理解为什么要引入注意力机制,到底解决了什么问题的。
第一篇文章,应该从图灵奖得主Bengio 2003年的神经语言模型NNLM开始:bengio03a.dvi。从这篇文章了解语言模型的基本任务:预测下一个词,看最简单的多层前馈神经网络如何学习语言模型,看到“词元”如何变成数值向量进入神经网络计算过程。
第二篇文章,词嵌入Word2Vec原作(2013):[1301.3781] Efficient Estimation of Word Representations in Vector Space。这篇文章其实在模型上没有太多值得学习的创新,模型依然很简单,任务也很简单,但是Word2Vec已经开始解释语言模型学习的本质,把语言序列嵌入到高维向量空间,从词嵌入开始,BERT实际上就是做到了句子嵌入。学习这种嵌入,不需要特殊任务,就是通过学习语言模型,预测下一个词,或者做填空任务。这篇文章揭示了学习语言模型得到的词嵌入在语义空间中自然呈现的规律性和可线性计算特性。这一部分可以参考阅读作者的另外两篇文章:Linguistic Regularities in Continuous Space Word Representations,[1310.4546] Distributed Representations of Words and Phrases and their Compositionality。这两篇文章详细揭示了语义空间中的规律性(linguistic regularity),并把这种规律从词嵌入拓展到了词组嵌入。

对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-1.jpg


这张图来自Word2Vec的相关论文,反复被用来展示语义空间中嵌入的规律性

第三篇文章,序列到序列模型(Seq2Seq,2014)[1409.3215] Sequence to Sequence Learning with Neural Networks,作者Sutskever后来在OpenAI参与主导了GPT系列模型的工作。这篇文章是他在谷歌时期的有关机器翻译的工作,这个模型相当长一段时间占据了NLP的主流地位,乃至在Transformer诞生之后的相当一段时间里,编码器和解码器的思想仍然是NLP中很重要的建模思路。机器翻译,就是把源语言通过编码器映射到语义空间,再通过解码器从语义空间映射到目标语言。编码器换成图像编码器,就可以用于图像标签生成;解码器换成图像生成模型,就可以用于文生图。Seq2Seq的问题在于把所有语义信息映射到语义空间中的一个点,这个点成了瓶颈,容量有限容易损失信息,长期依赖记忆能力较差,这是注意力机制出现的契机。
第四篇文章,机器翻译中的注意力机制(2015),[1409.0473] Neural Machine Translation by Jointly Learning to Align and Translate,这还是Bengio指导的工作,发表于2015年,在机器翻译的工作中引入了注意力机制,模型的范式是编码器-解码器结构,采用RNN实现,Bengio这个模型用到RNN是GRU模型,前面Sutskever用的是LSTM。Bengio等人引入了注意力机制,实现了目标语言和源语言的软对齐,注意力就像是指针指向输入内容(源语言文本),跳开了映射到语义空间中一个点的限制,可以指向若干个点,根据解码的需要随时“调阅”输入内容。这就是注意力机制的核心作用。

对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-2.jpg


注意力最初的计算方式(某种软对齐结果的加权求和)

注意力的最初计算方式是将“软对齐”结果加权求和,“软对齐”的方式采用向量内积(点积),就是Transformer中经典的缩放点积注意力。Tranformer加了一层线性变换,把“对齐”的内容(Query/Key)和“求和”的内容(Value)拆分成Query/Key/Value,增加了多重对齐机制,也就是“多头注意力”。将RNN的计算并行化,因此舍弃了RNN蕴含的序列前后关系信息,引入了额外的位置编码。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-3.jpg


注意力机制在机器翻译中实现了从源语言到目标语言的软对齐

看到这里,再去读Transformer和BERT,应该毫无压力了,一切都是水到渠成。

插播广告:推荐一本书,适合从头入门机器学习,数学原理搭配丰富的Python代码实践:
《机器学习入门:数学原理解析及算法实践》(董政)【摘要 书评 试读】- 京东图书 (jd.com)
《机器学习入门:数学原理解析及算法实践》(董政 著)【简介_书评_在线阅读】 - 当当图书
============== 分割线(3/29)==============
非常高兴收到好多赞和收藏,分享一些关于阅读论文和使用大模型的体会。
关于读原始论文的语言障碍:目前个人感觉影响阅读论文体验感的最大障碍之一仍然是语言,文献基本上是英文的,虽然读了好多年,阅读速度仍然远达不到读中文的速度。不过现在有各种工具可以快速翻译网页,翻译PDF,很有帮助。希望将来能有更多高质量的中文文献,希望国内的科技企业多出中文技术报告,感谢各大平台UP热心提供中文技术内容。
推荐读原始论文:有很多原始论文确实比较难读,比如支持向量机SVM的论文,我就一直没有动力读下去,一看开头VC维理论就头大了。这种就非常适合看别人解读,找到一个好的解读简直是醍醐灌顶(参考 现在还有必要对 SVM 深入学习吗? - 知乎)。尽管如此,还是有相当多写得不错的论文值得阅读原文,原文内容更加丰富,有更多细节,能更好观察原作者的思路和工作方法。
我最初读原始论文是做视觉神经网络建模,导师推荐了寿天德老师的《视觉信息处理的脑机制》(视觉信息处理的脑机制 (豆瓣)),书并不厚,内容很全面,也不太难懂(以我作为计算机专业学生读生命科学教材的视角)。然而中文教材普遍非常言简意赅,因此不得不直接去看书后列举的参考文献,于是幸运的找到了Hubel和Wiesel两位诺奖生物学家关于哺乳动物视皮层研究的论文。那是1950~60年代的论文,排版非常古老,但是内容超级详细,图文并茂的描述了用各种动物实验(感谢这些实验猫咪和猴子)观察视网膜、外膝体、初级视皮层各个部位的神经元对各种视觉刺激的响应模式,具备一点基本中学生物知识就可以看懂。他们的文章为我看论文开了扇门,阅读论文的心理障碍就消除了,反倒经常好奇希望看看原作者最初怎么描述自己的工作。
关于利用LLM辅助阅读和学习:LLM确实极大降低了学习门槛,2023年ChatGPT开始出圈,当时出现了大量专门利用GPT模型辅助阅读论文的网站。现在Agent应用日趋成熟,各种LLM平台和开源框架都支持自己上传文件构建知识库,让大模型引用知识库回答问题,或者支持在聊天上下文中上传文件,让大模型根据文件回答问题。今年DeepSeek爆火,DeepSeek的蒸馏版本甚至可以直接部署在家用消费级显卡上或者采用CPU推理(稍微慢一点)。自己在家里搭一个Ollama+OpenWebUI,就可以用DeepSeek蒸馏版帮你读论文了。
LLM的知识仍然主要来自互联网上已有内容:以当前LLM的理解能力,仍然很难说它真正理解了什么。LLM对于论文的解读来自两方面:(1)对论文文字的字面总结,(2)融合它在预训练阶段从语料库里面看到的信息进行总结。2023年初,因为工作需要开始读BERT和GPT相关的论文。那个时候,我尝试让LLM帮我回答阅读论文时遇到的困惑,它的回答通常模棱两可,乏善可陈。比如,当时看到有人提到BERT是encoder only,而GPT是decoder only,然而原始论文中BERT仅仅一笔带过“a multi-layer bidirectional Transformer encoder”,GPT也是一笔带过“We trained a 12-layer decoder-only transformer”。靠这么简单的描述,LLM总结不出什么深入的内容,即时我把Transformer原始论文一并放进知识库,LLM也很难融会贯通。我问一些比较细节的内容,比如,GPT的Decoder和原始Transformer decoder差别在哪里(没有从Decoder到Encoder的注意力),BERT的Bidirectional encoder是原始Transformer encoder吗(是的,只不过作者强调了注意力的双向性),对于这些问题LLM回答模糊不定,有时候表现得非常“谄媚”,迎合我的猜测。当然,如果现在我们在最新模型上提这些问题,他们回答得头头是道。这很难说是因为他们理解能力更强了,更多是因为新模型训练语料包含了近几年热门网络内容,网友在互联网上对这些内容进行了更加深入详尽的探讨,问一些冷门内容就又露馅了(参考 凡事可以问 AI 的时代,人们还需要什么样的科普内容创作? - 知乎)。对于LLM的输出,我们要保持谨慎求证的态度。为了让LLM以后能输出更多有价值的内容,我们还是要努力在网络上贡献一些有意义的文字。

我是鸽手 LV

发表于 2025-4-9 13:33:59

因为这两篇文章写的确实不清楚。找几个研究优化甚至理论cs的phd,让他们读一遍transformer文章,绝对也是一头雾水。模型的input和output space是什么,给一个input,具体是怎么计算才能得到output,这些东西本来可以几行数学公式矩阵乘法定义的清清楚楚,但是为了讲故事,一定要用token,embedding,attention什么的弄的玄之又玄,这也是大部分nlp cv文章的通病。
我认为一些理论方向的文章反而比bert这种好读,因为人家的问题定义的清清楚楚,算法每一步也都用数学语言严谨表达,而nlp的一些文章好像故意写的很模糊,让人难以理解。

bingfeng009 LV

发表于 2025-4-9 13:48:28

(2023.5.5更新:解决图片混乱问题,添加目录)
(2023.5.6更新:BN&LN 详解见 BN&LN)
(2023.5.7更新:解决公式缺失问题)

Bert详解记录
GPT详解记录
源论文:Attention is all you need.

Transformer



对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-1.jpg


一、Attention 详解


背景:  LSTM 依然存在 序列过长梯度消失 和 无法并行运算 等缺点。  而 Attention 机制可以更加好的 解决序列长距离依赖 问题,并且具有 并行计算能力

1.1 Attention

Query:观察者(信息) Values:被观察物(信息)
(通常将 Values 拆分成键值对的形式:key-value pairs
通过 Query 从 Values 中筛选出对 Query 重要的信息。 简单来说,就是计算 Query 和 Values 中每个信息的相关程度。 并将计算的相关程度加权融合到 Values 中,形成 Values 新的包含 Query 信息的特征表征


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-2.jpg


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-3.jpg


输出 Attention Value所有 values 的加权,其中权重是由 Query 和每个 key 计算出来 的。
计算方法分为三步:

  • 计算 Q 和 K 的相似度 F(Q,K),在 transformer 中采用 点乘 计算,快速高效
  • 将得到的相似度进行 softmax 操作,进行归一化为什么除以 \sqrt{d_k} :在数量级较大时, softmax 将几乎全部的概率分布都分配给了最大值对应的标签,由于某一维度的数量级较大,进而会导致 softmax 未来求梯度时会消失。 即 softmax 可能会过分放大数据差异,不利于分析特征,且导致梯度消失。
  • 用计算出来的权重,对所有 values 进行加权求和 计算,得到 Attention Value 向量。

1.2 Self - Attention



对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-4.jpg


在 Self Attention 中,Q、K、V 均来自句子 X 的 词向量 x 的线性变化,即对于词向量 x,给定三个可学习的矩阵参数 W_Q, W_K, W_V,x 分别右乘上述矩阵得到 Q、K、V。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-5.jpg


词向量 X 通过 可学习矩阵变换 得到 Q,K,V 后:Q K 点乘 + scare + softmax + 点乘 V


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-6.jpg


Self Attention 可以捕获同一个句子中单词之间的一些句法特征(如一定距离的短语结构)或者语义特征(如指代关系)。
总结:  给定(词向量矩阵) X,经过 Self Attention 得到(词向量矩阵) Z, Z 相较于 X 学习到了更加完善的句法特征和语义特征。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-7.jpg


Attention 优点: 序列在一定长度内,可以充分捕获任何依赖关系。 而且对于一个句子而言,每个单词的计算是可以并行处理的
Attention 缺点 缺少表征位置的信息。(解决方案详见 Transformer PE)

1.3 Masked Self Attention

在 Self Attention 基础上加入 MASK 层。(代码实现时考虑对相应位置特征赋极值)
相当于在 训练时先遮住正确答案 (正确的未来信息),使得模型通过训练 获得更好的解题能力(预测未来信息)。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-8.jpg


例如:

  • "i" 作为第一个单词,只能有和 "i" 自己的 attention;
  • "have" 作为第二个单词,有和 "i、have" 前面两个单词的 attention;
  • "a" 作为第三个单词,有和 "i、have、a" 前面三个单词的 attention;
  • "dream" 作为最后一个单词,才有对整个句子 4 个单词的 attention。
并且在做完 softmax 之后,横轴结果合为 1。如下图所示:


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-9.jpg


1.4 Multi-Head Self Attention


将输入序列 X 切分成 h个 (head 头数)X_1, X_2 \cdots X_h ,用不同的 W_Q, W_K, W_V 做 Self Attention 后拼接
然后通过全连接层线性变化(改变维度)获得新的 注意力值。
在 NLP 领域中,h(头数)一般取 8。
意义:
将模型分为多个头,形成多个子空间,把原始 信息放入了多个子空间 中,多头保证了 attention 可以注意到不同子空间的信息捕捉到更加丰富的特征信息
类似于 CNN 中用 不同大小的卷积核 去捕捉更丰富的特征信息。
在实际应用中效果较佳。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-10.jpg


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-11.jpg


完整流程如图:


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-12.jpg


二、Positional Encoding


2.1 背景

并行计算 Attention 导致特征中不包含词序(位置)关系。
故采用 Positional Encoding 给特征信息中加上位置信息(绝对位置 和 相对位置)。

2.2 目标

对于输入 X 进行 Attention 计算之前,在 X 的词向量中加上位置信息,也就是说 X 的最终词向量为
X_{final\_embedding}=Embedding+PositionalEmbedding

2.3 如何得到 Positional Encoding



对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-13.jpg


pos 指当前字符在句子中的位置(如:“你好啊”,这句话里面“你”的 pos = 0 )。
d_{model} 指的是 Word Embedding 的长度。
2i/2i + 1的取值范围是 0, 1, ... , d_{model}-1,取奇数和偶数时分别对应不同变换。

2.4 PE原理:(为什么要做复杂的三角函数变换)

位置最合理的表示是0,1,2,3,....,但是每个词用的是嵌入向量表示,不是一个值,没法加入位置信息,所以得做一
个变换映射成嵌入维度,变换后还得包含位置属性。

使用三角函数优点:

  • 可以使 PE 分布在 [0,1] 区间。
  • 不同语句相同位置的字符 PE 值一样。
使用三角函数缺点:三角函数有周期性,可能存在 pos 不同 PE 相同的情况。
解决方案:将 PE 扩展维度到和 Word Embedding 一样长,如图:


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-14.jpg


交替使用 sin / cos, 增加鲁棒性和模型性能,得到 transformer 中 Positional Encoding 解决方案。

2.5 直观理解

不同比特位(权重)对最终值变化率的影响不一样。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-15.jpg


不同频率的sines和cosines组合其实也是同样的道理,通过调整三角函数的频率,我们可以实现这种低位到高位的变化。

三、Transformer





3.1 整体框架

Seq2Seq (一句话,一段视频)
Encoders 2 Decoders

  • 通过 Encoders 学习优秀的特征表示(词向量)。
  • 把 Encoders 输出的特征表示(词向量)输入到 Decoders, 用 Decoders 来训练模型的预测能力。
大体:


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-17.jpg


流程:

  • 将序列 (x_1, x_2, ..., x_n) 作为 Encoders 的输入,得到输出序列 (z_1, z_2, ..., z_n)
  • 把 Encoders 的输出序列  (z_1, z_2, ..., z_n) 作为 Decoders 的输入,生成一个输出序列  (y_1, y_2, ..., y_n)。 注:Decoders 每个时刻输出一个结果(类似 LSTM)。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-18.jpg


Encoders 的最终输出,会和每一层的 Decoder 进行结合

3.2 Encoders


Encoders 由 6 个(通常)相同的 Encoder (Layer)组成。每个 Encoder 会进一步学习 特征。
( 注:为方便理解,将整个 Encoder 模块称作 Encoders,将里面的每一相同层称作 Encoder(Layer)。)
目的:更好的学习输入的特征,得到更优的特征表示(如词向量),为下游任务打下基础。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-19.jpg


结构

每层 Encoder layer包含两个 sub-layers:

  • multi-head self-attention,用来计算输入的 self-attention;
  • 简单的前馈神经网络层 Feed Forward
另:每个 sub-layer 后都会有一个 残差网络 + 归一化,即 Add & Norm
即每个 sub-layer 的输出为:LayerNorm(x + Sub\_layer(x)) 。

Feed Forward

两个线性变换和一个ReLU激活函数,FFN(x) = max(0, xW_1 + b_1)W_2 + b_2 。
Multi-Head Attention的内部结构中,进行的主要是矩阵乘法 (scaled Dot-Product Attention),是线性变换。通过激活函数 ReLU(非线性变换)的方式,来强化特征的表达能力,对数值较大的部分进行加强,数值较小的部分则进行抑制,从而使得相关的部分表达效果更好。
(这也是神经网络中激活函数的作用,即 进行非线性映射,加强大的部分,抑制小的部分)。

Add

残差 连接(Add) 将 网络的输入和输出相加,即网络的输出为 F(x)+x,在网络结构比较深的时候,网络梯度反向传播更新参数时,容易造成梯度消失的问题,但是如果每层的输出都加上一个 x 的时候,就变成了 F(x)+x ,对 x 求导结果为1,所以就相当于每一层求导时都加上了一个常数项 1,有效解决了梯度消失 问题。

Norm

Layer Normalization, 通过对特征表征进行标准化处理,将数据移动到激活函数的作用区域,可以使得ReLU激活函数更好的发挥作用。
LNBN 不同,
BN 在 NLP 中相当于对 一个 batch 内的 所有句子同一位置的词 做归一化,
LN 在 NLP 中相当于对 一个 batch 内的 每个句子内所有位置的词 做归一化
(详见 NLP_概念辨析)

Encoders 完整流程详解



对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-20.jpg



  • 输入序列做 Word Embedding (one-hot, glove, random) 得到 X_i 序列。
  • X_i 序列叠加 Positional Embedding 得到包含 位置信息 的新 X_i 。  Sub-Layer 1
  • X_i 做 Multi-head Self Attention 得到包含 语义信息、句法信息 的 Z_i 。
  • 以 X_i 做直连对 Z_i 做残差和归一化得到新 Z_i,即 Add & Norm避免梯度消失, 稳定数据,加快训练速度和质量。  Sub-Layer 2
  • Z_i 经过前馈网络 Feed Forward ,即两个线性变换和一个ReLU激活函数, FFN(x) = max(0, xW_1 + b_1)W_2 + b_2 , 更好的学习深层特征。
  • 做一个 Add & Norm 得到输出 R_i,成为下一个 Encoder 的输入。
注意: 上述 X_i, Z_i, R_i (特征表征)维度相同,原论文中为 512 维。 固定维数使得模型更加简单,容易调参。


3.3 Decoders


Decoders 由 6 个(通常)相同的 Decoder(layer) 组成。
( 注:为方便理解,将整个 Decoder 模块称作 Decoders,将里面的每一相同层称作 Decoder(Layer)。)
目的:通过 Attention 机制在 Encoders 生成的词向量(Values)中用已经生成的词(Query)查询下一步最可能出现的词向量。




结构

每层 Decoder layer 包含三个 sub-layers:

  • Masked Multi-Head Self-attention,用来计算输入的 self-attention。
  • Encoder-Decoder Self-Attention,用已经生成的词查询 Encoder 词表中的相似度。
  • 简单的前馈神经网络层 ,即Feed Forward
另:每个 sub-layer 后都会有一个 残差网络 + 归一化,即 Add & Norm

Decoders 的输入到底是啥

Train 模式下和 Test 模式下 Decoders 的 输入是不同 的.

  • Train 模式下: 每一层 Decoder Layer 输入是 Ground Truth (相当于做有答案的作业)和 Encoders 的输出。 也就是不管上一层 Decoder Layer 输出是什么,会将正确答案当做输入。
  • Test 模式下: 没有 Ground Truth(相当于做没有答案的考试)。 于是将 已经出现的词的输出(注意这里的输出是走完整个 Decoders 计算得到预测结果而不是走完一层 Decoder Layer 的输出)和  Encoders 的输出 当做下一层 Encoder Layer 的输入,
这也许是论文中 shifted right 的意思,逐步往右移(类似 LSTM 中的时序)。

为什么 Train 时要用 Ground Truth 做输入
如果直接采用上一层 Decoder 的输出做输入,可能 造成预测越来越偏离正确答案,偏差累积变大。
所以 Train 时要用 Ground Truth 做输入。
(有点像日常学习时老师会纠正学生的错误,否则学生意识不到,越错越多,考试堪忧。)

Decoders 是否是并行运算
Transformer 中的 并行计算仅限于 Encoders ,在 Encoder 中是将所有的词一起输入一起计算。
但是在 Decoder 中不是并行运算,Decoder 中是 类似于 LSTM  一样一个一个词输入。

Encoders 与 Decoders 的交互
Encoders 与 Decoders 之间的交互 不是每一层一一对应 的。 而是 每一层 Encoder 全部计算完 得到 K 和 V  之后 再传给 每一层 Decoder 与其计算得到的 Q 进行计算。
(这不是固定的,可以自定义 Encoders 和 Decoders 之间的连接方式。)

Masked Multi-Head Attention

(为什么要做 Masked)
总结: Decoder 做 Masked,是为了在 Train 时模拟 Test 的情形,提高模型性能,避免过拟合。

  • Train 阶段 由于使用的输入是 Groud Truth,如果不做 Mask, 那么在做 MH Attention 时全部信息都会做贡献(相当于写作业抄答案)。
  • 而在 Test阶段,只能凭借已生成单词去预测(相当于闭卷考试), 与 不做 Masked 的 Train 情况差别大,模型效果差(抄答案考不好试)。
  • 故在 Train 阶段使用 Mask 模拟 Test 情况(不看答案写作业), 即做 Attention时仅考虑已生成的词,提高模型的效果。
( 注意:为了防止 使用了 Mask 的 Train 累加误差,用 Ground Truth 及时纠正。)

Multi-Head Attention

(为什么做 Encoder 和 Decoder 的交叉 Attention)
回顾 Attention:利用 Query 查询到 Values 中对其重要的信息。
故在 Decoder 中,

  • 利用 已经生成的词特征(经 Masked Attention) 作为 Query;
  • 利用 Encoders 生成的词表特征(高效词向量库)做 Values;
  • Encoder-Decoder 交叉 Attention 后得到下一个可能出现的词的特征;

Linear + Softmax


  • Linear 线性变换 转换成 词表的维度
  • Softmax 得到最大词的概率

Decoders 完整流程详解

(动态图片以翻译为例)


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-22.jpg



  • 输入序列(Train:Grand Truth)做 Word Embedding (one-hot, glove, random) 。
  • 叠加 Positional Embedding 得到的 位置信息  。  Sub-Layer 1
  • Masked Multi-head Attention (模拟 Test 模式)得到 语义信息、句法信息  。
  • Add & Norm,避免梯度消失,稳定数据分布,加快训练速度和质量。
Sub-Layer 2

  • Multi-Head Attention (Encoder-Decoder),  通过 已经生成的词在 Encoder 中查询相似特征预测 下一个可能生成。
  • Add & Norm,避免梯度消失,稳定数据分布,加快训练速度和质量。  Sub-Layer 3
  • Feed Forward ,即两个线性变换和一个ReLU激活函数, FFN(x) = max(0, xW_1 + b_1)W_2 + b_2 , 更好的学习深层特征。
  • Add & Norm,避免梯度消失,稳定数据分布,加快训练速度和质量。


  • Linear : 线性变换 转换成 词表的维度
  • Soft Max : 得到 最大词的概率  ;

shifted right ,逐步往右移(类似 LSTM 中的时序)。

注意: 上述 X_i, Z_i, R_i (特征表征)维度相同,原论文中为 512 维。
将已经出现的词计算得到的 Q 与Encoder计算得到的 K, V 进行 Multi-Head Attention 计算。 经过了全部 Decoder Layer 层再经过 FC + Softmax 得到结果之后再把结果当做 Decoder 的输入再走一遍整个流程直到得到END标签。

四、损失函数

Encoders 的输出和 正确分类 一起送入损失函数,求得 loss 进行梯度下降、反向传播。

4.1 向量空间距离 (MSE)

简单的用两组概率向量的的空间距离作为 loss
(向量相减,然后求平方和,再开方)

4.2 交叉熵 (cross-entropy)

交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。

信息量

信息是用来 消除不确定性 的东西”,也就是说衡量信息量的大小就是看这个信息消除不确定性的程度。
信息量的大小与信息发生的概率成反比。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-23.jpg


信息熵

也被称为熵,表示所有信息量的期望。
可表示为:(这里的 X 是一个离散型随机变量)


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-24.jpg


相对熵 ( KL 散度 )

用来 衡量两个 概率分布的相似性 的一个 (非对称性)度量指标。


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-25.jpg


常用 P(x) 来表示样本的真实分布Q(x) 来表示模型所预测的分布。
KL散度越小,表示 P(x) 与 Q(x) 的分布更加接近,即模型效果越好。

KL 具有

  • 非对称性
  • 非负性
  • 不确定性
  • 不准确性


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-26.jpg


交叉熵



对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-27.jpg


对人工智能毫无了解,导师让看transformer和BERT的两篇论文。好几天了,基本没看懂,何解?-28.jpg


D_{KL} (P || Q) 表示以 P 为基准的相对熵,展开后,后一项为 P 系统的熵(不变)。


总结

  • 交叉熵 能 衡量同一个随机变量中的两个不同概率分布的差异程度。交叉熵的值越小,模型预测效果就越好。
  • 交叉熵 常与 softmax 标配,softmax 使其多个分类的预测值和为1,再通过交叉熵来计算损失。
  • 具有“ 误差大的时候,权重更新快;误差小的时候,权重更新慢 ”的良好性质。


负对数似然和交叉熵有高度的(形式)相似性,但其本质(似然,熵)不同。其实,在分类问题中,所使用的的交叉熵损失,本质就是负对数似然。
交叉熵函数的最小化 的本质就是 对数似然函数的最大化。


五、总结


5.1 回顾

在陆陆续续学习了 Attention 机制的基础上,花了近三天时间完整学习了 Transformer。把 Transformer 一步步分解成小模块然后学习理解,基本已经了解 Transformer 的构造原理,希望有时间能够在 Pytorch 框架下搭建 Transformer,以加强理解记忆。
虽然基于 Transformer 的各种模型已经横扫各领域 SOTA,但是如果没有在 NLP beginner 中对经典模型 CNN、RNN、LSTM 和各种 NLP 相关概念的学习,想要直接啃 Transformer 那肯定会是不明所以,难以理解。
经典模型依然对学习先进理论不可或缺,对于初学者来说,经典模型就像梯子和脚手架,先一步步搞懂 这些模型要做什么、为什么、怎么做,在学习新模型乃至做出创新时才能有着力点,不至于一头雾水、难以下手。
目标上 Transformer 的目标和传统 LSTM 相似:生成优秀的特征表示,并利用此做诸多下游任务,不过 Transformer 优秀的并行性和优秀的学习特征能力让其脱颖而出。就像老话所言,没有正确的模型,只有能用的模型。Transformer 之后也不断出现了各种效果不错的模型,希望可以继续学习,扩宽眼界。

5.2 向前

Transformer 开启了 NLP 新时代的序章,随之而来 BERT、GPT 让人们看到 NLP 的强大和通向 AGI 的曙光。
继续学习强大的 Bert、GPT 等模型,都基于 Transformer 而来。
下一步 BERT!

libo LV

发表于 2025-4-9 14:00:45

Transformer,非常推荐 @李沐 老师和各位大佬的dive2dl里面的Transformer部分。
这个章节从最初的Attention开始,然后到Self-Attention,Multi-Head Attention等,到Transformer,以及随后的应用(基于Transformer的Pretraining,比如BERT)。相对会更容易理解一些,包括算法设计的intuition。
11. Attention Mechanisms and Transformers也有中文版《动手学深度学习》 - 动手学深度学习 2.0.0-beta1 documentation

BERT的论文原文写得确实不是特别容易懂,推荐可以参考Illustrated BERT:
The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning)这个博客里面讲解得相对比较清楚,图文并茂。

您需要登录后才可以回帖 登录 | 立即注册