作者:无名,某小公司算法专家
排版:一元,四品炼丹师
公众号:炼丹笔记

关于Attention和Transformer的灵魂拷问

背景

现在几乎很多搞深度学习的朋友都把attention和Transformer等当做是基础知识去考察,但是经过我的几轮面试发现,我发现好像90%的朋友都回答不上来或者不是很令我们满意,因为平时工作繁忙,也知道大家都不容易,为了尊重所有的候选人,我们也做了很多功课。

一般我们问的很多基础问题都是直接从网上拿过来或者是业务中碰到的,大家都知道准备面试的朋友会准备面试的问题,但其实我们面试官也需要针对企业业务和候选人的简历准备诸多问题,这可能是第一次公开我的部分面试记录,诸多的细节大家可以参考文末的参考文献。本文分享部分我的面试笔记,应该算是比较基础的。

一般在搜索推荐或者深度学习相关的面试中,我们会考察一下Transformer和Attention相关的问题,而核心主要集中在下面两张图上面:

1. 为什么Transformer 需要进行 Multi-head Attention?

Multi-Head的数学形式如下:

关于为什么使用Transformer进行Multi-head Attention的理由解释的不错的有下面两点:

  1. 将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息;
  2. 把多头注意力看作是一种ensemble,模型内部的集成,类似于CNN中我们经常会使用多个滤波器一样,所以很多时候我们会认为多头注意力可以帮助我们捕捉到更为丰富的特征/信息。

但在个人的时间中,我们发现并不是multi-head的参数设置越大越好,有的时候1就已经非常好了,去掉一些头效果依然有不错的效果(而且效果下降可能是因为参数量下降),这是因为在头足够的情况下,这些头已经能够有关注位置信息、关注语法信息、关注罕见词的能力了,再多一些头,无非是一种enhance或noise而已。

2. Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?

如果Q,K,V都是一个值,那么就变为了Self-Attention的形式

在实践中,Q和K的乘法是为了得到二者的相似度,一般我们的K和V是相同的,Q和K进行操作是为了得到一个attention score矩阵,这样可以得到Q关于V的表示,但一般我们再计算Q,K,V的时候会先都分别乘上一个不同的矩阵W,这么做可以增加模型的表达能力,实践中经常也会带来一定的帮助。

3.Transformer中的attention为什么要进行scaled?

数学上的理解:首先我们看attention score的计算,它的数学形式如下:

从上面的式子中,我们发现只要我们的数字中,出现了差异相对较大的情况,例如[1,2,10], 那么就会出现下面的情况。这种情况还会带来一个问题,梯度更新困难,具体细节可以参考引文。

0.999541338035342

4. 维度与点积大小的关系是怎么样的,为什么使用维度的根号来放缩?

可以控制方差,有效缓解梯度消失的问题。详细细节可参考参考文献[3]

5. Transformer 如何并行化的?

Transformer在Decoder侧是没有并行的,一个一个解码,当前时刻的输入依赖于上一个时刻的输出。

所以Transformer的并行主要集中在Encoder侧,不同词(Token)或者元素(推荐系统中的每一个历史点击商品)是可以并行的。

Transformer是可以并行处理在Encoder端的整个序列信息的,例如在self-attention模块,对于某个序列X1,X2,...Xn,self-attention模块可以直接计算Xi,Xj的点乘结果,而 RNN的模型就必须按照顺序从到的顺序进行计算。

6. Attention相较于CNN和RNN的优势有哪些?

  1. 参数少:模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。
  2. 速度快:Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。
  3. 效果好:在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。Attention 是挑重点,就算文本比较长,也能从中间抓住重点,不丢失重要的信息。下图红色的预期就是被挑出来的重点。

7. 为什么引入Attention机制?

此处回答摘自引文[6]

Attention又叫做注意力机制,顾名思义,就是希望可以让模型对重要信息重点关注充分学习吸收的技术,它不是一个完整的模型,可以应用于任何序列化的模型中。

传统的编码是无法体现对一个句子序列中不同语素的关注程度,在自然语言中,一个句子中的不同部分是有不同含义和重要性的,比如:I hate this movie.如果做情感分析,明显对hate这个词语应当关注更多。当然是用CNN和RNN能够编码这种信息。但是如果序列长度很长的情况下,这种方法会有一定的瓶颈。CNN的核心就是卷积核能够变相学习n-gram的信息,如果是用hierarchical的卷积核,那么越上层的卷积核越能编码原始距离较远的词组的信息。但是这种编码能力也是有上限的,对于较长的文本,模型效果不会再提升太多。RNN也是同理。基于参加达观文本分类的经历,对于这种长文本处理,使用RNN+attention的效果比使用单纯的RNN+pooling的效果要好不少。

8. Attention中权重的常见计算方式有哪些?

