李宏毅机器学习笔记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和"卷"看不到"起"。

相关推荐
腾视科技12 分钟前
腾视科技TS-SG-SM7系列AI算力模组:32TOPS算力引擎,开启边缘智能新纪元
人工智能·科技
极新18 分钟前
深势科技生命科学高级业务架构师孟月:AI4S 赋能生命科学研发,数智化平台的实践与落地 | 2025极新AIGC峰会演讲实录
人工智能
落羽凉笙5 小时前
Python学习笔记(3)|数据类型、变量与运算符:夯实基础,从入门到避坑(附图解+代码)
笔记·python·学习
Light605 小时前
破局而立:制造业软件企业的模式重构与AI赋能新路径
人工智能·云原生·工业软件·商业模式创新·ai赋能·人机协同·制造业软件
Quintus五等升6 小时前
深度学习①|线性回归的实现
人工智能·python·深度学习·学习·机器学习·回归·线性回归
natide6 小时前
text-generateion-webui模型加载器(Model Loaders)选项
人工智能·llama
野生的码农6 小时前
码农的妇产科实习记录
android·java·人工智能
TechubNews6 小时前
2026 年观察名单:基于 a16z「重大构想」,详解稳定币、RWA 及 AI Agent 等 8 大流行趋势
大数据·人工智能·区块链
脑极体6 小时前
机器人的罪与罚
人工智能·机器人
三不原则6 小时前
故障案例:容器启动失败排查(AI运维场景)——从日志分析到根因定位
运维·人工智能·kubernetes