初学者如何系统入门大语言模型(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 中参数分布情况,可以发现有 2 个峰值,分别是 embedding 层和最后输出 logits 层,两者参数量一致。
-
plt.plot(x,y,width):绘制折线图。
举个例子,画点图分析 llama3 8B 中的位置编码 RoPE。在同一位置 m 下,可以发现向量中的元素,在 i 比较小的时候变化较快,i 较大的时候变化较慢。
-
plt.colorbar(x,y):添加颜色条。
举个例子,画热力图分析 llama3 8B 中的 Attention 矩阵。输入为"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) 代表向量之间的点积。
(3) torch.full(size, fill_value)
torch.full([2,3],2.0)
[2,2,2]])
(4) torch.triu(x)
import torch
a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = torch.triu(a)
print(b)
[0, 5, 6],
[0, 0, 9]])
用于注意力机制中的 mask 计算,例如因果掩码(Causal Mask)。
(5) torch.outer(x,y)
x = torch.arange(1,5)
y = torch.arange(1,4)
print(torch.outer(x,y))
[ 2, 4, 6],
[ 3, 6, 9],
[ 4, 8, 12]])
一般用于大模型位置编码计算中,比如正弦余弦位置编码、相对位置编码、旋转位置编码等。
(6) torch.view_as_complex(x)
x=torch.randn(4, 2)
[-1.2883, 1.0111],
[ 0.8764, 0.1839],
[ 0.8543, -0.0061]])
torch.view_as_complex(x)
大模型位置编码有两种计算方法,一种是在实数域计算、一种是复数域计算。该函数一般用于复数域计算。
(7) torch.view_as_real(x)
x= torch.tensor([ 0.0024+1.5686j, -1.2883+1.0111j, 0.8764+0.1839j, 0.8543-0.0061j])
torch.view_as_real(x)
[-1.2883, 1.0111],
[ 0.8764, 0.1839],
[ 0.8543, -0.0061]])
同上,将复数张量转换为实数张量。
(8) 弄清楚 torch.reshape(input,shape) 和 torch.view(input,shape)
我建议从内存分配的角度来理解 reshape。无论一个张量 shape 怎么改变,它的分量在内存中的存储顺序也是不变的。
import numpy as np
a = np.arange(6)
print(np.reshape(a, (2, 3), order='C'))
print(np.reshape(a, (2, 3), order='F'))
print(np.reshape(a, (2, 3), order='A'))
(9) 弄清楚 torch.transpose(tensor,dim0,dim1) 和 torch.permute(dim0, dim1, dim2, dim3)
两者均代表矩阵的转置,在二维的时候很容易想明白转置之后的情况,但是高维度的时候就糊涂了。举个例子:
arr = torch.arange(16)
arr = arr.reshape(2,2,4)
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
arr = arr.transpose(1,2)
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
上面这个三维数组例子,我定义为(batch,H,W),transpose(1,2)等效于长和宽转置。类似这样的例子我们已经练习过很多次了。
不过如何理解 arr.transpose(0,1)?,batch 和 H 维度转置没有物理含义。这需要借用矩阵 stride 概念来理解。
二、大模型原理理解
理解了基础操作后,需要深入 Transformer 架构的核心组件。
- Self-Attention: 核心在于 Q、K、V 的矩阵运算。
torch.matmul 用于计算 Q*K^T,triu 用于生成上三角掩码以屏蔽未来信息。
- Positional Encoding: 如 RoPE(旋转位置编码),利用复数域变换或正余弦函数注入位置信息,
outer 和 view_as_complex 在此处有重要应用。
- Feed Forward Network: 通常由线性层和非线性激活函数组成,涉及
Embedding 和 reshape 操作。
三、大模型应用与学习路线
针对自学遇到困难的同学们,建议按照以下脉络进行系统梳理:
阶段 1:AI 大模型时代的基础理解
目标:了解 AI 大模型的基本概念、发展历程和核心原理。
内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT 模型的发展历程
- L1.4 模型工程(知识大模型、生产大模型、方法论及实践)
- L1.5 GPT 应用案例
阶段 2:AI 大模型 API 应用开发工程
目标:掌握 AI 大模型 API 的使用和开发,以及相关的编程技能。
内容:
- L2.1 API 接口(OpenAI API 接口、Python 接口接入)
- L2.2 BOT 工具类框架
- L2.3 Prompt 框架设计
- L2.4 流水线工程与代码示例
阶段 3:AI 大模型应用架构实践
目标:深入理解 AI 大模型的应用架构,并能够进行私有化部署。
内容:
- L3.1 Agent 模型框架
- L3.2 MetaGPT 等多智能体协作
- L3.3 ChatGLM、LLAMA 等开源模型对比
- L3.4 其他大模型介绍
阶段 4:AI 大模型私有化部署
目标:掌握多种 AI 大模型的私有化部署,包括多模态和特定领域模型。
内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
四、总结
大模型时代,火爆出圈的 LLM 让程序员们开始重新评估自己的本领。与其焦虑,不如成为掌握 AI 工具的技术人。AI 时代,谁先尝试,谁就能占得先机。
LLM 相关的内容很多,现在网上的老课程老教材关于 LLM 又太少。所以小白入门只能靠自学,学习成本和门槛很高。通过上述的系统梳理,从编程基础到原理理解再到应用落地,可以帮助大家建立完整的知识体系,降低自学难度。