参考文献

  1. 为什么Transformer 需要进行 Multi-head Attention?:https://www.zhihu.com/question/341222779
  2. Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?:https://www.zhihu.com/question/319339652
  3. transformer中的attention为什么scaled?:https://www.zhihu.com/question/339723385/answer/782509914
  4. 1分钟|聊聊Transformer的并行化:https://zhuanlan.zhihu.com/p/157884112
  5. Attention Is All You Need:https://arxiv.org/pdf/1706.03762.pdf
  6. Attention机制简单总结:https://zhuanlan.zhihu.com/p/46313756

http://weixin.qq.com/r/XSjP1zrEzGezrX60931P (二维码自动识别)

炼丹面试官的面试笔记相关推荐

  1. 【华为笔试】安排面试官。有M个面试官,每个面试官熟悉的编程语言是一个列表,有N个面试者,按照面试者的机试选择的语言分配面试官进行面试(Python)

    题目 有M个面试官,每个面试官熟悉的编程语言是一个列表,比如["Java", "C++", "Golang"]表示该面试官熟悉Java.C+ ...

  2. 从Java小白到收获BAT等offer,分享我这两年的经验和感悟,BAT 面试官 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 微信 ...

  3. 阿里面试官为什么面试狂问 Redis,把我问到哑口无言……

    Redis 在国内各大公司都很热门,比如新浪.阿里.腾讯.百度.美团.小米等.Redis 也是大厂面试最爱问的,尤其是 Redis 客户端.Redis 高级功能.Redis 持久化和开发运维常用问题探 ...

  4. Java 小记 — Spring Boot 的实践与思考,互联网 面试官 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 前言 ...

  5. 面试官怎样面试出合格的技术人员

    现在都说人才难得,很多互联网公司特别是小公司都在抱怨没有好的技术人才,招聘进来的人大多技术不怎么样,优秀的技术人才根本招不到. 互联网行业的小公司基本都是社会招聘技术人员,很少有培养新人的.那么如何招 ...

  6. 飞鱼科技<校招开发面试官>面试经验分享

    面试官在知乎回答的一位同学的问题,转载过来给CSDN的同学分享

  7. 面试官通用面试问题---------------经典回答

    经典回答集合篇 面试官 : "未来5年计划是什么 ------职业规划"( 尊重制度 + 个人意愿 ) :在北京买房 nonono! 说了等于没说 面试官这么问是想检验你的职业规划 ...

  8. 阿里面试官对面试者的忠告

    文章转载自:http://www.testtao.com/thread-40822-1-1.html 钱重要还是梦想重要?知识重要还是思考重要?经验重要还是激情重要?是单纯还是圆滑世故?是大公司还是小 ...

  9. 入职四个月后,我当了一回面试官,面试了一名二本院校学生,结果。。。。

    本文首发于微信公众号:程序员乔戈里 简历 1.首先说说简历,好多人都问过我,乔哥,进入bat这样的大厂是不是学历都需要211,985 其实,不是的,这次我面试的这个同学就是二本院校出生,我身边认识的 ...

最新文章

  1. java集成钉钉sdk_JAVA maven项目使用钉钉SDK获取token、用户
  2. mysql 5.6.23 源码包安装报错_CentOS6.5_64bit下编译安装MySQL-5.6.23
  3. linux条件变量cond,Linux 条件变量 pthread_cond_signal及pthread_cond_wait
  4. python处理文件夹_python文件及文件夹操作
  5. 零基础想学Python,明白这2点,越快年薪30W
  6. Java IO(五)——字符流进阶及BufferedWriter、BufferedReader
  7. CCF202006-4 1246【矩阵快速幂】(100分题解链接)
  8. 锂电池电芯-市场现状及未来发展趋势
  9. 百度的春晚战事:如何扛住腾讯、阿里都宕机的量?
  10. 语法和语义之间的差异_语法和语义之间的区别
  11. 2022CCPC广州 CM
  12. AndroidManifest.xml乱码
  13. 【Java并发】Java并发编程-01
  14. 普罗米修斯?对!就是 Prometheus ,如何计算 P90 / P99 ? 准确评控服务耗时性能!
  15. Mac-修改MySQL密码
  16. Neo4j CQL-(18)IN操作符
  17. python 爬虫保存封面_Python爬虫Demo--获取网易云音乐专辑封面
  18. linux定时定点指令
  19. 原型设计工具 - Mockplus
  20. EV: 关闭屏幕显示的联想笔记本NumLock键打开标志

热门文章

  1. 深入出不来nodejs源码-V8引擎初探
  2. 14 调整数组顺序使奇数位于偶数前面
  3. 使用条件注释完成浏览器兼容
  4. Flask的Debug功能非常酷
  5. 编程中定义的方法报异常问题
  6. 银行登录控件仿制--防钩子,防嗅探
  7. python网页请求_python用post请求网页
  8. Mac中ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  9. python fonttool_Python wx.Font方法代码示例
  10. 台式计算机配置清单及价格,电脑配置清单及价格