特斯拉 – occupancy network占据网络

视频: https://www.zhihu.com/zvideo/1566362268736200704?playTime=194.2

讲解: https://zhuanlan.zhihu.com/p/572057070

今年Tesla FSD部分,感知网络从去年的Bev感知(Hydranet)的基础上,更近一步,提出了occupancy network.

1. 为什么是occupancy network?

在基于 LiDAR 的系统中,可以根据检测到的反射强度来确定对象的存在,但在相机系统中,必须首先使用神经网络检测对象。如果看到不属于数据集的对象怎么办?比如侧翻的大卡车。仅此一项,就引发了很多事故。

可行驶区域的一些问题

rv、bev (Birds Eye View) 空间下可行驶区域会有一定问题:

  • 地平线的深度不一致,只有2个左右的像素决定了一个大区域的深度。
  • 无法看穿遮挡物,也无法行驶。
  • 提供的结构是 2D的,但世界是 3D 的。
  • 高度方向可能只有一个障碍物(悬垂的检测不到),目前是每类对象设置固定的矩形。
  • 存在未知物体,例如,如果看到不属于数据集的对象。

所以希望有种通用的方式来解决该问题,首先能想到的是bev下的可行驶区域,但相对来说在高度维会比较受限,索性一步到位变成3d空间预测、重建。

2. Occupancy Network

2022 CVPR中,tesla FSD新负责人 Ashok Elluswamy 推出了Occupancy Network。借鉴了机器人领域常用的思想,基于occupancy grid mapping,是一种简单形式的在线3d重建。将世界划分为一系列网格单元,然后定义哪个单元被占用,哪个单元是空闲的。通过预测3d空间中的占据概率来获得一种简单的3维空间表示。关键词是3D、使用占据概率而非检测、多视角。

Occupancy Network

这里输出的并非是对象的确切形状,而是一个近似值,可以理解为因为算力和内存有限,导致轮廓不够sharp,但也够用。另外还可以在静态和动态对象之间进行预测,以超过 100 FPS 的速度运行(或者是相机可以产生的 3 倍以上)。

2020 AI day中的Hydranet算法中有三个核心词汇:鸟瞰图(BEV)空间、固定矩形、物体检测。而occupancy network针对这三点有哪些优化,可以看:

第一是鸟瞰图。在 2020 年特斯拉 AI 日上,Andrej Karpathy 介绍了特斯拉的鸟瞰网络。该网络展示了如何将检测到的物体、可驾驶空间和其他物体放入 2D 鸟瞰视图中。occupancy则是计算占据空间的概率。

BEV vs Volume Occupancy

最主要的区别就是,前者是 2D表示,而后者是3D表示。

第二是固定矩形,在设计感知系统时,经常会将检测与固定输出尺寸联系起来,矩形无法表示一些异形的车辆或者障碍物。如果您看到一辆卡车,将在featuremap上放置一个 7×3 的矩形,如果看到一个行人,则使用一个 1×1 的矩形。问题是,这样无法预测悬垂的障碍物。如果汽车顶部有梯子,卡车有侧拖车或手臂;那么这种固定的矩形可能无法检测到目标。而使用Occupancy Network的话,看到下图中,是可以精细的预测到这些情况的。

固定矩形 vs Volume Occupancy

后者的工作方式如下:

  1. 将世界划分为微小(或超微小)的立方体或体素
  2. 预测每个体素是空闲还是被占用
体素空间中的被占用体素

这里意味着两种方法的思维方式完全不一样,前者是为一个对象分配一个固定大小的矩形,而后者是简单地说“这个小立方体中有一个对象吗? ”。

第三点,物体检测。

目前有很多新提出来的物体检测算法,但大多面向的是固定的数据集,只检测属于数据集的部分或全部对象,一旦有没有标注的物体出现,比如侧翻的白色大卡车,垃圾桶出现的路中,这是没法检测到的。而当思考和训练一个模型来预测“这个空间是空闲的还是被占用的,不管对象的类别是什么?”,正可以避免这种问题。

对象检测 vs Occupancy Network

基于视觉的系统有 5 个主要缺陷:地平线深度不一致物体形状固定静态和移动物体遮挡本体裂缝。特斯拉旨在创建一种算法来解决这些问题。

新的占用网络通过实施 3 个核心思想解决了这些问题:体积鸟瞰图、占用检测体素分类。这些网络可以以超过 100 FPS 的速度运行,可以理解移动对象和静态对象,并且具有超强的内存效率。

模型结构:

cvpr 时的网络结构

  • 输入为不同视角的图像(总共 8 个:正面、侧面、背面等……)。
  • 图像由RegnetBiFPN等网络提取特征
  • 接着transformer模块,使用注意力模块,采用位置图像编码加上QKV获得特征,以此来产生占用Occupancy。
  • 这会产生一个Occupancy feature,然后将其与之前的体积(t-1、t-2 等)融合,以获得4D Occupancy feature
  • 最后,我们使用反卷积来检索原始大小并获得两个输出:Occupancy volume和Occupancy flow。

AI day时的网络结构

相比cvpr时,AI day上的分享更加详细,主要有三点更新:

  1. 最左侧是基于photon count的传感器图像作为模型输入(虽然鼓吹的很高大上,其实就是ISP处理前的raw数据),这里的好处是可以在低光照、可见度低等情况下,感知的动态范围更好。
  2. temporal alignment利用里程计信息,对前面时刻的occupancy features进行时序上的加权融合,不同的时间的特征有着不同的权重,然后时序信息似乎实在Channel维度进行拼接的?组合后的特征进入deconv模块提高分辨率。这样看来时序融合上,更倾向于使用类似transformer或者时间维度作为一个channel的时序cnn进行并行的处理,而非spatial RNN方案。
  3. 相比CVPR的方案,除了输出3D occupancy特征和occupancy flow(速度,加速度)以外,还增加了基于x,y,z坐标的query思路(借鉴了Nerf),可以给occupancy network提供基于query的亚像素、变分辨率的几何和语义输出。

因为nerf只能离线重建,输出的occupancy 猜想可以通过提前训好的的nerf生成GT来监督?

光流估计和Occupancy flow

特斯拉在这里实际上做的是预测光流。在计算机视觉中,光流是像素从一帧到另一帧的移动量。输出通常是flow map 。

在这种情况下,可以有每一个体素的流动,因此每辆车的运动都可以知道;这对于遮挡非常有帮助,但对于预测、规划等其他问题也很有帮助

