博舍

【面试通关篇】 字节跳动AI 字节跳动ai学

【面试通关篇】 字节跳动AI

作者 |太蔡了

整理 | NewBeeNLP

面试锦囊之面经分享系列,持续更新中 

写在前面

楼主是C9末流渣硕一枚,现在已经正式确定offer要去我宇宙条了!当时为了准备面试几乎把网上头条的面经翻了个底朝天,确实很有收获,现在来发个面经攒攒人品,希望对正式批投头条的小伙伴们有帮助~

先说情况:楼主报的应该是算法工程师,好像就是一个大类没有细分。当然楼主想找的方向是现在一抓一大把的地狱难度的CV岗。

面试通知

接到面试通知的我完全是懵逼的。虽然我很早就知道头条开始了提前批,不过楼主当时还在忙着实习,压根就没时间准备秋招呀,所以也没投。后来一个上海的电话打过来了,说我被实习投递的人才库(没错,实习面试一轮游就凉了。。。)里捞出来了,想给我来个提前批的面试,时间就定在下周一。

这等邀请怎么能不答应啊!宇宙条诶!但是留给我准备的时间只有一个周末了,楼主也不敢想别的,赶紧趁周末打开我的leetcode把top100过了一遍,各种深度学习、机器学习的基础知识也不在话下。

一面

按照约定时间,一面准时开始了,面试官是个年轻的帅小伙。问的问题主要都是深度学习、CV方面的基础,没有自我介绍,上来就介绍实习的项目。

因为我实习中有用过GAN生成人脸,所以问我:GAN的损失函数形式是什么样的?(楼主写出来了,不过忘了写前面的min、max目标,面试官表示没关系,知道我是懂的就行了)

介绍一下什么是GAN?

有木有试过StarGAN之外的方法?(很尴尬的表示,并没有。。)

GAN是怎么训练生成器、判决器的?(楼主就说了最原始的GAN的交替训练的方法)

输入为L*L,卷积核为k*k,还有步长s和paddingp,求输出尺寸?(L1=(L-k+2*p)/s+1)

接上题,求操作的FLOPs?(FLOPS=k*k*c1*c2*L1*L1)

过拟合要怎么解决?(减少模型参数、早停、正则化、数据增强、GAN合成数据、dropout、fewshotlearning,等等等等)

上面自己提到了fewshot,解释一下是什么?(不小心给自己挖了个坑,还好楼主大致懂一点。。)

几个激活函数都有什么优缺点(sigmoid,tanh,relu,lrelu等)

概率题:x,y服从0-1均匀分布,求x+y

字节跳动 AI Lab 提出多模态模型:X

写在前面视觉语言预训练提高了许多下游视觉语言任务的性能,例如:图文检索、基于图片的问答或推理。有朋友要问了,除了在公开的学术任务上使用更大的模型/更多的数据/技巧把指标刷得很高,多模态预训练模型有什么实际应用呢?

为此,字节跳动AILabResearch团队提出了X-VLM,首次提出学习多粒度的视觉和语言对齐。实验证明,这种预训练方法十分高效,模型规模无需很大,预训练数据无需很多,仅216M参数量的X-VLM就能在广泛的多模态任务上获得了十分优秀的表现,例如:图像文本检索、基于图片的问答或推理、视觉定位、图片描述生成。目前,X-VLM在字节跳动的真实应用场景上超过了业界常用的多个模型,完成了上线,服务于如今日头条等业务。相关论文已被ICML2022接收。

论文:https://arxiv.org/abs/2111.08276代码:https://github.com/zengyan-97/X-VLM

比如,X-VLM学到了多粒度的视觉和语言对齐,能为图片生成更正确的描述物体和物体间关系的句子,这项能力被应用到了字节跳动的公益项目上。有视觉障碍的赵先生常用今日头条了解时事新闻,他一直有个期待:“希望和普通人一样‘看’到全部资讯内容。”今日头条上超过三分之二的资讯内容带有图片,为了解决视障人士的读图难题,今日头条App最近应用了X-VLM的生成能力,可以自动识别图片并为它们配上描述。

为了让他们“看”见每张图片,我们做了个小改进。

此外,X-VLM的理解和生成能力还被使用在大力智能学习灯的自动批改功能上。下图展示了补全短语题型以及模型预测的结果:

搭配了自动解题功能的大力智能学习灯广受家长好评,这项能力还在持续优化中。

研究背景现有的多模态预训练模型大致分为两类:

1)依赖目标检测器提取基于物体(例如:车、人、树、背包)的特征来表示图片,这种方法可以学习到物体级别的视觉和语言对齐,如图1中(a)所示。这些方法要么直接利用预先训练的目标检测器,要么将目标检测过程合并到多模态预训练中;

2)用ResNet或者VisionTransformer编码整张图片,只学习图片和文本之间的对齐,如图1(b)所示。

这两种方法都存在一定的问题。首先,基于目标检测的方法会识别图片中所有可能的物体,其中不乏一些与配对文本无关的。此外,这种方法所提取的基于物体的视觉特征可能会丢失物体之间的信息(可以认为是一种上下文信息)。而且,这种方法只能识别有限种类的物体,我们很难预先定义合适的物体类别。而第二种方法则比较简单直接,但是较难学习到细粒度的视觉和语言对齐,例如:物体级别的对齐。这种细粒度的对齐关系被之前的工作证实对于视觉推理(visualreasoning)和视觉定位(visualgrounding)任务很有帮助。

