仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
哈喽,我是cos大壮!~
今天咱们聊聊目前非常受欢迎的一个模型:Transformer~
本文尽可能的给大家讲解清楚,但是想要完全熟悉Transformer,需要不断的探索和学习。
首先,Transformer是一种用于处理序列数据(比如自然语言、时间序列等)的神经网络结构,它彻底改变了NLP(自然语言处理)领域。
下面,咱们从6个方面给大家进行介绍:
传统的循环神经网络(RNN)和长短期记忆网络(LSTM)在处理长序列时,会出现“信息丢失”或“记忆困难”的问题。
Transformer则完全抛开了“按时间一步步算”的方式,改用“注意力机制”(Attention),一次性把整个句子都看一遍。这样它既能捕捉到句子里远距离词语的关系,又能并行计算,速度更快。
注意力(Attention):就像人读文章时,遇到不懂的词,会去上下文里“瞄一眼”相关地方。
自注意力(Self-Attention):在一句话里,每个单词都去看这句话的其他单词,判断“和我最相关的是什么?”比如“猫在追老鼠”,当模型看“追”这个词时,会重点关注“猫”和“老鼠”这两个词。
自注意力的计算过程大致是:
查询(Query)、键(Key)、值(Value):把每个词分别映射成三个向量,Query用来“提问”,Key用来“给出提示”,Value是“内容”本身。
用Query和所有Key做点积(越相关分数越大),得到的分数经过Softmax就是注意力权重,最后加权求和Value,得到“融合了重要信息”的新表示。
单一的注意力头可能只关注一种“关系”或“一类特征”。多头注意力就是并行做多组不同的Query/Key/Value,让模型能从不同角度“看”句子。
最后再把多组结果拼在一起,丰富表示能力。
由于Transformer一开始并不考虑单词的先后顺序(因为它不按时间算),所以需要给每个位置(第几个词)加上「位置编码」,让模型知道顺序信息。通常用正余弦函数生成一组固定的向量,和词向量相加,就把顺序也带进去了。
编码器(Encoder):把输入序列(比如一句话)编码成一串含有上下文信息的向量表示。通常有若干层,每层包含多头自注意力+前馈网络+残差连接+LayerNorm。
解码器(Decoder):根据编码器的输出,再结合已经生成的目标序列(比如翻译后的句子),一步步预测下一个词。也有多头注意力,既关注自己已生成的部分,也关注编码器的输出。
并行化:不按时间一步步算,可以一次把整个序列送入计算,大幅加速训练。
捕捉长依赖:自注意力直接连接任意两个位置,不会“越走越丢失”信息。
可扩展:只要堆更多层、更大的头数,就能得到更强的模型(如BERT、GPT、T5、ViT等)。
这里,咱们使用PyTorch从零构建一个小规模的TransformerEncoder,用于合成正弦波时间序列的预测任务。示例包含:
合成数据
数据集与DataLoader
Transformer模型定义
训练与评估
可视化结果(图像配色鲜艳,Title/Label均使用English,其他注释与说明使用中文)
算法优化:学习率调度、Dropout、超参数调整等
合成过程:我们用正弦函数再叠加高斯噪声,得到近似真实世界测量数据的曲线。
滑动窗口:选取前seq_len=50个点来预测第51个点,相当于“有记忆”的自回归模型。
InputProjection:将单维度输入投影到d_model=64空间,使其与Transformer的隐藏维度匹配。
PositionalEncoding:使用可学习的位置向量self.pos_emb,让模型区分不同时间步。
TransformerEncoder:
num_layers=2、nhead=4:每层包含4个注意力头,堆叠两层。
dim_feedforward=128:前馈网络内部维度。
dropout=0.2:防止过拟合。
输出层:将整个序列每一步的输出拼接后,一次性预测下一个值。
损失函数:均方误差(MSELoss),常用于回归任务。
优化器:Adam(lr=1e-3),自适应学习率。
LearningRateScheduler:每10个epoch学习率缩小一半,帮助模型在后期更稳定收敛。
EarlyStopping(可选):若验证损失长时间未下降,可提前停止训练。
训练曲线(magenta)和验证曲线(cyan)在大多数epoch均向下,说明模型在不断学习。
最终两者趋于平滑,验证损失未大幅上升,说明未严重过拟合。
对比真实值(实线)与预测值(虚线),前100个时刻模型能较好地捕捉正弦波形的趋势和噪声分布。
Dropout(0.2)显著降低了过拟合,验证误差更平稳;
学习率调度让模型在初期快速下降、后期细致优化;
多头注意力(4头)能并行捕捉不同滞后关系,比单头效果更好;
层数与宽度:可在实际数据集上再试验更多层、不同d_model,平衡效果与计算开销。
大家可以将此模板改造为NLP、信号处理、金融预测等各种序列任务,并根据数据规模、时序复杂度进一步调整超参数和网络深度。
感觉有帮助的朋友可以收藏、点赞、转发起来!
推荐阅读
(点击标题可跳转阅读)
《机器学习100天》视频讲解
公众号历史文章精选
我的深度学习入门路线
重磅!
1700多页的《人工智能学习路线、干货分享全集》PDF文档
扫描下方二维码,添加我的微信,领取1700多页的《人工智能学习路线、干货分享全集》PDF文档(一定要备注:资料)。
长按扫码,申请入群
感谢你的分享,点赞,在看三连