Occupancy Flow(来源

Occupancy flow实际上显示了每个对象的方向:红色:向前 — 蓝色:向后 — 灰色:静止等……(实际上有一个色轮代表每个可能的方向)

Nerf

特斯拉的 NeRF(来源

神经辐射场,或 Nerf,最近席卷了3D 重建;特斯拉也是其忠实粉丝。它最初的想法是从多视图图像中重建场景(详见3D 重建课程)。

这与occupancy network 非常相似,但这里的不同之处在于也是从多个位置执行此操作的。在建筑物周围行驶,并重建建筑物。这可以使用一辆汽车或特斯拉车队在城镇周围行驶来完成。

这些 NeRF 是如何使用的?

由于Occupancy network产生 3D volume,可以将这些 3D volume与 3D-reconstruction volume(Nerf离线训练得到)进行比较,从而比较预测的 3D 场景是否与“地图”匹配(NeRF 产生 3D重建)。

在这些重建过程中也可能出现问题是图像模糊、雨、雾等……为了解决这个问题,他们使用车队平均(每次车辆看到场景,它都会更新全局 3D 重建场景)和描述符而不是纯像素。

使用Nerf的descriptor

这就是获得最终输出的方式!特斯拉还宣布了一种名为隐式网络的新型网络,其主要思想是相似的:通过判断视图是否被占用来避免冲突

总结来说:

  1. 当前仅基于视觉的系统的算法存在问题:它们不连续,在遮挡方面做得不好,无法判断物体是移动还是静止,并且它们依赖于物体检测。 因此,特斯拉决定发明“Occupancy network”,它可以判断 3D 空间中的一个单元格是否被占用。
  2. 这些网络改进了 3 个主要方面:鸟瞰图、物体类别和固定大小的矩形。
  3. occupancy network分 4 个步骤工作:特征提取、注意和occupancy检测、多帧对齐和反卷积,从而预测光流估计和占用估计。
  4. 生成 3D 体积后,使用 NeRF(神经辐射场)将输出与经过训练的 3D 重建场景进行比较。
  5. 车队平均采集数据用于解决遮挡、模糊、天气等场景

reference:

Marching Cubes 算法

 Marching Cubes算法是三维离散数据场中提取等值面的经典算法,其主要应用于医学领域的可视化场景,例如CT扫描和MRI扫描的3D重建等。

Marching Cube 首先将空间分成众多的六面体网格,类似将空间分成很多的小块

我们有很多的已知采样点,并且知道这些点在空间中的空间场值,现在我们将空间分为很多个小格子,每个小格子都有8个顶点,我们通过计算8个顶点周围(范围与六面体的大小相关)的采样点,近似计算出8个顶点的空间场值(加权评价等方法)。 

以0等值面为例:如何找到0等值面经过的六面体网格? 

算法主要的思想是在三维离散数据场中通过线性插值来逼近等值面,具体如下:三维离散数据场中每个栅格单元作为一个体素,体素的每个顶点都存在对应的标量值。如果体素顶点上的值大于或等于等值面值,则定义该顶点位于等值面之外,标记为“0”;而如果体素顶点上的值小于等值面值,则定义该顶点位于等值面之内,标记为“1”。由于每个体素单元有8个顶点,那么共存在2^8 = 256种情形,下图是Marching Cubes算法的15种基本情形,其他241种情形可以通过这15种基本情形的旋转、映射等方式实现。

 每个体素单元上顶点和边的索引规则如下图左所示,假如体素下方的顶点3的值小于等值面值,其他顶点上的值都大于等值面值(如下图右所示),那么我们可以生成一个与体素边2,3,11相交的三角面片,而三角面片顶点的具体位置则需要根据等值面值和边顶点3-2,3-0,3-7的值线性插值计算得到。

对于与等值面存在交点的体素边,交点坐标用P表示,P1、P2代表边上两个端点的坐标,V1、V2代表这两个端点上的值,V代表等值面值,那么交点坐标的计算公式如下:

P = P1 + (V – V1)·(P2 – P1)/(V2 – V1)

  算法第一步:通过edgeTable表判断等值面和体素单元哪一条边相交

  体素单元顶点状态的索引号定义规则如下:

cubeindex = 0;
if (V[0] < isolevel) cubeindex |= 1;
if (V[1] < isolevel) cubeindex |= 2;
if (V[2] < isolevel) cubeindex |= 4;
if (V[3] < isolevel) cubeindex |= 8;
if (V[4] < isolevel) cubeindex |= 16;
if (V[5] < isolevel) cubeindex |= 32;
if (V[6] < isolevel) cubeindex |= 64;
if (V[7] < isolevel) cubeindex |= 128;

以上图所示为例,仅顶点3标记为“1”,其他顶点标记为“0”,那么体素单元的顶点状态为0000 1000或者8,通过查找表得到edgeTable[8] = 1000 0000 1100,意味着体素单元的边2,3,11和等值面相交,然后通过线性插值计算各个交点的位置。

算法第二步:通过triTable表生成对应三角面片的组成情况

  还是以上图所示为例,通过查找表得到triTable[8] = {3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},意味着该种顶点状态可以生成三角面片(3, 11, 2),代表三角面片的3个顶点为边3,11,2和等值面相交的交点。

  经过上述步骤之后,我们可以得到等值面的点面信息。为了进一步完善显示效果,需要调整顶点法向。假设顶点(i, j, k)上的值为f(i, j, k),采用中心差分方法可以计算该点处的梯度矢量:

对G进行归一化,得到顶点(i, j, k)上的单位法向量,然后对体素单元上8个顶点的法向量进行线性插值就可得到三角面片各个顶点的显示法向量。

参考:http://graphics.stanford.edu/~mdfisher/MarchingCubes.html

Marching Cube的问题

当然最初的Marching Cube 有很多问题,例如拓扑连接二义性,一种状态可以有多种连接关系

而且Marching Cube的效率不是特别高,需要借助分层结构和并行计算。
而且Marching Cube生成面片的大小与六面体的大小相关,过大则会导致模型模糊,细节消失,过小会导致面片的数目过多。

但是从1987年提出Marching Cube至今,已经对其有了很多的改进和优化算法,在处理时间,减少内存开销,分辨率方面都有很大的优化。

图像生成模型 Stable Diffusion|CVPR ’22 Oral

项目地址:https://ommer-lab.com/research/latent-diffusion-models/

试玩: https://huggingface.co/spaces/stabilityai/stable-diffusion

High-Resolution Image Synthesis with Latent Diffusion Models

Stable Diffusion 是一个“文本到图像”的人工智能模型。近日,Stable AI 公司向公众开放了它的预训练模型权重。当输入一个文字描述时,Stable Diffusion 可以生成 512×512 像素的图像,这些图像如相片般真实,反映了文字描述的场景。

这个项目先是经历了早期的代码发布,而后又向研究界有限制地发布了模型权重,现在模型权重已经向公众开放。对于最新版本,任何人都可以在为普通消费者设计的硬件上下载和使用 Stable Diffusion。该模型不仅支持文本到图像的生成,而且还支持图像到图像的风格转换和放大。与之一同发布的还有 DreamStudio 测试版,这是一个用于该模型的 API 和 Web 用户界面。

Stable AI 公司表示:

“Stable Diffusion 是一个文本到图像的模型,它将使数十亿人在几秒钟内创造出令人惊叹的艺术。它在速度和质量上的突破意味着它可以在消费者级的 GPU 上运行。这将允许研究人员和公众在一系列条件下运行它,并使图像生成普及化。我们期待着有围绕这个模型和其他模型的开放生态系统出现,以真正探索潜伏空间的边界。”

Latent Diffusion 模型(LDM)是 Stable Diffusion 模型建立的一种图像生成方法。LDM 通过在潜伏表示空间(latent representation space)中迭代“去噪”输入来创建图像,然后将表示解码为完整的图像,这与其他著名的图像合成技术,如生成对抗网络(GAN)和 DALL-E 采用的自动回归方法不同。最近的 IEEE/CVF 计算机视觉和模式识别会议(CVPR)上有一篇关于 LDM 的论文,它是由慕尼黑路德维希-马克西米利安大学的机器视觉和学习研究小组创建的。今年早些时候,InfoQ 也报道的另一个基于扩散的图片生成 AI 是谷歌的 Imagen 模型。

Stable Diffusion 可以支持众多的操作。与 DALL-E 类似,它可以生成一个高质量的图像,并使其完全符合所需图像的文字描述。我们也可以使用一个直观的草图和所需图像的文字描述,从而创建一个看起来很真实的图像。类似的“图像到图像”的能力可以在 Meta AI 的 Make-A-Scene 模型中找到,该模型刚发布不久。

一些人公开分享了 Stable Diffusion 创建的照片的例子,Stable AI 的首席开发人员 Katherine Crowson 也在 Twitter 上分享了许多照片。毫无疑问,基于人工智能的图片合成技术将对艺术家和艺术界产生影响,这令一些观察家感到担忧。值得注意的是,在 Stable Diffusion 发布的同一周,一幅由人工智能生成的作品在科罗拉多州博览会的艺术竞赛中获得了最高荣誉。

Stable Diffusion 的源代码可以在 GitHub 上查阅。

试玩地址: https://huggingface.co/spaces/stabilityai/stable-diffusion

Contribution

  • Diffusion model是一种likelihood-based的模型,相比GAN可以取得更好的生成效果。然而该模型是一种自回归模型,需要反复迭代计算,因而训练和推理都十分昂贵。本文提出一种diffusion的过程改为在latent space上做的方法,从而大大减少计算复杂度,同时也能达到十分不错的生成效果。( “democratizing” research on DMs),在unconditional image synthesis, inpainting, super-resolution都能表现不错~
  • 相比于其它进行压缩的方法,本文的方法可以生成更细致的图像,并且在高分辨率(风景图之类的,最高达10242px都无压力)的生成也表现得很好。
  • 提出了cross-attention的方法来实现多模态训练,使得class-condition, text-to-image, layout-to-image也可以实现。
方法We condition LDMs either via concatenation or by a
more general cross-attention mechanism.

整体框架如图,先训练好一个AutoEncoder(包括一个encoder和decoder)。因此,我们可以利用encoder压缩后的数据做diffusion操作,再用decoder恢复即可。

  • Autoencoder训练: L1/L2loss来作为重建损失,用GAN来做对抗攻击?,用KL loss来把latent space拉到正态分布,防止搜索空间过大
  • 用了encoder降维后,就可以使用latent space diffusion了~ 具体扩散过程其实没有变,只不过现在扩散和重建的目标为latent space的向量了。Diffusion model具体实现为 time-conditional UNet。

为了引入conditioning的信息,提出了domain specific encoder τθ(y)不同模态的(比如text, class, image…)转成中间表达(intermediate representation),再利用cross-attention来嵌入到UNet中去。

Experiments

展示一些可用的任务:

  • layout-to-image 输入bounding box输出图像。
  • text-to-image输入文本,输出图像。
  • 输入bounding box输出图像。
  • 输入文本,输出图像
    • 输入landscape输出高分辨率的风景图。
    • 超分辨率
    • inpainting (图像修复/编辑)

    效率对比。大概时间上缩短为1/3~ 并且,FID的值更小。

    扩散模型是风口!2022 剑桥 AI 全景报告出炉!

    作者 | 黄楠、施方圆 

    转自 | AI科技评论

    近日,剑桥大学的2022年 AI 全景报告(《State of AI Report 》)出炉!

    报告汇总和聚焦了过去一年里 AI 行业中炙手可热的事件,援引数据来自知名科技公司和研究小组,由投资者 Nathan Benaich 和 Ian Hogarth 编写,从研究、产业、政策、安全、预测五个维度出发,对最新的 AI 发展现状和未来预期进行深度分析。

    以下是报告重点介绍:

    1 扩散模型火热、模型开源提速

    从研究领域来看,今年 AI 发展呈现五大趋势:基于文本到图像的生成能力,扩散模型(Diffusion Models)席卷计算机视觉世界

    扩散模型是深度生成模型中新的 SOTA,在一些基准测试中,其图像生成能力超越了 GAN,是当前文本生成图像最火热的模型,并逐渐扩大到文本生成、文本转音频、文本转视频以及分子设计等领域。

    今年4月,OpenAI 发布 DALL-E 2,只需要给到寥寥几句文本指示就可以生成全新的图像,刚亮相就在图像生成和图像处理领域引发极大的关注度。不久,谷歌也紧接着推出的 Imagen,基于大型 Transformer 语言模型在理解文本方面的能力和扩散模型在高保真图像生成方面的能力,将文本生成图像的逼真度和语言理解提到了新高度。

    而真正将生成式 AI 推向创作高潮的,是 Stability.Ai 在8月份公开发布的 Stable Diffusion 模型,只需输入几行文字描述,几秒钟后,AI 便能生成一幅幻彩斑斓的画作。

    可以看到,目前 Stability.ai 和 Midjourney 等公司所创建的文本转图像模型,已经可以跟发展成熟的 AI 实验室的产品相媲美,其中,Midjourney 采用了订阅制的收费模式已经盈利,Stability 的模型则是开源的。

    此外,基于扩散的文本到视频生成的研究也从今年4月左右就展开了。

    9月下旬,Meta 发布“Make-a-Video”,宣布了从文本到视频生成的 DELL-E 时刻早于预期,文本转视频的扩散模型首次在业界引起轰动。不到一周后,谷歌也发布了两个模型:基于扩散模型的 Imagen 和非扩散模型的 Phenaki,后者能够通过附加提示动态来调整视频生成。AI for science,聚焦塑料回收、核聚变反应堆控制和天然产物发现等更多科学问题

    在 AI for science 研究中,今年有不少突出的工作。

    其中,DeepMind 与悉尼大学、牛津大学合作,将 AI 模型应用到数学领域的拓扑和表示论猜想,提出了一种新的算法,通过研究纽结的结构,发现数学在不同领域中的隐藏联系,该研究发表在《自然》杂志上。

    一年前,DeepMind 发布 AlphaFold2,以原子水平的准确度预测了三分之二的蛋白质结构,并与 EMBL-EBI 共同发布蛋白质结构数据库 AlphaFold DB。

    到了今年7月28日,DeepMind 宣布 AlphaFold DB 已从 100 万个结构扩展到超过 2 亿个结构,扩大超过 200 倍,可用于植物、细菌、动物和其他生物的蛋白质预测结构,极大地提升了人们对于生物学的理解。

    在塑料回收方面,来自 UT  Austin 的研究人员设计了一种能够降解 PET 的酶(PET 是一种占全球固体废物12%的塑料),称为 PET 水解酶(  FAST‑PETase),能够在一周内几乎完全降解51种不同产品,并且还可以从回收的单体中重新合成 PET FAST‑PETase。

    标度法则重新聚焦数据:模型标度并不是全部都需要的,朝单一模型发展,其核心在于数据

    对于通用多任务、多模式模型的尝试,可以追溯到谷歌此前提到的“一个模型来学习”。

    此前有研究发现,LLMs 可实现让机器人通过自然语言对每个步骤的解释来完成各种任务,但由于对机器人所处环境和现实能力缺乏认知,LLMs 的解释时常会出现无法被理解的情况。随着 PaLM-SayCan 的出现,这一问题也已经得到解决。

    DeepMind 推出的 Gato 将这项工作带到了另一个层次,通过一个1.2B参数转换器,可以实现在机器人、模拟环境、视觉和语言中执行数百项任务。

    此外,Transformer 作为一种解码器架构,当前其影响力已经超出 NLP,在计算机视觉上也发挥着重要作用,正在成为真正的跨模态产品。

    社区驱动的大型模型开源速度加快,集合模式可以参与同大型实验室的竞争

    OpenAI、DeepMind 旗下有多个模型已被开源社区实现、克隆和改进,进度远超预期。

    图注:社区驱动的 GPT 等开源

    尽管 AI 研究将越来越集中于少数大型实验室,但随着计算成本和访问权限的降低,因此也出现了最先进的研究在更小、以前不为人知的实验室得到提出等情况,同时,这些新的独立研究实验室也在迅速开源。受神经科学的启发,AI 研究方法向认知科学的方向发展

    数据显示,自2010年以来,中国机构撰写的 AI 论文数量是美国的4.5倍,远远超过美国、印度、英国和德国的总和。

    同时,中国的论文更关注与监控相关的任务,包括对象检测、跟踪、场景理解、动作和说话者识别等。


    2 AI 初创公司投资放缓新贵 AI 半导体初创公司与英伟达相比是否有作为?

    报告显示, 英伟达的芯片在 AI 研究论文中最受欢迎, GPU 的使用率是 ASIC 的131倍,是 Graphcore 、 Habana 、 Cerebras 、 SambaNova 和 Cambricon 的芯片总和的90倍,是谷歌 TPU 的78倍,是 FPGA 的 23 倍。

    招聘冻结和 AI 实验室解散,促使许多初创公司从 DeepMind  OpenAI 等巨头中诞生

    DeepMind 和 OpenAI 的校友各自开花,组建了许多新的初创公司,分别研究不同领域的 AI 技术,如:AGI 、人工智能安全、生物技术、金融科技、能源、开发工具和机器人技术。

    最新 AI 技术被大型科技公司和初创公司转化为商业开发人员工具

    OpenAI 的 Codex 迅速从 2021 年 7 月的研究演变为 2022 年 6 月的开放商业化,微软的 GitHub Copilot 现在以每月 10 美元到每年 100 美元。亚马逊在 2022 年 6 月发布了 CodeWhisperer 预览版。谷歌透露,其内部正在使用以 ML 驱动的代码完成工具,也许几年内会出现在浏览器 IDE 中。同时,拥有 100 多万用户的 Tabnine 筹集了 1500 万美元,承诺有望实现准确的多行代码填写。人工智能加快药物研发,促进医疗产业发展

    人工智能药物发现公司在临床试验中拥有 18 项资产,高于 2020 年的 0 项。

    另外,由于放射科医生的短缺和成影数量的增加,通过评估X光片针对疾病变得更有挑战性。因此立陶宛初创公司 Oxipit 创建了一个名叫 ChestLink 的计算机视觉系统,该系统可以自动报告没有异常的胸部 X 光片,就无需放射科医生来检查,这是业界首个基于计算机视觉的诊断自主认证。大学是孕育人工智能公司的温床

    目前,大学是人工智能公司重要的资源来源,包括 Databricks 、 Snorkel 、 SambaNova 、 Exscientia 等。在英国有 4.3% 的人工智能公司是大学拆分出来的,是所有英国公司的 0.03% ,人工智能是能够拆分的代表性行业之一,通常这需要高昂的代价,技术转让办公室(TTOs)通常就拆分交易条款进行谈判。

    随着市场的扩大,对AI初创公司的投资速度在放缓

    与去年相比, 2022 年预计使用AI的公司融资额将减少36%,但仍有望超过 2020 年的水平,这与全球所有 Start-up 阶段和 Scale-up 阶段的公司投资相当。

    VC 投资的下降在 1 亿以上的轮次中最明显,而投资规模较小的轮次预计到 2022 年底全球将达到 309 亿美元,与 2021 年的水平相当。

    综合公共企业价值(EV)已经下降到 2020 年的水平。同时,私营企业的估值不断增长,综合企业价值已经达到 2.2 万亿美元,比去年增长 16% 。

    目前美国的AI独角兽公司数量领先,其次是中国和英国。美国已经创造了 292 家 AI 独角兽公司,企业价值合计 4.6 万亿美元,中国创造了 69 家 AI 独角兽公司,企业价值合计 1.4 万亿美元,英国创造了 24 家 AI 独角兽公司,企业价值合计 2070 亿美元。

    尽管对于美国 AI 初创公司的投资大幅度下降,但它们仍然占全球人工智能总投资的一半以上。

    企业软件是全球投资最多的类别,而机器人技术占据了 AI 风险投资的最大份额。

    尽管 IPO 和 SPAC IPO 的数量急剧下降,但 AI 公司的收购数量可能会超出 2021 年的水平。

    3 对未来一年的预测

    在2021年的报告中,曾对2022年 AI 的发展情况做出了8项预测,其中已实现 Transformers 在游戏中超过人类表现,这主要得益于 DeepMind 的 Gato 模型可实现对未来状态和动作的预测,日内瓦大学提出的 IRIS 模型则解决了 Atari 环境下的任务。

    未实现的预测中提到,Graphcore、Cerebras、SambaNova、Groq、Mythic 中至少有一家被大型科技公司或者半导体公司收购,在今年也没有实现;ASML 的市值当前仅为1650亿美元,距预期中的5000亿美元还存在很大差距;JAX 框架的使用仍然占 Papers With Code 每月回购的不到1%,未达到预测中的5%

    还有一些往年的预测在今年实现了,其中,美国 CHIPS 法案在今年禁止接收方在中国扩大业务,原预测中英伟达最终未能完成对 Arm 的收购、该交易也于今年正式取消。在 AI 初创公司方面,Helsing(德国)在今年筹集了1亿美元的A轮融资。

    而对于一直备受关注的 AI 治理问题,2019年预测至少有一家主流 AI 公司会对治理及管理模式作出实质性的调整,Anthropic 也在今年成立、作为公益性公司活动。

    报告中也提出了对未来12个月的9项预测,分别是:

    • DeepMind 训练了一个10B参数的多模态 RL 模型,比 Gato 大一个数量级
    • 英伟达宣布与一家专注于 AGI 的组织建立战略关系
    • SOTA LM 在比 Chinchilla 多10倍的数据点上进行训练,证明数据集缩放与参数缩放
    • 生成音频工具的出现,到2023年9月吸引超过10万名开发人员
    • GAFAM 向 AGI 或开源 AI 公司(例如 OpenAI)投资超过10亿美元
    • 面对英伟达的主导地位,半导体初创公司面临现实困境,一家备受瞩目的初创公司被关闭,以低于其最近估值的50%的价格下跌或收购
    • 一项像  Biosafety 实验室这样监管 AGI 实验室的提案得到英、美或欧盟政治家的支持
    • 超过1亿美元将在明年投资于专门的 AI 对齐组织
    • 一个用户生成内容方(如 Reddit)与一家生产 AI 模型的初创公司(如 OpenAI)协商商业解决方案,以对其用户生成内容的语料库进行培训

    ICCV2021|极大似然法做点云降噪

    论文标题:Score-Based Point Cloud Denoising

    论文链接:https://arxiv.org/abs/2107.10981

    作者单位:北京大学

    本文提出了一种新的点云去噪范式,利用噪声点云的分布模型并利用分布的分数,表现SOTA!性能优于DMR、GPDNet等网络。

    从扫描设备获取的点云通常会受到噪声的干扰,这会影响表面重建和分析等下游任务。噪声点云的分布可以看作是一组无噪声样本 p(x) 与某个噪声模型 n 卷积的分布,导致 (p∗n)(x) 的模式是底层清洁表面。为了对嘈杂的点云去噪,我们建议通过梯度上升从 p∗n 增加每个点的对数似然——迭代更新每个点的位置。由于 p∗n 在测试时是未知的,我们只需要分数(即对数概率函数的梯度)来执行梯度上升,我们提出了一种神经网络架构来估计 p∗n 的分数只给定嘈杂的点云作为输入。我们推导出用于训练网络的目标函数,并利用估计的分数开发去噪算法。实验表明,所提出的模型在各种噪声模型下优于最先进的方法,并显示出应用于其他任务(如点云上采样)的潜力。

    VirtualCube: An Immersive 3D Video Communication System

    3D视频会议系统VirtualCube:相隔万里也如近在咫尺般身临其境

    https://www.microsoft.com/en-us/research/project/virtualcube/

    微软亚洲研究院的研究项目 3D 视频会议系统 VirtualCube,可以让在线会议的与会者建立自然的眼神交互,沉浸式的体验就像在同一个房间内面对面交流一样。该技术的相关论文被全球虚拟现实学术会议 IEEE Virtual Reality 2022 接收并获得了大会的最佳论文奖(Best Paper Award – Journal Papers Track)。

    在日常交谈中,相互注视和摆动头部等动作都是自然对话的组成部分,尤其是当我们在面对面交流中变换话题、控制发言或转换交流对象时,都会伴随眼神和肢体动作的交流。然而,当前的视频会议技术却存在着一定的缺陷——由于摄像头和屏幕不在同一高度,如果看向屏幕眼神往往很不自然,如果看向摄像头则无法关注到其他与会者的反应,因此视频会议缺少了线下交流的真实感和互动感。而且在实际的工作中,我们还会有各种不同的会议场景,比如多人会议、同排而坐协同工作等情况,对于捕捉与会者的侧方视线和动作来说,现有的视频会议系统就更无能为力了。

    如果有一个会议系统,可以让人们即使身处不同的地方,也能像在同一房间里一样交流,视线转动就能与同伴建立起眼神沟通,这是否会给远程办公增添一份沉浸式的真实感呢?

    利用现有的普通硬件设备搭建的 3D 视频系统:

    为了解决这些问题,微软亚洲研究院提出了创新的 3D 视频会议系统——VirtualCube,它可以在远程视频会议中建立起真人等大的 3D 形象,无论是正面沟通,还是侧方交流,系统都能够正确捕捉到与会者的眼神、动态,建立起眼神和肢体交流。相关论文被全球虚拟现实学术会议 IEEE Virtual Reality 2022 接收并获得了大会的最佳论文奖(Best Paper Award – Journal Papers Track)

    VirtualCube 系统具有三大优势:

    标准化、简单化,全部使用现有的普通硬件设备。与办公场所中常见的格子间(Cubicle)类似,每个 VirtualCube 都提供了一致的物理环境和设备配置:与会者正前方安装有6个 Azure Kinect RGBD 摄像头,以捕捉真人的图像和眼神等动作;在与会者的正面和左右两侧还各有一个大尺寸的显示屏,以创造出身临其境的参会感。使用现有的、标准化的硬件能够大大简化用户设备校准的工作量,从而实现 3D 视频系统的快速部署和应用。

    感。使用现有的、标准化的硬件能够大大简化用户设备校准的工作量,从而实现 3D 视频系统的快速部署和应用。

    6个 Azure Kinect RGBD 摄像头捕捉人像和眼神等动作

    多人、多场景,任意组合。作为在线视频会议的基础构建,VirtualCube 的虚拟会议环境可由多个空间(Cube)按照不同的布局组成,以支持不同的会议场景,例如两人的面对面会议、两人并排会议,以及多人的圆桌会议等。

    多个空间(Cube)可实现任意组合

    实时、高质量渲染真人图像。VirtualCube 可以捕捉到参与者的各种细微变化,包括人的皮肤颜色、纹理,面部或衣服上的反射光泽等,并实时渲染生成真人大小的 3D 形象,显示在远程与会者的屏幕中。而且虚拟会议环境的背景也可以根据用户的需求自由选择。

    任意变换会议场景,都能身临其境

    V-Cube View和V-Cube Assembly算法双剑合璧,沉浸式会议体验不再是难题

    其实业界对 3D 视频会议的研究从未间断过。早在2000年,就有人曾提出过与类似混合现实技术有关的畅想。基于这个设想,科研人员一直在探索如何将视频会议以更逼真、更自然的方式呈现,期间也出现了不同的技术路线和解决方案,但都没有达到理想的效果。对此,微软亚洲研究院主管研究员张译中和杨蛟龙表示,过往的研究仍然有很多没有解决的问题:首先,在真实环境下,无论放置怎样的单目摄像设备,即使图像质量再高,与会者也很难形成自然的眼神交流,特别是多人会议的情况;其次,很多研究针对特定的会议场景进行优化,如两个人面对面的会议或三人的圆桌会议,很难支持不同的会议设置;第三,虽然在影视界我们能够看到一些逼真的虚拟人,但那是需要专业的技术和影视团队长时间打磨和优化才能实现的,仍然需要一定的手工劳动,目前无法进行实时捕捉和实时渲染。

    为此,微软亚洲研究院提出了 V-Cube View 和 V-Cube Assembly 两大全新算法,在 VirtualCube 中实现了自动捕捉参与者的手势动作和眼神变化,实时渲染形成高保真图像,让参与者在虚拟会议中体验到真实会议的氛围。

    “两个人在交谈且相互注视对方时,对方看到的自己就相当于在自己眼睛的位置放置一个摄像头。但屏幕和摄像头的位置存在高低差,所以当一方注视屏幕中对方的眼睛时,摄像头捕捉到的眼神就会偏离。因此在 VirtualCube 中,我们在与会者正前方的屏幕边缘放置了六个摄像头,通过 V-Cube View 算法合成正确的视点图像,并利用 V-Cube Assembly 确定正确的相对位置,进而给与会者一个沉浸式的会议体验”,张译中介绍道。

    基于深度学习的 V-Cube View 算法,通过 VirtualCube 中的六个摄像头的 RGBD 图像作为输入,实时渲染任意目标视点下人的高保真视频。这里的技术挑战是如何同时做到高保真和实时。对此,微软亚洲研究院主管研究员杨蛟龙解释道:“实时渲染高保真的人像,特别是高保真的人脸一直是个具有挑战性的研究课题。传统的三维重建和纹理贴图的做法虽然可以做到实时绘制,却无法重现出真实人脸复杂的材质和在不同视点下外观的变化。为此我们提出了一种新的 Lumi-Net 渲染方法,其核心思想是利用重构的三维几何作为参考来实现一个四维光场的实时渲染,并结合神经网络进行图像增强,从而提高了渲染的质量,特别是人脸区域的高保真度。”

    具体而言,V-Cube View 算法分为三步进行。首先,研究员设计了一个神经网络来快速求解目标视点深度图作为人体的几何参考(geometry proxy)。然后,算法在给定的几何参考下将获取的多视角 RGB 图像(即光线)进行融合,实现绘制。在这一步中,研究员受传统的非结构化流明图(Unstructured Lumigraph)方法启发,将输入光线与目标像素光线的方向和深度差异作为先验,通过神经网络学习最合适的融合权重。最后,为了进一步提升绘制质量,研究员们使用了神经网络对上一步的绘制结果进行图像增强。整个算法实现了端到端的训练,并在训练过程中引入了感知损失函数及对抗学习技术,使得算法可以自动学习出最优的神经网络,实现高保真的绘制。而且为了保证绘制的实时性,算法的前两步都在低分辨率图像上执行,这样可以在不损失太多精度的情况下大大降低所需计算量。经过精心设计和优化的 V-Cube View 算法,将实时的三维人物渲染质量提升到了一个新的高度。

    V-Cube View 算法示意图

    另外,为了让 VirtualCube 的使用者拥有和线下交流同样的体验,在将与会者映射到虚拟环境时,系统还要考虑他们之间的相对位置关系,这时 V-Cube Assembly 算法就发挥了重要的作用。“在整个虚拟会议环境中,V-Cube Assembly 可以被定义为全局坐标系统,单个的 VirtualCube 则为局部坐标系统。全局坐标系与局部坐标系之间的正确 3D 几何变化,对在视频显示器上正确呈现远程与会者的图像至关重要”杨蛟龙介绍。

    研究员们首先会在 VirtualCube 中捕捉与会者的 3D 几何体,形成局部坐标系,然后将这些局部坐标系的 3D 几何体数据,投射到全局坐标系,经过 V-Cube Assembly 处理,在全局虚拟会议环境中确定每个 VirtualCube 参与者正确的相对位置,最后再将全局 3D 几何体转换为 VirtualCube 的局部坐标系,影射到 VirtualCube 的屏幕上。

    V-Cube Assembly 算法示意图

    抛砖引玉,畅想未来办公无限可能

    VirtualCube 给 3D 视频会议系统提供了一种全新的思路。无论从算法设计、端到端设备部署还是工程调试上,VirtualCube 都证明了利用现有的普通硬件设备就可以实现沉浸式的 3D 视频会议体验。

    除了让与会者“共享”同一个物理空间外,研究员们还在探索利用 VirtualCube 系统满足远程办公中的更多协作需求。例如,研究员们展示了这样一种场景:在协同工作时,两位与会者及其电脑桌面都将是视频会议的一部分,因此与会者并排而坐,并且跨屏幕传递自己桌面上的文档和应用程序会让远程协作更加方便。

    随着技术的不断精进,未来,大家或许都可以实现身隔万里,却能亲临其境一起办公,自然沟通的遥在体验,而这将极大地提高混合办公的效率。微软亚洲研究院的研究员们也希望 VirtualCube 可以成为一颗探索的种子,给更多研究人员带来启发,在大家共同的努力下,找到更好的虚拟空间交互形式,打开未来办公的更多可能。

    PointCLIP 用CLIP巧解点云分类

    论文: CVPR2022 PointCLIP: Point Cloud Understanding by CLIP

    代码:https://github.com/ZrrSkywalker

    本文提出PointCLIP:第一个将 CLIP 应用于点云识别的工作,它将2D预训练的知识迁移到3D领域,可在没有任何 3D 训练的情况下对点云进行跨模态零样本识别。

    在本文中,我们通过提出 PointCLIP 来确定这种设置是可行的,它在 CLIP 编码的点云和 3D 类别文本之间进行对齐。

    因为重新训练clip的代价太大(原始clip的训练数据 有4yi对文本图像对),因此没法去修改clip的模型结构,因此也就意味之模型的输入:text-image形式。因此作者将三d点云数据经过不同视角的渲染,变成M个RGB的二维maps,送如encoder中并获得M个特征,通过与对应的文本特征做一个相似度,来确定 当前的点云类别。

    模型结构

    具体来说,我们通过将点云投影到多视图深度图中而不进行渲染来编码点云,并聚合视图方式的零样本预测以实现从 2D 到 3D 的知识迁移。最重要的是,我们设计了一个视图间适配器,以更好地提取全局特征,并将从 3D 中学到的小样本知识自适应地融合到 2D 中预训练的 CLIP 中。

    通过在小样本设置中微调轻量级适配器,PointCLIP 的性能可以大大提高。此外,我们观察到 PointCLIP 和经典 3D 监督网络之间的互补特性。通过简单的集成,PointCLIP 提高了基线的性能,甚至超越了最先进的模型。因此,PointCLIP 是在低资源成本和数据机制下通过 CLIP 进行有效 3D 点云理解的有前途的替代方案。

    ensembling聚合部分:可以认为是把pointclip作为一个即插即用的模块,用于辅助3D点云分类网络做分类任务 。

    实验结果

    我们对广泛采用的 ModelNet10、ModelNet40 和具有挑战性的 ScanObjectNN 进行了彻底的实验,以证明 PointCLIP 的有效性。

    CLIP: Contrastive Language-Image Pre-Training

    CLIP论文讲解

    背景

    论文来自 Open AI 2021 年提出的一个成果,相关可参考信息: github、 paper主页 。 之前其实并不太了解多模态预训练领域的成果,最近看到了这篇质量很高的成果。

    Hugging Facehttps://huggingface.co/openai/clip-vit-base-patch32(预训练模型库)

    效果

    我们可以运行这colab,该作者将 Unsplash 的所有素材计算了 clip image embedding ,然后使用 clip word embedding 进行配图。

    preview

    效果看起来似乎不错,几乎实现了通过一句话就找到合适的图片。不可否定,会存在大量的badcase。但是在不需要fine-tune/下游任务,直接zero-shot得到的embedding可以实现这样的效果已经很厉害了。

    作者团队来自 OPEN AI

    CLIP工作:

    1 方法简单,效果好

    2 迁移学习能力强(已训练好的模型,可以在任意数据集上取得好效果)

    Q1 CLIP 是什么?how 做zero-shot(一种分类方式)?

    Q2 CLIP How 预训练?

    利用信号(来自自然语言处理)训练一个模型(迁移效果好)

    Q3 经过预训练能得到什么?

    A3 仅得到图片或文本的特征,没有在分类任务上继续做训练或微调。即CLIP没有分类头。

    Q4 没有分类头,how 做推理?

    A4 利用自然语言的方法—prompt template;

    将1000个类,生成一个1000个句子(object),

    例子:plane 变成 object

    1000个句子通过文本编码器(text-Encode)生成1000个特征。

    Q5 直接从1000个类里面抽取特征也可以, why 还要进行Prompt- template ?

    A5 在预训练时,model 看到的是sample-pair,若在推理时,把所有文本变成一个单词(word),导致model看到的东西和预训练时不一样,导致识别效果稍下降。

    Q6 如何将1000分类变成 1000个句子(object)?why 这样做?

    A6 2个方法:prompt engineering 和 prompot ensambol;

    提高模型准确率,且不需要重新训练模型

    Q7 prompt template 操作之后要干嘛?

    A7 input 图片,经过image_Encode 得到图片特征,利用image_feature 和 text-feature 计算相似性,挑出值(最相似),进而完成分类任务。

    Q8 how 理解分类任务?

    A8 judge image 中有哪些物体

    Q9 text and image 可以改吗?

    A9 yes (all of anything)

    Q10 若用imageNet做训练,input三轮车(image),why 得到车,而不是,三轮车?

    A10 因为,imageNet 无法实时更新已有类别。

    但CLIP可以实时更新,故 imput = output。

    这也是CLIP的强大之处,彻底摆脱了categoricel label 限制。

    为了提高model泛化性,作者提出新办法,从 text 中提取监督信号。(正是有了监督信号(覆盖范围广)的存在,model 的泛化能力得到提高)作者利用4亿 text-image-pair-dataset ,选择自监督训练方式,进而训练模型。

    CLIP 利用多模态对比学习完成训练,并可以做物体分类(即prompt),这种分类不限于已有类别,可扩展到新类别。(即当前学到的model,可以直接在 downstream tasks(下游任务)上做推理。

    2017年有人研究,但是影响力小,效果差:

    主要有3个工作(均基于transformer)和CLIP像,但有区别:VIrTex:用自回归预测方式,做model预训练,ICMLM :用完型填空方式,做model预训练,ConVIRT:和CLIP类似,但仅在医疗图像上做实验。但由于data 和 model规模小,所以效果不好。

    利用自然语言的监督信号,来训练好的视觉模型。在自监督学习(完型填空)的范式下,NLP可以利用(取不尽)的文本监督信号。用此方法训练出的模型,简单,泛化力强,为多模态训练铺路。

    why 用自然语言监督信号训练视觉模型?

    1 无需标注这些数据(数据规模变大)

    2 此时监督信号是文本(不是n选1 的标签),意味着input,output 自由度大了很多.

    3 因为image-text-pair数据,model所学特征不单是视觉特征,而是多模态特征。当image和语言联系在一起,便容易做zero-shot迁移学习。

    若仅做单模态自监督学习,无论是单模态对比学习(MOCO),还是单模态掩码学习(MAE),model仅学到视觉特征,无法和自然语言联系在一起,依旧很难做zero-shot的迁移。需要大量的image-text-pair(4亿个Image-text-pair)

    总结:用 文本监督信号来训练视觉model 这种做法很有潜力。

    整个训练过程:

    给定一张image,来预测文本,会产生较大歧义(即可能性太多);若逐字句预测文本,太难了。会导致模型训练慢因此采用对比学习,让 model 判断,image 和 text 是否配对。把 ” 训练任务 “ 换成 ” 对比任务 “ ,训练效率提高4倍

    2个输入:image 和 text归一化,投射层:将单模态变成多模态,获得 n 个图像的特征,n 个文本的特征。计算 image-feature 和 text-feature相似度。利用相似度做分类。利用交叉熵目标函数计算loss

    细节:

    1 由于收集数据大,model 不存在 overfitting

    简化了工作:当训练CLIP – model时,对应的 image-Encode 和 text-Encode 无需进行预训练

    2 在多模态训练中,投射时,用线性投射层,

    非线性投射层(作者推测,适配纯 Image 单模态学习),带来10个点的性能提升

    3 使用 ” 随即裁减 “ 进行数据增强

    4 数据集和 model 太大,不好调参

    5 temperature parm(极重要超参数)稍调,model 性能会提高很多 但作者,将其设置成,可学习的标量

    模型选择和参数设置:

    视觉方面:

    训练8个model;

    ResNet = 5个,VIT = 3个

    残差网络变体ResNet50*4:*16:*64:用 efficientNet-style 方法 将input-image 大小,channel宽度,model-depth 做微调

    针对 transformer-model,作者选择数据集 VIT-B/32:/16:/64(阿拉伯数字表示patch大小)

    文本方面:transformer

    all-model 训练了epoch = 32;Adam optimizer优化器;手动调整超参数,用ResNet-50作为超参搜索,为了快速调参(训练epoch = 1)训练时:选用 batch-size = 32768(很大)(此model在很多机器上做分布式训练)

    CLIP 文章的核心 = Zero-shot Transfer

    作者研究迁移学习的动机:之前自监督or无监督的方法,主要研究 frature 学习的能力,model的目标是学习泛化性能好的特征,虽然学习到good-feature,但down-work中,还是需要有标签数据做微调。作者想仅训练一个model,在down-work中不再微调。

    衡量model 学到的feature 好不好的方法有主要有2种:第一种:linear:冻结训练好的model,再训练一个分类头。第二种:微调:把整个网络放开,做end-to-end的学习。微调的优点: 灵活、当down-work数据集大,微调效果好。但这里作者使用只训练liner分类头: CLIP本就用来研究更数据集无关的训练方式,若用 “ 微调 “ 方法,无法判断预训练model效果如何。(因为,如果预训练model效果不好,经过在down-work上做微调,会导致最终结果好。)

    CLIP这么强大,它有什么缺点?

    平均来看,CLIIP可以和机械模型(ResNet-50(在ImageNet上训练))持平

    若继续增加数据集和model规模,CLIP性能可以继续提高,但是代价很大(需提高计算和数据的高效性)

    zreo-shot结果并不好

    1 在细分类数据集上,CLIP效果低于(有监督训练)ResNet-50(极限网络)

    2 CLIP无法处理抽象概念原因:CLUP无法区分 what is 异常?what is 安全?例如:数一数图片中的物体个数;在视频中,区分这一帧是异常还是非异常;作者提出:在很多领域,CLIP性能和瞎猜差不多

    3 若数据集中的data 已经 out-of-distribution,那么CLIP-model泛化照样差;例子:在MNIST数据集上,CLIP准确率仅有88% 。推测原因:作者收集的数据集有4亿个样本,但没有和MINIS长得像的,所以MINIS数据集对于CLIP来说就是out-of-distribution数据集

    评价

    创新度高1 打破固定类别标签做法2 放飞视觉model训练过程3 引发后续大量工作

    有效性高1 大数据集,效果好2 泛化性能好3 zero-shot性能超过人类

    运用 BERT 的 MLM 模型进行小样本学习

    转载自《必须要GPT3吗?不,BERT的MLM模型也能小样本学习》《P-tuning:自动构建模版,释放语言模型潜能》,作者:苏剑林,部分内容有修改。

    大家都知道现在 GPT3 风头正盛,然而,到处都是 GPT3、GPT3 地推,读者是否记得 GPT3 论文的名字呢?事实上,GPT3 的论文叫做《Language Models are Few-Shot Learners》,标题里边已经没有 G、P、T 几个单词了,只不过它跟开始的 GPT 是一脉相承的,因此还是以 GPT 称呼它。顾名思义,GPT3 主打的是 Few-Shot Learning,也就是小样本学习。此外,GPT3 的另一个特点就是大,最大的版本多达 1750 亿参数,是 BERT Base的一千多倍。

    正因如此,前些天 Arxiv 上的一篇论文《It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners》便引起了笔者的注意,意译过来就是“谁说一定要大的?小模型也可以做小样本学习”。显然,这标题对标的就是 GPT3,于是笔者饶有兴趣地点进去看看是谁这么有勇气挑战 GPT3,又是怎样的小模型能挑战 GPT3?经过阅读,原来作者提出通过适当的构造,用 BERT 的 MLM 模型也可以做小样本学习,看完之后颇有一种“原来还可以这样做”的恍然大悟感~在此与大家分享一下。

    冉冉升起的 MLM

    MLM,全称“Masked Language Model”,可以翻译为“掩码语言模型”,实际上就是一个完形填空任务,随机 Mask 掉文本中的某些字词,然后要模型去预测被 Mask 的字词,示意图如下:

    BERT 的 MLM 模型简单示意图

    其中被 Mask 掉的部分,可以是直接随机选择的 Token,也可以是随机选择连续的能组成一整个词的 Token,后者称为 Whole Word Masking (WWM)。

    开始,MLM 仅被视为 BERT 的一个预训练任务,训练完了就可以扔掉的那种,因此有一些开源的模型干脆没保留 MLM 部分的权重,比如 brightmart版 和 clue版 的 RoBERTa,而哈工大开源的 RoBERTa-wwm-ext-large 则不知道出于什么原因随机初始化了 MLM 部分的权重,因此如果要复现本文后面的结果,这些版本是不可取的。

    然而,随着研究的深入,研究人员发现不止 BERT 的 Encoder 很有用,预训练用的 MLM 本身也很有用。比如论文《BERT has a Mouth, and It Must Speak: BERT as a Markov Random Field Language Model》指出 MLM 可以作为一般的生成模型用,论文《Spelling Error Correction with Soft-Masked BERT》则将 MLM 用于文本纠错,笔者之前在《从语言模型到Seq2Seq:Transformer如戏,全靠Mask》的实验也表明 MLM 的预训练权重也可以当作 UniLM 来用做 Seq2Seq 任务,还有《无监督分词和句法分析!原来BERT还可以这样用》一文将 MLM 的思想用于无监督分词和句法分析了。可以说 MLM 已经是大放异彩了。

    将任务转成完形填空

    在本文里,我们再学习 MLM 的一个精彩应用:用于小样本学习或半监督学习,某些场景下甚至能做到零样本学习。

    怎么将我们要做的任务跟 MLM 结合起来呢?很简单,给任务一个文本描述,然后转换为完形填空问题即可。举个例子,假如给定句子“这趟北京之旅我感觉很不错。”,那么我们补充个描述,构建如下的完形填空:______满意。这趟北京之旅我感觉很不错。

    进一步地,我们限制空位处只能填一个“很”或“不”,问题就很清晰了,就是要我们根据上下文一致性判断是否满意,如果“很”的概率大于“不”的概率,说明是正面情感倾向,否则就是负面的,这样我们就将情感分类问题转换为一个完形填空问题了,它可以用 MLM 模型给出预测结果,而 MLM 模型的训练可以不需要监督数据,因此理论上这能够实现零样本学习了。

    多分类问题也可以做类似转换,比如新闻主题分类,输入句子为“八个月了,终于又能在赛场上看到女排姑娘们了。”,那么就可以构建下面报导一则______新闻。八个月了,终于又能在赛场上看到女排姑娘们了。

    这样我们就将新闻主题分类也转换为完形填空问题了,一个好的 MLM 模型应当能预测出“体育”二字来。

    还有一些简单的推理任务也可以做这样的转换,常见的是给定两个句子,判断这两个句子是否相容,比如“我去了北京”跟“我去了上海”就是矛盾的,“我去了北京”跟“我在天安门广场”是相容的,常见的做法就是将两个句子拼接起来输入到模型做,作为一个二分类任务。如果要转换为完形填空,那该怎么构造呢?一种比较自然的构建方式是:我去了北京?______,我去了上海。
    我去了北京?______,我在天安门广场。

    其中空位之处的候选词为 是的,不是是的,不是。

    Pattern-Exploiting

    读到这里,读者应该不难发现其中的规律了,就是给输入的文本增加一个前缀或者后缀描述,并且 Mask 掉某些 Token,转换为完形填空问题,这样的转换在原论文中称为 Pattern,这个转换要尽可能与原来的句子组成一句自然的话,不能过于生硬,因为预训练的 MLM 模型就是在自然语言上进行的。显然同一个问题可以有很多不同的 Pattern,比如情感分类的例子,描述可以放最后,变成“这趟北京之旅我感觉很不错。__满意。”;也可以多加几个字,比如“觉得如何?__满意。这趟北京之旅我感觉很不错。”。

    然后,我们需要构建预测 Token 的候选空间,并且建立 Token 到实际类别的映射,这在原论文中称为 Verbalizer,比如情感分类的例子,我们的候选空间是 很,不很,不,映射关系是 很→正面,不→负面很→正面,不→负面,候选空间与实际类别之间不一定是一一映射,比如我们还可以加入“挺”、“太”、“难”字,并且认为 很,挺,太→正面很,挺,太→正面 以及 不,难→负面不,难→负面,等等。不难理解,不少 NLP 任务都有可能进行这种转换,但显然这种转换一般只适用于候选空间有限的任务,说白了就是只用来做选择题,常见任务的就是文本分类。

    刚才说了,同一个任务可以有多种不同的Pattern,原论文是这样处理的:

    1、对于每种 Pattern,单独用训练集 Finetune 一个 MLM 模型出来;
    2、然后将不同 Pattern 对应的模型进行集成,得到融合模型;
    3、用融合模型预测未标注数据的伪标签;
    4、用伪标签数据 Finetune 一个常规的(非 MLM 的)模型。
    

    具体的集成方式大家自己看论文就行,这不是重点。这种训练模式被称为 Pattern-Exploiting Training (PET),它首先出现在论文《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》,本文要介绍的这篇论文则进一步肯定和完善了 Pattern-Exploiting Training 的价值和结果,并整合了多任务学习,使得它在 SuperGLUE 榜单上的小样本学习效果超过了 GPT3。两篇论文的作者是相同的,是一脉相承的作品。

    PET 在 SuperGLUE 上的小样本学习的结果

    不过要吐槽一个点是,上图中 PET 的 223M 参数,所用的模型是 ALBERT-xxlarge-v2,事实上称 ALBERT 为“小模型”是一种很耍流氓的行为,因为它前向计算的速度并没有得到任何提升。ALBERT-xxlarge 共有 12 层,层与层之间参数是共享的,就前向计算而言,它应该等价于约 2700M(12 倍)参数的 GPT 才对。

    PET 中文实践,检验效果

    要真正确认一个方法或模型的价值,看论文的实验表格是不够的,论文给出的实验结果谁都不好说能否复现,其次就算英文上能复现也不代表中文上有s价值,因此最实际的还是亲自动手做实验验证。下面是笔者的实验代码,供读者参考:Github地址:https://github.com/bojone/Pattern-Exploiting-Training

    我们将从以下几个角度来探讨 PET 的可行性:

    1、直接利用现成的 MLM 模型效果如何?(零样本学习1)
    2、用“大量无标签数据”微调现成的 MLM 模型效果如何?(零样本学习2)
    3、用“小量标签数据”微调现成的 MLM 模型效果如何?(小样本学习)
    4、用“小量标签数据+大量无标签数据”微调现成的 MLM 模型效果如何?(半监督学习)
    

    下面主要给出情感二分类的实验结果。另外还有一个新闻主题的多分类,代码也放到 Github 了,其结果是类似的,就不重复陈述了。

    零样本学习1

    这里主要探索的是给输入文本补上对应的 Pattern 后,直接基于现成的 MLM 模型进行预测,预测的准确率。由于构建模型的整个过程都不涉及到标签数据监督训练,因此这算是一种“零样本学习”。我们需要比较的是不同 Pattern、不同 MLM 模型上的效果:

    下面是实验的几个 Pattern,其中空位处候选词语都为“很”和“不”:

    P1:____满意。这趟北京之旅我感觉很不错。
    P2:这趟北京之旅我感觉很不错。____满意。
    P3:____好。这趟北京之旅我感觉很不错。
    P4:____理想。这趟北京之旅我感觉很不错。
    P5:感觉如何?____满意。这趟北京之旅我感觉很不错。
    

    至于 MLM 模型,则是下面几个:

    M1:Google 开源的中文版 BERT Base(链接);

    M2:哈工大开源的 RoBERTa-wwm-ext Base(链接):

    M3:腾讯 UER 开源的 BERT Base(链接);

    M4:腾讯 UER 开源的BERT Large(链接)。

    实验结果如下表(验证集/测试集):不同模型不同Pattern的零样本学习效果

    最好的效果居然可以达到 88%!也就是说,加载现成的 MLM,配合适当的 Pattern,不需要任何标注数据,就可以正确识别大部分样本情感倾向了。这不得不让我们对 MLM 模型的潜力刮目相看了。

    可以观察到,不同的 Pattern、不同的预训练模型之间还是有一定的差异的,整体而言 Large 版本的效果要明显好于 Base 版本的模型,说明像 GPT 到 GPT2 再到 GPT3 一样,还是把模型做得更大会更好。此外,这还有可能说明实际上 MLM 还没有被充分训练好,或许是因为 BERT 这种 Mask 掉一部分的训练方式过于低效了,可能用《修改Transformer结构,设计一个更快更好的MLM模型》一文提到的改进版 MLM 会更好。

    零样本学习2

    看完上述结果,读者可能会想到:如果我用领域内的数据继续预训练 MLM 模型,那么能不能提升效果呢?答案是:能!下面是我们的实验结果,算力有限,我们只在 RoBERTa-wwm-ext(上述的 M2,继续预训练后的模型我们称为 M2+无监督M2+无监督)的基础上做了比较:

    要注意的是,这里我们只是用领域内的数据继续做 MLM 训练,这个过程是无监督的,也不需要标注信号,因此也算是“零样本学习”。同时,从到目前为止的结果我们可以看出,给输入本文加入“前缀”的效果比“后缀”更有优势一些。

    小样本学习

    刚才我们讨论了无标签数据继续预训练 MLM 的提升,如果回到 PET 的目标场景,直接用小量的标签数据配合特定的 Pattern 训练 MLM 又如何呢?这也就是真正的“小样本学习”训练了,这里我们保留约 200 个标注样本,构造样本的时候,我们先给每个句子补上 Pattern,除了 Pattern 自带的 Mask 位置之外,我们还随机 Mask 其他一部分,以增强对模型的正则。最终实验结果如下:

    结论就是除了“后缀式”的 P2 之外,其它结果都差不多,这进一步说明了“前缀式”的 Pattern 会比“后缀式”更有竞争力一些。在效果上,直接用同样的数据用常规的方法去微调一个 BERT 模型,大概的结果是 88.93 左右,所以基于“MLM+Pattern”的小样本学习方法可能带来轻微的性能提升。

    半监督学习

    无监督的零样本学习和有监督的小样本学习都说完了,自然就轮到把标注数据和非标注数据都结合起来的“半监督学习”了。还是同样的任务,标注数据和非标注数据的比例大约是 1:99,标注数据带 Pattern,非标注数据不带 Pattern,大家都 Mask 掉一部分 Token 进行 MLM 预训练,最终测出来的效果如下:

    还是同样的,“后缀”明显比“前缀”差,“前缀”的效果差不多。具体效果上,则是肯定了额外的无标注数据也是有作用的。直觉上来看,“前缀”比“后缀”要好,大体上是因为“前缀”的 Mask 位置比较固定,微弱的监督信号得以叠加增强?但这也不能解释为什么零样本学习的情况下也是“前缀”更好,估计还跟模型的学习难度有关系,可能句子前面部分的规律更加明显,相对来说更加容易学一些,所以前面部分就学习得更加充分?这一切都还只是猜测。

    汇总与结论

    将上述结果汇总如下:结果汇总比较

    读者还可以对比我们之前在文章《泛化性乱弹:从随机噪声、梯度惩罚到虚拟对抗训练》中用虚拟对抗训练 (VAT) 做半监督学习的结果,可以看到不管是零样本学习、小样本学习还是半监督学习,基于 MLM 模型的方式都能媲美基于 VAT 的半监督学习的结果。我们在做短新闻多分类实验时的结果也是相似的。因此,这说明了 MLM 模型确实也可以作为一个优秀的零样本/小样本/半监督学习器来使用。

    当然,基于 MLM 模型的缺点还是有的,比如 MLM 所使用的独立假设限制了它对更长文本的预测能力(说白了空位处的文字不能太长),以及无法预测不定长的答案也约束了它的场景(所以当前只能用于做选择题,不能做生成)。我们期待有更强的 MLM 模型出现,那时候就有可能在所有任务上都能与 GPT3 一较高下了。

    什么是模版

    前面介绍的 Pattern-Exploiting Training (PET) 方法,其主要的思想是借助由自然语言构成的模版(英文常称 Pattern 或 Prompt),将下游任务也转化为一个完形填空任务,这样就可以用 BERT 的 MLM 模型来进行预测了。比如下图中通过条件前缀来实现情感分类和主题分类的例子:

    通过特定模版将情感分类转换为 MLM 任务

    通过特定模版将新闻分类转换为 MLM 任务

    当然,这种方案也不是只有 MLM 模型可行,用 GPT 这样的单向语言模型(LM)其实也很简单:

    通过特定模版将情感分类转换为 LM 任务

    通过特定模版将新闻分类转换为 LM 任务

    不过由于语言模型是从左往右解码的,因此预测部分只能放在句末了(但还可以往补充前缀说明,只不过预测部分放在最后)。

    某种意义上来说,这些模版属于语言模型的“探针”,我们可以通过模版来抽取语言模型的特定知识,从而做到不错的零样本效果,而配合少量标注样本,可以进一步提升效果。

    然而,对于某些任务而言,人工构建模版并不是那么容易的事情,模型的优劣我们也不好把握,而不同模型之间的效果差别可能很大,在这种情况下,人工标注一些样本可能比构建模版还要轻松得多。所以,如何根据已有的标注样本来自动构建模版,便成了一个值得研究的问题了。

    P-tuning

    最近 Arxiv 上的论文《GPT Understands, Too》提出了名为 P-tuning 的方法,成功地实现了模版的自动构建。不仅如此,借助 P-tuning,GPT 在 SuperGLUE 上的成绩首次超过了同等级别的 BERT 模型,这颠覆了一直以来“GPT 不擅长 NLU”的结论,也是该论文命名的缘由。

    P-tuning 重新审视了关于模版的定义,放弃了“模版由自然语言构成”这一常规要求,从而将模版的构建转化为连续参数优化问题,虽然简单,但却有效。

    模版的反思

    首先,我们来想一下“什么是模版”。直观来看,模版就是由自然语言构成的前缀/后缀,通过这些模版我们使得下游任务跟预训练任务一致,这样才能更加充分地利用原始预训练模型,起到更好的零样本、小样本学习效果。

    等等,我们真的在乎模版是不是“自然语言”构成的吗?

    并不是。本质上来说,我们并不关心模版长什么样,我们只需要知道模版由哪些 token 组成,该插入到哪里,插入后能不能完成我们的下游任务,输出的候选空间是什么。模版是不是自然语言组成的,对我们根本没影响,“自然语言”的要求,只是为了更好地实现“一致性”,但不是必须的。于是,P-tuning 考虑了如下形式的模版:

    P-tuning 直接使用 [unused*] 的 token 来构建模版,不关心模版的自然语言性

    这里的 [u1]~[u6],代表 BERT 词表里边的 [unused1]~[unused6],也就是用几个从未见过的 token 来构成模板,这里的 token 数目是一个超参数,放在前面还是后面也可以调整。接着,为了让“模版”发挥作用,我们用标注数据来求出这个模板。

    如何去优化

    这时候,根据标注数据量的多少,我们又分两种情况讨论。

    第一种,标注数据比较少。这种情况下,我们固定整个模型的权重,只优化 [unused1]~[unused6] 这几个 token 的 Embedding,换句话说,其实我们就是要学 6 个新的 Embedding,使得它起到了模版的作用。这样一来,因为模型权重几乎都被固定住了,训练起来很快,而且因为要学习的参数很少,因此哪怕标注样本很少,也能把模版学出来,不容易过拟合。

    第二种,标注数据很充足。这时候如果还按照第一种的方案来,就会出现欠拟合的情况,因为只有 6 个 token 的可优化参数实在是太少了。因此,我们可以放开所有权重微调,原论文在 SuperGLUE 上的实验就是这样做的。读者可能会想:这样跟直接加个全连接微调有什么区别?原论文的结果是这样做效果更好,可能还是因为跟预训练任务更一致了吧。

    P-tuning 在 SuperGLUE 上的表现

    此外,在上面的例子中,目标 token 如“很”、“体育”是认为选定的,那么它们可不可以也用 [unused*] 的 token 代替呢?答案是可以,但也分两种情况考虑:1、在标注数据比较少的时候,人工来选定适当的目标 token 效果往往更好些;2、在标注数据很充足的情况下,目标 token 用 [unused*] 效果更好些,因为这时候模型的优化空间更大一些。

    增强相关性

    在原论文中,P-tuning 并不是随机初始化几个新 token 然后直接训练的,而是通过一个小型的 LSTM 模型把这几个 Embedding 算出来,并且将这个 LSTM 模型设为可学习的。这样多绕了一步有什么好处呢?原论文大概的意思是:LSTM 出现的 token 表示相关性更强,某种程度上来说更像“自然语言”(因为自然语言的 token 之间不是独立的),此外还能防止局部最优。我在 Github 上进一步向作者确认了一下(参考这里),效果上的差别是通过 LSTM 多绕一步的方法可以使得模型收敛更快、效果更优。

    然而,这样多了一个LSTM,总感觉有些别扭,而且实现上也略微有点麻烦。按照作者的意思,LSTM 是为了帮助模版的几个 token(某种程度上)更贴近自然语言,但这并不一定要用 LSTM 生成,而且就算用 LSTM 生成也不一定达到这一点。笔者认为,更自然的方法是在训练下游任务的时候,不仅仅预测下游任务的目标 token(前面例子中的“很”、“新闻”),还应该同时做其他 token 的预测

    比如,如果是 MLM 模型,那么也随机 mask 掉其他的一些 token 来预测;如果是 LM 模型,则预测完整的序列,而不单单是目标词。这样做的理由是:因为我们的 MLM/LM 都是经过自然语言预训练的,所以我们(迷之自信地)认为能够很好完成重构的序列必然也是接近于自然语言的,因此这样增加训练目标,也能起到让模型更贴近自然语言的效果。经过笔者的测试,加上这样辅助目标,相比单纯优化下游任务的目标,确实提升了效果。

    P-tuning 实验与效果

    所谓“talk is cheap, show me the code”,又到了喜闻乐见的实验时间了。这里分享一下 P-tuning 的实验结果,其中还包括笔者对 P-tuning 的实现思路,以及笔者在中文任务上的实验结果。

    停止的梯度

    怎么实现上述的 P-tuning 算法比较好呢?如果是放开所有权重训练,那自然是简单的,跟普通的 BERT 微调没有什么区别。关键是在小样本场景下,如何实现“只优化几个 token”呢?

    当然,实现的方法也不少,比如为那几个要优化的 token 重新构建一个 Embedding 层,然后拼接到 BERT 的Embedding层中,然后训练的时候只放开新 Embedding 层的权重。但这样写对原来模型的改动还是蛮大的,最好的方法是尽可能少改动代码,让使用者几乎无感。为此,笔者构思了一种用 stop_gradient 简单修改 Embedding 层的方案,大体上是将 Embedding 层修改如下:

    class PtuningEmbedding(Embedding):
        """新定义Embedding层,只优化部分Token
        """
        def call(self, inputs, mode='embedding'):
            embeddings = self.embeddings
            embeddings_sg = K.stop_gradient(embeddings)
            mask = np.zeros((K.int_shape(embeddings)[0], 1))
            mask[1:9] += 1  # 只优化id为1~8的token
            self.embeddings = embeddings * mask + embeddings_sg * (1 - mask)
            return super(PtuningEmbedding, self).call(inputs, mode)
    

    变量经过 stop_gradient 算子后,在反向传播的时候梯度为 0,但是前向传播不变,因此在上述代码中,前向传播的结果不会有变化,但是反向传播求梯度的时候,梯度不为 0 的 token 由 mask 变量控制,其余 token 的梯度都为零,因此就实现了只更新部分 token。

    完整代码可见:Github:https://github.com/bojone/P-tuning

    对了,原论文也开源了代码:Github:https://github.com/THUDM/P-tuning

    测试与效果

    前面已经分享了原作者在 SuperGLUE 上的实验结果,显示出如果配合 P-tuning,那么:1、GPT、BERT 的效果相比直接 finetune 都有所提升;2、GPT 的效果还能超过了 BERT。这表明 GPT 不仅有 NLG 的能力,也有 NLU 能力,可谓是把 GPT 的潜能充分“压榨”出来了,当然 BERT 配合 P-tuning 也有提升,说明 P-tuning 对语言模型潜能的释放是较为通用的。

    原论文的实验比较丰富,建议读者仔细阅读原论文,相信会收获颇多。特别指出的是原论文的 Table 2 最后一列,当预训练模型足够大的时候,我们的设备可能无法 finetune 整个模型,而 P-tuning 可以选择只优化几个 Token 的参数,因为优化所需要的显存和算力都会大大减少,所以 P-tuning 实则上给了我们一种在有限算力下调用大型预训练模型的思路

    P-tuning 在各个体量的语言模型下的效果

    当然,笔者一直以来的观点是“没有在中文上测试过的算法是没有灵魂的”,因此笔者也在中文任务上简单测试了,测试任务跟前文一致,都是情感分类的小样本学习,测试模型包括 BERT 和 GPT,两者的候选模版分别如下图:

    笔者在中文情感分类上使用的“BERT+P-tuning”模版

    笔者在中文情感分类上使用的“GPT+P-tuning”模版

    注意,对于 LM 模型,前缀的引入非常重要,只引入后缀时效果会明显变差;而对于 MLM 模型,前缀的效果通常也优于后缀。总的效果如下表:

    其中“小样本”只用到了“少量标注样本”,“无监督”则用到了“大量无标注样本”,“半监督”则用到了“少量标注样本+大量无标注样本”,“P-tuning” 都是小样本,PET 的几个任务报告的是最优的人工模版的结果,其实还有更差的人工模版。从小样本角度来看,P-tuning 确实取得了最优的小样本学习效果;从模版构建的角度来看,P-tuning 确实也比人工构建的模版要好得多;从模型角度看,P-tuning 确实可以将 GPT 的分类性能发挥到跟 BERT 相近,从而揭示了 GPT 也有很强的 NLU 能力的事实。

    进一步理解 P-tuning

    这一节将会介绍笔者对 P-tuning 的进一步思考,以求从多个维度来理解 P-tuning。

    离散 vs 连续

    在 P-tuning 之前,也已经有一些在做模版的自动构建,如《How Can We Know What Language Models Know?》《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts》等,但它们搜索的都是在离散空间下搜索的自然语言模版,所以效果有所限制,并没有取得特别突出的结果。

    相反,P-tuning 放弃了“模版由自然语言构成”这一要求,从而将其变成了可以简单梯度下降求解的连续参数问题,效果还更好。同时,这一改动意味着 P-tuning 突出了模版的本质——即模版的关键在于它是怎么用的,不在于它由什么构成——给人一种去芜存菁、眼前一亮的感觉,确实值得点赞。

    (注:经读者@brotherb提醒,年初有一篇论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》提出的 Prefix-Tuning 方法其实已经相当接近 P-tuning,两者都设计了非自然语言的模版,只不过 Prefix-Tuning 主要关心 NLG 的应用而 P-tuning 更加关心 NLU 的应用。)

    Adapter

    我们还可以从 Adapter 的角度来理解 P-tuning。BERT 出来后不久,Google 在论文《Parameter-Efficient Transfer Learning for NLP》中提出了一种名为 Adapter 的微调方式,它并不是直接微调整个模型,而是固定住 BERT 原始权重,然后在 BERT 的基础上添加一些残差模块,只优化这些残差模块,由于残差模块的参数更少,因此微调成本更低。Adapter 的思路实际上来源于 CV 的《Learning multiple visual domains with residual adapters》,不过这两年似乎很少看到了,也许是因为它虽然提高了训练速度,但是预测速度却降低了,精度往往还有所损失。

    在 P-tuning 中,如果我们不将新插入的 token 视为“模版”,是将它视为模型的一部分,那么实际上 P-tuning 也是一种类似 Adapter 的做法,同样是固定原模型的权重,然后插入一些新的可优化参数,同样是只优化这些新参数,只不过这时候新参数插入的是 Embedding 层。因此,从这个角度看,P-tuning 与 Adapter 有颇多异曲同工之处。

    为什么有效

    然后,还有一个值得思考的问题:为什么 P-tuning 会更好?比如全量数据下,大家都是放开所有权重,P-tuning 的方法依然比直接 finetune 要好,为啥呢?

    事实上,提出这个问题的读者,应该是对 BERT 加个全连接层的直接 finetune 做法“习以为常”了。很明显,不管是 PET 还是 P-tuning,它们其实都更接近预训练任务,而加个全连接层的做法,其实还没那么接近预训练任务,所以某种程度上来说,P-tuning 有效更加“显然”,反而是加个全连接层微调为什么会有效才是值得疑问的。

    去年有篇论文《A Mathematical Exploration of Why Language Models Help Solve Downstream Tasks》试图回答这个问题,大致的论证顺序是:

    1、预训练模型是某种语言模型任务;
    2、下游任务可以表示为该种语言模型的某个特殊情形;
    3、当输出空间有限的时候,它又近似于加一个全连接层;
    4、所以加一个全连接层微调是有效的。
    

    可以看到,该论文的假设主要是第 2 点,其实就是直接假设了下游任务可以表达为类似 PET 的形式,然后才去证明的。所以这进一步说明了,PET、P-tuning 等才是更自然的使用预训练模型的方式,加全连接直接 finetune 的做法其实只是它们的推论罢了,也就是说,PET、P-tuning 才是返璞归真、回归本质的方案,所以它们更有效。

    转载自《必须要GPT3吗?不,BERT的MLM模型也能小样本学习》《P-tuning:自动构建模版,释放语言模型潜能》,作者:苏剑林,部分内容有修改。

    Mask Scoring RCNN

    论文: https://arxiv.org/abs/1903.00241 CVPR2019

    code: https://github.com/zjhuang22/maskscoring_rcnn

    这篇论文从实例分割中mask 的分割质量角度出发,提出过去的经典分割框架存在的一个缺陷:用Bbox bounding box的classification confidence作为mask score,导致mask score和mask quality不配准。因此文章基于Mask R-CNN提出一个新的框架Mask Scoring R-CNN,能自动学习出mask quality,试图解决不配准的问题。

    摘要

    让一个深度网络意识到自己预测的质量是一个有趣但重要的问题。在实例分割任务中,大多数实例分割框架使用实例分类的置信度作为mask质量分数。然而,将mask质量量化为实例mask与其ground truth之间的IoU,通常与分类分数的相关性并不好。

    在本文中,我们提出Mask Scoring R-CNN来学习预测实例mask的质量。提出的网络块将实例特征和相应的预测mask结合起来回归mask IoU。Mask评分策略校准mask质量和mask评分之间的偏差,并通过在COCO AP评估期间优先处理更准确的mask预测来改进实例分割性能。

    通过对COCO数据集的广泛评估,Mask Scoring R-CNN与不同的模型带来一致和显着的增益,并优于Mask RCNN。

    总而言之,这项工作的主要贡献突出如下:

    1. 提出Mask Scoring R-CNN,这是第一个解决实例分割假设得分问题的框架。它探索了改善实例分割模型性能的新方向。通过考虑实例mask的完整性,如果实例mask的得分较高而mask不够好,则可以对实例mask的分数进行惩罚。

    2. MaskIoU head非常简单有效。能够在各个backbone上涨点。

    正文:

    在实例分割(instance segmentation)中,比如Mask R-CNN,mask 分支的分割质量(quality)来源于检测分支的classification confidence。Mask R-CNN其实Faster R-CNN系列的延伸,其在Faster R-CNN的基础上添加一个新的分支用来预测object mask,该分支以检测分支的输出作为输入,mask的质量一定程度上依赖于检测分支。这种简单粗暴的做法取得了SOTA的性能,近年来COCO比赛的冠军或者前几名基本是Mask R-CNN及其变体,但依然有上升的空间。

    更仔细的来讲,Mask R-CNN存在的问题是:bounding box的classification confidence不能代表mask的分割质量。classification confidence高可以表示检测框的置信度高(严格来讲不能表示框的定位精准),但也会存在mask分割的质量差的情况。高的分类置信度也应该同时有好的mask 结果。

    回到原始的初衷,文章希望得到精准的mask质量,那么如何评价输出的mask质量呢?

    是AP,或者说是instance-level的IoU。这个IoU和检测用到的IoU是一个东西,前者是predict mask和gt mask的pixel-level的Intersection-over-Union,而后者则是predict box和gt box的box-level的Intersection-over-Union。所以一个直观的方法就是用IoU来表示分割的质量,那么让网络自己学习输出分割的质量也是简单直观的做法。学习出mask的IoU,那么最后的mask score就等于maskIoU乘以classification score,mask score就同时表示分类置信度和分割的质量。

    作者在Mask R-CNN的基础上添加了一个MaskIoU分支用于预测当前输出的mask和gt mask的IoU。MaskIoU的输入由两部分组成,一是ROIAlign得到的RoI feature map,二是mask分支输出的mask。两者concat之后经过3层卷积和2层全连接输出MaskIoU。

    training过程:

    box分支和mask保持不变,输出的mask先经过阈值为0.5的binarize,再计算binary mask和gt的IoU作为target,采用L2 loss作为损失函数,loss weight设为1,3个分支同时end-to-end训练。

    inference过程:

    检测分支输出score最高的100个框,再送入mask分支,得到mask结果,RoI feature map再和mask送入MaskIoU分支得到mask iou,与box的classification score相乘就得到最后的mask score。

    实验结果,在COCO 2017 test集上,相对于Mask R-CNN,mask AP有1个点多的提升。

    同时作者还做了对比实验,验证不同的MaskIoU输入对性能的影响。文章列举了4种输入方式:

    1. target mask和ROI feature concat
    2. target mask和ROI feature 相乘
    3. 所有mask和ROI feature concat
    4. target mask和高分辨率的ROI feature concat

    其网络结构示意图如下:

    验证不同training target对性能的影响:

    1. 只学习target类别的MaskIoU,忽略其他类别
    2. 学习所有类别的MaskIoU,相应的其他类别的MaskIoU的学习目标就是0
    3. 学习出现在ROI区域的类别的MaskIoU。

    可以看出,setting#1的效果最好,setting#2的效果最差。

    同时作者还做了实验探索Mask Scoring R-CNN的性能上界。

    对每个输出的MaskIoU,用输出的mask 和匹配的gt mask iou来代替,MaskIoU分支就输出了mask分支的真实quality,这时就得到了Mask Scoring R-CNN的性能上界。实验结果表明Mask Scoring R-CNN依然比Mask R-CNN更好,说明MaskIoU起到了alignment的效果,但很显然会比用gt mask iou 代替的效果差,说明一方面box的准确性和mask分支本身也会影响mask任务的性能,另一方面MaskIoU 分支的学习能力可以进一步提升,Mask Scoring R-CNN依然有提升的空间。

    速度方面,作者在Titan V GPU上测试一张图片,对于ResNet18-FPN用时0.132s,Resnet101-DCN-FPN用时0.202s,Mask Scoring R-CNN和Mask R-CNN速度一样。

    总结:

    作者motivation就是想让mask的分数更合理,从而基于mask rcnn添加一个新的分支预测来得到更准确的分数,做法简单粗暴,从结果来看也有涨点。其实mask的分割质量也跟box输出结果有很大关系,这种detection-based分割方法不可避免,除非把detection结果做的非常高,不然mask也要受制于box的结果。这种做法与IoU-Net类似,都是希望直接学习最本质的metric方式来提升性能。

    为了同时提升detection和mask的效果,最近的Cascade方法很受欢迎,从人脸检测领域的Cascade CNN, 到Cascade R-CNN: Delving into High Quality Object Detection,再到友商的HTC不仅在COCO中拿了冠军,同时也被CVPR2019接收,Cascade方式展现了强大实力,相信在未来会出现越来越多的Cascade,如Cascade RetinaNet,Cascade TridentNet。。。