无论是面试找工作、还是自学创业,甚至想要在圈子内讨论一下AGI的潜力,但凡想要深度参与到AI浪潮中,不可避免的就是学习大型语言模型(LLM)的底层原理。
但AI发展这么多年,论文、学习资料多如牛毛,并且更新换代极快,如何快速入门,学习到那些真正的基础知识,对于新手来说都是一个难题。
最近,一位AI从业者在网上分享了自己的学习过程,仅用14天就学完了LLM所需要的核心知识,学习笔记在GitHub上斩获了675+星星,并且还在持续上涨。
仓库链接:https://github.com/hesamsheikh/ml-retreat
学习路线中的主要知识点包括token嵌入、位置嵌入、自注意力、Transformer、对Q、K、V的直观理解、因果和多头注意力、温度、top-k、top-p、分类和指令微调、旋转位置编码(RoPE)、KV缓存、无限注意力(长上下文窗口)、专家混合(MoE)、分组查询注意力(grouped query attention)、llama-2架构及相关技术等。
作者把学习路线分为了三个步骤:
1. 从头开始构建大模型(Build an LLM from Scratch)
这部分主要是总结语言模型的基础知识,包括token、位置嵌入、自注意力机制、Transformer架构、最初版本的注意力机制(Attention is All You Need论文)和微调的基本原理。
虽然网络上已经有很多资源,但其中最关键的参考资料是Sebastian Raschka编写的《从头开始构建大型语言模型》(Build a Large Language Model From Scratch),这本书解释技术原理时非常巧妙,读者也很容易理解。
在学习构建智能体时,一个无法绕过的难题就是研究自注意力机制的工作原理:自注意力机制可以让模型在处理文本时,能够理解每个单词或短语(也可以叫做token)在整体上下文中的位置和重要性。
整个过程会涉及到三个关键概念:查询(query)、键(key)和值(value),其中查询代表模型在寻找信息时提出的问题,键则是数据库中的索引,帮助智能体快速找到相关信息,而值则是查询所寻求的具体信息或数据。
三个组件的相互作用,使得智能体能够在处理语言时,不仅可以关注单个单词,还能理解单词之间的相互关系,从而更准确地捕捉文本的深层含义。
2. 大模型幻觉(LLM Hallucination)
在学习的第二部分,作者推荐学习「什么是幻觉」以及「LLMs为什么会产生幻觉」,可能也是潜伏在很多学习者脑海中的问题,对理解语言模型也有很大帮助。
幻觉是指模型生成的文本与现实世界的事实或用户的输入不一致的现象,对于研究人员以及使用LLM构建应用的人来说是一个巨大的挑战。
在研究过程中,你可能会意识到大模型的各种问题,诸如:
位置偏差(positional bias),即模型倾向于关注距离较近的token,而忽略了更远的token,偏差可能会影响模型对文本整体含义的理解。
曝光偏差(exposure bias),在推理阶段,模型预测出一个错误的token可能会影响后续token的生成,可能会导致模型在生成文本时出现一连串的错误,从而降低输出质量。
还会意识到数据、训练和推理对「幻觉」问题都有不同的影响。
为了缓解幻觉问题,可以尝试不同的训练策略,以减少模型在训练和推理时的不一致性;还可以考虑如何通过引入位置编码来解决位置偏差问题,以及如何通过增加模型的上下文理解能力来减少幻觉的发生。
总的来说,这些问题的解决需要深入理解模型的工作原理,以及如何通过各种技术手段来优化,随着研究的深入,可以开发出更加强大和可靠的智能体,以支持各种语言处理任务。
3. LLM Edge:不止注意力
最后阶段会学习到一些不那么「基础」的一些知识,但在构建LLM系统时非常关键,主要包括:
暂停(Pause) Tokens:让大模型有更多时间「思考」。
无限注意力(Infini-attention):通过利用之前处理过的token的记忆,可以让大模型的上下文窗口变的非常大,比如Gemini模型的上下文窗口就高达100万个token。
旋转位置编码(RoPE,Rotary Positional Embedding):一种相对位置编码方法,在Llama以及其他许多大型语言模型中广泛使用,主要优势在于能够关注序列中距离较远的token。
KV缓存(KV Cache):消除在生成先前token时重复的计算,可以提高效率。
专家混合(MoE,Mixture of Experts):不止使用单一的大规模模型,而是结合了多个较小的LLMs,由Mistral模型推广(Mistral的8个大小为7B的模型在某些任务上的表现超过了Llama 2的70B模型)。
为了回顾这些主题,作者主要研究了Meta的Llama模型的架构和代码,相关资源可以在代码仓库中找到。
在研究这些主题时,作者并不只依赖单一的资源,例如在学习大型语言模型(LLMs)的基础知识时,主要参考了《从头开始构建大型语言模型》这本书;与此同时,读论文也是必不可少的,特别是那些首次提出某项技术的研究(比如原始的Transformer论文),以及综述论文,汇总了众多研究并给出了简洁的总结。
一些教学视频也很有用,可以作为预热,让心里有一个大概的印象,一个比较好的资源是Andrej Karpathy,其中包含了大量「从零开始解释大型语言模型」的教学视频。
数学知识
线性代数:向量和矩阵,矩阵乘法
概率论和统计学:概率的基本概念,随机变量和分布,期望值和方差,最大似然估计(MLE)
微积分:微分和积分(尤其是用于反向传播),偏导数(用于基于梯度的优化)
优化:梯度下降,随机梯度下降(SGD),高级优化器(例如Adam)
编程、框架
Python:熟悉如NumPy和Pandas这样的库
深度学习框架:TensorFlow或PyTorch,熟悉模型训练、调试和评估
深度学习概念
理解感知机、激活函数和层。反向传播和梯度下降。损失函数(交叉熵,均方误差)
卷积神经网络(CNNs)(可选,但有帮助):有助于理解模型中层的操作
享受学习过程
虽然作者确实在两周之内把这些主题都学完了,涉及的概念也不是特别复杂,但作者表示,两周只是用来强调这并不是一项难以完成的任务,你并不需要设定一个严格的截止日期来学习这些资源。
在刚开始学习的时候,我也没想过14天就能学完,一切都是顺其自然,即使最后花了一个月,也没有任何问题,要享受发现新事物的乐趣。
不要拘泥于学习路线图
每个人都有自己的学习节奏和背景知识,你可以对学习路线图进行调整。
学习是一个非常个性化的体验,要学什么是基于「你已知的」和「你想知道的」,对于每个人来说,这个问题的答案都是不同的,所以不要完全照搬学习路线图,可以选择其中感兴趣的部分。
没有一本书、资源或路线图是最佳的,所以不要将自己局限于单一的资源。
不必读完所有内容
当你拿起一本书、观看YouTube视频或阅读论文来研究这些材料时,并没有规定要必须从头到尾读完,只需要获取到所需要的信息,就可以关掉了。
特别是论文,完整看完可能会非常耗时,所以在阅读这些材料之前,先确定你心中的问题,并有针对性地寻找答案,可以避免在不相关的内容上浪费时间,即使这些内容可能很有价值,但可能与你的需求无关。