实际上,对于多模态预训练,有以下公开数据以供模型使用:1)图片和图片标题;2)区域标注,例如:图1中的文本“mancrossingthestreet”关联到了图片中的某个具体区域。然而,之前的工作却粗略地将区域标注与整张图片对齐;3)物体标签,例如“backpack”,这些标注被之前的工作用来训练目标检测器。

与之前的做法不同,本文中作者提出X-VLM,以统一的方式利用上述数据高效地学习多粒度的视觉和语言对齐,能够避免高开销的目标检测过程,也不局限于学习图像级别或物体级别的对齐。具体来说,作者提出可以使用基于VisionTransformer的patchembeddings来灵活表示各种粒度大小的视觉概念,如图1(c)所示:例如,视觉概念“backpack”由2个patch组成,而视觉概念“mancrossingthestreet”由更多的patch组成。

因此,X-VLM学习多粒度视觉和语言对齐的秘诀在于:

1)使用patchembeddings来灵活表示各种粒度的视觉概念,然后直接拉齐不同粒度的视觉概念和对应文本,这一过程使用常用的对比学习损失、匹配损失、和MLM损失优化;

2)更进一步,在同一张图片中,给出不同的文本,要求模型能预测出对应粒度的视觉概念的坐标,以边界框坐标的回归损失和交并比损失优化。实验证明,这种预训练方法十分高效,模型规模无需很大,预训练数据无需很多,X-VLM就能在下游多种多模态理解/生成任务上获得非常优秀的表现。

方法X-VLM由一个图像编码器,一个文本编码器,一个跨模态编码器组成。

图2左侧给出了视觉概念(可以是物体/区域/图片)的编码过程:该图像编码器基于VisionTransformer,将输入图片分成patch编码。然后,给出任意一个边界框,灵活地通过取框中所有patch表示的平均值获得区域的全局表示。再将该全局表示和原本框中所有的patch表示按照原本顺序整理成序列,作为该边界框所对应的视觉概念的表示。通过这样的方式获得图片本身(I)和图片中视觉概念(V1,V2,V3)的编码。与视觉概念对应的文本,则通过文本编码器一一编码获得,例如图片标题、区域描述、或物体标签。

X-VLM采用常见的模型结构,其不同之处在于预训练的方法。作者通过以下两类损失进行优化:

第一,在同一张图片中,给出不同的文本,例如:T(text)、T1(text1)、T2(text2)、T3(text3),要求模型预测图片中对应视觉概念的边界框:

xjcls是跨模态编码器在[CLS]位置的输出向量。Sigmoid函数是为了标准化预测的边界框。Ground-truth bj对应了,依次是标准化后的的中心横坐标、中心纵坐标、宽、高。最后,该损失是边界框坐标的回归损失(L1)和交并比损失(GIoU)之和。作者认为在同一张图片中,给不同文字,要求模型预测出对应的视觉概念,能使模型更有效地学习到多粒度的视觉语言对齐。该损失也是首次被使用在多模态预训练中。

第二,使用patchembeddings来灵活表示各种粒度的视觉概念,然后直接优化模型去拉齐不同粒度的文本和视觉概念,包括了物体/区域/图片与文本的对齐。作者使用多模态预训练中常见的三个损失优化,依次是:

1)对比学习损失:

yv2t,yt2v∈ Rbsz x bsz是ground-truth相似度,对角线为1,其余为0。

pv2t, pt2v∈ Rbsz x bsz是模型基于文字编码器输出和图像编码器输出所计算的相似度。

2)匹配损失:

pmatch是基于跨模态编码器计算,预测所给对是否匹配(换句话说,0/1分类)。对于每对正例,作者采样一对负例。

3)MaskedLanguageModeling损失:

T(估计值)中的一些词已经被随机替换成了[MASK],pj(V, T(估计值))是跨模态编码器在词tj位置的输出向量所计算的词表概率分布。

实验作者使用多模态预训练中常见的中等规模的4M和16M图片数据集进行实验,如下表所示:

其中,标注(#Ann)是区域标注和物体标签的总和。可以看出,有些数据集没有图片标题,例如VisualGenome(VG),有些数据集没有图片标注,例如CC-3M/12M。

表2展示了在图像文本检索任务(MSCOCO和Flickr30K)上的表现。即使,之前的方法在更大量的内部数据上预训练或者模型规模更大,在4M图片数据集下训练的X-VLM就已经可以超过之前的方法。

表3展示了在视觉推理(VQA2.0和NLVR2)、视觉定位(RefCOCO+)、图片描述生成(COCOCaption)上的模型表现。为了公平的对比,X-VLM沿用了之前工作的fine-tune方法,没有进行额外的调整。结合表2和表3,可以看出,相比之前的方法,X-VLM支持更多种类的下游任务,并且在这些常见的视觉语言任务上都取得了十分优秀的表现。

总结和讨论在本文中,作者提出了X-VLM以学习多粒度的视觉和语言对齐,能够避免高开销的目标检测过程,也不局限于学习图像级别或物体级别的对齐。X-VLM的秘诀在于:

1)基于patchembeddings灵活表示各种粒度的视觉概念,然后直接拉齐不同粒度的视觉概念和对应文本;

2)更进一步,在同一张图片中,给出不同的文本,要求模型能预测出对应视觉概念的坐标。实验证实这种预训练方法十分高效。

在实验部分,作者使用常用的4M和16M数据,训练总参数量216M的X-VLM,就能超过更大规模的模型或使用大量预训练数据的模型,在下游多种多模态理解/生成任务上取得非常优秀的表现。并且,字节跳动的工程师们也把X-VLM用在了真实的业务场景上,例如:为视障人群描述图片内容,小学生作业的自动批改。实际上,X-VLM还十分擅长细粒度的retrieval,visualgrounding等任务。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