输入“/”快速插入内容

Task3:Transformer建模SMILES进行反应产率预测

2024年7月17日创建
2902
3921
3
2
💡
教程贡献者说:
在Task2,我们使用RNN建模SMILES,且发现了RNN在处理这类问题的局限性。因此,本节我们学习Transformer这种更加强大和高效的序列建模算法。
今天我们的任务是学习和了解Transformer并使用Transformer建模SMILES。
你可以从中学会Transformer相关知识,学会用代码实践Transformer建模序列数据。
学些代码和动手实践仍然是我们的重要环节,所以,请一定要认真完成这一部分。而且,我们已经学习了很强的建模方法了,大家尽可以动手调试代码,拿下更好成绩。
引导思考
Task2中,我们学习了RNN,认识了RNN的缺点,所以RNN的缺点有哪些?你还记得吗?
接下来,我们就跟着本节内容,看看Transformer是如何解决这些缺陷的。
正文内容 —— Transformer
transformer诞生的由来
循环神经网络的序列到序列建模方法,在建模文本长程依赖方面都存在一定的局限性。
循环神经网络:由于所有的前文信息都蕴含在一个隐向量里面,这会导致随着序列长度的增加,编码在隐藏状态中的序列早期的上下文信息被逐渐遗忘。
卷积神经网络:受限的上下文窗口在建模长文本方面天然地存在不足。如果需要关注长文本,就需要多层的卷积操作。
图1 循环神经网络中,每个词都会依赖上一个词
优势
完全通过注意力机制完成对序列的全局依赖的建模。并且,这是一种可以高并行的结构,大大增加了计算效率。
基本架构示意图
1.
嵌入层 (embedding layer)
将token转化为向量表示。模型认识的只是向量,所以需要将每个切分好的token转化为向量。
这个过程中,与RNN不同的是,我们在Transformer的嵌入层,会在词嵌入中加入位置编码(Positional Encoding)。
(为什么需要位置编码?
—— 在本节后面的讲解中,我们会学习到:transformer使用的多头注意力计算方式,无法获取到序列中各个字符的位置信息,因此需要认为地添加位置信息。)
位置编码通常使用不同频率的正余弦函数: