点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

整理:公众号@机器之心

本文仅做学术分享,如有侵权,请联系删除。

如果说 GPT 模型是所向披靡的战舰,那么 minGPT 大概算是个头虽小但仍能乘风破浪的游艇了吧。

最近,「史上最大 AI 模型」GPT-3 风靡全球。

GPT 系列可以说是人工智能领域「暴力美学」的代表作了。2018 诞生的 GPT,1.17 亿参数;2019 年 GPT-2,15 亿参数;2020 年 GPT-3,1750 亿参数。短短一年时间,GPT 模型的参数量就呈指数级增长。

GPT-3 发布后不久,OpenAI 即向社区开放了商业 API,鼓励大家使用 GPT-3 尝试更多的实验。然而,API 的使用需要申请,而且你的申请很有可能石沉大海。那么,除了使用官方 API 以外,我们还有没有其他方法能上手把玩一下这个「最大模型」呢?

近日,特斯拉人工智能研究负责人、前 OpenAI 研究科学家 Andrej Karpathy 进行了尝试。

他基于 PyTorch,仅用 300 行左右的代码就写出了一个小型 GPT 训练库,并将其命名为 minGPT。

Karpathy 表示,这个 minGPT 能够进行加法运算和字符级的语言建模,而且准确率还不错。不过,在运行 demo 后,Andrej Karpathy 发现了一个有趣的现象:2 层 4 注意力头 128 层的 GPT 在两位数加法运算中,将 55 + 45 的结果计算为 90,而其他加法运算则没有问题。

目前,该项目在 GitHub 上亮相还没满 24 小时,但 star 量已经破千。

minGPT 项目地址:https://github.com/karpathy/minGPT

minGPT:只用 300 行代码实现的 GPT 训练

如果说 GPT 模型是所向披靡的战舰,那么 minGPT 大概算是个个头虽小但仍能乘风破浪的游艇了吧。

在项目页面中,Karpathy 介绍称:由于现有可用的 GPT 实现库略显杂乱,于是他在创建 minGPT 的过程中, 力图遵循小巧、简洁、可解释、具有教育意义等原则。

GPT 并非一个复杂的模型,minGPT 实现只有大约 300 行代码,包括样板文件和一个完全不必要的自定义因果自注意力模块。Karpathy 将索引序列变成了一个 transformer 块序列,如此一来,下一个索引的概率分布就出现了。剩下的复杂部分就是巧妙地处理 batching,使训练更加高效。

核心的 minGPT 库包含两个文档:mingpt/model.py 和 mingpt/trainer.py。前者包含实际的 Transformer 模型定义,后者是一个与 GPT 无关的 PyTorch 样板文件,可用于训练该模型。相关的 Jupyter notebook 则展示了如何使用该库训练序列模型:

  • play_math.ipynb 训练一个专注于加法的 GPT;

  • play_char.ipynb 将 GPT 训练成一个可基于任意文本使用的字符级语言模型,类似于之前的 char-rnn,但用 transformer 代替了 RNN;

  • play_words.ipynb 是 BPE(Byte-Pair Encoding)版本,目前尚未完成。

使用 BPE 编码器、分布式训练和 fp16,这一实现有可能复现 GPT-1/GPT-2 的结果,不过 Karpathy 还没有尝试。至于 GPT-3,minGPT 可能无法复现,因为 GPT-3 可能不适合 GPU 内存,而且需要更精细的模型并行化处理。

使用示例

Karpathy 在 minGPT 项目中提供了一些使用示例。

这些代码非常简单,只需 hack inline 即可,而非「使用」。目前的 API 外观如下:

minGPT 是如何实现的?

在实现过程中,Karpathy 参考了 OpenAI GPT 官方项目,以及其他组织的示例等。

