Transformer

2023-12-04

目录

Encoder

LayerNorm怎么做的?

Feed Forward:

FeedForward代码:

公式:

FeedForward的作用是什么?

Decoder:

output:

它的output 是什么?

为什么output要进行shifted right操作?

Mask Muti-Head Attention---Mask:

什么是masked的操作?

masked代码:

为什么需要进行mask?

Muti-Head Attention:

相较于Encoder的不同点:

小结:


学习资料:

Transformer代码及解析(Pytorch) - 知乎 (zhihu.com) >https://zhuanlan.zhihu.com/p/345993564

Encoder

如图所示:

Add&Norm:(LayerNorm)

将多头注意力的输入和多头注意力的输出进行拼接,再进行LayerNorm。

拼接需要维度相同:

输入X(mxn m表示词数量,n表示词维度),Q,K,V的权重为W_q,W_k,W_v,其维度均为(nxn),

X与三个权重分别相乘得到Q,K,V,其维度均为(mxn),通过Attention公式计算可以得到Attention输出为mxn,和输出的X的维度相同。

拼接操作就是多头注意力的输入和多头注意力的输出两个矩阵的对应元素相加,得到的结果维度仍然是mxn.

LayerNorm怎么做的?

batch表示样本的数量,在上图中每一列表示一个词向量,对每个词向量的所有特征进行归一化。(d_model表示词向量的维度)

原输入为 batchxd_model  输出为batchx1:

​
self.layer_norm1 = nn.LayerNorm(d_model)

​

Feed Forward:

对Transformer中FeedForward层的理解_transformer feed forward_江 东的博客-CSDN博客 >https://blog.csdn.net/weixin_51756104/article/details/127250190

FeedForward代码:

class FeedForward(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(FeedForward, self).__init__()
        self.input_size = input_size
        self.l1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.l2 = nn.Linear(hidden_size, num_classes)
    
    def forward(self, x):
        out = self.l1(x)
        out = self.relu(out)
        out = self.l2(out)
        return out

公式:

FFN(x)=relu(W_{1}x+b_{1})W_{2}+b2

FeedForward的作用是什么?

FeedForward中增加了ReLU函数,它可以保留正数部分,对负数部分映射为0,将输入映射到了正数区间。这种做法使FFN并不是仅仅由线性模型y=wx+b构成,更符合实际问题的需求。比如进行房价预测时,可能X只包括收入和地段,y=wx+b只能研究收入和地段对房价的影响,但在实际情况还存在许多不确定因素,并不是简单的线性关系能描述的。

Decoder:

学习资料: 机器学习-31-Transformer详解以及我的三个疑惑和解答_transformer不收敛-CSDN博客 >https://blog.csdn.net/qq_44766883/article/details/112008655

output:

它的output 是什么?

如果该Transformer的任务是中英文转换,那么Encoder的输入是我是中国人,

Decoder的输入是分词进行的,一次输入一个词,逐词翻译。(假设当只有一个注意力头时)

输入s 预测出I的Attention值

输入s和I,预测出am的Attention值

输入s,I,am,预测出Chinese的Attention值

Decoder的输出是I am Chinese 终止符<f>

为什么output要进行shifted right操作?

shifted right就是右移的意思,I am Chinese右移,在最左端添加s,表示模型开始预测。

Decoder中的embedding,Add&Norm以及FeedForward和Encoder一样。

Mask Muti-Head Attention---Mask:

什么是masked的操作?

希望在翻译的时候,Decoder不能看到未来的翻译数据;即在翻译I时,不能知道 am和Chinese,要翻译出I,只能依靠起始符<s>

masked代码:

https://github.com/jadore801120/attention-is-all-you-need-pytorch ​ github.com/jadore801120/attention-is-all-you-need-pytorch >https://github.com/jadore801120/attention-is-all-you-need-pytorch

def get_subsequent_mask(seq):
    ''' For masking out the subsequent info. '''
    sz_b, len_s = seq.size()
    # torch.triu(diagonal=1)保留矩阵上三角部分,其余部分(包括对角线)定义为0。
    subsequent_mask = (1 - torch.triu(
        torch.ones((1, len_s, len_s), device=seq.device), diagonal=1)).bool()
    return subsequent_mask

输入X(4x4)输入四个四维词向量,masked操作将X的上三角部分舍弃。

[True,False,False,False]表示输入<s>

[True,True,False,False]表示输入<s>+I

为什么需要进行mask?

s表示起始,E表示结束

下一行表示输入,上一行表示输出;j

像前面说的,我们是逐词进行翻译的,哪怕不使用masked,在翻译you时,我们也不能得到后续信息,完全不需要对后续信息进行mask操作:

但是Transformer实际上存在多头注意力,<s> I am Chinese可以在多个头里面并行求Attention,这时候掩码的存在就很有必要了。

Muti-Head Attention:

相较于Encoder的不同点:

输入有三个(1.masked muti-head Attention 的输出,2.l另外两个都是Encoder的muti-head Attention的Attention)

Attention(Q,K,V) = Softmax(\frac{QK^{\Gamma }}{d_{k}^{1/2}})V

masked muti-head Attention 的输出和权重W_Q相乘 产生新的Q

Attention分别和W_K,W_V相乘,产生新的K和V。

小结:

1.LayerNorm表示对输入样本的所有特征进行归一化;

2.激活函数例如ReLu可以增加非线性信息,可以拟合更加复杂的情况,更贴合实际需要;

3.在并行化处理词向量时,mask的操作是必要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Transformer 的相关文章

随机推荐

  • 题解 | #实现二叉树先序,中序和后序遍历#

    include
  • 光储并网直流微电网simulink仿真模型

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真实现
  • 徐工集团机械结构工程师岗面试过程并不难,几乎没有问到专业知识

    有没有投兴业普惠的uu啊 交流一下进度 nowcoder vote 103622 文 侯煜编辑 罗卿近十年来 大尺寸OLED 有机发光二极管 面板技术被韩国企业LG Display所垄断 中国半导体显示龙头企业京东方逐步完善OLED显示面板
  • HTTP方法GET、POST、PUT和PATCH的区别是什么

    请实现一个定时任务调度器 有很多任务 每个任务都有一个时间戳 任务会在该时间点开始执行 定时执行任务是一个很常见的需求 例如滴滴打车48小时后自动好评 淘宝购物 代码中的类名 方法名 参数名已经指定 请勿修改 直接返回方法规定的值即可 pa
  • 题解 | #求小球落地5次后所经历的路程和第5次反弹的高度#

    可以说一说流程吗 信息科技岗有没有问专业问题 l apple ice cream watermelon chips hotdogs hotpot while len include
  • ​LeetCode解法汇总2661. 找出叠涂元素

    目录链接 力扣编程题 解法汇总 分享 记录 CSDN博客 gt https blog csdn net rzleilei article details 121477931 spm 1001 2014 3001 5502 GitHub同步刷
  • 陈嘉庚慈善践行与卓顺发的大爱传承

    陈嘉庚慈善践行 了解陈嘉庚后人与卓顺发的大爱传承 2023年11月25日 卓顺发太平绅士以及陈家后人在分享他们对慈善领域见解的过程中 特别强调了慈善在促进社会和谐以及推动社会进步方面的关键作用 同时 他们深入探讨了如何在当今社会中继续传扬和
  • 985测试工程师被吊打,学历和经验到底谁更重要?

    1 前言 吐槽 小编 你骗人的吧 招聘信息不都是学历高者优先吗 怎么可能会有985测试工程师被吊打这种事儿 一方面是学历 一方面是经验 到底哪个才更重要 之所以会有今天这个话题 是因为昨天收到了一封很特别的邮件 是一位老学员发来的好消息 面
  • 彰显营销硬实力!皓量科技连续四年入选《中国数字营销生态图》

    11月28日 中国商务广告协会数字营销专业委员会 虎啸奖组委会 秒针营销科学院共同发布了 中国数字营销生态图 2023版 以下简称生态图 凭借多年在广告营销领域的精耕细作 皓量科技从2020年开始连续4年入选生态图 收录赛道也逐年递增 覆盖
  • 提升客服效率!RPA机器人助力电商客服快速回复

    电商行业是一个快速发展的行业 随着互联网的普及和消费者对网购的需求增加 电商平台上的客服工作也变得越来越重要 面对各种问题影响了电商的发展 1 信息处理繁琐 客服人员需要处理大量的信息和数据 包括回复客户的咨询 处理退换货 解决投诉等 这些
  • OpenHarmony 关闭息屏方式总结

    前言 OpenHarmony源码版本 4 0release 开发板 DAYU rk3568 一 通过修改系统源码实现不息屏 修改目录 base powermgr power manager services native profile p
  • 网络安全与IP安全网络安全

    网络安全 是指网络系统的硬件 软件以及系统中的数据收到的保护 保护的基本属性为 机密性 身份认证 完整性和可用性 基本特征 相对性 时效性 相关性 不确定性 复杂性和重要性 在该方向主要研究如下领域 入侵者如何攻击网络 如何防护网络对抗攻击
  • 网络安全的基础知识

    1 什么是防火墙 什么是堡垒主机 什么是DMZ 防火墙是在两个网络之间强制实施访问控制策略的一个系统或一组系统 堡垒主机是一种配置了安全防范措施的网络上的计算机 堡垒主机为网络之间的通信提供了一个阻塞点 也可以说 如果没有堡垒主机 网络间将
  • 面试阿里P7,被按在地上摩擦,鬼知道我经历了什么?

    现如今很多人想要换工作的心开始蠢蠢欲动 那么 需要准备什么 才能拿到自己心仪工作的offer 1 薪资行情 根据2023年测试行业最新数据 薪资在18 25K的人数占比26 1 而且由于软件测试行业入门门槛低 薪资报酬高 不断有新鲜血液冲刷
  • 解读拼多多Q3财报:Temu崭露头角,跨境故事刚刚开场

    11月28日 拼多多发布了2023年第三季度的业绩报告 季度营收688 4亿元 较去年同期大涨94 比市场预期高出100多亿元 截止到11月28日美股收盘 拼多多股价上涨18 8 总市值达到1834 23亿美元 11月29日美股开盘后 拼多
  • pymysql.err.DataError: (1366, “Incorrect string value: ‘\\xC2\\xA0\\xE5\\x89\\xA7\\xE6...‘ for colum

    pymysql err DataError 1366 Incorrect string value xC2 xA0 xE5 x89 xA7 xE6 for column types at row 1 怎么解决 这个错误通常是由于在尝试将一个
  • 手机没Root?你照样可以渗透路由器

    和Metasploit差不多 RouterSploit是一个强大的漏洞利用框架 用于快速识别和利用路由器中的普通漏洞 它还有个亮点 就是可以在绝大多数安卓设备上运行 如果你想在电脑上运行 可以阅读这篇文章 而这篇教程则会告诉你如何轻松地在未
  • 【Linux】 服务器优化之定时任务:自动清理日志,重启服务

    文章目录 背景 处理流程 查看进程 清理日志文件 重启服务 问题总结 完整处理方案 清理日志脚本 自动重启服务
  • ECU Bootloader程序开发

    文章目录 前言 前言 本篇主要介绍ECU BootLoader的 一般 开发逻辑 对正在 或想要做这方面工作的小伙伴一个参考 BootLoader的稳定性至关重要 前期设计要规避可能存在的所有使ECU变 砖 的风险点 尽可能地设计多重防范机
  • Transformer

    目录 Encoder LayerNorm怎么做的 Feed Forward FeedForward代码 公式 FeedForward的作用是什么 Decoder output 它的output 是什么 为什么output要进行shifted