深入了解ChatGPT之类的大语言模型笔记
深入了解ChatGPT之类的大语言模型笔记
本篇是 Andrej Karpathy 的演讲 “Deep Dive into LLMs like ChatGPT” 的笔记。
Andrej Karpathy 是一位在机器学习和人工智能领域,尤其是深度学习和计算机视觉方面非常知名的专家。他曾在斯坦福大学获得博士学位,在那里他的研究工作集中在开发用于理解视觉世界的深度神经网络。Karpathy 还是 ConvNetJS 的创建者,这是一个用于浏览器中进行深度学习的库。
Andrej Karpathy 最为人知的角色之一是他在特斯拉(Tesla, Inc.)担任人工智能与Autopilot Vision部门的高级主管,致力于自动驾驶技术的发展。此外,他也是一位活跃的研究人员,对开源社区做出了巨大贡献,并通过各种平台分享了他的知识和见解,包括在Coursera上教授由吴恩达(Andrew Ng)发起的《深度学习专项课程》系列讲座。
深入了解ChatGPT之类的大语言模型|Deep Dive into LLMs like ChatGPT
演讲目的
- 理解语言大模型(LLM)工具本质
- 完整解析 LLM 的构建过程
构建过程
构建阶段
LLM 的构建,需要经历几个阶段:
- Pre-training 阶段:产生基础模型(互联网文档模拟器)
- supervised-trianing(监督微调):让模型学会对话,回答问题
- reinforcement learning(强化学习)
其中 supervised 和 reinforcement 训练都属于后训练
Pre-training 阶段
下载和处理Internet数据 -> 分词/标记化(Tokenization)-> 神经网络训练(neural network training)
下载和处理 Internet 数据
获得大量高质量的文档组成语料库,然后使用这些文档来训练模型。
- 高质量
- 多样性
- 大量
文本数据集例子:FineWeb
https://huggingface.co/spaces/HuggingFaceFW/blogpost-fineweb-v1
15万亿个 token,44TB 的文本数据,包含 1000 个不同的语言。
大的 AI 厂商都有自己的内部数据集。
- CommonCrowl
common crawl(CC)从2007年起持续爬取互联网,大约每1到两个月爬取并发布一次数据,数据大小大约是 200 - 400TiB。(TB 1040)。FineWeb 是基于 CommonCrowl 的数据集。
具体过程
URL filitering -> Text extraction -> Language Filtering -> Gopher Flitering -> Minhash deduplication -> C4 Filters -> Custom Filters -> PII Removal
- URL filitering:用黑名单滤除不需要的网站信息(恶意、垃圾、营销…)
- Text extraction:从网页中精准提取出高质量文本数据(不含html标签,导航等信息)
- Language Filtering:过滤掉非目标语言的文本
- PII Removal:去除个人身份信息
最终得到数据集示例:
https://huggingface.co/datasets/HuggingFaceFW/fineweb-edu
符号/分词/标记化(Tokenization)
本质上,Token 化是对文本流的重编码。所谓文本流,就是一个一维的字符序列,如果进行展开,则是一维的01串(原始比特流)。
没有编码的文本就是纯文本格式的文本,重编码的动机是:
- 数据量太大,计算开销太大
- 从统计上,一些连续的字符会有较大的概率重复出现,反之,一些字符组合出现的概率较小
这样,通过算法重编码,不仅可以体现统计规律,而且可以压缩数据。
因此,我们需要的编码方案是:更多的符号和更短的文本流序列。就好比我们增加英文字符的数量,从而使得英文文本流的长度得以缩短。
具体的符号/分词/标记化算法要点是:
- 所有的英文字符加入符号表
- 用BPE算法,将高频出现的连续符号对定义为新符号,加入符号表,反复迭代,扩展符号表
- 经验上,符号表大小在 10 万个符号效果较好
- gpt4 是 100,277个符号
符号化演示:
https://tiktokenizer.vercel.app/
神经网络训练(neural network training)
现在我们有了一个用符号表(token表)里面的符号(token)表示的token流,它是由原来的文本流经过符号/分词/标记化得到的。
从该流中,任意获取一串连续的token(任意获取一个窗口的连续token),窗口的最大长度可以任意,实操是通常在 8000 - 16000 之间,因为太长计算开销会显著增加。设获得的 token 如下:
t 1 , t 2 , . . . , t i t_1,t_2,...,t_i t1,t2,...,ti
其中,i 是小于窗口最大长度的任意值,我们称这个序列为 Context,
则,我们训练目标是,让神经网络尽量精确地预测下一个出现的token: t i + 1 t_{i+1} ti+1
如上图显示了一个 4 个token的序列,作为输入ÿ