AI 模型基础知识
本篇从「模型是什么」讲起,依次介绍 Transformer、CNN、RNN 三类主干网络,以及真正承载能力的权重参数;再用大模型 API 与 RAG 说明如何接到应用里,最后附一条由数学到工程的学习路线。读完可以对 AI 模型的组成、差异和落地方式建立完整图景。
AI 模型是机器学习、深度学习算法构建的参数化数学函数,经过海量数据训练出来、能完成特定任务的一套数学运算程序。它不是一段写死的 if-else,而是用数据把内部系数调到能完成识别、生成、推理、翻译等工作。
核心由两部分组成:
- 网络结构(骨架):Transformer、CNN 卷积神经网络、RNN 循环网络,决定模型怎么处理文字、图片、声音。
- 权重参数(记忆):训练过程中从数据里学到的数值,相当于模型“记住”的知识,是真正承载能力的部分。同一套结构换一套权重,能力就完全不同。
常见 AI 模型分类:
- 大语言模型(处理文字):GPT 系列、文心一言、通义千问(Qwen)、Llama。
- 图像模型(看图、画图):识别类——ResNet、YOLO(识别图片里的人、物体);生成类——Stable Diffusion、Midjourney(文生图)。
- 语音模型:ASR(Automatic Speech Recognition,语音识别,语音转文字)、TTS(Text-to-Speech,语音合成,文字转语音),以及同时覆盖识别、合成与理解的语音大模型。
- 多模态大模型:同时处理文字、图片,部分还能处理音频。理解类如 GPT-4V、GPT-4o、Qwen-VL;生成类如通义万相、文心一格(文生图产品,侧重图像生成而非音频理解)。
一句话总结:AI 模型就是计算机通过数据自学得到的智能计算工具,能自主完成识别、生成、推理、翻译等原本需要人类脑力的工作。
Transformer
Transformer 是 2017 年 Google 论文《Attention Is All You Need》提出的序列神经网络架构:完全基于注意力机制,抛弃 RNN 循环结构。它是现在大语言模型(GPT、Llama、BERT)和多数多模态模型的底层骨架。
核心两点:
- 全局并行计算:不用像 RNN 那样逐字串行处理,整段文本一次性运算,训练速度远高于循环结构。
- 自注意力(Self-Attention):任意两个 token 可以直接建立关联,用来建模长文本中的远距离语义依赖。
论文里的原始 Transformer 是 Encoder-Decoder。后来三条路线都沿用同一套注意力积木,只是取舍不同:
- Encoder-Decoder:编码器读完整输入,解码器再生成输出。原文机器翻译、T5 属于这一路。
- Encoder-only:只保留编码器,适合理解类任务。BERT 属于这一路。
- Decoder-only:只保留带掩码的自注意力 + FFN,按从左到右自回归生成,没有交叉注意力(没有编码器可交叉)。GPT、Llama、Qwen 属于这一路,是当前对话大模型的主流。
宏观架构
原始 Transformer 的编码器、解码器各由 N 个相同模块堆叠(论文取 N = 6)。
- 编码器(Encoder):每个模块两个子层——多头自注意力和位置前馈网络(FFN)。每个子层采用残差连接与层归一化(LayerNorm):原文是后置 LayerNorm,即
LayerNorm(x + Sublayer(x));后来不少大模型改成前置 LayerNorm(Pre-LN),训练更稳。 - 解码器(Decoder):在编码器结构基础上,于自注意力与 FFN 之间插入交叉注意力子层。该子层以编码器输出作为 Key 和 Value,以解码器自身输入作为 Query。解码器的自注意力子层还加掩码(Masking),遮蔽当前位置之后的词,保证自回归:预测第 i 个词时只能看到它前面的词。
残差连接把子层输入原样加到输出上,缓解深层网络梯度消失,让信息可以直接跨层传递。FFN 对每个位置独立做两层线性变换(中间通常接 ReLU 或 GELU),负责通道内的非线性变换;注意力负责位置之间的信息交换,二者分工不同。
三大机制
自注意力机制(Self-Attention):计算句子中每个词与其他所有词的相关性权重,再按权重融合信息。
- 工作原理:对每个词生成三个向量——Query(查询)、Key(键)、Value(值)。
计算过程:用每个词的 Query 和所有词的 Key 做点积,得到注意力分数(相关性);除以 $\sqrt{d_k}$ 做缩放,再经 Softmax 变成和为 1 的权重;最后用这些权重对所有 Value 加权求和。写成公式:
$$\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V$$
直观理解:处理句子 “Animal didn't cross the street because it was too tired” 中的 “it” 时,注意力会让 “it” 强烈关注 “Animal”,从而知道 “it” 指代的是 Animal 而不是 street。
多头注意力(Multi-Head Attention):单一注意力只能关注一个方面。多头表示同时运行多组注意力,每组有自己的 WQ、WK、WV。训练后不同头常会形成不同侧重(语法、指代、相邻词等),这是学出来的分工,不是预先指定的角色。最后把各头结果拼接,再经一层线性投影,得到更丰富的表征。
位置编码(Positional Encoding):Transformer 并行处理整段序列,本身没有“先后顺序”(不像 RNN 按时间步读入)。为了利用顺序信息,要在词向量上加入位置信息。原文使用正弦、余弦函数的绝对位置编码;当前开源大模型多用 RoPE(Rotary Position Embedding,旋转位置编码),把位置写进 Q、K 的旋转里,对相对距离更友好,也便于外推更长上下文。
注意:注意力分数未加 Softmax 之前只是相似度;必须归一化后才能当作权重。缩放 $\sqrt{d_k}$ 是为了防止点积过大、Softmax 饱和。
CNN 卷积神经网络
CNN(Convolutional Neural Network,卷积神经网络)是一类前馈式深度学习模型。它用卷积运算替代全连接里的通用矩阵乘法,提取输入的局部平稳性和空间层级性特征。通过稀疏连接和参数共享,参数量和计算量显著下降,并对平移、缩放及局部形变具备一定不变性。
2012 年 AlexNet 在 ImageNet 上取得突破之前,图像任务常用全连接网络(FNN)。CNN 本身更早(如 1998 年的 LeNet),AlexNet 让深层卷积网络成为视觉主流。
全连接直接处理图像有两个问题:
- 参数爆炸:一张 1000×1000 像素的图有 100 万个像素点,全连接层的权重数量会到万亿级,算不动,也极易过拟合。
- 缺少平移不变性:物体在左上角还是右下角,全连接会当成两套无关特征。
CNN 专门处理网格结构数据:图片(二维像素网格)、语音频谱、医学影像。它用名为卷积核(Filter)的小窗口在数据上滑动,自动提取对任务有用的局部特征,再用于分类、检测等。同一套核扫遍全图,参数量下降几个数量级。卷积本身提供的是平移等变(物体挪位置,特征图跟着挪);平移不变更多来自后面的池化。
宏观架构
典型 CNN 由三个功能层级交替堆叠:
- 卷积层(Convolutional Layer):核心层。执行卷积运算,并通过多通道(Multi-channel)并行使用多个卷积核,每个核负责一类基元特征(边缘、角点、纹理)。
- 池化层(Pooling Layer):降维层。常用最大池化(Max-Pooling)或平均池化(Average-Pooling)对特征图降采样(Down-sampling),缩小空间尺寸,扩大高层神经元的感受野,并引入对局部平移的不变性(Invariance)。
- 全连接层(Fully Connected Layer):决策层。位于末端,把卷积和池化得到的高维特征展平(Flatten)后做线性映射,再经 Softmax 或 Sigmoid 输出分类或回归结果。
现代分类网络常把末端全连接换成全局平均池化;检测、分割网络则用不同的头,但卷积提特征这一段仍然通用。
层次化表征
CNN 通过深层堆叠实现从低级到高级的语义抽象:
- 浅层:对边缘、颜色梯度等低级视觉基元敏感。
- 中层:组合成局部几何形状(轮廓、角点组合)。
- 深层:响应有明确语义的高级物体部件(人脸的眼睛、车辆的轮胎)。
这种层级化表征学习(Hierarchical Representation Learning)把原始像素端到端映射到语义空间。
RNN 循环网络
RNN(Recurrent Neural Network,循环神经网络)用于处理序列数据。网络内部存在有向环,神经元能保留前一时刻的状态信息,从而在时间维度上形成共享参数的计算。
2017 年 Transformer 出现之前,RNN 是处理文本、语音、时序数据的标准架构,专门处理有序序列:一句话、语音波形、股票时间序列。它自带「记忆」,处理到第 N 个字时,理论上能用上前面所有字的信息。
主要缺陷:
- 长距离依赖丢失(梯度消失、梯度爆炸):句子很长时,开头信息经过几十次循环传递会不断衰减,到末尾几乎被忘掉。
- 串行计算,无法并行:必须先算完第 1 个字,才能算第 2 个字,GPU 并行效率低,训练速度远不如 Transformer。
LSTM、GRU 是 RNN 的改良,用门控缓解梯度消失,记忆更稳。当前文本和语音大模型的主干已被 Transformer 取代;RNN、LSTM、GRU 仍出现在部分传统时序、小模型或低延迟场景,并没有从所有任务里消失。
权重参数
权重参数(Weight)是神经网络里所有可训练的系数,是模型学到的全部知识;训练结束后固化保存在模型文件里。结构决定“怎么算”,权重大小决定“算出来像不像”。
训练时:输入走一遍网络得到预测(前向),用损失函数衡量对错,再靠反向传播和优化器(如 Adam)按梯度改权重。推理时权重不再更新,只做前向计算。
参数总量段位分级
按公开参数量粗分(同一段位里,数据、结构和训练方法仍会拉开效果):
- 轻量入门段:1B~8B。代表:Mistral-7B、Llama3-8B、Qwen2.5-7B。定位:个人本地可用,轻量主力。
- 中端主力段:13B~34B。定位:中小企业私有化时,效果与成本较均衡。
- 高端专业段:50B~70B。代表:Llama3-70B、Qwen2-72B、DeepSeek-67B。定位:企业高阶、科研级开源第一梯队。
- 超大规模:100B+(175B、600B、千亿级)。闭源如 GPT-3 175B;GPT-4、Claude 等后续版本官方未公布完整参数量。开源侧也有 DeepSeek-V3 这类 MoE(混合专家)超大模型,激活参数远小于总参数。
注意:B 表示 billion(十亿)。参数量不是效果的唯一指标;量化、蒸馏后的小模型,在特定任务上可以接近更大模型。
权重矩阵
WQ、WK、WV 是权重矩阵(模型参数,保存在模型文件里,训练期更新、推理期固定):
- WQ:投影出查询向量 Q,用来检索、匹配上下文。
- WK:投影出索引向量 K,用来被其他 token 的 Q 打分。
- WV:投影出内容向量 V,打分之后做加权融合。
Q、K、V 是动态向量(每次输入实时由权重矩阵乘出来,不是存在模型文件里的参数):
- Q(查询):当前词的检索诉求,主动去上下文匹配。
- K(索引):每个词的语义标签,被动接受其他词的匹配打分。
- V(内容):每个词的语义内容,按分数加权后形成上下文感知特征。
三者都由固定的 WQ、WK、WV 对当前输入做矩阵乘得到。自回归解码时,已算过的 K、V 会缓存在 KV Cache 里供后续步复用,并不是算完一步就全部丢掉。
以隐藏维度 4096 的模型(如 Llama-7B、Llama3-8B 一类)为例,不是所有 Transformer 都是这个尺寸;原文 Transformer 的 $d_{\mathrm{model}}=512$:
- 每个 token 先得到长度 4096 的原始特征 $x$;
- $x$ 乘 WQ 得到 Query、乘 WK 得到 Key、乘 WV 得到 Value;
- WQ、WK、WV 每个都是 4096 × 4096,每个格子都是一个权重。
token 的原始特征是模型把离散符号变成的固定长度浮点数组,是文字的数字替身,编码语义、词性、位置等信息。文本进入模型前,要先经 Tokenizer 切成 token(子词或字符),再查表。
原始特征生成:
- 查表层(Embedding):每个 token id 对应一个基础向量。
- 加上位置编码(或在注意力里用 RoPE 注入位置)。
- 经过多层网络变换,得到进入注意力层的隐向量。
应用示例
魔搭(ModelScope)是阿里达摩院 + 阿里云 + CCF 中国计算机学会联合推出的中文 AI 开源模型社区,2022 年云栖大会上线,可下载模型权重、看文档、调用托管推理。
下面两段示例走阿里云百炼(DashScope)的 OpenAI 兼容接口:接口形态与 OpenAI Chat Completions 一致,换 baseURL 和 apiKey 即可。enable_thinking 是百炼、Qwen 的扩展字段,用来关闭思考链,不是 OpenAI 官方参数。
LLM API 示例
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: "你的API_Key", // sk-xxx 格式。https://bailian.console.aliyun.com/cn-beijing?tab=model#/api-key
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
});
async function callModelScope() {
try {
const response = await client.chat.completions.create({
model: "qwen3-32b",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "请介绍一下你自己。" }
],
temperature: 0.7,
max_tokens: 512,
enable_thinking: false
});
console.log("回答:", response.choices[0].message.content);
} catch (error) {
console.error("调用 API 时出错:", error);
}
}
callModelScope();
OpenAI SDK 是 OpenAI 官方提供的 JavaScript、Node.js 库,用几行代码调用兼容 Chat Completions 的大模型 API。temperature 控制随机性,max_tokens 限制本次生成长度。
RAG 示例
RAG(Retrieval-Augmented Generation,检索增强生成):先把文档切成片段并做成向量存起来;用户提问时,用同一套 Embedding 模型把问题也变成向量,按相似度取出最相关片段,再把这些片段和问题一起送给 LLM。模型据此回答,而不是只靠参数里记过的知识,便于接入私有文档、降低胡编。
流程可以看成四步:切分文档 → 向量化入库 → 检索 Top-K → 带上下文生成。
import OpenAI from 'openai';
import { similarity } from 'ml-distance';
import fs from 'fs/promises';
const apiKey = "你的API_Key";
const baseURL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
const vectorStoreFile = './vector-store.json';
const embedClient = new OpenAI({ apiKey, baseURL });
const llmClient = new OpenAI({ apiKey, baseURL });
let vectorStore = [];
async function loadVectorsFromFile() {
try {
const raw = await fs.readFile(vectorStoreFile, 'utf-8');
const data = JSON.parse(raw);
vectorStore = [];
vectorStore.push(...data);
console.log(`📂 从文件加载了 ${vectorStore.length} 条向量`);
return true;
} catch (error) {
console.error('加载向量文件出错:', error);
return false;
}
}
async function saveVectorsToFile() {
const data = vectorStore.map(({ text, vector }) => ({ text, vector }));
await fs.writeFile(vectorStoreFile, JSON.stringify(data, null, 2));
console.log(`💾 已保存 ${data.length} 条向量到 ${vectorStoreFile}`);
}
async function embedText(text) {
const response = await embedClient.embeddings.create({
model: "text-embedding-v3",
input: text
});
return response.data[0].embedding;
}
async function addDocument(text) {
if (vectorStore.some(item => item.text === text)) {
return;
}
const vector = await embedText(text);
vectorStore.push({ text, vector });
await saveVectorsToFile();
}
async function search(query, topK = 2) {
const queryVector = await embedText(query);
const results = vectorStore.map(doc => ({
...doc,
score: similarity.cosine(queryVector, doc.vector)
}));
results.sort((a, b) => b.score - a.score);
return results.slice(0, topK);
}
async function ragQuery(userQuestion) {
const relevantDocs = await search(userQuestion, 2);
const context = relevantDocs.map(doc => doc.text).join('\n');
const prompt = `
请根据以下参考资料回答用户的问题。
要求:
- 回答必须基于参考资料,不要编造信息
- 如果参考资料中没有明确答案,请直接说“根据现有资料无法回答这个问题”
- 回答要简洁、准确
--- 参考资料 ---
${context}
--- 参考资料结束 ---
用户问题:${userQuestion}
回答:
`;
const response = await llmClient.chat.completions.create({
model: "qwen3-32b",
messages: [
{ role: "system", content: "你是一个基于知识库回答问题的助手。" },
{ role: "user", content: prompt }
],
temperature: 0.3,
max_tokens: 512,
enable_thinking: false
});
return {
answer: response.choices[0].message.content,
retrievedDocs: relevantDocs
};
}
async function loadMarkdownFile(filePath) {
try {
const content = await fs.readFile(filePath, 'utf-8');
const lines = content.split('\n');
const chunks = [];
let currentChunk = '';
for (const line of lines) {
// 检测标题行(# ## ### 等)
if (/^#{1,6}\s+/.test(line)) {
if (currentChunk.trim()) {
chunks.push(currentChunk.trim());
}
currentChunk = line + '\n';
} else {
currentChunk += line + '\n';
}
}
if (currentChunk.trim()) {
chunks.push(currentChunk.trim());
}
console.log(`📄 从 ${filePath} 读取到 ${chunks.length} 个段落`);
return chunks;
} catch (error) {
if (error.code === 'ENOENT') {
console.log(`📭 未找到文件: ${filePath},跳过`);
return [];
}
throw error;
}
}
async function main() {
await loadVectorsFromFile();
if (vectorStore.length === 0) {
console.log("📚 初始化示例知识库...");
await addDocument("机器学习是人工智能的一个子集,让计算机从数据中学习规律");
await addDocument("深度学习使用多层神经网络来学习数据的复杂模式");
await addDocument("自然语言处理(NLP)帮助计算机理解和生成人类语言");
await addDocument("检索增强生成(RAG)结合了信息检索和文本生成的能力");
await addDocument("JavaScript是一种广泛应用于Web开发的编程语言");
await addDocument("JavaScript(JS)是一种具有函数优先特性的轻量级、解释型或者说即时编译型的编程语言。");
}
const mdChunks = await loadMarkdownFile('./WebGL从入门到实践.md');
for (const chunk of mdChunks) {
await addDocument(chunk);
}
console.log("\n🔍 测试RAG问答:");
const question = "介绍下WebGL的概念?";
const result = await ragQuery(question);
console.log(`\n问题: ${question}`);
console.log("\n📄 检索到的参考资料:");
result.retrievedDocs.forEach((doc, i) => {
console.log(` ${i + 1}. (相似度: ${doc.score.toFixed(4)}) ${doc.text}`);
});
console.log(`\n🤖 生成的回答:\n${result.answer}`);
}
main().catch(console.error);
ml-distance 是用来计算向量距离或相似度的 Node.js 库。这里用余弦相似度给问题和文档片段打分,分数越高越相关。示例按 Markdown 标题切块,只是一种简单切分;生产环境还会控制块长度、做重叠切分,并换用向量数据库。
深入学习路线
- 数学:线性代数(向量、矩阵乘法、内积、余弦相似度)是 Transformer 的底座;再补微积分(偏导、链式法则、梯度)、概率统计(Softmax、损失、极大似然)和优化(SGD、Adam)。
- 工具:Python + NumPy、Pandas、Matplotlib;深度学习框架优先 PyTorch(TensorFlow 多见于工业部署);配套 Git、Linux、CUDA。
- 机器学习:线性、逻辑回归、SVM、决策树、K-Means;分清训练集、测试集、过拟合、正则化。抓住「特征 + 权重拟合标签」这条主线。
- 深度学习:全连接、激活、残差、LayerNorm、反向传播 → CNN(卷积、池化、权重共享)→ RNN、LSTM、GRU(理解梯度消失)→ Transformer(Embedding、位置编码、Q、K、V、多头注意力、FFN、Mask,以及 Encoder-only、Decoder-only、Encoder-Decoder)。论文从《Attention Is All You Need》读起。
- 大模型与应用:Tokenizer、参数量构成、预训练、自回归、上下文窗口;量化、LoRA、QLoRA;本地跑 Llama、Qwen、GLM(魔搭 ModelScope);推理用 vLLM、llama.cpp、KV Cache;应用侧是 RAG、Agent、对话与代码助手。视觉线则是 CNN、ViT、检测、文生图与多模态。
- 工程:GPU 显存、量化、分布式训练;API、Docker、边缘部署;数据清洗与蒸馏。要做研究再读 NeurIPS、ICML、ICLR、ACL。
总结
AI 模型 = 结构 + 权重。Transformer 用自注意力并行建模序列,是当前大模型的骨架,并分化出 Encoder-only、Decoder-only、Encoder-Decoder;CNN 用卷积核扫网格数据,适合视觉;RNN 靠循环状态记上文,已被主流生成模型替代,仍留在部分时序场景。权重是训练得到的知识,Q、K、V 由 WQ、WK、WV 实时算出。应用上,一条路是直接调 LLM API,另一条是先检索再生成的 RAG。