初学者如何系统入门大语言模型(LLM)?
关于如何入门 LLM,大多数回答都提到了调用 API、训练微调和应用。但是大模型更新迭代太快,这个月发布的大模型打榜成功,仅仅过了一个月就被其他模型超越。训练微调也已经不是难事,有大量开源的微调框架(llamafactory、firefly 等),你只要懂部署,配置几个参数就能启动训练。甚至现在有大量云上项目,你根本不需要部署,直接上传数据,就能启动。
这让人联想到之前的算法工程师都被调侃成调参师,新出一个大模型,下载下来跑一遍,运行一遍 AutoTokenizer.from_pretrained(model_path),对于自己理解和入门大模型没有任何意义。
对于初学者如何入门,我的建议是从一个开源大模型入手,全面了解它的运行原理以及如何应用。可以将大模型比作一辆车,我开车无需理解车是如何做的,但是车出问题了,了解原理能够帮我们快速找到其中的问题。
为了更好入门大模型,我建议按照以下顺序学习,分为编程基础准备、大模型原理理解和大模型应用三个部分。
一、编程基础准备
1. 熟练 Python 编程语言
我一般使用 numpy 用于数据处理,matplotlib 用于画图分析(比如分析位置编码、注意力矩阵)。numpy 很多函数与 pytorch 类似放后面讲,这里主要讲常用的 matplotlib 画图函数,学好 matplotlib 库有利于我们以可视化的角度去理解一些大模型原理。
-
plt.bar(x, y, width): 绘制柱状图。![图:Llama3 8B 参数分布直方图]
举个例子,画直方图分析 llama3 8B 中参数分布情况,可以发现有 2 个峰值,分别是 embedding 层和最后输出 logits 层,两者参数量一致。
-
plt.plot(x, y, width): 绘制折线图。![图:RoPE 位置编码向量变化曲线]
举个例子,画点图分析 llama3 8B 中的位置编码 RoPE。在同一位置 m 下,可以发现向量中的元素,在 i 比较小的时候变化较快,i 较大的时候变化较慢。
-
plt.colorbar(x, y): 添加颜色条。![图:Attention 矩阵热力图]
举个例子,画热力图分析 llama3 8B 中的 Attention 矩阵。我的 input 为"The boy didn't cross the street because he was too ",要预测下一个词。观察第 10 行(分析注意力矩阵都是以行为单位)可以发现"he"这个 token 与"boy"这个 token 关联度很高,而不是"street"这个 token。
所以说画图很重要,深度学习本质上都是矩阵运算,单看数字看不出什么结论,需要结合画图等可视化工具分析。
2. 熟悉 PyTorch 等深度学习框架
目前主流大模型基本上都是用 pytorch 写的,pytorch 语法太多了,下面介绍在LLM 中常用的 pytorch 语法(排序不分先后)。
(1). torch.nn.Embedding(num_embeddings, embedding_dim...)
其中 num_embeddings 代表词表的大小,embedding_dim 代表词向量的维度。embedding.weight 的 size 为 [num_embeddings, embedding_dim]。举个例子,输入索引 i,输出 embedding.weight 的第 i 行。
(2). torch.matmul(x,y)、x*y、torch.dot(x,y) 与 torch.mul(x,y) 之间的区别
其中 torch.matmul(x,y) 代表矩阵相乘,torch.mul(x,y) 与 x*y 均代表矩阵对应元素相乘,torch.dot(x,y) 代表。