代码

  • OpenAI gpt-2 项目提供了模型,但没有提供训练代码(https://github.com/openai/gpt-2);

  • OpenAI 的 image-gpt 库在其代码中进行了一些类似于 GPT-3 的更改,是一份不错的参考(https://github.com/openai/image-gpt);

  • Huggingface 的 transformers 项目提供了一个语言建模示例。它功能齐全,但跟踪起来有点困难。(https://github.com/huggingface/transformers/tree/master/examples/language-modeling)

论文 + 实现说明

此外,项目作者还介绍了相关的论文和实现细节。

1. GPT-1:《Improving Language Understanding by Generative Pre-Training》

  • 论文地址:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf

GPT-1 模型大体遵循了原始 transformer,训练了仅包含 12 层解码器、具备遮蔽自注意力头(768 维状态和 12 个注意力头)的 transformer。具体实现细节参见下图:

2. GPT-2:《Language Models are Unsupervised Multitask Learners》

  • 论文地址:https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf

GPT-2 将 LayerNorm 移动每个子模块的输入,类似于预激活残差网络,并在最后的自注意力模块后添加了一个额外的层归一化。此外,该模型还更改了模型初始化(包括残差层初始化权重等)、扩展了词汇量、将 context 规模从 512 个 token 增加到 1024、使用更大的批大小等。具体实现细节参见下图:

3. GPT-3:《Language Models are Few-Shot Learners》

  • 论文地址:https://arxiv.org/pdf/2005.14165.pdf

GPT-3 使用了和 GPT-2 相同的模型和架构,区别在于 GPT-3 在 transformer 的各层上都使用了交替密集和局部带状稀疏的注意力模式,类似于 Sparse Transformer。具体实现细节参见下图:

Andrej Karpathy 其人

Andrej Karpathy 是计算机视觉、生成式模型与强化学习领域的研究者,博士期间师从斯坦福大学计算机科学系教授李飞飞。读博期间,他曾两次在谷歌实习,研究在 Youtube 视频上的大规模特征学习。此外,他还和李飞飞等人一起设计、教授了斯坦福经典课程 CS231n。

2016 年,Karpathy 加入 OpenAI 担任研究科学家。2017 年,他加入特斯拉担任人工智能与自动驾驶视觉总监。如今,Karpathy 已经升任特斯拉 AI 高级总监。他所在的团队负责特斯拉自动驾驶系统 Autopilot 所有神经网络的设计,包括数据收集、神经网络训练及其在特斯拉定制芯片上的部署。

和教授 CS231n 时一样,Karpathy 希望他利用业余时间做的这个 minGPT 也能有一定的教育意义。他这种化繁为简的举动得到了众多社区成员的赞赏:

除了关于 minGPT 本身的讨论之外,还有人提出:有没有可能借助社区力量一起训练 GPT-3?也就是说,如果成千上万的开发者在 GPU 空闲的时候将其贡献出来(比如夜间),最后有没有可能训练出一个 1750 亿参数的 GPT-3?这样的话,大家只需要分摊电费就好了。

不过,有人指出,这种分布式训练的想法非常有趣,但可能会在梯度等方面遇到瓶颈。

还有人调侃说,把电费众筹一下拿来买云服务岂不是更简单?

参考链接:https://news.ycombinator.com/item?id=24189497

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉优质源码即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

一天star量破千,300行代码,特斯拉AI总监Karpathy写了个GPT的Pytorch训练库相关推荐

  1. ControlNet star量破万!2023年,AI绘画杀疯了?

    来源:机器之心 从骑马的宇航员到三次元小姐姐,在不到一年的时间里,AI 绘画似乎已经取得了革命性的进展. 这个「骑马的宇航员」由 OpenAI 2022 年 4 月推出的文生图模型 DALL・E 2 ...

  2. 首个大众可用PyTorch版AlphaFold2复现,哥大开源OpenFold,star量破千

    作者丨小舟 来源丨机器之心 AlphaFold2 是 2021 年 AI for Science 领域最耀眼的一颗星.现在,有人在 PyTorch 中复现了它,并已在 GitHub 上开源.这一复现在 ...

  3. 三百行python代码的项目_使用300行代码创建一个分布式系统

    使用 300 行代码创建一个分布式系统 构建一个分布式系统是很困难的. 它需要可扩展性. 容错性. 高可用性. 一致性. 可伸缩以及高效.为了达到这些目的,分布式系统需要很多复杂的组件以一 种 复杂的 ...

  4. c语言300行代码大作业,C语言300行代码

    <C语言300行代码>由会员分享,可在线阅读,更多相关<C语言300行代码(3页珍藏版)>请在人人文库网上搜索. 1.include #include #include #in ...

  5. 特斯拉AI总监用300行代码实现“迷你版GPT”,上线GitHub三天收获3.3k星

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI "GPT并不是一个复杂的模型." 前OpenAI科学家.现任特斯拉AI总监的Andrej Karpathy在自己的Gi ...

  6. 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统

    [摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...

  7. python编程小游戏代码-Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...

  8. python小游戏代码大全-Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...

  9. python小游戏源码-Python小游戏之300行代码实现俄罗斯方块

    Python小游戏之300行代码实现俄罗斯方块 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python小游戏之300行代码实现俄罗斯方块.txt ] (友情提示:右键点上 ...

最新文章

  1. 乘风破浪的马里奥!这个AI带你一口气通29关,你猜连AI都过不去的是哪3关?
  2. 英特尔10纳米处理器再度跳票,或收缩芯片代工业务
  3. python下requests的安装、测试、入门资料、官方资料
  4. QT的QMimeData类的使用
  5. MySQL复习资料(六)——MySQL-多表联合查询
  6. python白盒测试_白盒测试方法
  7. Dnscrypt_wrapper 服务端的安装与配置
  8. 股票型基金和期货有什么区别?
  9. 剑指 Offer II 055. 二叉搜索树迭代器
  10. 全文搜索工具 AnyTXT Searcher(转载)
  11. 鸿蒙造化什么意思,大家说鸿蒙造化决,和鸿蒙天地有关系吗
  12. CAPL学习之路-SOME/IP相关函数
  13. Sublime Text安装及配置Python3
  14. 计算机网络实验(二)2交换机的基本配置与管理
  15. 简约毕业论文答辩PPT模板
  16. 开启更优网络的时代:Po.et迈入主网
  17. Quartus .sof转换成.jic
  18. IOS开发之UI进阶(安全区高度)
  19. MySQL创建S,P,J,SPJ表,以及SQL语句
  20. 华为不要php开发,华为手机开发者选项的利与弊!有些设置最好不要打开

热门文章

  1. shiro源码分析(四)具体的Realm
  2. 数据处理程序语言中的基本数据类型
  3. SQL 的Over 子句
  4. Asp.net MVC 3实例学习之ExtShop(二)——创建母版页
  5. Java 命名规范(非常全面)
  6. 2W 字详解 Redis 6.0 集群环境搭建实践
  7. 《让系统发生重大宕机事故的15个方法》
  8. 十二张图详解Redis的数据结构和对象系统
  9. 电脑族必备的6款神器,第1个都让人惊艳了!
  10. 如何使用Leangoo看板统计中的任务分布?