关于Transformer中feed forward layer理解
今天记录一下个人关于Transformer中前馈神经网络(FFN)的一点理解。
第一点,我们知道,FFN之前是有一个多头注意力机制的模块。我们可以想想一下,如果这个模块直接输出,不经过FFN层会发生什么,要知道多头注意力(MH)是没有激活函数的,那么最后只有一个结果,那就是很多头的输出就是一个极为相似的结果。这并不是我们想要的结果,所以这个时候,我们可以考虑使用FFN层,因为这个结构可以提供更好的特征表达能力(也就是提供了非线性,非线性很重要,不然DL就没法搞那么深了)。
第二点,关于self-attention这个模块,该模块其实就是学习某个特征与其余其他特征之间的相似度分数,然后利用softmax归一化成注意力分数,之后对某个特征与其他特征的相似性进行加权输出。而这个过程就意味着self-attention输出的并不是上下文语义嵌入,而是原始上下文本身(就是怎么输进去就怎么输出来,只不过输出来的值是带有权重的,比如,我去店里买咖啡,从店里出来时我带着咖啡这个权重,只不过我还是我,并没有变。感觉这比喻有点问题,但是我只能这么理解了)。所以这个时候就需要考虑利用FNN考察特征语义不同部分之间的关系(通过非线性变换来实现)。感觉有点像self-attention先去前方打探好多个敌人的不同情况,之后FFN根据不同的敌人做调整。
第三点、在使用self-attention实际上是做了一个线性变换,也就是第一点提到的,训练到后期,输出值都相似。所以之后需要加入FNN提高特征的表达能力(也就是添加非线性ReLU)。其次self-attention只解决了特征之间的长远距离依赖关系,并没有对特征进行提取,也就是第二点提到的。
以上就是我的个人参考一些资料的理解,之后再有新的想法,继续补充。有人知道其他原因的话,欢迎评论区。
关于Transformer中feed forward layer理解的更多相关文章
- 【译】在Transformer中加入相对位置信息
目录 引言 动机 解决方案 概览 注释 实现 高效实现 结果 结论 参考文献 本文翻译自How Self-Attention with Relative Position Representation ...
- RNN: Feed Forward, Back Propagation Through Time and Truncated Backpropagation Through Time
原创作品,转载请注明出处哦~ 了解RNN的前向.后向传播算法的推导原理是非常重要的,这样, 1. 才会选择正确的激活函数: 2. 才会选择合适的前向传播的timesteps数和后向传播的timeste ...
- 怎样在caffe中添加layer以及caffe中triplet loss layer的实现
关于triplet loss的原理.目标函数和梯度推导在上一篇博客中已经讲过了.详细见:triplet loss原理以及梯度推导.这篇博文主要是讲caffe下实现triplet loss.编程菜鸟.假 ...
- ICCV2021 | Vision Transformer中相对位置编码的反思与改进
前言 在计算机视觉中,相对位置编码的有效性还没有得到很好的研究,甚至仍然存在争议,本文分析了相对位置编码中的几个关键因素,提出了一种新的针对2D图像的相对位置编码方法,称为图像RPE(IRPE). ...
- SQL SERVER 2005/2008 中关于架构的理解(二)
本文上接SQL SERVER 2005/2008 中关于架构的理解(一) 架构的作用与示例 用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决SQL SERVE ...
- SQL SERVER 2005/2008 中关于架构的理解(一)
SQL SERVER 2005/2008 中关于架构的理解(一) 在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询, ...
- Struts2中<jsp:forward page="xxx.action"></jsp:forward>失效
问题:在Struts2中<jsp:forward page="xxx.action"></jsp:forward>失效了,不但调转不过去还报404错误.不知 ...
- C++中 类的构造函数理解(一)
C++中 类的构造函数理解(一) 写在前面 这段时间完成三个方面的事情: 1.继续巩固基础知识(主要是C++ 方面的知识) 2.尝试实现一个iOS的app,通过完成app,学习iOS开发中要用到的知识 ...
- ECshop中的session机制理解
ECshop中的session机制理解 在网上找了发现都是来之一人之手,也没有用自己的话去解释,这里我就抛砖引玉,发表一下自己的意见,还希望能得到各界人士的指导批评! 此session机制不需 ...
- [开发技巧]·Numpy中对axis的理解与应用
[开发技巧]·Numpy中对axis的理解与应用 1.问题描述 在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数. 一般的教程都是针 ...
随机推荐
- 使用 $fetch 进行 HTTP 请求
title: 使用 $fetch 进行 HTTP 请求 date: 2024/8/2 updated: 2024/8/2 author: cmdragon excerpt: 摘要:文章介绍了Nuxt3 ...
- 【Java】Vue-Element-Admin 嵌入Druid监控面板
我看到若依做了Druid面板的嵌入,我自己的项目干脆也做一个 一.后台服务SpringBoot: Druid配置项: spring: datasource: url: jdbc:mysql://127 ...
- 【JSON】JavaScript Object Notation JS对象表示规则
什么是 JSON? JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. JSON采用完全独立于语言的文本格式 ...
- 大语言模型GPT-4的训练文本数据有多少:45GB 的训练数据集
相关: https://aws.amazon.com/cn/what-is/foundation-models/ OpenAI 就在 2023 年使用 170 万亿个参数和 45GB 的训练数据集训练 ...
- 强化学习中子进程调用atari游戏是否受父进程中设置的随机种子影响
相关: python中numpy.random.seed设置随机种子是否影响子进程 ============================================ 代码: from ale_ ...
- impdp/expdp报错: ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误
问题现象 Windows服务器导入/导出Oracle 11g数据库出现如下报错提示,输出的日志文件从报错位置往后不再输出. ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误 ...
- 【牛客刷题】HJ8 合并表记录
题目链接 这题最开始的想法就是用一个map来解决问题: func main() { num := 0 fmt.Scan(&num) a := 0 b := 0 m := make(map[in ...
- API 接口是什么?怎么对接 API?
API接口是预先定义的函数,允许应用间共享数据和功能.对接API涉及获取接口文档,通过POST请求调用如http://域名地址/queryLoginWx的URL,使用特定Headers.成功返回会包含 ...
- .NET 8 Moq mock GetRequiredKeyedService Setup报错
.NET 8 Moq mock GetRequiredKeyedService Setup报错 代码有地方用到了IServiceProvider.GetRequiredKeyedService来解析服 ...
- PyTorch从入门到放弃之张量模块
目录 张量的数据类型 torch.rand()函数 torch.randn()函数 torch.normal()函数 torch.linspace()函数 torch.manual_seed()函数 ...