ChatGPT|千字长文解密OpenAI 创始人 Andrej Karpathy从零开始构建一个 GPT
文章标签:
AI基础百科

如何从零开始 build 一个 GPT,Andrej Karpathy大神分享整个代码搭建流程

一。简介

我们构建了一个生成预训练的Transformer(GPT),遵循的是”Attention is All You Need”这篇论文以及OpenAI的GPT-2 / GPT-3。我们讨论了与ChatGPT的关联,ChatGPT已经在全球范围内引起了轰动。我们观察了GitHub Copilot(它本身就是一个GPT)如何帮助我们编写GPT(元:D!)。我建议大家观看之前的makemore视频,以便熟悉自回归语言建模框架和张量以及PyTorch nn的基础知识,这些在本视频中我们都是默认已知的。

链接:

涉及到的论文

二。视频内容

《Let’s bui,ld GPT: from scratch, in code, spelled out.》这个学习视频中,作者根据 Attention is All You Need & GPT-3 的论文来从零开始构建一个 GPT,每一部分都有代码演示,分享给感兴趣的小伙伴。

原视频时长2个小时,我根据视频内容提取GPT构建流程中重点原理和借助工具,供各位码农学习和借鉴,当然时间充裕的,也可以直接去观看完整视频。

英文原版地址:Let’s build GPT: from scratch, in code, spelled out. (或者可以直接在b站上搜索,Let’s build GPT: from scratch, in code, spelled out.

1. 视频开始时,Andrej Karpathy介绍了GPT-3模型的基本结构。他解释了Transformer模型的基本组成部分,如自注意力机制、多头注意力机制、前馈神经网络等。这些组件是构成Transformer模型的基础,也是GPT-3模型的核心。

2. Andrej Karpathy详细讲解了如何实现一个Transformer模型。他首先解释了自注意力机制的工作原理,包括其如何通过计算输入序列中每个元素的权重来生成新的表示。接着,他讲解了多头注意力机制,这是一种将输入分割成多个部分,然后分别进行自注意力计算的方法。最后,他讲解了前馈神经网络的工作原理,这是一种在Transformer模型中进行信息处理的方法。

3. 在讲解了如何实现Transformer模型后,Andrej Karpathy转向了如何训练这样的模型。他讲解了如何选择合适的超参数,包括学习率、批次大小、训练轮数等。他还讲解了如何选择合适的优化器,如Adam优化器,以及如何选择合适的损失函数,如交叉熵损失函数。

4. Andrej Karpathy还讲解了如何使用预训练的GPT-3模型进行微调。他解释了微调过程中的一些关键步骤,包括如何选择微调任务、如何准备微调数据、如何进行微调训练等。他还强调了在微调过程中需要注意的一些问题,如过拟合、欠拟合等。

5. 视频的后半部分,Andrej Karpathy介绍了一个名为Nano GPT的项目。这个项目是一个简化版的GPT-3模型,只包含两个文件,一个是用于训练模型的train.py,另一个是用于定义模型的model.py。Andrej Karpathy详细解释了这两个文件的内容和功能,包括如何定义模型的结构、如何实现模型的训练等。

6. 在介绍了Nano GPT项目后,Andrej Karpathy展示了如何使用这个项目来训练自己的GPT-3模型。他解释了训练过程中的一些关键步骤,包括如何准备训练数据、如何设置训练参数、如何进行训练等。他还展示了训练过程中的一些实际操作,包括如何启动训练、如何监控训练进度、如何保存训练模型等。

7. 视频的最后部分,Andrej Karpathy总结了整个视频的内容,并鼓励观众去尝试自己训练一个GPT-3模型。他强调了,虽然训练一个GPT-3模型需要大量的计算资源和时间,但这是一个非常有价值的学习经验。

8. Andrej Karpathy还强调了,虽然他们的模型在结构上与GPT-3相似,但GPT-3的规模要大得多,训练数据量也大得多。他们的模型是在一个小规模的数据集上进行训练的,而GPT-3则是在整个互联网上的大量数据上进行训练的。

9. Andrej Karpathy还解释了,训练这样的大规模模型需要大量的计算资源,通常需要数千个GPU,并且需要进行大量的工程优化才能使模型的训练变得可行。

10. Andrej Karpathy还讲解了GPT-3模型的训练过程,包括预训练阶段和微调阶段。在预训练阶段,模型会在大量的文本数据上进行训练,学习如何生成类似于训练数据的文本。在微调阶段,模型会在特定任务的数据上进行训练,学习如何完成特定的任务。

11. Andrej Karpathy还解释了,虽然预训练阶段可以在公开的数据上进行,但微调阶段通常需要在私有的、标注的数据上进行,这使得微调阶段的复现变得更加困难。

12. 最后,Andrej Karpathy强调了,虽然他们的模型在结构上与GPT-3相似,但由于训练数据和规模的差异,他们的模型的性能与GPT-3还有很大的差距。

三。以下是Andrej Karpathy建议的练习:

可以直接运行的代码https://colab.research.google.com/drive/1JMLa53HDuA-i7ZBmqV7ZnA3c_fvtXnx-?usp=sharing

  • EX1:n维张量掌握挑战:将Head和MultiHeadAttention合并为一个类,该类并行处理所有的头,将头视为另一个批次维度(答案在nanoGPT中)。
  • EX2:在你自己选择的数据集上训练GPT!还有什么其他的数据可能会有趣地喋喋不休呢?(如果你喜欢的话,一个有趣的高级建议:训练一个GPT来做两个数字的加法,即a+b=c。你可能会发现预测c的数字的反向顺序很有帮助,因为你希望它学习的典型的加法算法(你希望它学习的)也会从右到左进行。你可能想要修改数据加载器,只需提供随机问题,跳过生成train.bin,val.bin。你可能想要在a+b的输入位置使用y=-1在目标中屏蔽损失,这些位置只是指定问题(参见CrossEntropyLoss ignore_index)。你的Transformer学会加法了吗?一旦你有了这个,swole doge项目:在GPT中构建一个计算器克隆,对所有的+-*/。这不是一个简单的问题。你可能需要Chain of Thought traces。)
  • EX3:找到一个非常大的数据集,大到你看不到训练和验证损失之间的差距。在这些数据上预训练transformer,然后用这个模型初始化,并在tiny shakespeare上进行微调,步数较少,学习率较低。你能通过预训练获得更低的验证损失吗?
  • EX4:阅读一些transformer论文,并实现一个额外的特性或改变,人们似乎会使用。它是否提高了你的GPT的性能?
分享到:
0
0

发表回复

猜你喜欢
近期文章
生成式AI看起来很美,ROI怎么算
利用生成式AI推动创新 美国本田这样做
东方Project-个人AI绘画合集-8(更新至2024-2-14)
AI绘画(动物科普)—兔狲
12.28乾坤AI日报 — 2023年度十大科技名词发布
近期评论
ai-world发表在
AI赛博机车—借助SD技术赚取第一桶金
mulei77发表在
AI赛博机车—借助SD技术赚取第一桶金
An Vũ( CEO AGBIG GROUP)发表在
12.25乾坤AI日报 — 苹果正购买新闻采集权用于训练生成式 AI