李宏毅机器学习笔记24

目录

摘要

Transformer代码部分理解


摘要

本篇文章继续学习李宏毅老师2025春季机器学习课程,学习内容是transformer的代码部分,通过代码帮助理解transformer。

Transformer代码部分理解

首先复习一下transformer的整体结构,如下图所示

先看下面这张图左下角"我爱你"为encoder的输入,右下角的"S I LOVE YOU"为decoder的输入,

右上角的"I LOVE YOU E"为真实的标签(答案)。用于计算decoder输出的损失。

下图的代码部分与上图对应起来

就是这样

其中的特殊字符"S"表示开始信号,"E"表示END信号,"P"为填充字符,即不足最大长度的部分用"P"填充。参考下图的例子。

模型的相关参数如下,512为字符转换为embedding的大小,前馈神经网络映射维度为2048,K,V维度为64,encoder和decoder的个数,multi-head的head数为8。

encoder部分代码

src_emb对应词表功能

通过词表将字符转化为向量

对于位置编码,基本公式如下图,对奇数偶数的位置不同也有不同的公式,pos为位置,例如维度为512时,pos为0-511之中的一个数。

位置编码对应实现代码如下图,div_term实现的是公式中共有的部分。最后的forward部分对应词向量与位置编码相加。

需要注意的是,下图的函数获取pad字符的位置。

为什么需要知道pad字符的位置?在下图的例子中,这个图可理解为两个字之间的相似性,pad符号原本是句子不存在的,所有在计算分数时应该去掉pad。

如何获取位置?使用一个符号矩阵,1表示为pad字符。

具体实现代码如下

实现encoder的具体函数,一个实现前馈神经网络,一个实现多头自注意力层。

多头自注意力层如下,其中Q,K矩阵维度相同。

decoder部分代码,decoder与encoder类似。

差别的地方在自注意力层的masked,实现时其实就是一个上三角矩阵,为1时就表示为pad,即被去除,所以在输入S时,只能看见S看不到"卷",在输入S和"卷"时,只能看见S和"卷"看不到"起"。

相关推荐
一点一木2 小时前
🚀 2026 年 4 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
淡海水3 小时前
【AI模型】常见问题与解决方案
人工智能·深度学习·机器学习
William Dawson3 小时前
2026软考中级系统集成项目管理工程师备考笔记
笔记·系统集成项目管理工程师
HIT_Weston4 小时前
65、【Agent】【OpenCode】用户对话提示词(费米估算)
人工智能·agent·opencode
njsgcs4 小时前
我的知识是以图片保存的,我的任务状态可能也与图片有关,我把100张知识图片丢给vlm实时分析吗
人工智能
星爷AG I4 小时前
20-4 长时工作记忆(AGI基础理论)
人工智能·agi
#卢松松#4 小时前
用秒悟(meoo)制作了一个GEO查询小工具。
人工智能·创业创新
zandy10114 小时前
Agentic BI 架构实战:当AI Agent接管数据建模、指标计算与可视化全链路
人工智能·架构
数字供应链安全产品选型4 小时前
关键领域清单+SBOM:834号令下软件供应链的“精准治理“逻辑与技术落地路径
人工智能·安全
Flying pigs~~4 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag