论文阅读——合集(持续更新)

文献链接

图像分类(Classification)

目标检测(Object Detection)

语义分割(Semantic Segmentation)

实例分割(Instance Segmentation)

关键点检测(Keypoint Detection)

自然语言处理

Others

CVPR 2022 | 重新审视池化:你的感受野不是最理想的

作者丨简单来源丨CV技术指南

本文提出了一种简单而有效的动态优化池操作( Dynamically Optimized Pooling operation),称为DynOPool,它通过学习每一层感受野的最佳大小和形状来优化特征映射的端到端比例因子。

前言

本文提出了一种简单而有效的动态优化池操作( Dynamically Optimized Pooling operation),称为DynOPool,它通过学习每一层感受野的最佳大小和形状来优化特征映射的端到端比例因子。深度神经网络中任何类型的调整大小模块都可以用DynOPool操作以最小的成本替换。此外,DynOPool通过引入一个限制计算成本的附加损失项来控制模型的复杂性。

Pooling Revisited: Your Receptive Field is Suboptima

论文:https://arxiv.org/abs/2205.15254

公众号后台回复“DynOPool”获取论文PDF

背景

尽管深度神经网络在计算机视觉、自然语言处理、机器人、生物信息学等各种应用中取得了前所未有的成功,但最优网络结构的设计仍然是一个具有挑战性的问题。而感受野的大小和形状决定了网络如何聚集本地信息,并对模型的整体性能产生显著影响。神经网络中的许多组成部分,例如用于卷积和池化运算的内核大小和步长,都会影响感受野的配置。然而,它们仍然依赖于超参数,现有模型的感受野会导致形状和大小不理想

本文通过介绍固定大小和形状的传统感受野是次优的问题,讨论了DynOPool如何通过CIFAR-100上的VGG-16玩具实验解决这个问题。

固定大小和形状的传统感受野存在的问题:

1.不对称分布的信息

最佳感受野形状会根据数据集中固有的空间信息不对称性而改变。而大多数情况下固有的不对称性是不可测量的。此外,通常用于预处理的输入大小调整有时也会导致信息不对称。在人工设计的网络中,图像的长宽比经常被调整以满足模型的输入规格。然而,这种网络中的感受野不是用来处理操作的。

为了验证所提出的方法,作者在CIFAR-stretch-V上进行实验,如图1(a)所示,相较于人工设计模型,形状通过DynOPool动态优化的特征映射通过在水平方向上提取更具有价值的信息提高性能。

图片

图1  用来自CIFAR-100的三个不同的合成数据集进行玩具实验:(a)随机裁剪垂直拉伸的图像 (b)在4×4网格中平铺缩小的图像 (c)放大缩小的图像。

2.密集分布或稀疏分布信息

局部性是设计最优模型的组成部分。CNN通过级联的方式聚合局部信息来学习图像的复杂表示。而局部信息的重要性很大程度上取决于每个图像的属性。例如,当一个图像被模糊化时,大多数有意义的微观模式,如物体的纹理,都会被抹去。在这种情况下,最好在早期层中扩展感受野,集中于全局信息。另一方面,如果一幅图像在局部细节中包含大量类特定的信息,例如纹理,则识别局部信息将会更加重要。

为了验证假设,作者构建了CIFAR-100数据集的两个变体,CIFAR-tile和CIFAR-large,如图1(b)和(c)所示。作者模型在很大程度上优于人工设计的模型。

贡献

为了缓解人工构建的体系结构和操作的次优性,作者提出了动态优化池操作(DynOPool),这是一个可学习的调整大小模块,可以替代标准的调整大小操作。该模块为在数据集上学习的操作找到感受野的最佳比例因子,从而将网络中的中间特征图调整为适当的大小和形状。

论文的主要贡献:

1、解决了深度神经网络中现有尺度算子依赖于预定超参数的局限性。指出了在中间特征图中寻找最佳空间分辨率和感受野的重要性。

2、提出了一个可学习的调整尺寸大小的模块DynOPool,它可以找到中间特征图的最佳比例因子和感受域。DynOPool使用学习到的比例因子识别某一层的最佳分辨率和感受野,并将信息传播到后续层,从而在整个网络中实现规模优化。

3、证明了在图像分类和语义分割任务中,使用DynOPool的模型在多个数据集和网络架构上优于基线算法。它还显示了精度和计算成本之间的理想权衡。

方法

1.动态优化池(DynOPool)

图片

图2 DynOPool中的调整大小模块

模块通过优化一对输入和输出特征映射之间的比例因子r来优化查询点q的位置以及获得中间特征映射的最佳分辨率。DynOPool在不影响其他算子的情况下,自适应控制较深层接收域的大小和形状。

图片

图3 DynOPool整个的优化过程

针对比例因子r梯度不稳定,会产生梯度爆炸导致训练过程中分辨率发生显著变化的问题,使用a重新参数化r如下:

图片

2.模型复杂性约束

为了最大化模型的精度,DynOPool有时会有较大的比例因子,增加了中间特征图的分辨率。因此,为了约束计算代价,减少模型规模,引入了一个额外的损失项LGMACs,它由每次训练迭代t的分层GMACs计数的简单加权和给出,如下所示:

图片

实验

图片

表1 人工设计模型与使用DynOPool模型的精度(%)和GMACs比较

图片

图4 在VGG-16上使用人工设计的Shape Adaptor与使用DynOPool的训练模型可视化

图片

表2 在CIFAR-100数据集上DynOPool和Shape Adaptor的比较

图片

表3 在ImageNet数据集上EfficientNet-B0+DynOPool的性能

图片

表4 基于PascalVOC的HRNet-W48语义分割结果

结论

作者提出了一种简单而有效的动态优化池操作(DynOPool),它通过学习每个层中感受野的理想大小和形状来优化端到端的特征映射的比例因子,调整中间特征图的大小和形状,有效提取局部细节信息,从而优化模型的整体性能;

DynOPool还通过引入一个额外的损失项来限制计算成本,从而控制模型的复杂性。实验表明,在多个数据集上,该模型在图像分类和语义分割方面均优于基线网络。

IEEE论文投稿流程

摘自 BeyondSelf

这是一篇节省你翻论坛、查资料的文章。

我将把每一步尽量写的清楚,能够让新手按照这篇文章进行完整的投稿

即使你从未投过稿,完全不了解IEEE的投稿流程,希望按照这篇文章,能够帮助你流畅无误的投稿

这是针对本科生和低年级研究生,对投稿流程还不清楚,或者在初次投稿时可以参考的文章。

(零)预备:账号注册

这一步是为了注册ORCID和IEEE的账号,已经有账号的可以忽略不看

对于IEEE的不同杂志,是由不同的投稿账号的,这一点需要注意

1.注册ORCID,ORCID类似于你的身份证号码,即使你的名字改变,但是号码是不变的。

(1)进入orcid官网ORCID​orcid.org/

(2)选择右上方的SIGN IN/REGISTER

(3)依次填入所需的信息

2.注册IEEE账号

(1)进入IEEE查文献的主页https://ieeexplore.ieee.org/Xplore/home.jsp​ieeexplore.ieee.org/Xplore/home.jsp

(2)搜索期刊名字,会展示如下画面,这里以IEEE Transactions on communications 举例:

点击你想要投稿的期刊

(3)找到Submit Manusript,这个选项几乎所有的期刊都有。

(4)点击创建账户

(5)点击Associate your existing ORCID id

(6)在弹出页面中点击授权

(7)依次填入姓名和邮箱,只填必须项即可

之后就是输入地址和密码,按实际情况填写即可

(一)论文写作

1.下载模板

IEEE的期刊都会给一个模板,但是不同期刊会共用同一套模板。下载模板的网址为:https://journals.ieeeauthorcenter.ieee.org/create-your-ieee-journal-article/authoring-tools-and-templates/tools-for-ieee-authors/ieee-article-templates/​journals.ieeeauthorcenter.ieee.org/create-your-ieee-journal-article/authoring-tools-and-templates/tools-for-ieee-authors/ieee-article-templates/

IEEE Article Templates – IEEE Author Center JournalsIEEE Article Templates – IEEE Author Center Journals​journals.ieeeauthorcenter.ieee.org/create-your-ieee-journal-article/authoring-tools-and-templates/tools-for-ieee-authors/ieee-article-templates/

(0)点击 IEEE Template Selector 进入模板下载页面

(1)首先会让选择要写的文章类型,给了三个选项:

如果写常规的文章的话,就选第一个,包含trans和letter。会议的话,就选第三个。Magazine一般是指总结或者科普类的文章,影响因子高,但是一般你的第一篇文章,导师不会让你写这个。

(2)其次选择期刊的名字

这里直接输入即可,如“IEEE Transactions on Communications”.

(3)之后会依次选择文章的类型和格式,这里可供选择的格式有Latex和Word,首选Latex,一方面是因为格式好调,另一方面是因为敲公式快一些

(4)下载好模板之后,就可以开始写作了

2.论文写作准备

有了模板之后,还需要知道该期刊对于文章的要求,比如说页数,单栏还是双栏。这里不同期刊的要求不一样,对于新手来说,由于网页的设置,找到它并不容易。我这里来详细介绍下。

(1)进入IEEE查文献的主页https://ieeexplore.ieee.org/Xplore/home.jsp​ieeexplore.ieee.org/Xplore/home.jsp

(2)搜索期刊名字,会展示如下画面,这里以IEEE Transactions on communications 举例:

点击你想要投稿的期刊

(3)找到Submit Manusript,这个选项几乎所有的期刊都有。

(4)点进去之后,发现左下角有一个Journal Home,点击

(5)在上述网页中,找到你想要投稿的期刊(当然,你也可以跳过上述步骤,直接进入到这里~之所以要经过这些步骤,是因为接下来会用到其中一些步骤)

在出现的页面中,会有submission guidelines:

这里就说明,此期刊提交的时候要求单栏,12号字,不超过30页

这里教大家一个小技巧,如果整个网页页面太长的话,直接按Ctrl+F 搜索column关键词,因为所有的期刊都会要求单栏还是双栏,所以主要要求就在这个附近

(6)在第(4)步中,如果页面的右边已经有guidelines,那么就不需要再进入journal home了

对TPAMI杂志来说,直接点击红线所示,就可以得到文章要求,双栏,不超过12页

对于IEEE trans系列的杂志,基本上模板都是差不多的,如果在官网上找不到,也可以直接百度搜索一个模板

(二)论文投稿

在得到模板以及文章的要求之后,就可以开始论文写作了。当然,如果在上述步骤中找不到期刊的具体要求也没事,可以先写,一些格式问题可以之后再说,在文章正式发表前,编辑还会进行修改。这里假设你的论文已经写完,开始进入投稿环节

1.进入想要投稿期刊的主页,点击submit mannusript

2. 这里会要求你登入账号,一般是用导师的账号或者自己注册。投稿的账号一般就是通信作者

3.登录成功后,点击Author

4.点击Start New Submission中的Begin Submission,会出现如下信息

依次填入文章的类型、上传文件、作者等相关信息,就可以完成整篇文章的上传。这里以IEEE transactions on communications 举例,展示提交的流程

Step 1:

(1)首先选择类型,一般的话,就选常规的

(2)然后输入题目和摘要

Step 2:上传文件,一般是上传PDF

Step 3:输入关键字,下拉列表找到最贴合论文的,点击添加

Step 4:输入作者信息,与论文保持一致

Step 5 :选择审稿人,如果没有想选的话,可以跳过

Step 6 :是一些与文章相关的细节,可以按文章情况填写。

Step 7 :检查环节,确认无误后就可以正式提交了

注:邮箱是最重要的联系方式,之后会通过邮件联系你,请及时查看,而且对于修改等是有截止日期的。

(三)等待

论文会首先分配编辑,然后分配审稿人。可能会给你返回的状态有:Reject,Reject(Resubmission Allowed),Major,Minor,Accept

1.Reject并且不允许重投的话,说明就凉了

2.Reject且允许重投的话,也还凑合,重投的话可能被接受

3.Major大修,一般Major的话,如果修改没问题的话,大概率被接收

4.Minor小修,这样子的话基本也没问题

5.Accept是最好的,但不会刚投稿就这样,起码得有个minor,都得为难你一下

(四)接收后

当文章被接收后,编辑会给你发一个邮件,让你填一些内容,大概是著作权之类的。这些就按照要求来即可

之后会有一个校对环节,你需要在编辑给你发送的PDF上修改,而不能再重新提交PDF。此时的文章状态一般是Early Access,如果没有挂arxiv的话,在这个阶段,你就可以搜到自己的文章,并且也可以被引用了。再过一段时间,状态就会更新为Publish,就说明正式发表了。

IEEE 会议模板介绍

IEEE会议模板中提供了latex格式要求。

模板下载

一般在所投期刊和会议的官网上都会给出投稿模板或者给出投稿模板的链接。以IEEE的会议模板页面为例

我们可以在页面中下载自己想要的模板。一般分为LATEX版本和Microsoft Word版本,为了适应大部分读者朋友,本文我们以Microsoft Word版的A4为例进行讲解(A4和美国信纸的版本主要在于纸张大小和页边距不同,一般选用A4版)。点击链接可以下载模板打开之后如下:

可以看到,模板中已经有很多内容了。主要为对模板的介绍,示例以及一些注意事项。我一般是将自己的内容复制进去再用格式刷刷一遍来保证排版正确。下面我们开始介绍一下各部分的注意事项。

title

标题除了要使用样式表中的“title”之外,需要注意是不能使用副标题的。此外不可以使用符号,特殊字符,脚注或数学元素。

除非不可避免,不要在title中使用缩写。

如果uses可以准确替代using,则u大写,否则小写。

Author

模板可以有(但不限于)六位作者。所有的会议文章至少要有一位作者。作者名称从左到右列出,然后到下一行。作者序列将在以后的引用和索引服务中使用。

对于作者超过六名的论文:水平添加作者姓名。如果作者超过八名,请写到第三行。
对于作者少于六个的论文按以下步骤调整:

  • 选择:强调所有的作者和隶属行
  • 更改列数:从工具栏中选择列图标,然后选择正确的列数
  • 删除:删除多余作者的作者和隶属行

对于作者信息的书写,第一行是姓名,第二三行是组织名称,第四行是城市和国家,第五行是email或ORCID。请确保组织隶属关系尽可能简洁(例如,不要在同一组织的部门之间进行区分)。

Abstract

不可以使用符号,特殊字符,脚注或数学。

Keywords

无明确要求,一般写5个左右。

Heading

除非不可避免,不要在heading中使用缩写。

在混入式标题中,例如摘要需要用斜体区分标题和文本。

包含两种component heads 和text heads.

component heads包括Acknowledgments 和References ,使用Heading 5样式。

text heads按照关系、层级组织。有“Heading 1”,“Heading 2”,“Heading 3”和“Heading 4”的样式。

Text

分离文本和图形文件。只在段落末尾使用一个回车。不要在任何位置使用用任何分页。不要给文本标题加上数字,这些由模板来做。

缩写

即使在摘要中已经定义了缩写和首字母缩写,也要在正文首次使用时进行定义。不必定义诸如IEEE,SI,MKS,CGS,sc,dc和rms之类的缩写。

单位

使用SI(MKS)或CGS作为主要单位(鼓励使用SI单位)。英语单位可在括号中标注作为辅助单位。使用英文单位作为交易中的标识符除外,如“3.5英寸磁盘驱动器”。

避免同时使用SI和CGS单位,如以安培为单位的电流和以奥斯特为单位的磁场。如果必须使用混合单位,请说明方程中使用的每个数量的单位。

不要混用单位的完整拼写和缩写:“Wb/m2”或“webers per square meter”是正确的的,但“webers/m2”是错误的。当文本中出现单位时,将它们拼写出来:“. . . a few henries”,而非“. . . a few H”。

小数点之前的零不要省略:“0.25”而不是“.25”。使用“cm3”,而不是“cc”。

公式

请确定公式使用的是Times New Roman或者Symbol字体。要创建多级公式,可以将公式做成图形,然后将其插入文本中。

对公式使用连续编号。括号内的方程式编号右对齐。为了使用公式更紧凑,可以使用“/”,exp函数或者适当的指数。数量或变量使用 Italicize Roman symbols,而不是 Greek symbols。使用长破折号而不是连字符来表示减号。当公式是句子的一部分时,记得使用逗号或句号。

注意,公式是使用中心制表符来居中的。要确保在公式之前或之后立即定义公式中的符号。使用“(1)“,而不是“Eq. (1)”或“equation (1)”。除非是在句子开头时,使用“Equation (1) is”的描述。

图要放在列的顶部或者底部,避免将它们放在列的中间。大图可以跨越两列。在文本中引入后将其插入。即使在句子开头,也要使用缩写“Fig. 1”。

图的标签要使用8号Times New Roman字体,编写标签时使用单词而不是符号或缩写。如果在标签中包含单位,请在括号内标注。不要仅用单位标注轴。不要以数量和单位的比例标记轴。

图的标题放在图的下方,使用figure caption样式。

建议使用文本框插入图,此方法比直接插入图片更稳定。将文本框的颜色和相同安排选择为无填充和无线条。

表要放在列的顶部或者底部,避免将它们放在列的中间。大表可以跨越两列。在文本中引入后将其插入。

表的标题放在表的上方,使用table head样式。

如需使用脚注请用字母。

脚注

在上标中分别编号。将实际脚注放在引用该脚注的列的底部。

在这里插入图片描述

ACKNOWLEDGMENT

在美式英语中acknowledgment中g后没有e。赞助致谢请放在第一页无编号脚注中。

REFERENCES

在方括号[1]中连续编号参考文献。句子标点在方括号之后。使用“in [3]”而不是“Ref. [3]” 或者“reference [3]”,除非在句子开头可用“Reference [3] was the first …”

不要放置脚注。

除非有六位以上的作者,否则给出所有作者的名字,不要使用et al.。尚未发表的论文,即使已经提交发表,也应该引用为“unpublished”。已被接收发表的论文应引用为“in press”。出专有名词和元素符号外,仅将论文标题中的第一个单词大写。

对于在翻译期刊上发表的论文,请先给出英文引文,然后再给出外语原文。

最后要做的

模板用于撰写和格式化论文。在提交之前,请确保从文件中删除了所有模板文本,否则将会导致论文无法发表。

如何写好一篇科研论文之会议期刊了解

对于刚入手论文的小白来说,如何了解所在领域的期刊会议有哪些,截至投稿日期以及往年发布的论文等信息是十分重要的。下面 以IEEE为例子:

1、打开ieee网站: https://ieeexplore.ieee.org/

2、选择browse中的不同内容

3、筛选自己要找的会议、期刊

5、主页由相关的会议官网

可以选择某年的发表文章,or 搜索 content关键字,找到去年发布的文章列表

6、这部分是我们比较感兴趣的部分,在这里下载模板

7、在作者工具中可以找到论文模板和写作注意事项

一个问题:IEEE投稿时,如何使用“IEEE Reference Preparation Assistant”?

如何生成IEEE参考文献格式?

https://www.bilibili.com/video/BV1Pr4y1F79D/

CVPR 2022|Self-Attention和CNN的优雅集成!清华大学等提出ACmix,性能速度全面提升!

论文链接:https://arxiv.org/pdf/2111.14556.pdf

代码链接:https://github.com/Panxuran/ACmix

预训练模型:https://gitee.com/mindspore/models

Convolution和Self-Attention是两种强大的表征学习方法,它们通常被认为是两种彼此不同的方法。在本文中证明了它们之间存在着很强的潜在关系,因为这两个方法的大部分计算实际上是用相同的操作完成的。具体来说:

  • 首先,证明了具有卷积可以分解成个独立的卷积;
  • 然后,进行移位和求和操作;
  • 再然后,将Self-Attention模块中的query、key和value的投影解释为多个卷积,然后计算注意力权重和value的聚合。

因此,两个模块的第一阶段都包含了类似的操作。更重要的是,与第二阶段相比,第一阶段的计算复杂度(通道的平方)占主导地位。这个观察结果自然地导致了这两个看似不同的范式的优雅集成,即,一个混合模型,它既兼顾Self-Attention和Convolution的优点,同时与Convolution或Self-Attention对应的模型相比,具有更小的计算开销。大量的实验表明,本文方法在图像识别和下游任务上取得了持续改进的结果。

1 简介

近年来,卷积和Self-Attention在计算机视觉领域得到了长足的发展。卷积神经网络广泛应用于图像识别、语义分割和目标检测,并在各种基准上实现了最先进的性能。最近,随着Vision Transformer的出现,基于Self-Attention的模块在许多视觉任务上取得了与CNN对应模块相当甚至更好的表现。尽管这两种方法都取得了巨大的成功,但卷积和Self-Attention模块通常遵循不同的设计范式。传统卷积根据卷积的权值在局部感受野上利用一个聚合函数,这些权值在整个特征图中共享。固有的特征为图像处理带来了至关重要的归纳偏差。相比之下,Self-Attention模块采用基于输入特征上下文的加权平均操作,通过相关像素对之间的相似函数动态计算注意力权重。这种灵活性使注意力模块能够适应地关注不同的区域,并捕捉更多的特征。考虑到卷积和Self-Attention的不同和互补性质,通过集成这些模块,存在从两种范式中受益的潜在可能性。先前的工作从几个不同的角度探讨了Self-Attention和卷积的结合。早期的研究,如SENet、CBAM,表明Self-Attention可以作为卷积模块的增强。最近,Self-Attention被提出作为独立的块来替代CNN模型中的传统卷积,如SAN、BoTNet。另一种研究侧重于将Self-Attention和卷积结合在单个Block中,如 AA-ResNet、Container,而该体系结构限于为每个模块设计独立的路径。因此,现有的方法仍然将Self-Attention和卷积作为不同的部分,并没有充分利用它们之间的内在关系。在这篇论文中,作者试图揭示Self-Attention和卷积之间更为密切的关系。通过分解这两个模块的操作表明它们在很大程度上依赖于相同的 卷积操作。作者基于这一观察结果开发了一个混合模型,名为ACmix,并以最小的计算开销优雅地集成了Self-Attention和卷积。具体地说:

  • 首先,通过使用 卷积对输入特征进行映射,获得丰富的中间特征集;
  • 然后,按照不同的模式(分别以Self-Attention方式和卷积方式)重用和聚合中间特征。

通过这种方式,ACmix既享受了两个模块的优点,又有效地避免了两次昂贵的投影操作。

主要贡献:
  1. 揭示了Self-Attention和卷积之间强大的潜在关系,为理解两个模块之间的联系提供了新的视角,并为设计新的学习范式提供了灵感;
  2. 介绍了Self-Attention和卷积模块的一个优雅集成,它享受这两者的优点。经验证据表明,混合模型始终优于其纯卷积或Self-Attention对应模型。

2 相关工作

卷积神经网络使用卷积核提取局部特征,已经成为各种视觉任务中最强大和最常规的技术。同时,Self-Attention在BERT和GPT3等广泛的语言任务中也表现出普遍的表现。理论分析表明,当具有足够大的容量时,Self-Attention可以表示任意卷积层的函数类。因此,最近有一项研究探讨了将Self-Attention引入视觉任务的可能性。主流方法有两种:

  • 一种是将Self-Attention作为网络中的构建块;
  • 另一种是将Self-Attention与卷积作为互补部分。

2.1 Self-Attention only

一些研究表明,Self-Attention可以成为完全替代卷积操作。最近,Vision Transformer表明,只要有足够的数据,就可以将图像视为由256个token组成的序列,并利用Transformer模型来实现图像识别中的竞争性结果。此外,在检测、分割、点云识别等视觉任务中采用了Transformer范式。

2.2 用注意力提升卷积

先前提出的多种图像注意力机制表明,它可以克服卷积网络局部性的局限性。因此,许多研究者探索使用注意力模块或利用更多的关系信息来增强卷积网络功能的可能性。

  • Squeeze-andExcitation(SE)和Gather-Excite(GE) Reweight每个通道的特征图。
  • BAM和CBAM Reweight 通道和空间位置,以更好地细化特征映射。
  • AA-ResNet通过连接来自另一个独立的Self-Attention的注意力map,增强了某些卷积层。
  • BoTNet用Self-Attention代替卷积。

一些工作旨在通过从更大范围的像素聚集信息,设计一个更灵活的特征提取器。Hu等人提出了一种局部关系方法,根据局部像素的组成关系自适应地确定聚集权值。Wang等人提出了Non-Local网络,通过引入全局像素之间相似性的Non-Local块来增加感受野。

2.3 用卷积提升注意力

随着Vision Transformer的问世,许多基于Transformer的变种已经被提出,并在计算机视觉任务上取得了显著的改进。其中已有的研究主要集中在对Transformer 模型进行卷积运算以引入额外的归纳偏差。

  • CvT在Token过程中采用卷积,并利用卷积来降低Self-Attention的计算复杂度。
  • ViT with convolutional stem提出在早期增加卷积以实现更稳定的训练。
  • CSwin Transformer采用了基于卷积的位置编码技术,并对下游任务进行了改进。
  • Conformer结合Transformer与一个独立的CNN模型集成这两个功能。

3 旧知识回顾

3.1 卷积操作

卷积是现代ConvNets最重要的组成部分之一。首先回顾标准卷积运算,并从不同的角度重新表述它。如图2(a)所示。为简单起见,假设卷积的步长为1。

因此,标准卷积可以概括为2个stages:

图2(a)Stage I:

  • 第一阶段:将输入的feature map从某一位置线性投影,这与标准的1×1卷积相同。
  • 第二阶段:将投影的feature map根据kernel position进行移位,最终聚合到一起。可以很容易地观察到,大多数计算代价是在1×1卷积中执行的,而接下来的位移和聚合是轻量级的。

3.2 Self-Attention操作

注意力机制也被广泛应用于视觉任务中。与传统卷积相比,注意力允许模型在更大的范围内聚焦于重要区域。如图2(b)所示。

图2(b)

  • 第一阶段:使用1×1卷积将输入特征投影为query、key和value;
  • 第二阶段:包括注意力权重的计算和value矩阵的聚合,即聚集局部特征。与第一阶段相比,相应的计算代价较小,与卷积的模式相同。

3.3 Computational Cost

为了充分了解卷积模块和自注意力模块的计算瓶颈,作者分析了每个阶段的浮点运算(FLOPs)和参数数量,总结如表1所示。

结果表明:

  • 对于卷积模块:卷积阶段一的理论FLOPs和参数相对于通道大小C具有二次复杂度,而阶段二的计算代价为线性C,不需要额外的训练参数。
  • 对于自注意力模块:发现了类似卷积的趋势,所有的训练参数都保留在阶段一。对于理论的FLOPs,考虑了一个正常的情况在一个类似ResNet的模型中, 和C=64,128,256,512不同的层深度。结果表明,第一阶段消耗的操作量为 ,并且这种差异随着通道大小的增长而更加明显。

为了进一步验证分析的有效性,作者还总结了在ResNet50模型中卷积和自注意力模块的实际计算成本。实际上,将所有3×3卷积模块的成本加起来,以从模型的角度反映这种趋势。计算结果表明,99%的卷积计算和83%的自注意力在第一阶段,与理论分析相一致。

4 本文方法

4.1 将自注意力与卷积联系起来

前面介绍了对自注意力和卷积模块的分解,从多个角度揭示了更深层次的关系。首先,这两个阶段的作用非常相似。阶段一是一个特征学习模块,两种方法通过执行个卷积来将特征投射到更深的空间,从而共享相同的操作。另一方面,第二阶段对应的是特征聚合的过程。从计算的角度来看,卷积模块和自注意力模块在第一阶段进行的1 × 1卷积都需要理论浮点数和通道大小参数的二次复杂度C。相比较而言,在第二阶段,两个模块都是轻量级的或几乎不需要计算。综上所示,上述分析表明:

  1. Convolution和self-attention在通过1×1 convolutions投影输入feature map的操作上实际上是相同的,这也是两个模块的计算开销;
  2. 虽然对于捕获语义特征至关重要,但第二阶段的聚合操作是轻量级的,不需要获取额外的学习参数。

4.2 自注意力与卷积的整合

上述的观察自然带来了卷积和自注意力的完美结合。由于两个模块共享相同的1×1卷积操作,因此只能执行一次投影,并将这些中间特征映射分别用于不同的聚合操作。于是本文作者提出了如图2(c)所示的混合模块ACmix。

图2(c)具体来说,ACmix依旧包括两个阶段:

  1. 在第一阶段:通过3个1×1卷积对输入特征进行投影,然后reshape为N个Pieces。因此,获得了包含3×N特征映射的一组丰富的中间特征。
  2. 在第二阶段:它们遵循不同的范例。对于自注意力路径,将中间特征集合到N组中,每组包含3个特征,每个特征来自1×1卷积。对应的三个特征图分别作为query、key和value,遵循传统的多头自注意力模块。对于kernel size为k的卷积路径,采用轻全连接层,生成个特征映射。因此,通过对生成的特征进行移位和聚合,对输入特征进行卷积处理,并像传统的一样从局部感受野收集信息。

最后,将两个路径的输出相加,其强度由两个可学习标量控制:

4.3 改进Shift和Summation

如图4.2节和图2所示,卷积路径中的中间特征遵循传统卷积模块中的移位和求和操作。尽管它们在理论上是轻量级的,但向不同方向移动张量实际上破坏了数据局部性,很难实现向量化实现。这可能会极大地损害了推理时的实际效率。

图3作为补救措施,采用固定kernel的深度卷积来代替低效张量位移,如图3 (b)所示。以 移位特征为例,计算为:其中c表示每个输入特征的通道。另一方面,如果表示卷积核(kernel size k = 3)为: 相应的输出可以表示为:因此,对于特定的位移方向,经过精心设计的kernel weight,卷积输出相当于简单张量位移。为了进一步合并来自不同方向的特征的总和,作者将所有的输入特征和卷积核分别串联起来,将移位运算表示为单群卷积,如图3 (c.I)所示。这一修改使模块具有更高的计算效率。在此基础上还引入了一些适应性来增强模块的灵活性。所示在图3 (c.II)中,释放卷积核作为可学习权值,以移位核作为初始化。这提高了模型的容量,同时保持了原有的移位操作能力。还使用多组卷积核来匹配卷积的输出通道维数和自注意力路径,如图3 (c.III)所示。

4.4 ACmix的计算成本

为了更好的比较,在表1中总结了ACmix的FLOPs和参数。

第一阶段的计算成本和训练参数与自注意力相同,且比传统卷积(如3×3 conv)轻。在第二阶段,ACmix引入了额外的计算开销(完全连接层和组卷积),其计算复杂度是线性对通道大小C和相对较小的阶段即实际成本与理论分析ResNet50模型显示了类似的趋势。

4.5 对其他注意力模式的推广

随着自注意力机制的发展,许多研究都集中在探索注意力的变化,以进一步提升模型性能。有学者提出的Patchwise attention将来自局部区域所有特征的信息合并为注意力权重,取代原来的softmax操作。swin-transformer采用的窗口注意力方法在同一局部窗口中保持token的感受字段相同,以节省计算成本,实现快速推理速度。另一方面,ViT和DeiT考虑将长期依赖关系保持在单个层中的全局注意力。在特定的模型体系结构下,这些修改被证明是有效的。在这种情况下,值得注意的是,提出的ACmix是独立于自注意力公式的,并且可以很容易地应用到上述的变体。具体来说,注意力权重可以概括为:

其中[·]表示特征拼接,φ(·)表示具有中间非线性激活的两个线性投影层,Wk(i,j)是每个query token的专门接受字段,W代表整个特征图。然后,计算出的注意力权重可以应用于式(12),并符合一般公式。

5 实验

5.1 ImageNet

分类结果如上图表所示。对于ResNet-ACmix模型优于所有具有可比较的浮点数或参数的Baseline。例如,ResNet-ACmix 26实现了与SASA-ResNet 50相同的top-1精度,但执行次数为80%。在类似的FLOPs案例中,本文的模型比SASA的表现好0.35%-0.8%,而相对于其他Baseline的优势甚至更大。对于SANACmix、PVT-ACmix和Swin-ACmix,本文的模型实现了持续的提升。SAN- acmix 15以80%的FLOPs超过SAN 19。PVT-ACmix-T显示出与PVT-Large相当的性能,只有40%的FLOPs。Swin-ACmix-S以60% FLOPs实现了比Swin-B更高的精度。

5.2 语义分割与目标检测

作者在ADE20K数据集中评估了模型的有效性,并在Semantic-FPN 和UperNet两种分割方法上显示结果。在ImageNet-1K上预训练Backbone。事实证明ACmix在所有设置下都实现了提升。

作者也在COCO上进行了实验。

表3和表4显示了基于resnet的模型和基于Transformer的模型在不同检测head情况下的结果,包括RetinaNet、Mask R-CNN 和 Cascade Mask R-CNN。可以观察到ACmix始终优于具有相似参数或FLOPs的Baseline。这进一步验证了将ACmix转移到下游任务时的有效性。

5.3 消融实验

1、结合两个路径的输出

探索卷积和自注意力输出的不同组合对于模型性能的影响。作者采用了多种组合方法进行实验,结果总结如表6所示。通过用传统的3 × 3卷积代替窗口注意,还展示了仅采用一条路径的模型的性能,Swin-T用自注意力,而Conv-Swin-T用卷积。正如所观察到的,卷积和自注意力模块的组合始终优于使用单一路径的模型。固定所有操作符的卷积和自注意力的比例也会导致性能下降。相比之下,使用学习的参数给ACmix带来了更高的灵活性,卷积和自注意力路径的强度可以根据滤波器在整个网络中的位置自适应调整。

2、Group Convolution Kernels

作者还对组卷积核的选择进行了消融实验,在表7中实证地展示了每种适应的有效性,以及它对实际推理速度的影响。用组卷积代替张量位移,大大提高了推理速度。此外,使用可学习的卷积核和精心设计的初始化增强了模型的灵活性,并有助于最终的性能。

5.5 Bias towards Different Paths

同样值得注意的是,ACmix引入了两个可学习标量α、β来合并来自两个路径的输出。这导致了模块的一个副产品,其中α和β实际上反映了模型在不同深度上对卷积或自注意力的偏向。这里进行了平行实验,图5显示了SAN-ACmix模型和Swin-ACmix 模型中不同层学到的参数α、β。左图和中间图分别显示了自注意力和卷积路径速率的变化趋势。在不同的实验中,速率的变化相对较小,特别是当层更深时。这个观察结果表明,对于不同的设计模式,深度模型具有稳定的偏好。在右边的图中显示了一个更明显的趋势,其中两个路径之间的比率被明确地表示出来。可以看到:

  • 在Transformer模型的早期阶段,卷积可以作为很好的特征提取器。
  • 在网络的中间阶段,模型倾向于利用两种路径的混合,对卷积的偏向越来越大。
  • 在最后阶段,自注意力表现出比卷积更大的优势。这也与之前作品的设计模式一致,即在最后阶段多采用自注意力来代替原来的3×3卷积,早期的卷积被证明对vision transformer更有效。

通过分析α和β的变化发现在深度模型的不同阶段对卷积和自注意力有不同的偏向。参考

AlphaFold2论文

https://www.nature.com/articles/s41586-021-03819-2

https://github.com/deepmind/alphafold

沐神AlphaFold讲解

论文补充材料:https://www.biorxiv.org/content/10.1101/2021.10.04.463034v1

摘要

蛋白质对生命至关重要,了解它们的结构可以促进对其功能的系统理解。通过大量的实验,已经确定了大约 100,000 种独特的蛋白质结构,但这仅代表了数十亿已知蛋白质序列中的一小部分。

蛋白质结构是指蛋白质分子的空间结构。作为一类重要的生物大分子,蛋白质主要由化学元素组成。所有蛋白质都是由20种不同的L型α氨基酸连接形成的多聚体,在形成蛋白质后,这些氨基酸又被称为残基。
蛋白质一级结构:组成蛋白质多肽链的线性氨基酸序列。
蛋白质二级结构:依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠。
蛋白质三级结构:通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构。
蛋白质四级结构:用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。

仅根据其氨基酸序列预测蛋白质的三级结构,这是“蛋白质折叠问题”, 50 多年来一直是一个重要的开放性研究问题。尽管最近取得了进展,但现有方法仍远未达到原子级准确度,尤其是当没有可用的同源结构时。

同源结构,那些不同物种因来自共同祖先而具有的相似性结构。 例如现代马经较长时间的修饰成为具有一个趾,鼹鼠及其他洞穴动物成为瘤状肢体,大象的肢体成为柱状,这样功能各异的前肢有一个共同来源,他们都来自原始陆生脊椎动物五趾型的肢体。

在这里,我们提供了第一种计算方法,即使在不知道相似结构的情况下,它也可以以原子精度定期预测蛋白质结构。我们在具有挑战性的第 14 次蛋白质结构预测关键评估 (CASP14) 中验证了我们基于神经网络模型的完全重新设计的AlphaFold,在大多数情况下表现出与实验相媲美的准确性,并且大大优于其他方法。支持最新版本的 AlphaFold 是一种新颖的机器学习方法,它将关于蛋白质结构的物理和生物学知识,利用多序列比对,融入深度学习算法的设计中。

序列比对指将两个或多个序列排列在一起,标明其相似之处。序列中可以插入间隔(通常用短横线“-”表示)。对应的相同或相似的符号(在核酸中是A, T(或U), C, G,在蛋白质中是氨基酸残基的单字母表示)排列在同一列上。
tcctctgcctctgccatcat—caaccccaaagt
|||| ||| ||||| ||||| ||||||||||||
tcctgtgcatctgcaatcatgggcaaccccaaagt
多序列比对是成对比对的延伸,是为了在一次比对里面处理多于两条的的序列。多序列比对方法试图比对一个指定序列集合里面的所有序列,这可以帮助确定这些序列的共同区段。进行多序列比对有几种方法,最常用的一种是Clustal程序集,它使用渐进多序列比对算法。Clustal在cladistics中被用来建立进化树,在PSI-BLAST和Hidden Markov model (HMM)中用来建立序列档案以在序列数据库中搜索更远的同源序列。

从蛋白质序列预测蛋白质3D结构的计算方法的发展沿着两条互补的路径前进,分别关注物理相互作用或进化历史。 物理相互作用方案将我们认知的分子驱动力(molecular driving forces)整合到物理热力学或动力学模拟或统计模型逼近中。 虽然理论上非常吸引人,但由于分子模拟的计算难度、蛋白质稳定性的上下文依赖性以及难以产生足够准确的蛋白质物理学模型,这种方法已被证明对即使是中等大小的蛋白质也极具挑战性。 近年来,进化方案提供了一种替代方案,其中蛋白质结构约束来自蛋白质进化历史的生物信息学分析、与已解决结构的同源性和成对进化相关性。

这种生物信息学方法极大地受益于蛋白质数据库 (PDB) 中存储的实验蛋白质结构的稳定增长、基因组测序的爆炸式增长以及用于解释这些相关性的深度学习技术的快速发展。 尽管取得了这些进展,基于物理和进化历史的方法产生的预测远低于实验准确性。

我们(DeepMind团队)开发了第一个能够在大多数情况下预测蛋白质结构接近实验准确性的计算方法。 我们开发的神经网络 AlphaFold 已进入 CASP14 评估(2020 年 5 月至 7 月)。 CASP 评估每两年进行一次,使用未在 PDB 中存放或公开披露的最近解决的结构,因此它是对参与方法的盲测,长期以来一直作为结构预测准确性的金标准评估。

蛋白质结构预测 (CASP) 实验的批判性评估旨在建立蛋白质结构预测的当前技术水平,确定已取得的进展,并突出未来可能最有成效的工作重点。

… 省略了部分内容

在图 2a 中证明,CASP14 中展示AlphaFold的高准确率扩展到最近大量PDB结构样本,其中所有结构在我们的训练数据截止后都存储在PDB中,并作为完整链进行分析。此外,当主链预测准确时,观察到高侧链准确性(图 2b),并且表明我们预测的局部距离差异测试(pLDDT)置信度可靠地预测了 Ca 局部距离差异测试(lDDT-Cα)准确度相应的预测(图 2c)。我们还发现可以准确估计全局叠加度量模板建模分数 (TM-score)(图 2d)。总体而言,这些验证了 AlphaFold 在 CASP14 蛋白上的高精度和可靠性也可以迁移到最近 PDB 提交的未经整理的数据集中。

Fig. 1 | AlphaFold produces highly accurate structures.

PDB蛋白质结构数据库(Protein Data Bank,简称PDB)是美国Brookhaven国家实验室于1971年创建的,由结构生物信息学研究合作组织(Research Collaboratory for Structural Bioinformatics,简称RCSB)维护。和核酸序列数据库一样,可以通过网络直接向PDB数据库提交数据。

AlphaFold网络

AlphaFold 通过结合基于蛋白质结构的进化、物理和几何约束的新型神经网络架构和训练程序,大大提高了结构预测的准确性。特别是,我们展示了一种联合嵌入多序列比对 (MSA) 和成对特征的新架构、一种新的输出表示和相关损失函数,可实现准确的端到端结构预测、新的等变注意架构、使用中间损失函数来实现预测的迭代改进,屏蔽 MSA 损失与结构联合训练,使用自蒸馏从未标记的蛋白质序列中学习,以及自我估计准确率。

蒸馏,就是知识蒸馏,将教师网络(teacher network)的知识迁移到学生网络(student network)上,使得学生网络的性能表现如教师网络一般;或者大型模型迁移到小型模型中,小型模型的参数规模小,运行速度快,但性能与大型模型参不多。

AlphaFold 网络使用一级氨基酸序列和同源物的比对序列作为输入,直接预测给定蛋白质的所有重原子的 3-D 坐标(图 1e,请参阅方法了解输入的详细信息,包括数据库、MSA 构建和使用的模板)。 最重要的方法和组件的描述如下在附件中提供了完整的网络架构和训练过程在附件的方法章节中。

该网络包括两个主要阶段。 首先,网络的主干通过我们称为 Evoformer 的新型神经网络块的重复层处理输入,以生成 Nseq × Nres 数组(Nseq:序列数,Nres:残基数),表示已处理的 MSA 和 Nres × Nres 数组,表示残基对。 MSA 表示是用原始 MSA 初始化的,但请参阅 附件-方法 1.2.7 了解处理非常深的 MSA 的详细信息。 Evoformer 块包含许多新颖的基于注意力和非基于注意力的组件。 我们在“可解释性”部分展示了证据,表明在 Evoformer 块中早期出现了具体的结构假设并不断完善。 Evoformer 模块的关键创新是在 MSA 内交换信息的新机制和允许直接推理空间和进化关系的配对表示。

网络的主干之后是结构模块,该模块以蛋白质的每个残基(全局刚体框架)的旋转和平移的形式引入了明确的 3-D 结构。这些表示在简单的状态下初始化,所有旋转设置为一致,所有位置设置为原点,但快速发展和完善,具有精确原子细节的高度准确的蛋白质结构。网络这一部分的关键创新包括打破链原子结构以允许同时对结构的所有部分进行局部细化,一种新颖的等变变换器允许网络隐式推理未表示的侧链原子,以及一个损失项代替残基的方向正确性的重要权重。在结构模块和整个网络中,我们通过反复将最终损失函数应用于输出,然后将输出递归地提供给相同的模块来强化迭代细化的概念。使用整个网络的迭代细化(我们称之为“循环”) 对准确性有显着贡献,而额外的训练时间很少(有关详细信息,请参阅附件-方法-1.8)。

Evoformer模块

名为 Evoformer(图 1e 和 3a)的网络构建块的关键原理是将蛋白质结构预测视为 3-D 空间中的图推理问题,其中图的边缘由邻近的残基定义。 配对表示的元素编码有关残基之间关系的信息(图 3b)。 MSA 表示的列编码输入序列的各个残基,而行表示这些残基出现的序列。 在这个框架内,我们定义了许多更新操作,这些更新操作应用于每个块中,其中不同的更新操作被串联应用。

Fig. 3 | Architectural details.

MSA 表示通过在 MSA 序列维度上求和的逐元素外积更新配对表示。 与之前的工作不同,此操作应用于每个块中,而不是在网络中应用一次,这使得从不断发展的 MSA 表示到配对表示的连续通信成为可能。

在配对表示中,有两种不同的更新模式。两者都受到配对表示一致性必要性的启发——为了将氨基酸的配对描述表示为单个 3-D 结构,必须满足许多约束,包括距离上的三角不等式。基于这种直觉,我们根据涉及三个不同节点的边三角形来安排对表示的更新操作(图 3c)。特别是,我们向轴向注意力添加了一个额外的 logit 偏差,以包括三角形的“缺失边”,并且我们定义了一个非注意力更新操作“三角形乘法更新”,它使用两条边来更新缺失的第三条边(参见 附件-方法-1.6.5 了解详情)。三角形乘法更新最初是作为注意力更对称且更便宜的替代品而开发的,仅使用注意力或乘法更新的网络都能够产生高精度结构。然而,两个更新的组合更准确。

我们还在 MSA 表示中使用了一种轴向注意力的变体。 在 MSA 中的 per-sequence attention 期间,我们从 pair stack 中投射额外的 logits 以偏置 MSA attention。 这通过提供从配对表示返回到 MSA 表示的信息流来关闭循环,确保整个 Evoformer 模块能够完全混合对和 MSA 表示之间的信息,并为结构模块中的结构生成做好准备。

端到端结构预测

结构模块(图 3d)使用对表示和来自主干的 MSA 表示的原始序列行(“single representation”,“单一表示”)在具体的 3-D 主干结构上运行。 3-D 主干结构表示为 Nres 独立的旋转和平移,每个旋转和平移相对于全局框架(residue gas,“残余气”?,图 3e)。这些旋转和平移,代表 N-Cα-C 原子的几何形状,优先考虑蛋白质骨架的方向,以便每个残基的侧链位置在该框架内受到高度限制。相反,肽键几何形状完全不受约束,并且在应用结构模块期间观察到网络经常违反链约束,因为打破此约束允许对链的所有部分进行局部细化,而无需解决复杂的闭环问题。在微调期间通过违规损失项鼓励满足肽键几何形状。只有在 Amber力场中的梯度下降结构的预测后松弛中才能实现肽键几何形状的精确执行。根据经验,这种最终松弛不会提高模型的准确性,如通过全局距离测试 (GDT) 或 IDDT-Cα34 测量的,但确实消除了分散注意力的立体化学违规而不会损失准确性。

AMBER力场是在生物大分子的模拟计算领域有着广泛应用的一个分子力场。AMBER力场的优势在于对生物大分子的计算,其对小分子体系的计算结果常常不能令人满意。

residue gas表示分两个阶段迭代更新(图 3d)。首先,我们称为不变点注意力 ( Point Attention) 的新型几何感知注意操作用于更新 Nres 神经激活集(single representation,“单一表示”)而不改变 3-D 位置,然后对residue gas使用更新的激活。不变点注意力通过在每个残基的局部框架中产生的 3-D 点来增强每个通常的注意力查询、键和值,这样最终值对全局旋转和平移是不变的(参见方法“不变点注意力(IPA)”了解详情)。 3-D 查询和键也对注意力施加了强烈的空间/局部性偏差,这非常适合蛋白质结构的迭代细化。在每个注意力操作和逐元素转换块之后,该模块计算每个主干帧的旋转和平移的更新。这些更新在每个残差的局部框架内的应用使得整体注意力和更新块成为对residue gas的等变操作。

侧链 chi 角的预测以及结构的最终每个残基精度 (pLDDT) 是在网络末端的最终激活上使用小的每个残基网络计算的。 TM 分数 (pTM) 的估计值是从成对错误预测中获得的,该预测被计算为最终对表示的线性投影。最后的损失(我们称之为帧对齐点误差(FAPE)(图 3f))将预测的原子位置与许多不同对齐下的真实位置进行比较。对于每个对齐,通过将预测帧 (Rk,tk) 对齐到相应的真实帧来定义,我们计算所有预测原子位置 xi 与真实原子位置的距离。由此产生的 Nframes × Natoms 距离受到限制的 L1 损失的惩罚。这对原子相对于每个残基的局部框架是正确的产生了强烈的偏见,因此在其侧链相互作用方面是正确的,并为 AlphaFold 提供了手性的主要来源(增刊-方法 1.9.3 和增刊-图 9)

使用标记和未标记数据进行训练

AlphaFold 架构能够仅使用对 PDB 数据的监督学习来训练到高精度,但我们能够使用类似于noisy-student自我蒸馏的方法来提高准确性(见图 4a)。 在这个过程中,我们使用一个训练有素的网络来预测来自 Uniclust30的约 350,000 个不同序列的结构,并将预测结构的新数据集过滤为高置信度子集。 然后,我们使用 PDB 和这个新的预测结构数据集的混合作为训练数据从头开始训练相同的架构,其中各种训练数据增强(例如裁剪和 MSA 子采样)使网络难以重现先前预测的结构。 这种自蒸馏过程有效地利用了未标记的序列数据,并显着提高了所得网络的准确性。

Self-training是最简单的半监督方法之一,其主要思想是找到一种方法,用未标记的数据集来扩充已标记的数据集。算法流程如下:
(1)首先,利用已标记的数据来训练一个好的模型,然后使用这个模型对未标记的数据进行标记。
(2)然后,进行伪标签的生成,因为我们知道,已训练好的模型对未标记数据的所有预测都不可能都是好的,因此对于经典的Self-training,通常是使用分数阈值过滤部分预测,以选择出未标记数据的预测标签的一个子集。
(3)其次,将生成的伪标签与原始的标记数据相结合,并在合并后数据上进行联合训练。
(4)整个过程可以重复n次,直到达到收敛。

此外,我们随机屏蔽或突变 MSA 中的单个残基,并具有来自 Transformers (BERT) 式目标的双向编码器表示来预测 MSA 序列的屏蔽元素。 这个目标鼓励网络学习解释系统发育和协变关系,而无需将特定的相关统计量硬编码到特征中。 与最近的独立工作相比,BERT 目标是在相同的训练示例上与正常的 PDB 结构损失联合训练的,并且没有进行预训练。

解释神经网络

为了了解 AlphaFold 如何预测蛋白质结构,我们为网络中的 48 个 Evoformer 块中的每一个训练了一个单独的结构模块,同时保持主网络的所有参数保持不变(补充方法 1.14)。包括我们的回收阶段,这提供了 192 个中间结构的轨迹,每个完整的 Evoformer 块一个,其中每个中间体代表网络对该块最可能结构的信念。在前几个块之后产生的轨迹出奇地平滑,表明 AlphaFold 对结构进行了不断的增量改进,直到它不能再改进为止(见图 4b 的准确度轨迹)。这些轨迹也说明了网络深度的作用。对于非常具有挑战性的蛋白质,如 SARS-CoV-2 Orf8 (T1064),网络搜索并重新排列多层的二级结构元素,然后再确定一个好的结构。对于 LmrP (T1024) 等其他蛋白质,网络会在前几层内找到最终结构。请参阅增刊-视频 1-4 的 CASP14 目标 T1024、T1044、T1064 和 T1091 的结构轨迹显示了一系列蛋白质大小和难度的清晰迭代构建过程。在补充-方法 1.16 和增刊-图12-13,我们解释了 AlphaFold 层产生的注意力图。

Fig. 4 | Interpreting the neural network

图 4a 包含 AlphaFold 组件的详细消融,表明各种不同的机制有助于 AlphaFold 的准确性。 请参阅增刊-方法 1.13 详细描述了每个消融模型、它们的训练细节、消融结果的扩展讨论以及 MSA 深度对每次消融的影响(补充-图 10)。

MSA 深度和跨链接触

虽然 AlphaFold 在绝大多数沉积的 PDB 结构中具有很高的准确性,但我们注意到仍然存在影响准确性或限制模型适用性的因素。当平均比对深度小于约 30 个序列时,该模型使用多个序列比对,准确度大幅下降(详见图 5a)。我们观察到阈值效应,其中 MSA 深度超过约 100 个序列的改进导致小增益。我们假设需要 MSA 信息在网络的早期阶段粗略地找到正确的结构,但是将该预测细化为高精度模型并不关键取决于 MSA 信息。我们观察到的另一个实质性限制是,与异型接触的数量相比,AlphaFold 对于链内或同型接触很少的蛋白质要弱得多。这通常发生在较大复合物中的桥接结构域,其中蛋白质的形状几乎完全由与复合物中其他链的相互作用产生。相反,AlphaFold 通常能够为同聚体提供高精度预测,即使链基本上交织在一起(例如图 5b)。我们希望 AlphaFold 的想法很容易适用于预测未来系统中的完整异质复合物,并且这将消除具有大量异质接触的蛋白质链的困难。

Fig. 5 | Effect of MSA depth and cross-chain contacts.

相关工作

蛋白质结构预测有一个漫长而多样的发展,在许多优秀的评论中得到了广泛的介绍。尽管将神经网络应用于结构预测的历史悠久,但它们最近才开始改进结构预测。这些方法通过将蛋白质结构预测问题处理为将进化耦合的“图像” 转换为蛋白质距离矩阵的“图像”,然后将距离预测集成到启发式系统中,从而有效地利用了计算机视觉系统的快速改进。产生最终的 3-D 坐标预测。最近开发了一些工作来直接预测 3-D 坐标 ,但这些方法的准确性与传统的手工结构预测管道不匹配 。同时,基于注意力的语言处理网络的成功 和最近的计算机视觉激发了对解释蛋白质序列的基于注意力的方法的探索。

讨论

我们在设计 AlphaFold 时采用的方法是生物信息学和物理方法的结合:我们使用物理和几何归纳偏差来构建组件,这些组件可以从 PDB 数据中学习,并最大限度地减少手工制作的特征(例如,AlphaFold 在没有氢的情况下有效地构建氢键债券评分函数)。这使得网络从 PDB 中的有限数据中更有效地学习,但能够应对结构数据的复杂性和多样性。特别是,AlphaFold 能够处理缺失的物理环境,并在具有挑战性的情况下生成准确的模型,例如交织的同源异构体或仅在未知血红素组存在时才会折叠的蛋白质。处理未指定结构条件的能力对于从 PDB 结构中学习至关重要,因为 PDB 代表了结构已被求解的所有条件。一般来说,AlphaFold 被训练产生最有可能作为 PDB 结构的一部分出现的蛋白质结构。在特定化学计量或配体/离子可单独从序列预测的情况下,AlphaFold 可能会产生一种隐式遵守这些约束的结构。

AlphaFold 已经向实验界展示了它的实用性,包括分子置换和解释低温电子显微镜 (cryo-EM) 图 。 此外,由于 AlphaFold 直接输出蛋白质坐标,因此 AlphaFold 会根据蛋白质序列的长度以图形处理单元 (GPU) 分钟到 GPU 小时生成预测(例如,对于 384 个残基,每个模型大约 1 个 GPU 分钟,请参阅方法了解详细信息 )。 这开辟了在蛋白质组规模及其他范围内预测结构的令人兴奋的可能性。

可用基因组测序技术和数据的爆炸式增长彻底改变了生物信息学,但实验结构测定的内在挑战阻止了我们结构知识的类似扩展。 通过开发准确的蛋白质结构预测算法,再加上由实验社区组装的现有大型且精心准备的结构和序列数据库,我们希望加速结构生物信息学的进步,以跟上基因组学革命的步伐。 我们希望 AlphaFold 以及将其技术应用于其他生物物理问题的计算方法将成为现代生物学的重要工具。

在线内容

任何方法、附加参考资料、自然研究报告摘要、源数据、扩展数据、补充信息、致谢、同行评审信息; 作者贡献和竞争利益的详细信息; 数据和代码可用性声明可在 Highly accurate protein structure prediction with AlphaFold – Nature 上获得。

 Highly accurate protein structure prediction with AlphaFold – Nature

MAE:Masked Autoencoders Are Scalable Vision Learners

摘自 Jack Cui

马赛克,克星,真来了!

何恺明大神的新作 论文:https://arxiv.org/abs/2111.06377

项目地址:https://github.com/facebookresearch/mae

简单讲:将图片随机遮挡然后复原。并且遮挡的比例,非常大超过整张图的 80% ,我们直接看效果:

第一列是遮挡图,第二列是修复结果,第三列是原图。图片太多,可能看不清,我们单看一个:

看这个遮挡的程度,表针、表盘几乎都看不见了。但是 MAE 依然能够修复出来:

这个效果真的很惊艳!甚至对于遮挡 95% 的面积的图片依然 work。

看左图,你能看出来被遮挡的是蘑菇吗??MAE 却能轻松修复出来。接下来,跟大家聊聊 MAE。

Vit

讲解 MAE 之前不得不先说下 Vit。红遍大江南北的 Vision Transformer,ViT。领域内的小伙伴,或多或少都应该听说过。它将 Transformer 应用到了 CV 上面,将整个图分为 16 * 16 的小方块,每个方块做成一个词,然后放进 Transformer 进行训练。视觉transformer 和自然语言处理 中的transformer可以进行类比,可以把一个图像块理解成一个单词。

MAE

MAE 结构设计的非常简单:

将一张图随机打 Mask,未 Mask 部分输入给 Encoder 进行编码学习,这个 Encoder 就是 Vit,然后得到每个块的特征。再将未 Mask 部分以及 Mask 部分全部输入给 Decoder 进行解码学习,最终目标是修复图片。而 Decoder 就是一个轻量化的 Transformer。它的损失函数就是普通的 MSE。所以说, MAE 的 Encoder 和 Decoder 结构不同,是非对称式的。Encoder 将输入编码为 latent representation,而 Decoder 将从 latent representation 重建原始信号。

项目提供了 Colab,如果你能登陆,那么可以直接体验:https://colab.research.google.com/github/facebookresearch/mae/blob/main/demo/mae_visualize.ipynb

如果不能登陆,可以直接本地部署,作者提供了预训练模型。

MAE 可以用来生成不存在的内容,就像 GAN 一样。

首先来看看神魔是 Transformer :

Transformer 最初主要应用于一些自然语言处理场景,比如翻译、文本分类、写小说、写歌等。随着技术的发展,Transformer 开始征战视觉领域,分类、检测等任务均不在话下,逐渐走上了多模态的道路。

Transformer 是 Google 在 2017 年提出的用于机器翻译的模型。

Transformer 的内部,在本质上是一个 Encoder-Decoder 的结构,即 编码器-解码器。

Transformer 中抛弃了传统的 CNN 和 RNN,整个网络结构完全由 Attention 机制组成,并且采用了 6 层 Encoder-Decoder 结构。

显然,Transformer 主要分为两大部分,分别是编码器解码器。整个 Transformer 是由 6 个这样的结构组成,为了方便理解,我们只看其中一个Encoder-Decoder 结构。

以一个简单的例子进行说明:

Why do we work?,我们为什么工作?左侧红框是编码器,右侧红框是解码器编码器负责把自然语言序列映射成为隐藏层(上图第2步),即含有自然语言序列的数学表达。解码器把隐藏层再映射为自然语言序列,从而使我们可以解决各种问题,如情感分析、机器翻译、摘要生成、语义关系抽取等。简单说下,上图每一步都做了什么:

  • 输入自然语言序列到编码器: Why do we work?(为什么要工作);
  • 编码器输出的隐藏层,再输入到解码器;
  • 输入 <𝑠𝑡𝑎𝑟𝑡> (起始)符号到解码器;
  • 解码器得到第一个字”为”;
  • 将得到的第一个字”为”落下来再输入到解码器;
  • 解码器得到第二个字”什”;
  • 将得到的第二字再落下来,直到解码器输出 <𝑒𝑛𝑑> (终止符),即序列生成完成。

解码器和编码器的结构类似,本文以编码器部分进行讲解。即把自然语言序列映射为隐藏层的数学表达的过程,因为理解了编码器中的结构,理解解码器就非常简单了。为了方便学习,我将编码器分为 4 个部分,依次讲解。

1、位置嵌入(𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛𝑎𝑙 𝑒𝑛𝑐𝑜𝑑𝑖𝑛𝑔)

我们输入数据 X 维度为[batch size, sequence length]的数据,比如我们为什么工作。batch size 就是 batch 的大小,这里只有一句话,所以 batch size 为 1,sequence length 是句子的长度,一共 7 个字,所以输入的数据维度是 [1, 7]。我们不能直接将这句话输入到编码器中,因为 Tranformer 不认识,我们需要先进行字嵌入,即得到图中的 。简单点说,就是文字->字向量的转换,这种转换是将文字转换为计算机认识的数学表示,用到的方法就是 Word2Vec,Word2Vec 的具体细节,对于初学者暂且不用了解,这个是可以直接使用的。得到维度是 [batch size, sequence length, embedding dimension],embedding dimension 的大小由 Word2Vec 算法决定,Tranformer 采用 512 长度的字向量。所以 的维度是 [1, 7, 512]。至此,输入的我们为什么工作,可以用一个矩阵来简化表示。

我们知道,文字的先后顺序,很重要。比如吃饭没、没吃饭、没饭吃、饭吃没、饭没吃,同样三个字,顺序颠倒,所表达的含义就不同了。文字的位置信息很重要,Tranformer 没有类似 RNN 的循环结构,没有捕捉顺序序列的能力。为了保留这种位置信息交给 Tranformer 学习,我们需要用到位置嵌入。加入位置信息的方式非常多,最简单的可以是直接将绝对坐标 0,1,2 编码。Tranformer 采用的是 sin-cos 规则,使用了 sin 和 cos 函数的线性变换来提供给模型位置信息:

上式中 pos 指的是句中字的位置,取值范围是 [0, 𝑚𝑎𝑥 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒 𝑙𝑒𝑛𝑔𝑡ℎ),i 指的是字嵌入的维度, 取值范围是 [0, 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛)。 就是 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛 的大小。上面有 sin 和 cos 一组公式,也就是对应着 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛 维度的一组奇数和偶数的序号的维度,从而产生不同的周期性变化。

# 导入依赖库
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import math

def get_positional_encoding(max_seq_len, embed_dim):
    # 初始化一个positional encoding
    # embed_dim: 字嵌入的维度
    # max_seq_len: 最大的序列长度
    positional_encoding = np.array([
        [pos / np.power(10000, 2 * i / embed_dim) for i in range(embed_dim)]
        if pos != 0 else np.zeros(embed_dim) for pos in range(max_seq_len)])
    positional_encoding[1:, 0::2] = np.sin(positional_encoding[1:, 0::2])  # dim 2i 偶数
    positional_encoding[1:, 1::2] = np.cos(positional_encoding[1:, 1::2])  # dim 2i+1 奇数
    # 归一化, 用位置嵌入的每一行除以它的模长
    # denominator = np.sqrt(np.sum(position_enc**2, axis=1, keepdims=True))
    # position_enc = position_enc / (denominator + 1e-8)
    return positional_encoding
    
positional_encoding = get_positional_encoding(max_seq_len=100, embed_dim=16)
plt.figure(figsize=(10,10))
sns.heatmap(positional_encoding)
plt.title("Sinusoidal Function")
plt.xlabel("hidden dimension")
plt.ylabel("sequence length")
可以看到,位置嵌入在 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛 (也是hidden dimension )维度上随着维度序号增大,周期变化会越来越慢,而产生一种包含位置信息的纹理。

就这样,产生独一的纹理位置信息,模型从而学到位置之间的依赖关系和自然语言的时序特性。

最后,将Xembedding  和 位置嵌入 相加,送给下一层。

2、自注意力层(𝑠𝑒𝑙𝑓 𝑎𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛 𝑚𝑒𝑐ℎ𝑎𝑛𝑖𝑠𝑚)

直接看下图笔记,讲解的非常详细。

多头的意义在于,\(QK^{T}\) 得到的矩阵就叫注意力矩阵,它可以表示每个字与其他字的相似程度。因为,向量的点积值越大,说明两个向量越接近。

我们的目的是,让每个字都含有当前这个句子中的所有字的信息,用注意力层,我们做到了。

需要注意的是,在上面 𝑠𝑒𝑙𝑓 𝑎𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛 的计算过程中,我们通常使用 𝑚𝑖𝑛𝑖 𝑏𝑎𝑡𝑐ℎ,也就是一次计算多句话,上文举例只用了一个句子。

每个句子的长度是不一样的,需要按照最长的句子的长度统一处理。对于短的句子,进行 Padding 操作,一般我们用 0 来进行填充。

3、残差链接和层归一化

加入了残差设计和层归一化操作,目的是为了防止梯度消失,加快收敛。

1) 残差设计

我们在上一步得到了经过注意力矩阵加权之后的 𝑉, 也就是 𝐴𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛(𝑄, 𝐾, 𝑉),我们对它进行一下转置,使其和 𝑋𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 的维度一致, 也就是 [𝑏𝑎𝑡𝑐ℎ 𝑠𝑖𝑧𝑒, 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒 𝑙𝑒𝑛𝑔𝑡ℎ, 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛] ,然后把他们加起来做残差连接,直接进行元素相加,因为他们的维度一致:

$$
X_{\text {embedding }}+\text { Attention }(Q, K, V)
$$

在之后的运算里,每经过一个模块的运算,都要把运算之前的值和运算之后的值相加,从而得到残差连接,训练的时候可以使梯度直接走捷径反传到最初始层:

$$
X+\text { SubLayer }(X)
$$

2) 层归一化

作用是把神经网络中隐藏层归一为标准正态分布,也就是 𝑖.𝑖.𝑑 独立同分布, 以起到加快训练速度, 加速收敛的作用。

$$
\mu_{i}=\frac{1}{m} \sum_{i=1}^{m} x_{i j}
$$

上式中以矩阵的行 (𝑟𝑜𝑤) 为单位求均值:

$$
\sigma_{j}^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(x_{i j}-\mu_{j}\right)^{2}
$$

上式中以矩阵的行 (𝑟𝑜𝑤) 为单位求方差:

$$
\operatorname{LayerNorm}(x)=\alpha \odot \frac{x_{i j}-\mu_{i}}{\sqrt{\sigma_{i}^{2}+\epsilon}}+\beta
$$

然后用每一行的每一个元素减去这行的均值,再除以这行的标准差,从而得到归 一化后的数值, \(\epsilon\) 是为了防止除 0 ;之后引入两个可训练参数 \(\alpha, \beta\) 来弥补归一化的过程中损失掉的信息,注意 \(\odot\) 表示 元素相乘而不是点积,我们一般初始化 \(\alpha\) 为全 1 ,而\(\beta\) 为全 0 。

代码层面非常简单,单头 attention 操作如下:

class ScaledDotProductAttention(nn.Module):
    ''' Scaled Dot-Product Attention '''

    def __init__(self, temperature, attn_dropout=0.1):
        super().__init__()
        self.temperature = temperature
        self.dropout = nn.Dropout(attn_dropout)

    def forward(self, q, k, v, mask=None):
        # self.temperature是论文中的d_k ** 0.5,防止梯度过大
        # QxK/sqrt(dk)
        attn = torch.matmul(q / self.temperature, k.transpose(2, 3))

        if mask is not None:
            # 屏蔽不想要的输出
            attn = attn.masked_fill(mask == 0, -1e9)
        # softmax+dropout
        attn = self.dropout(F.softmax(attn, dim=-1))
        # 概率分布xV
        output = torch.matmul(attn, v)

        return output, attn

Multi-Head Attention 实现在 ScaledDotProductAttention 基础上构建:

class MultiHeadAttention(nn.Module):
    ''' Multi-Head Attention module '''

    # n_head头的个数,默认是8
    # d_model编码向量长度,例如本文说的512
    # d_k, d_v的值一般会设置为 n_head * d_k=d_model,
    # 此时concat后正好和原始输入一样,当然不相同也可以,因为后面有fc层
    # 相当于将可学习矩阵分成独立的n_head份
    def __init__(self, n_head, d_model, d_k, d_v, dropout=0.1):
        super().__init__()
        # 假设n_head=8,d_k=64
        self.n_head = n_head
        self.d_k = d_k
        self.d_v = d_v
        # d_model输入向量,n_head * d_k输出向量
        # 可学习W^Q,W^K,W^V矩阵参数初始化
        self.w_qs = nn.Linear(d_model, n_head * d_k, bias=False)
        self.w_ks = nn.Linear(d_model, n_head * d_k, bias=False)
        self.w_vs = nn.Linear(d_model, n_head * d_v, bias=False)
        # 最后的输出维度变换操作
        self.fc = nn.Linear(n_head * d_v, d_model, bias=False)
        # 单头自注意力
        self.attention = ScaledDotProductAttention(temperature=d_k ** 0.5)
        self.dropout = nn.Dropout(dropout)
        # 层归一化
        self.layer_norm = nn.LayerNorm(d_model, eps=1e-6)

    def forward(self, q, k, v, mask=None):
        # 假设qkv输入是(b,100,512),100是训练每个样本最大单词个数
        # 一般qkv相等,即自注意力
        residual = q
        # 将输入x和可学习矩阵相乘,得到(b,100,512)输出
        # 其中512的含义其实是8x64,8个head,每个head的可学习矩阵为64维度
        # q的输出是(b,100,8,64),kv也是一样
        q = self.w_qs(q).view(sz_b, len_q, n_head, d_k)
        k = self.w_ks(k).view(sz_b, len_k, n_head, d_k)
        v = self.w_vs(v).view(sz_b, len_v, n_head, d_v)

        # 变成(b,8,100,64),方便后面计算,也就是8个头单独计算
        q, k, v = q.transpose(1, 2), k.transpose(1, 2), v.transpose(1, 2)

        if mask is not None:
            mask = mask.unsqueeze(1)   # For head axis broadcasting.
        # 输出q是(b,8,100,64),维持不变,内部计算流程是:
        # q*k转置,除以d_k ** 0.5,输出维度是b,8,100,100即单词和单词直接的相似性
        # 对最后一个维度进行softmax操作得到b,8,100,100
        # 最后乘上V,得到b,8,100,64输出
        q, attn = self.attention(q, k, v, mask=mask)

        # b,100,8,64-->b,100,512
        q = q.transpose(1, 2).contiguous().view(sz_b, len_q, -1)
        q = self.dropout(self.fc(q))
        # 残差计算
        q += residual
        # 层归一化,在512维度计算均值和方差,进行层归一化
        q = self.layer_norm(q)

        return q, attn

4、前馈网络

这个层就没啥说的了,非常简单,直接看代码吧:

class PositionwiseFeedForward(nn.Module):
    ''' A two-feed-forward-layer module '''

    def __init__(self, d_in, d_hid, dropout=0.1):
        super().__init__()
        # 两个fc层,对最后的512维度进行变换
        self.w_1 = nn.Linear(d_in, d_hid) # position-wise
        self.w_2 = nn.Linear(d_hid, d_in) # position-wise
        self.layer_norm = nn.LayerNorm(d_in, eps=1e-6)
        self.dropout = nn.Dropout(dropout)

    def forward(self, x):
        residual = x

        x = self.w_2(F.relu(self.w_1(x)))
        x = self.dropout(x)
        x += residual

        x = self.layer_norm(x)

        return x