当前位置: 首页 > news >正文

[GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练

前言

OpenAI的创始人之一,大神Andrej Karpthy刚在微软Build 2023开发者大会上做了专题演讲:State of GPT(GPT的现状)。

他详细介绍了如何从GPT基础模型一直训练出ChatGPT这样的助手模型(assistant model)。作者不曾在其他公开视频里看过类似的内容,这或许是OpenAI官方第一次详细阐述其大模型内部原理和RLHF训练细节。

难能可贵的是,Andrej不仅深入了细节, 还高屋建瓴的抽象了大模型实现中的诸多概念,牛人的洞察就是不一样。

比如,Andrej非常形象的把当前LLM大语言模型比喻为人类思考模式的系统一(快系统),这是相对于反应慢但具有更长线推理的系统二(慢系统)而言。这只是演讲里诸多闪光点的其中一个。

并且,Andrej真的有当导师的潜力,把非常技术的内容讲得深入浅出,而又异常透彻。这个演讲完全可以让非专业人士也能理解,并且,认真看完演讲后会有一种醍醐灌顶的感觉。

本次演讲的精校完整中文版视频的B站传送门: https://www.bilibili.com/video/BV1ts4y1T7UH

他将整个报告分为了两个部分,分别是GPT是如何训练的,以及该如何用GPT。

GPT是如何训练

这节的主要内容其实都是围绕着这个图中的概念来的,从左边开始到右边描述了gpt在训练过程中的4个阶段,通常来说是四个阶段预训练(Pretraining),有监督的微调(Supervised Finetuning),奖励建模(Reward Modeling)和强化学习(Reinforcement Learning),这几个阶段通常是依次进行,每个阶段都有不同的数据集。

这里从第一个阶段:预训练阶段开始说起,这个阶段使用大量的文本对模型进行预训练,消耗了99%的训练资源,需要数千GPU训练几个月(其他几个阶段只用了1%资源,一般是数个gpu训练几天就可以)。

预训练阶段

这个阶段首先需要准备大量的数据,下图是引用了llama中使用了哪些数据。

可以大致看到进入这些集合的数据集的种类,我们有common crawl这只是一个网络爬取,C4也是common crawl,然后还有一些高质量的数据集。例如,GitHub、维基百科、书籍、ArXiv论文存档、StackExchange问答网站等。这些都混合在一起,然后根据给定的比例进行采样,形成 GPT 神经网络的训练集。

下载完这些数据之后,并不能直接使用他们进行训练,计算机是无法识别的,需要首先做一下tokenization,将单词转化为token,这个过程如下图所示,最后的结果是每一个单词(或单词的一部分)都会被一个数字编号所代替,所有单词会形成一个词典,数字编号就是词典中的序号。

接下来开始准备一个transformer的模型,Andrej以GPT3和LLaMA作为例子如下图

这里针对几个超参数进行一下描述:

  • vocabulary size:表示上一张图中筹备的词典有多少个
  • context length:表示训练时一次性能输入的文本的长度是多少,意味着超过这个长度就无法记忆了
  • parameter:表示transformer的参数数量
  • Trained on XXX tokens:表示训练时一共看过多少token,可以认为是训练iteration * context length * batch size

这些大致是在进行预训练时要处理的数量级:词汇量通常是几万个标记。上下文长度通常是 2,000、4,000,现在甚至是 100,000,这决定了 GPT 在尝试预测序列中的下一个整数时将查看的最大整数数。

你可以看到,Llama 的参数数量大概是 650 亿。现在,尽管与 GPT3 的 1750 亿个参数相比,Llama 只有 65 个 B 参数,但 Llama 是一个明显更强大的模型,直观地说,这是因为该模型的训练时间明显更长,训练了1.4 万亿标记而不是 3000 亿标记。所以你不应该仅仅通过模型包含的参数数量来判断模型的能力。

这里我展示了一些粗略的超参数表,这些超参数通常用于指定 Transformer 神经网络。比如头的数量,尺寸大小,层数等等。

在底部,展示了一些训练超参数。例如,为了训练 65 B 模型,Meta 使用了 2,000 个 GPU,大约训练了 21 天,大约花费了数百万美元。

现在,当我们实际进行预训练时&#

相关文章:

  • C++ Qt开发:如何使用信号与槽
  • C++ Primer 总结索引 | 第二章:变量和基本类型
  • 【React】路由的基础使用
  • 【react】动态页面转换成html文件下载,解决样式问题
  • 前端知识(十七)——入口函数和特定函数的区别
  • 【复杂gRPC之Java调用go】
  • 记:vite3+vue3+axios前端项目跨域问题解决【前端和服务器nginx配置】
  • 【Spring】Spring统一功能处理
  • 计算机网络:数据链路层之差错控制、奇偶校验码、CRC循环冗余码、海明码
  • html通过CDN引入Vue组件抽出复用
  • 100天精通Python(可视化篇)——第110天:Pyecharts绘制可视化大屏项目(附上完整源码)
  • HttpURLConnection OOM问题记录
  • vr建筑虚拟实景展厅漫游体验更直观全面
  • running小程序重要技术流程文档
  • ubuntu-更改镜像源-系统初始化-安装Clion-C++编译环境-Java安装
  • [deviceone开发]-do_Webview的基本示例
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java 多线程基础, 我觉得还是有必要看看的
  • java多线程
  • js算法-归并排序(merge_sort)
  • k8s 面向应用开发者的基础命令
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • mac修复ab及siege安装
  • PHP 的 SAPI 是个什么东西
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • spring boot 整合mybatis 无法输出sql的问题
  • 搭建gitbook 和 访问权限认证
  • 高度不固定时垂直居中
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何优雅地使用 Sublime Text
  • 双管齐下,VMware的容器新战略
  • 移动端解决方案学习记录
  • 找一份好的前端工作,起点很重要
  • No resource identifier found for attribute,RxJava之zip操作符
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #pragma 指令
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (4)Elastix图像配准:3D图像
  • (day6) 319. 灯泡开关
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Note)C++中的继承方式
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (第61天)多租户架构(CDB/PDB)
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (七)c52学习之旅-中断
  • (转载)虚函数剖析
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .bat批处理出现中文乱码的情况