您的位置 首页 百科

读研随笔#5:整理一下寒假的碎碎念

大家好,我是雷少。一转眼已经到了阳春三月,可是我的文件夹依旧空空如也。看了一下这个推送的文件夹是去年11月13号建的,到现在除了几篇零零散散的论文,居然一篇推送草稿都没有……我也是服了我自己了!不行了,返校前一定更新!
先说一下这篇推送的大致内容吧。首先我会把很久之前的一个坑填上,是关于Transformer的(挖坑指路:链接),这也是我在过去几个月里花了比较多的时间研究的一个小方向。然后是聊聊最近半年来的行业趋势观察和感悟,以及我的未来规划,大概经过了2020年的摸爬滚打后,我对这个行业有了一些新的认识吧~
关于Transformer的那点事
About Transformer
不管在学术界还是工业界,Transformer都是如雷贯耳一样的存在。时间拨回到四年前,2017年的春夏之交,当人们还在纠结到底是用基于双阶段检测的FasterRCNN还是用基于单阶段检测的YOLO能够取得更好的图像检测效果时,Transformer就在这样一个群雄混战的环境中登场了。与FasterRCNN和YOLO是采用卷积神经网络(CNN)作为主干网络不同,Transformer完全没有使用CNN的相关知识,而是脱胎于更加传统的序列模型(Sequential model),将注意力机制发扬光大,其强大的长效记忆特性帮助Transformer能很好地完成各项自然语言处理任务(NLP)。Transformer在深度学习领域封神的另一个重要推手是BERT,一个端到端的网络,只要预训练和微调就可以适应各种任务,甚至就是基于BERT诞生的GPT-3能够处理一些图像任务(CV),而这和深度学习处理问题的机制非常接近,所以自然而然地,大家都开始做Transformer的相关工作了。
可是哪怕Transformer如日中天,大家对其本身原理也未必理解地十分透彻。比如,为什么注意力机制会这么有用,为什么一个NLP的问题可以处理CV的课题,今天我想跟大家分享一下。
01
为什么注意力机制有用?
回答这个问题前,我们先了解一下什么是注意力机制。在NLP问题中,我们经常涉及对句子意思的理解,也就是所谓的语义分析。比如这句话,“ I am a student.” 将其逐单词地输入序列模型(如RNN)中,通过特定的算法,程序就能计算出单词之间的权重关系,并“理解”这个“I”就是“student”。短小的句子还好处理,万一是长句子呢?万一这个“I”和“student”隔地非常远呢?这就需要注意力机制的加入。
在注意力机制中,随着信号(上个例子中就是单词)的输入,会同步产生Query、Key和Value三个矩阵。每个信号的查询向量Query都会计算与Key的注意力分布,并叠加到Value上。这句话读起来挺拗口,其实换个说法就好理解了:对输入信息赋予不同的关注程度,只选取和任务相关的信息输入网络。
Query、Key和Value关系示意图
注意力分布可以表示某个信号的受关注程度,但一般不会直接使用,加权平均后的分布是一种比较合理的编码方式,这种方案又叫做软性注意力机制。这种方式的好处是能有效兼顾各个位置信号的注意力情况,并随时调整。
与之相对应,硬性注意力机制只会关注到某一个位置的信息,不过考虑到其一般选取概率最大或者随机采样的信息,这样的注意力分布无法反向传播,所以往往不会使用。
以上的注意力方案都是从单个Query出发计算注意力分布,如果同时计算多个Query,这种方案就是多头注意力机制,而Transformer采用的就是这种注意力分布计算方案。
值得注意的是,对于Transformer,人们使用了自注意力机制(self-attention),所谓自注意也不是什么玄乎的东西,算法将更关注单词信号自身的注意力分布,弱化了单词间的注意力分布,读到这里时我总感觉这只是一个噱头,毕竟谁不是从信号自身开始关注的呢。作者考虑了将每个单词的Q、K、V进行矩阵运算,经过softmax归一化后的Z矩阵将作为注意力分布,将词嵌入(Embedding)映射到不同的表达空间。对了,多头注意力机制其实就是一个加长版的Z矩阵,基本原理与单个的Z矩阵其实并无区别。
Transformer中self-attention的处理流程
所以说,为什么注意力机制有用?其实我们仔细看一下Transformer做的测试,就可以很容易地发现,像WMT这样的机器翻译测试,对算法的比较主要就是主谓关系是否一致,是否有一个正确的逻辑关系,句子有没有歧义(WSD),而主谓关系的保持靠的就是注意力机制长距离不会遗忘的特点,WSD靠的则是语义特征的提取。Transformer的自注意力具备更短的路径,它不拐弯抹角,可以很好地解决长距离过程中梯度消失的问题,特别是多头注意力机制也能更好地避免这个问题。
三种常见的网络节点分布,注意Transformer具有短程连接的特点
说到这里我又想起了CNN的特征提取过程。我们为什么要设计一些卷积核,对同一幅图/卷积层进行扫描?其实也是为了获取更多的数据完成更深入的分析,这个过程与Transformer中的多头机制其实很像:更多的卷积核,意味着更多的特征图案,可能带来对信号更深的理解。对K、Q、V的计算,是最基础的矩阵运算,与CNN中卷积层的处理异曲同工,甚至softmax的使用也是为了实现数据的归一化。总之,虽然Transformer中没有直接使用CNN,不过我们依旧可以看到许多来自CNN的实现思路,所谓注意力机制,某种意义上也是CNN在序列模型上的延伸。
02
Transformer如何在视觉问题中落地
因为笔者是做视觉方向的,自然更关心Transformer的视觉项目进展。2020年,FAIR团队发布了一篇名为《Detection with Transformer (DETR)》的文章,作者自己开辟新赛道,尝试了用发源于NLP的Transformer完成了对图像的分割问题,虽然整体上DETR没有刷新由FasterRCNN创下的记录(DETR只擅长大目标不擅长小目标),但其新颖的思路还是引发了Transformer在图像领域的一波应用。而随后,仅仅隔了几个月,谷歌团队提出的《Vision Transformer(ViT)》在一些图像任务上仅仅经过较小的代价就取得了行业最佳(SOTA)。
DETR和FasterRCNN性能对比,重点比较红框内的数据
DETR是怎么做到用Transformer进行图像检测的?我们先看一下以往目标检测的算法(如FasterRCNN,YOLOv3),它们有一个共性就是,用大量的目标框去预测位置。毕竟广撒网肯定不会错,但这也给算力带来了极大的负担。后续的一些优化算法也仅仅是从尺度(多尺度检测)或者定点(锚anchor)方面去优化框选的过程,并没有从本质上改变提取候选框的思路。DETR则是直接跨越了多尺度和锚的限制,在预测结果的过程中更强调二分匹配(bipartite matching)。这样也使得在DETR算法中将不存在框提取和非极大值抑制(NMS)的过程,它所有的工作,只是两两比较,而且是并行完成的,大大降低了搜索时间和内存占用。注意力机制让DETR在预测的过程中加强了对象推理的能力,使得对图像的潜在目标的检测成为可能。比如,对于一个站在海边的人,被遮挡的物体很可能是一个冲浪板。这与传统的单一目标检测算法相比简直是降维打击。
DETR的编解码模块实现方式,与Transformer很接近
为了让图像适应Transformer的序列检测的形式,作者将图像分割成多个图像小块作为Transformer的输入,延续了Transformer的编解码过程,DETR用编解码模块代替了FasterRCNN中复杂的框提取流程,这样的结构适合全局推理,也有利于并行输出最终预测。
关于Transformer的实现思路和应用,相信大家看到这里已经有了一个基本认识。总之,Transformer的核心是注意力机制,而注意力机制的核心是抗长期遗忘。当然Transformer的成功绝非仅仅是由于注意力机制,笔者相信它的出现是对深度学习思想的一个集大成,因为无论是编解码,还是二分匹配,任何一步的缺少,整个算法都将没有办法达到现在的效果。
关于Transformer,笔者还关注到了以下几篇文献,时间关系在这里仅仅提一下名字,不作过多阐述了。所有的文献我都打包放在文末的“阅读原文”链接中,大家可以自行下载。
1.Universal Transformers
2.Image Transformer
3.Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
4.Generating Long Sequences with Sparse Transformers
行业观察、我的近况
About AI, About me
最近的几个月,人工智能业内充满着惊喜与机遇:12月1日,DeepMind AI几乎完美解决了困扰人们半个多世纪的蛋白质折叠问题,有人认为这将开启生物界AI学习的新浪潮;顶会之一的CVPR接收情况也已放榜,接受率相比去年提升了4%,但拒稿数量再次创了新高……很多小白对这个全新的领域跃跃欲试,但事实上,在我看来,当前无论是人工智能还是深度学习,所有的研究都在向着多任务融合的方向发展的同时,领域也在无限向下细分着。就拿Transformer的经历来说,既然原本做NLP的算法可以解决CV的一些问题,是不是可以去解决一些强化学习、甚至是对抗学习的一些问题呢?如果Transformer在这些领域都取得了进展,是不是可以造出一个模型,直接把各种问题“大一统”了?这实在是一个细思极恐的问题。
事实上,去年夏天发布的GPT-3已经让我们看见了一些未来的端倪。这个1750亿个参数的庞然大物,据说仅仅训练一个轮次(epoch)下来就要烧掉几百万美元的经费。但是它的效果也是立竿见影的,GPT-3在诸多语言领域取得了非常优秀的结果。看到这里我不禁想,如果图像领域也可以有类似规模的模型,能够像人类一样分析图像的各种特征,该是怎样一种存在?我们现在擅长的研究都是各个子方向的数据支撑下的学习,但多任务一定对事物的内在逻辑分析提出了更高要求,而不是简单的数据堆砌出的暴力美学。对于未来一段时期深度学习的发展,这一定是一个很深刻的命题。
最近一段闲暇时光,我很难得地去沉淀自己,去看了一些平时不敢看的闲书。我终于整理出了适合自己的文献阅读流程,虽然看起来还是比较原始,但足以满足我日常“增删改查”的基本需求(数据库直呼内行),今后完善了有机会跟大家分享一下。随着科研方向的进一步明确,我也终于有机会深入调研某一领域的现状,比如今天反复念叨的Transformer。不过很遗憾的是这与我今后一小段时期的科研方向不够吻合,并不是说不好用,而是说思路过于超前,暂时还没发展到那一步,不过我相信这个时间点应该会在未来几年内出现。我念的是博士,广博地学习是这个阶段应该做的事,应该不断地跳出自己的小圈子,寻找看似不关联的事物间的关系,才能启发自己今后的工作。除了看论文,项目的调研也是必要的。我之前本科阶段的项目更多的是满足正确的运行,以及适当的调参,现在我会尝试从模块层面去完善代码,比如一个损失函数,一个预处理步骤,我可能会花一些时间自己去搭建一下。这些都是今后想法实现的必经之路。
有的时候我在想,读博苦不苦,我发现我在现阶段没资格回答这个问题,因为还没有真正遇到项目被push的经历,老师们还是在让我们先打好基础,但我觉得只要自己是热爱这份工作的,自然就说不上辛苦:我很喜欢看着损失函数一点点下降的样子;我很沉迷跟别人交流时脑子里蹦出一个idea的感觉;我很在意经过大量搜索后一篇眼前一亮的文献or文章出现时的状态。这样的惊喜不断地提高我对自己的要求,也让科研的一切看起来不再那么坎坷。我对未来从来没有抱以过高的期望,但我知道,一切都会好起来的。
那么这篇推送就写到这里啦。因为过年事情多,还是没有及时更新,再次说声抱歉!我再也不立flag了!本文提到的文献都整理放在文末链接里了,感兴趣的话可以打包下载。
本文原创不易,喜欢的读者不妨点个“在看”加关注,再来不迷路哦~
参考:
[1] nlp中的Attention注意力机制+Transformer详解https://zhuanlan.zhihu.com/p/53682800
[2]DETR的天馬行空:用Transformer走出Object Detection簡潔Pipeline https://medium.com/%E8%BB%9F%E9%AB%94%E4%B9%8B%E5%BF%83/detr%E7%9A%84%E5%A4%A9%E9%A6%AC%E8%A1%8C%E7%A9%BA-%E7%94%A8transformer%E8%B5%B0%E5%87%BAobject-detection%E6%96%B0pipeline-a039f69a6d5d
[3]使用Transformers进行端到端对象检测https://ai.facebook.com/blog/end-to-end-object-detection-with-transformers/
[4]The Transformer Family https://lilianweng.github.io/lil-log/2020/04/07/the-transformer-family.html
“阅读原文”提取码:xl0z
你“在看”我吗?


您可能感兴趣

返回顶部