视觉 Transformer(ViT) 的诞生过程:一个原本只擅长处理文字的模型,怎么被改造成能 “看图” 的模型,以及它最终还差了什么
<iframe width="100%" height="580" frameborder="0" src="https://open.douyin.com/player/video?vid=7703519881974648083" autoplay="0" referrerpolicy="unsafe-url" allowfullscreen></iframe>[*]起点:文字和图片是两套系统 2017 年 Transformer 在自然语言处理上几乎横扫旧方法,但图像领域到 2020 年仍主要靠 2012 年的卷积网络(AlexNet 那一套)。卷积像拿小窗口一格一格扫,猫耳朵和猫尾巴要经过十几层才能建立联系;而 Transformer 第一层就能让任意两个词直接算关系。柏林 Google Brain 的 Alexey Dosovitskiy 想试试:能不能让 Transformer 也看图?
[*]第一步:把像素当词,走不通 OpenAI 的 Image GPT 先试了直路 —— 把像素按阅读顺序排成一长串,像预测下一个词那样预测下一个像素。难点是颜色有 1600 多万种,没法给每种颜色配一行数字,于是统计出 512 种代表色做 “像素词表”,输入长度也缩到三分之一。但每个像素都要和其他像素两两计算,224×224 的图就有五万多个 token,计算量比语言模型大几万倍,一张显卡连一层都放不下,只能把图缩到 32×32,比手机图标还小。这条路证明了 Transformer 不依赖二维结构也能学到规律,但也证明了逐像素处理根本撑不住。
[*]第二步:切块,ViT 的关键 Dosovitskiy 团队换了单位:把 224×224 的图按 16 像素见方切成 14×14 共 196 个图像块(patch),每块 768 个数压成一串和词向量等长的数字。这样不需要词表,任何一块画面都能直接转换,颜色也不用压缩。两两计算从 25 亿次降到不到 4 万次,少了六万多倍。再补上位置编码,并在最前面加一个空的 CLS 位汇总全图做分类。
[*]为什么先输后赢 用 ImageNet 128 万张图训练时,ViT 比同规模卷积网络低几个百分点。原因是卷积结构里预置了两条 “归纳偏置”:相邻像素才相关、猫移到哪都还是猫。数据少时这是帮手,ViT 得自己从数据里摸索。换成 Google 内部 3 亿张图后,ViT 反超,ImageNet 准确率到 88.55%,算力还更省。
[*]它没解决的事 ViT 最后仍是从 ImageNet 的 1000 个预设类别里挑一个编号:橘猫对应第 281 格 “虎斑猫”,而水豚不在选项里,只能说成豚鼠或河狸,没法回答 “我不认识”。更关键的是,图像块和文字 token 虽然用同一种结构,两边的数字毫无对应关系 —— 照片和 “猫” 这个字,在模型眼里仍是两件不相干的事。视频结尾把问题留在了这里:怎么让它们终于认出彼此。
页:
[1]