你真的理解GPT吗?
共 15755字,需浏览 32分钟
·
2021-02-09 11:57
点蓝色字关注“机器学习算法工程师”
设为星标,干货直达!
如今,ML 领域公号也卷得厉害,最早我 reddit 灌灌水,邮件看看,就有东西写了也不怕重,现在基本上能第一眼看到的东西肯定还没动手大号们就发完了。
前段时间 DALL·E 刚出,果然还没动手写,无数文章就给介绍完了。对个人而言,要写的话要不就是别人没写过的,要不然就是写得比人深,不然感觉没太大意义。
一狠心,开个大坑吧,写写 GPT 发家史,如何从最初少人知晓,偏居一方,直到被 BERT 点名才被大家知道,再到 GPT2 一战成名。之后 OpenAI 和 GPT 相关的一举一动就都倍受关注,一有消息,便成为热议,比如这次 DALL·E,还有之前 GPT3 连正式博客都没发就各种讨论。
我之前算半个 GPT 黑粉,因为觉得技术创新不高,不像 BERT 有 MLM 这样惊艳的想法,所以没觉得很厉害。
之前有段时间被一个加拿大小哥缠着讲 GPT,他一直说 GPT 就是未来,就是 AGI(强人工智能),但其实 Transformer 都不是很懂。我当然对他是嗤之以鼻,还是最后收了 100 刀(用这钱买了一堆课)才给他把 GPT 结构从下到上都捋了一遍,细到计算图每个节点。
现在,随着 OpenAI 一步步往上堆,到 GPT3 各种 demo 出来,再到 DALL·E 直接文本生成图片,我也只能直呼牛比,香,真香。事实证明了不断坚持做一件正确事情的重要性。
有趣的是, OpenAI 成立之初并非因为文本生成模型而知名,这点和 DeepMind 些许不同,后者专注强化学习一百年。
而 OpenAI 一开始两条线是强化学习和生成模型(集中 GAN),而 GPT 开始也没受到太大关注,而是在探索中 OpenAI 发现了其可能性,便开始大力投入,到现在基本上一大半项目都与其相关。所以,现今大家提起 OpenAI 相信都是马上想起 GPT,再或者和马一龙(Elon Musk)早期有一腿,又多少人还能想起强化学习和GAN呢。
因为这样的发展,因此回顾 GPT 的发展史无疑是非常有趣的。这种始于微末,到之后野心庞大,仿佛要”天下布武“,文本音频图像统统都要的故事性。让我马上中二了,这种剧情太有戏剧性了,不正是:GPT 的野望!
![](https://filescdn.proginn.com/e17b08883ffc21b2bcd957386f4a0b68/7df8133ba17be7d3d9bb3e0de123c28f.webp)
接下来就来一起看看 GPT 是如何发家,一步步长大,实现它野望的吧!(文尾有时间线)
GPT:始于微末,偏居一方
说起 GPT 的东家 OpenAI,如上面提到的,刚成立时肯定也没想到自己之后是靠 GPT 加入大力神教而成名。毕竟那时刚发布 OpenAI Gym 的它还想着如何用强化学习来搏得一席之地,更远些实现 AGI,但如今大家也都知道了,帮他完成心愿的可能是 Hassabis 带领的 DeepMind 了。
![](https://filescdn.proginn.com/86b82258af3764bb4c7459d5409a5836/76ee37020d26ab47b0432a6876b66e35.webp)
看看 OpenAI 早期成员,除 Pieter Abbeel 等做强化学习的,就是一众做偏图像生成的,比如 GAN 提出者 Ian Goodfellow 最早也是入职 OpenAI,同期入职的还有一个叫 Alec Radford 发明 DCGAN 的精神小伙。大家记住这个名字,因为他对 GPT 的发展应该说至关重要。
所以可以看出最早 OpenAI 就是群做强化学习和图像生成的人,没啥做 NLP 的,自然也难料想自己居然是通过 NLP 来一战成名。
因此 GPT 模型也是从 OpenAI 15年成立,过了三年,到 18 年才趁着改革开放四十周年的春风,哦不,Transformer 和 NLP 预训练模型的春风,得以出现。
当时,提出 Transformer 的 Attention Is All You Need 于17年刚发表,大家尚在观望 Transformer 的效果,笔者也还在用 LSTM 做翻译。
而到了 18 年,亦可说是 NLP 预训练模型元年,开年 ULMFiT 和 ELMo 打开战局,到 年底 BERT 屠榜血流成河,让 NLP 领域进入了被芝麻街支配的恐怖。
![](https://filescdn.proginn.com/330d0decf82034ed18bc95370d938994/806749223dc212252b78a8f013a2e4cf.webp)
而第一代 GPT 也正是在这个风雨交加的一年的年中诞生,其实要说先兆也不是没有,看 OpenAI 17 年发的一篇博客 Unsupervised Sentiment Neuron,就已能看到其为之后 GPT 研究打下的基础。
![](https://filescdn.proginn.com/0e4ea0ca801a63ff4ade366651373eb0/139c37d79062c18e0990f4123f8ada11.webp)
这篇论文用 LSTM 在 Amazon 商品评论上训练单向语言模型,发现只通过这样如此简单的预训练目标,LSTM 就能产生一种情感神经元可以反应不同的情感。虽然当时用预训练获得表示在 SST 情感分类上取得了 SOTA,但大家更多聚焦的是它的可解释性,以及通过情感神经元进行可控生成的工作,倒并没对预训练给予太多关注,我最早知道该研究也是可解释性。
不过大家马上也看出其实这已为之后 GPT 打下了基础,GPT 和该研究的不同只在于将 LSTM 替换成 Transformer,还有用了更大更 general 的数据(这个套路之后也会不断出现),用的仍然是”如此简单的预训练目标“。
从作者阵容也能看出,Sentiment Neuron 的两位主要人员 Alec Radford 和 Ilya Sutskever 也在之后的 GPT 文章中一而再,再而三出现。俩人可堪称为 GPT之父。
说完前身,正式看看 GPT 模型吧,也可称其为 GPT1。
GPT 全称为 Generative Pre-Train(查了才知道),也就顾名思义通过生成式来预训练。
模型结构是 Transformer Decoder 结构,共 12 层,隐层大小 768,12 注意力头,训练长度为 512 个 token 长。总计 1.1亿参数,和之后的模型比当然只是个小不点,但当时也不小了。最大的 ELMo 才9千万参数。
![](https://filescdn.proginn.com/b0e4d66ed04baa47755551d79ac5c68d/5c01f2ba89771fe65363fac4394b246e.webp)
用到的数据是 BooksCorpus 数据集(约5GB),大概在 8 张 P600 (内存2GB)上训了一个月,可看到这时候给的资源还挺少。
效果实验也主要在**语言理解(Language Understanding)**任务上做的,在 GLUE 上取得的效果在当时看来也挺好的,很多任务上取得了 SOTA,但奇怪的是 GPT 似乎并没受到太大关注,也可能只是在小领域内有些名气,但整体来说还是少被提及(或许也跟它 idea 没太大创新性有关)。
我最初知道 GPT,估计和大多人一样,都是看到 BERT 论文中 pick 它出来碾压的时候。
![](https://filescdn.proginn.com/f7bcc33c2f37cad8b78cb90c287b0380/8f0dc508e689324fdeec29ded8d61a75.webp)
这时的 OpenAI 还没有看到 GPT 真正潜力所在,只是用它来做语言理解方面任务,但却忽略了它真正潜力其实在生成。而这也正是 GPT 之后几代亮点所在。
GPT 这篇博客 Improving Language Understanding with Unsupervised Learning,可看到 Future 一栏其中一条写着 Scaling the approach。
there is significant room for improvement using the well-validated approach of more compute and data.
如果适当的用更多算力和数据的话,还有很大的提升空间。
毫无疑问,这条路确实是正确的!
因为 GPT2 的到来。
GPT2:Too Dangerous To Release,一战惊天下
18年在 BERT 横空出世后的余震中结束,当翻过一年到 19 年,正值2月14日那天,情人节,一个本应是异性恋们暴击单身狗,给单身狗们饱喂狗粮的日子。
但科研单身狗却来不及伤心,只因 GPT2 的出现给机器学习领域投下又一枚炸弹,造成的整动是2019年全年,随着每次模型放出,都能成为头条。不管是 PR 做得好,还是 GPT2 真的就是危险,但至少让 GPT2 闻名的目的已达到。
![](https://filescdn.proginn.com/11c658ec56485ccb731869d226d877f9/6dd1e6fb3b439656bc2a3b1c6b66a976.webp)
正所谓一战惊天下,如织田信长桶狭间一战,成功斩首今川义元,从一方小势力成为名震天下的大名,开始其称霸之路。GPT 也正是从 GPT-2 的知名后,开始了其称霸之路。
大多人知晓 GPT2,还是从那句”Too Dangerous To Release(太危险了,不能给)“的回复开始。
GPT2 的成功真可以说是 AI 界最佳 PR 了,比起我司某某模型打了某某榜简直厉害百倍。论文发出来,大家要模型,先称太危险,利用大家对 AI 灭世论的恐惧来挑起话题。而之后放出的 Demo 也确实精彩,引起了一片论战,大家纷纷站边,到底该不该开源 GPT2 模型,还都说得很有道理。此外,还依稀记得 GPT2 有蹭到流量之王马一龙的流量,以及全年陆续开源模型的策略也不断拉起话题,真的牛。
而要说 GPT2 所宣称的 Misinformation(虚假信息)危险,我个人也觉得确实应该注意,疫情期间自己还尽过一份力来打击,但对于 GPT2,我只觉得是个幌子,之后大家也发现真正该防范的其实是 GAN(DeepFake)的 Misinformation,OpenAI 几个月后自己也发了博客,根据调查好像也没啥太大危害,哈哈哈,大家随意大家随意。
接下来聊聊 GPT2 的模型细节,还有其所宣称的惊人效果吧。
相比起 GPT,GPT2 主要的不同还是在于模型、数据、以及训练规模,更大更强了。
![](https://filescdn.proginn.com/949b076029f1e60745ea7accd5b072c1/223f7bf639aa18f96c11036a2180b8f8.webp)
首先模型方面,GPT2 最大的模型有 48 层,1600 隐层大小,25个注意力头,1024的上下文长度,而 GPT 的大小只相当于 GPT2 最小那个模型。
数据方面,通过抓取 Reddit 上 3 个点赞以上链接的文章,进行清洗,获得 40GB 的文本数据,称其为 WebText.
此外模型架构有点轻微改变,主体上还是 Transformer,但将 Layer Normalization 放到了注意力层的前面。相当于直接给 Token 向量打通了一条直通最后一层的通路,不知是否是因为这样会更有利于生成式训练。
![](https://filescdn.proginn.com/c79d430e47c0d1ada15323defc43a9f3/977a8ab1f3ede915404df40f42287daf.webp)
训练花费上,大概用 32 块 TPU v3(8 个核)训了一周,花了 4.3 万美金。在 18 年那个大家还不是很见过世面的时候,都被惊呆了,二三十万一个模型,乖乖。
当然,现在大家都已经习以为常,翻翻眼皮该干啥继续干啥。
关于效果方面相信也都很清楚,这次 OpenAI 意识到了,原来 GPT2 的强项不在语言理解啊,所以都没在 GLUE 上测试。而是直接展示 GPT2 真正的强项,生成。
论文中展示了一个 GPT2 生成的关于科学家发现独角兽的故事,虽然被吐槽是 Cheery-Pick(精心挑选)出来的,但效果还是非常惊人,包括其生成的流畅性,前后的逻辑性等等。
也正是因为好效果,OpenAI 才有底气称 GPT2 太危险,怕被滥用。
除了故事生成,也是从 GPT2 开始 OpenAI 开始重视其用于 Zero-Shot 的可能性。首先在各个语言模型任务上不训练直接进行评估,结果发现 GPT2 语言模型强大到直接 Zero-Shot 情况下屠榜。
当然语言模型任务还不是关键,更关键的是对其他任务也进行 Zero-Shot,比如问答,翻译,总结... 不训练只给出一些范例,然后让 GPT2 基于范例文本来直接进行生成,展示了 GPT2 的通用性。
关于 GPT2 模型开源策略,二月放出 small 模型,五月放出 medium 模型,八月才放出 larger 模型 ,十二月放出最大的 xl 模型,刚好一年。
这一年里,大家也基于 GPT2 放出的模型做了各种 demo,比如 HuggingFace 的 TalktoTransformer,和代码补全的 TabNine(用过都说好,除了资源消耗大),还有其他家也训练了类似模型,比如 Grover,但也学 OpenAI 没放出大模型,理由直接略,同 OpenAI。
GPT2 就这样红了 19 年一整年,期间当然芝麻街的各位也是你方唱罢我登场,打得不可开交。
在进入让所有人都难忘的 20 年前,还需要倒转一下时间,因为从年初放出 GPT2 后,OpenAI 也没闲着,当然不是把所有工夫都放在”安全“问题上。
而是在 GPT2 看到的可能性上进行进一步的探索与准备,首先第一步,为下一步的更大更强打好基础!
练兵屯粮:OpenAI LP,Sparse Transformer... All For Scaling!
第一步,当然是搞钱。
GPT2 的烧钱能力也是有目共睹,按照 OpenAI 的构想还要做得更大更强,往更多领域推广,就需要大量钱来搭建自己的大规模计算系统(GPT2 还借的谷歌家的 TPU),势必烧钱速度就更快了。
因此 OpenAI 先成立了一个好搞钱的所谓 ”Capped-Profit (有上限盈利)“ 的子公司 OpenAI LP,而母公司 OpenAI 还是 non-profit。
没过多久,就收到了微软爸爸给的一亿美金,同时合作一起开发专门给 OpenAI 用的大规模云计算资源。
在大规模分布式训练过程中,OpenAI 用的是 Kubernetes 搭建集群进行实验,也总结了大量的经验,包括 Scaling Kubernetes to 2,500 Nodes 和 Scaling Kubernetes to 7,500 Nodes 两篇博客,后面提到的 GPT3、DALL-E、以及 CLIP 等模型都是在 7500 节点集群上训练的。
于是硬件资源就搞定了,之后是软件方面,如果要进一步扩大 GPT 的规模,包括模型大小,还有建模长度,那势必要优化一下原始 Transformer 模型。原始 Transformer 模型的缺点总所周知,就是它的 计算复杂度,这也是近期的一个热门研究方向,魔改 Transformer,降低计算复杂度。
OpenAI 也给出自己的魔改方案,那就是 Sparse Transformer.
如其名 Sparse(稀疏),主要对 Transformer 中最占计算量的注意力矩阵(Attention Matrix)部分做了优化,通过稀疏化,将计算量从 降到了 . 具体操作就是通过观察总结后,将原来的注意力模式,替换成设定的更有效率的注意力模式,从而将算子中一个 降到了 .
![](https://filescdn.proginn.com/69a35d020b9c08f1992ed3d7c440791f/046ee615d257452050297ac704021cf6.webp)
当然 Sparse Transformer 那篇论文不光是提出了 Sparse Attention,还包括如何用它来构建更大规模的模型,包括增加到数百层,怎么通过重计算注意力权重来减少训练时内存使用,以及将稀疏注意力模式写成 GPU 核函数提高效率,此外还有混合精度等等。
还有一个非常需要指出的就是,OpenAI 从这里就已开始将 Transformer 不光用在文本,还用在音频和图像序列生成上了,这也为之后的发展打下一定基础。
除了上面提到的软硬件,OpenAI 也积累了各种大规模训练经验,都是些经(shao)验(qian)法则,总结出模型大小,数据集大小,计算量和损失的关系,还有模型的宽度和深度比例如何处理等等。这些规律的总结无疑对 OpenAI 进行各种实验非常有帮组,包括如何进行架构参数设计,如何分配最优计算资源。
感兴趣可以查看这两篇论文 Scaling Laws for Neural Language Models,Scaling Laws for Autoregressive Generative Modeling。看完这两篇,不由深感我等之贫穷,洒下了不甘的泪水。
基础都准备好了,就是时候开始我们 GPT 的野望了,攻城略地,进击吧!!!
进击:音频之音乐生成
![](https://filescdn.proginn.com/9d50f67beab22df41c331130cf86179b/16005d03428c1e4f39a525e85ac8c8a5.webp)
有了 GPT2 在文本的性能展示,以及 Sparse Transfromer 的各种训练优化,是时候将 GPT 的脚步迈出单纯的文本生成了。
第一步就是音频,音乐生成。
其实 Sparse Transformer 有对音频进行直接生成的实验,所以看到希望后,OpenAI 就开始慢慢投入人力来发展这条线。最开始对这方面进行探索的是 Christine McLeavey Payne,做了个简单的 demo,MuseNet.
紧接 GPT2 不久,19年四月末就发布的 MuseNet,模型结构用的就是 Sparse Transformer 的 72 层,24头,4096 上下文长度的模型,训练目标也很简单,将 GPT2 的文本序列换成了将 MIDI 文件的音频给 Token 化后的序列,单向序列生成。
![](https://filescdn.proginn.com/edb6eafcc38b63bdcf1d7979df5b2e91/a13b925e70bbb9d1643467eb3c07436e.webp)
而训练数据用的是,搜集到的各种 MIDI 文件,其中包括古典音乐,爵士,流行各种风格。还带有各种元信息,乐器作曲家等,这样就能加入乐器 Token 和作曲家 Token 来让模型分清不同乐器和作曲家风格,之后生成也就更可控。
大概训练数据的格式如下
bach piano_strings start tempo90 piano:v72:G1 piano:v72:G2 piano:v72:B4 piano:v72:D4 violin:v80:G4 piano:v72:G4 piano:v72:B5 piano:v72:D5 wait:12 piano:v0:B5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:4 piano:v0:G1 piano:v0:G2 piano:v0:B4 piano:v0:D4 violin:v0:G4 piano:v0:G4 wait:1 piano:v72:G5 wait:12 piano:v0:G5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:5 piano:v72:B5 wait:12
可看到,只是简单的给 MIDI 中的信息用文本表示出来了,包括乐器,音高,音量等(乐器:音量:音高)。
而实际效果,听了下,比较适合写作业听,虽然听起来像那么回事,但一首曲子没有完整主题,跳来跳去,风格倒是像一听就听出来了。
整体来说效果还挺好的,特别想到这只是基于单向序列预测来生成的。研究生阶段隔壁就是做音乐生成,看教授做的各种东西,会发现需要各种音乐理论,前后处理很麻烦,生成效果还不一定好。
而 MuseNet 直接无视各种理论,单向无脑输出。可类比语言生成方面,GPT 也没用到什么句法树啥的语言结构理论,只是单向输出,却能获得结构完整,逻辑还不错的文本。
当然 MuseNet 只是第一步,之后一年内 OpenAI 扩大团队(Alec 和 Ilya 也介入),又做出了一个更棒的音乐生成产品,那就是恰好一年多一点的20年4月末放出的 JukeBox.
![](https://filescdn.proginn.com/05fc34d5669cf2d30addf2ee1447dcf5/441395e0ef76de461df813db59294112.webp)
JukeBox 相比起 MuseNet 最大的改进就是————更大了。
开玩笑,确实是大了些(上下文长度扩大到 8192),但这不是关键,最关键的两点在于
将 MIDI 输入变成了 32-bit 44.1kHz 的纯音频输入,加入了编码解码方案来将音频 token 化,以及还原
![](https://filescdn.proginn.com/4e140b99ad1cf301a2065d3cd096800d/d8a19b96a78803b2b753256e6aa1b861.webp)
可基于文本(歌词)进行声音的输出
对于第一点,主要考虑,如果将纯音频输入当做 bit 处理,那么一个只有4分钟的音乐就有超过1000万个时间步,而如果想学习音乐的高层次信息又得参考全局信息,而这么长的时间步根本不可能直接用 Transformer 处理。
因此一个解决方案就是,通过将一段音频给离散化压缩投影到一个更低维的空间 token 化,来减少时间步。
而这里将音频离散化以及还原的部件用的是 VQ-VAE-2,能将音频编码成不同层次的 token,然后再解码回去。
![](https://filescdn.proginn.com/912dea0f42b6e234fb15a5e6d1ab5f7c/975003404630b00db664360ce8b97cd1.webp)
对于第二点,训练倒不难,难在获得歌词与音乐的对齐数据,研究人员通过一些先验,比如每个词固定窗口大小,或用 AutoLyricsAlign 这样的对齐工具来处理。
效果和 MuseNet 类似,效果不差听起来像个样子,而且在一些小范围还能生成一些很棒的片段,但大的像整个音乐的维度上却差强人意,不能生成那种整体结构化的东西。
此外这个模型巨慢,生成一分钟音频要将近 9 个小时。也找了音乐家来用,但发现尚没有比较好的辅助创作的用途。
但整体来说还是很 impressive 的,因为毕竟是直接从纯音频来做的音乐生成,也证明了在 GPT 在音频领域的能力。
进击:强化学习之加入人反馈的文本生成
![](https://filescdn.proginn.com/f0f388b624154e0876be5e427850eae6/fc37ddc27bf65732c3a91fb58fc8a10f.webp)
在文本生成方面,OpenAI 希望能做得更好。虽然 GPT2 显示不经过训练,只用一些文本 Prompt(提示)来引导,就能完成很多任务,比如翻译,摘要等等,但性能也理所当然不会太好,也很难控制。
于是就 OpenAI 就准备利用自己的强项,强化学习,来对文本生成进行加强。
第一个探索成果是,19年9月发布的 Fine-Tuning GPT-2 from Human Preference,方法非常简单,虽然用了强化学习的概念,但却是一个你我他,三岁小孩都懂的强化学习方法。
就是针对特定任务,先给个可基于文本,然后再给出四个可能样本,之后找众包工具人们,做多选题,对当前任务哪个最好,最后 GPT2 就用这个来进行 finetune 训练。
非常简单吧,名副其实的**“人工”智能**,给我一堆人,我就能生成一个宇宙。
任务包括限定风格的文本续写,以及文本摘要。
![](https://filescdn.proginn.com/fcc4a3c9581cb360ea5bb916c13d936e/4abbf4c1b98e02d8ca63202b2d050258.webp)
发现对续写任务,基于人反馈的 GPT2 只用非常少样本就能生成非常好的结果。但文本摘要却出了问题,因为人类标注会倾向于直接抽取式的摘要结果,导致 GPT2 也学到了这种倾向,变得只会简单地从文本中进行 copy 来进行摘要生成。
同样刚好一年后(发现规律了吗),2020年9月 OpenAI 放出一篇新博客,Learning to Summarize with Human Feedback. 正是吸取上面的经验后,做出的进一步实验。
这次用到了真正的强化学习。
只关注一个任务,之前不太成功的文本摘要,用的是 Reddit TL;DR 数据集。效果比上次好很多,能不 finetune 直接用在 CNN/DailyMail 摘要任务上用,效果还很好,都能作为一个通用的摘要模型了。
而相比起之前最主要的改进,在于两点
最重要的还是在于标注质量的提高,之前出的问题是模型会经常只 copy 片段用于摘要,但这是由于标注导致的。所以这次 OpenAI 吸取教训,不再用众包,直接雇了 80 个标注合约工,不按件计费了,要注重质量。此外,还对每个人进行了详细的面试入职,开发专门的标注界面,还有专门的聊天室来咨询问题,还会一对一打视频电话对... 非常用心了这次,因此才能获得比上次质量高很多的标注。
其次用到了真正意义上的强化学习算法 PPO,而 reward 不再是人直接给了,而是先用上面的高质量标注训练一个好的 reward 模型,之后再用这个 reward 模型来优化生成策略。
整个过程就如下图
![](https://filescdn.proginn.com/765b56f074e6a677d708cbc6d673d20e/84e46994b61efd5b6fa9e64f8042e161.webp)
先收集高质量人类标注 再用标注训练 reward 模型 最后用 reward 模型来训练生成策略,进行摘要生成
这套流程 OpenAI 非常熟悉,之前就有相关成果。
除了前面说的克服了之前模型 copy 的缺点,还发现通过强化学习策略,能让小模型比大模型有监督效果更好,比如通过该方式训练 13亿 参数模型,比120亿参数直接监督训练的摘要效果还要好。
当然和其他 GPT 一样缺点就是太大了,6.7B的模型用强化学习来 finetune 需要 320 GPU天。
进击:图像之图像生成
![](https://filescdn.proginn.com/9673b02727d87edcda2bd7d558da39ec/c9694017950e993d25994ba6191983ea.webp)
要说 GPT 系列里最让人 impressive 的,还是图像生成的成果,前段时间的 DALL-E 正是这部分的最新成果,也是 DALL-E 让我萌生了写这篇文章的想法。
DALL-E 和之前的 JukeBox,还有强化学习摘要一样,在正式出场前,都先有一个初步探索的成果。而对于 GPT 图像生成,这个成果就是 imageGPT 了,简称 iGPT.
![](https://filescdn.proginn.com/52917aa6d04cbf376aa0a41a07c9d782/a8c2bf21708a4553e12e6a21c105b807.webp)
idea 非常简单,和 Sparse Transformer 里做法一样,对图片像素直接进行序列预测,但 iGPT 为了展示 GPT 强大的通用性,刻意使用了和 GPT2 一样的架构,同时也为了避免植入先验,所以直接用的是完整版 Transformer,即计算复杂度 的版本.
这也导致 iGPT 的训练消耗很大,需要 2500 个 V100 天。因为算力需求高,这也让 iGPT 的建模长度不能太长,所以是在三种低分辨率大小上进行的训练:32x32, 48x48, 64x64.
为了进一步减少序列长度,没有直接用 RGB 编码格式的图片进行训练,而是 OpenAI 自己搞出了一个 9-bit 的颜色编码,比 RGB 格式的长度又小了三倍。
至于效果方面,如上面图片展示,首先 iGPT 可以明显生成可识别物体的图片,有些创意还很有意思,比如中间那只猫的生成。
但 iGPT 想要强调的并不是其生成能力,而是想展示 GPT 的通用性,通过这样简单的单向序列预测目标在图片上进行训练,也能学习到非常好的图片特征。
利用这些图片特征,iGPT 能在一些图片数据集上达到 SOTA.
![](https://filescdn.proginn.com/ce74765ecc4ba696882ca76cfa2b4f46/516630ca95506ecd87a3994cbe0dd356.webp)
当然这个 SOTA 代价也是非常大的,比对比学习的效率差太多了,但 OpenAI 表示这里只是在探索可能性,证明 GPT 的能力,爷就是壕。
以为按照同样规律,又要过个一年后,但没想到这次是半年后,OpenAI 在 GPT 的图片生成上就进一步放了一个大招:DALL-E. 还买一送一,送了个 CLIP.
![](https://filescdn.proginn.com/382b9b0ef98dab19d312c5fde0967144/440ae0428da6a51e84e4673f2e318c1a.webp)
DALL-E 很多细节还没放出来,更多只是展示了它惊人的效果,太炫了简直。
DALL-E 完成的任务用一句话来说就是,根据文本生成满足要求的图片。而且还能仿佛理解了文本内容一样,生成一些之前完全就不存在的图片,比如长颈鹿龟
![](https://filescdn.proginn.com/aa8ed538374c47a383ef500804dd119c/75ce792434acabfb7f1074b6e6fc9b67.webp)
更多 demo,可以去原贴看,还是一句,很惊人。比之前 GPT2 的文本展示给人的冲击力大多了。
按照博客里的说法,DALL-E 却并没用 GAN-loss,只是单纯用和 GPT 一样预测下一个 token 的最大似然损失。仅仅只是这样就能用文本进行图片生成,真的有点难以想象。所以说到底还是,Attention Is All Your Need! Transformer 结构真如 Sutton 教授在 The Bitter Lesson 里说的,是一种可以充分撬动算力来进行 Scaling 的方法。
接下来介绍关于 DALL-E 的模型细节。
首先,DALL-E 整个就是一个 GPT3 的图像版本,关于 GPT3 下一节会再介绍,主要还是更大更强了。而 DALL-E 用到的数据集,应该和 CLIP 一样,是 OpenAI 在网上爬取的大量图片与文本的成对数据。
之后,再将这些成对数据构建成 token 序列,前面是 256 个 token 长度的文本序列,而紧接着的是 token 化成 1024 个 token 的图片。
至于如何 token 化,还记得 JukeBox 的同学马上就能想到,没错,就是 VQVAE. 先将图片预处理成 256x256 的图片,之后预训练 VAE 将 256x256 像素大小的图片,压缩成 32x32 的离散隐编码,如此就刚好获得 1024=32x32 长度的图片 token 表示。
对前面的文本序列,Attention 采用的就是标准单向语言模型的 mask,而对图片序列部分,用的是 SparseTransformer 里提到的各种注意力模式。
对图片与文本之间,每个图片 token 都会看到所有的文本信息,之后训练也按照这样的安排,来进行单向 token 预测。
目前看到的就是这么简单的方式,之后加上超大的 GPT3,再加上可能也超大的文本图片对数据,就能够获得惊人效果的 DALL-E 了。
而 DALL-E 的缺点,还是之前所有 GPT 的缺点。
第一,计算量 super 大,先不说 GPT3 这样 Inference 一次,之后还得将生成的图片 token 用 VAE 还原成图片,还得 sample 多次,最后再用 CLIP(同样巨大),对这些图片进行 rerank,再挑出满意的图片。而且生成过程还得调,这就涉及到第二点。
第二,可控性差,虽然 GPT3 在大量数据上训完后的能力很强,但也让它像是一头难以控制的巨兽(初号机),要控制其产生令人满意的生成,需要不断尝试给它合适的文本引导 prompt。所以才会看到 demo 里有些 prompt 很奇怪,同样的话要说好几遍。
随着 GPT 的成功,估计之后 prompt engineering 也会成为一门学科(aka: GPT控制学)
商业化:GPT3 君临
基于数次提到的 GPT 的缺点,尤其是模型过大,算力需求大,所以之前想法也是这个肯定不太好投入实用上线。
结果 OpenAI 就在 20 年年中放出了一个 API 接口,而这其实也就是 GPT3,以及用它做的商业化。
![](https://filescdn.proginn.com/06d9ebca42eca7005fbbd87efaa00d15/99613389c8a475832e6d27e7787f2443.webp)
可以清晰看到,相比起 GPT2,这次 GPT3 真是一点没宣传模型,还不如 GPT,至少 GPT 还专门发了篇博客,而 GPT3 只是悄咪咪地发了篇论文,然后在 OpenAI API 博文里稍微提了一嘴。
但即便如此,GPT3 一出来还是受到了很大关注,引起了很多争议。最大争议当然就是来自一众对 GPT 报以巨大期望的人,以为 GPT3 一定能在 GPT2 基础上进行巨大创新,结果一看还是老路子,模型方面没有太大创新,继续烧钱!更大!更强!
模型更大了,从 GPT2 的 1.5B 给扩大到 175 B,96层,12288隐层大小,96头,真正的巨无霸,训练 batch size 还是 3.2M。数据也更大了,包括之前的 WebText 的加强版,还有一些开源高质量数据集,Books1,Books2,Wikipedia,此外还加入清洗过的 Common Crawl 数据,光纯文本就 570 GB 大小。
当然一定要说结构上没改动,也不是,其实就是之前提到过的 Sparse Transformer,GPT3 里的 Transformer 应该用了 Sparse 结构。
GPT3 论文长 75 页,大都是在做各种实验来探索它的性质,而其中主要关注的就如其标题 Language Models are Few-Shot Learners,提到的 Few-shot learning。
![](https://filescdn.proginn.com/0755362cb21f73a4fe8ffb8561fe28c4/5377fbe447c856cb53bfdcff552d33e4.webp)
当然这里的 Few-shot,和传统意义上理解的找几个例子 finetune 还不同。只是直接给 GPT3 几个相关例子,让 GPT3 输出想要的结果,这个过程中没有参数训练和梯度传递的。
之所以 OpenAI 做这样的实验,很大可能是因为 GPT3 的训练成本过大,因此如果要使用的话,更希望是能直接 inference 用,没有 finetune 的训练过程。
实验结果也给了 OpenAI 挺大信心,GPT3 能这样在大量任务上取得还算不错的成绩,充分证明了其强大的泛化性。甚至在一些任务上,只通过这样不用 finetune 训练的方法,就取得 SOTA 结果。
通过上述一系列 OpenAI 对 GPT3 的态度,已经能看出 OpenAI 对 GPT3 的期望,已经不在其所谓模型创新性了,更多在怎么展示它的实用性上,包括在各种任务上的通用性。此外论文里面还花了很大篇幅讨论其社会影响。
当然,最直接的还是给 API 放了出来,准备商业化。让大家可以通过申请白名单(特别难申请)来体验 GPT3 的效果。
而申请下了 API 的大佬们,用 GPT3 做了很多超炫的 demo,包括直接根据要求生成 html 和 css 代码,还有 AI Dungeon 直接让 GPT3 生成游戏剧本,各种各样。更多可参考 https://github.com/elyase/awesome-gpt3
OpenAI 商业化 GPT3 API 后,好爸爸微软立刻就开始砸钱,让 OpenAI 给该接口授权给它了,即使这个 API 还在 Beta 测试阶段。
而至于 GPT3 可能的前景,我个人还是挺看好的,因为展示出的很多 demo 确实好。而且根据吴教授在 The Batch 里提到的一些情况,他创立的 Landing.ai 里已经看到很多人开始考虑如何用 GPT3 来进行创业了。
而如果文本的 GPT3 API 成功后,因为上述的各种其他模态的模型也都是基于 GPT 模型来进行开发的,因此将这些无论是音乐生成,图像生成,摘要生成的打包成 API,也是非常简单。
未来随着开发相信 OpenAI 也会随着这些需要提供各种各样模态的 GPT 模型,而使用者只需要提供自己的 idea,剩下的交给模型就行。
未来
至于之后的路途,其实差不多能清晰的看到了,用 GPT 的这套框架,只要给出足够的数据,无论是什么,只要能 token 化和序列化,不管是什么模态,文本、音频、图像,甚至更远些如脑电波。GPT 这套框架都能给建模出来。
之后 OpenAI 只是想到一个应用的 idea,然后找到大量的数据,想办法序列化,就能直接训练出一个该应用的 XX-GPT 了。如之前提到的文字转音频,文字转图像,反过来 GPT 也能轻松做。
如果想要针对某个特定任务进行加强,那么也能用强化学习进行强化。
当然每个模型一个应用也很麻烦,之后肯定得想一种方法,简单点当然用任务 token 提示,将大量的任务放在一个模型里,最后只用一个超大模型就能完成各种任务。其实这也是 Google Brain 一直想要完成的事情,比如最近的 Switch Transformer.
![](https://filescdn.proginn.com/586ff618900e269fb65fa082e173bad2/45840d01672b126891e73b6f48231789.webp)
多年后,可能会有一个 GPT-1000,人们想要完成什么任务,比如说根据这个视频配一段 OST,告诉它,给它输入,它返回多个候选的创意,人类再在这些基础上进行调整完善,最后给这些结果反馈给 GPT,让它不断进化。而模型自身也能不断地从网络上抓取数据进行自我训练。
而这样的过程不断进行下去,日积月累最终获得的模型也必将近乎是一个通用型的人工智能。
时间线
![](https://filescdn.proginn.com/06b295f40ee72c7ced5b4bc70be175e8/756cd8d7d5496e4ca68dcf87d0b479c5.webp)
18 年:
Reference
[0] Unsupervised Sentiment Neuron: Learning to Generate Reviews and Discovering Sentiment
[1] GPT: Improving Language Understanding with Unsupervised Learning
[2] GPT2:Better Language Models and Their Implications
[3] Sparse Transformer: Generative Modeling with Sparse Transformers
[4] MuseNet
[5] GPT-2: 6-Month Follow-Up,很多作者影响
[6] RL from human prefer: Fine-Tuning GPT-2 from Human Preferences, 更多人介入
[7] GPT-2: 1.5B Release
[8] Jukebox, 作者:Prafulla Dhariwal, Heewoo Jun, Christine Payne, Jong Wook Kim, Alec Radford, Ilya Sutskever
[9] OpenAI API, GPT3,都没有成为 milestone,博客也没发,重要度下降
[10] Image GPT, Next pixel prediction
[11] Learning to Summarize with Human Feedback
[12] OpenAI Licenses GPT-3 Technology to Microsoft
[13] DALL·E: Creating Images from Text, 主导者,Aditya Ramesh
[14] CLIP: Connecting Text and Images
[15] Attention Is All You Need
[16] ULMFiT:Universal Language Model Fine-tuning for Text Classification
[17] ELMo: Deep contextualized word representations
[18] Scaling Laws for Neural Language Models
[19] Scaling Laws for Autoregressive Generative Modeling
[20] Microsoft Invests In and Partners with OpenAI to Support Us Building Beneficial AGI
[21] OpenAI LP
[22] Scaling Kubernetes to 2,500 Nodes
[23] Scaling Kubernetes to 7,500 Nodes
[24] Learning from Human Preferences
![](https://filescdn.proginn.com/5af1c5be27e0fbc92990792284e80eed/acc0eaf40bfedb8de8bfb3de57726b51.webp)
推荐阅读
谷歌提出Meta Pseudo Labels,刷新ImageNet上的SOTA!
涨点神器FixRes:两次超越ImageNet数据集上的SOTA
CondInst:性能和速度均超越Mask RCNN的实例分割模型
mmdetection最小复刻版(十一):概率Anchor分配机制PAA深入分析
MMDetection新版本V2.7发布,支持DETR,还有YOLOV4在路上!
无需tricks,知识蒸馏提升ResNet50在ImageNet上准确度至80%+
不妨试试MoCo,来替换ImageNet上pretrain模型!
mmdetection最小复刻版(七):anchor-base和anchor-free差异分析
mmdetection最小复刻版(四):独家yolo转化内幕
机器学习算法工程师
一个用心的公众号