> For the complete documentation index, see [llms.txt](https://lizh.gitbook.io/knowledge/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lizh.gitbook.io/knowledge/tech/19ai-mo-xing-ji-chu-ying-yong-pian.md).

# AI模型基础应用篇

AI 模型是**机器学习 / 深度学习算法**构建的参数化数学函数，**经过海量数据训练出来、能模仿人类完成特定任务的一套数学运算程序**。

**核心由两部分组成**：

* **网络结构**（骨架）：Transformer、CNN 卷积神经网络、RNN 循环网络，决定模型怎么处理文字、图片、声音。
* **权重参数**（记忆）：训练过程中从数据里学到的数值，相当于模型 “记住” 的知识，是真正承载能力的部分。

常见 AI 模型分类：

* 大语言模型（处理文字）：GPT 系列、文心一言、通义千问、Llama、Qwen。
* 图像模型（看图 / 画图）：识别类—ResNet、YOLO（识别图片里的人、物体），生成类—Stable Diffusion、Midjourney（文生图）。
* 语音模型：ASR 语音识别、TTS 语音合成、语音大模型。
* 多模态大模型：GPT-4V、通义万相、文心一格，同时看懂文字 + 图片 + 音频。

**一句话总结**：AI 模型就是计算机通过数据自学得到的智能计算工具，能自主完成识别、生成、推理、翻译等原本需要人类脑力的工作。

## Transformer

Transformer 是 2017 年 Google 论文《Attention Is All You Need》提出，完全基于**注意力机制**、抛弃 RNN 循环结构的序列**神经网络架构**，是现在所有大语言模型（GPT、Llama、BERT）、多模态模型的底层骨架。

核心两点：

* **全局并行计算**：不用逐字串行处理句子，整段文本一次性运算，GPU 训练速度暴涨。
* **自注意力 Self-Attention**：任意两个 token 可以直接建立关联，完美解决长文本远距离语义依赖。

### 宏观架构

Transformer 遵循经典的端到端序列转换结构，由堆叠的 N*N* 个相同模块构成：

* **编码器（Encoder）**：由两个子层组成——**多头自注意力** 子层和**位置前馈网络** 子层。每个子层均采用**残差连接** 与**层归一化** 的后置处理范式。
* **解码器（Decoder）**：在编码器结构基础上，于两个子层之间插入**交叉注意力** 子层，该子层以编码器的输出作为 Key 和 Value 矩阵，以解码器自身的输入作为 Query 矩阵。此外，解码器的自注意力子层采用**掩码（Masking）** 机制，用以遮蔽当前位置之后的序列信息，确保自回归属性。

### 三大机制

* **自注意力机制（Self-Attention）**：这是 Transformer 的心脏。它的作用是**计算句子中每个词与其他所有词的相关性权重**。
  * **工作原理**：对于每个词，模型会生成三个向量：**Query（查询）**、**Key（键）** 和 **Value（值）**。
  * **计算过程**：用每个词的 Query 和所有词的 Key 做点积，得到“注意力分数”（即相关性）。这个分数越高，代表两个词越相关。最后，用这些分数去加权求和所有的 Value。
  * **直观理解**：当模型处理句子 *“Animal didn't cross the street because it was too tired”* 中的 *“it”* 时，注意力机制会让 *“it”* 强烈关注到 *“Animal”*，从而知道 *“it”* 指代的是 Animal 而不是 street。
* **多头注意力（Multi-Head Attention）**：单一注意力只能关注一个方面。**多头**意味着模型同时运行多个注意力机制。每个头关注不同的侧重点：有的头关注“语法关系”，有的头关注“指代关系”，有的头关注“相邻词汇”。最后把所有头的结果拼接起来，让模型获得更丰富的表征能力。
* **位置编码（Positional Encoding）**：Transformer 是并行处理的，它本身没有“先后顺序”的概念（不像 RNN 天然按顺序读）。为了利用顺序信息，Transformer 在输入词向量中加入了**位置编码**（使用正弦/余弦函数），告诉模型每个词在句子中的绝对或相对位置。

## CNN 卷积神经网络

**CNN 卷积神经网络（Convolutional Neural Network）是一类前馈式深度学习模型**，其核心特征在于利用**卷积运算**替代传统的通用矩阵乘法，以提取输入数据的**局部平稳性**和**空间层级性**特征。该网络通过**稀疏连接**和**参数共享**机制，显著降低了模型的参数量与计算复杂度，并天然具备对平移、缩放及局部形变的一定程度的不变性。

在 CNN 出现之前（2012年 AlexNet 横空出世之前），处理图像通常用全连接网络（FNN）。

* **致命缺点**：参数爆炸。一张 1000×1000 像素的图有 100 万个像素点，全连接层的权重数量会达到万亿级，根本算不动，而且极易过拟合。
* **平移不变性**：传统的全连接网络无法识别物体在图片左上角还是右下角，它把每个位置都当作独立的特征。

**CNN 专门处理网格结构数据：图片（二维像素网格）、语音频谱、医学影像。它通过一个名为“卷积核”的小窗口在数据上滑动，自动提取出对任务最有用的局部特征，从而实现对图像内容的理解（比如分类、识别）。**

这意味着它不再把每个像素单独看待，而是用一个小窗口（卷积核）去滑动扫描整张图，**在局部区域内提取特征**，并且用同一套权重扫遍全图。这不仅把参数量降了好几个数量级，还让模型具备了“平移不变性”——无论物体在哪儿，卷积核都能认出它。

### 宏观架构

典型的 CNN 由三个功能层级交替堆叠构成：

* **卷积层（Convolutional Layer）**：**核心层**。负责执行上述卷积运算，并通过**多通道（Multi-channel）** 机制并行使用多个卷积核（Filters），每个核负责映射输入空间中的某一类特定的基元特征（如边缘、角点或纹理）。
* **池化层（Pooling Layer）**：**降维层**。通常采用**最大池化（Max-Pooling）** 或**平均池化（Average-Pooling）**，对特征图进行**降采样（Down-sampling）**。其目的在于逐步缩减特征图的空间维度，以扩大高层神经元的**感受野**，并为网络引入对局部平移的**不变性（Invariance）**。
* **全连接层（Fully Connected Layer）**：**决策层**。位于网络的末端，将卷积和池化过程提取到的**高维抽象语义特征**展平（Flatten）并进行线性映射，最终通过 Softmax 或 Sigmoid 函数完成特定任务（如分类或回归）的决策输出。

### 层次化表征

CNN 通过**深层堆叠**实现从低级到高级的语义抽象：

* **浅层**：对图像的边缘、颜色梯度等**低级视觉基元**敏感；
* **中层**：组合形成局部几何形状（如轮廓、角点组合）；
* **深层**：响应具有明确语义信息的**高级物体部件**（如人脸的眼睛、车辆的轮胎）。

这种**层级化表征学习（Hierarchical Representation Learning）** 能力，使得 CNN 能够将原始像素空间端到端地映射到语义空间。

## RNN 循环网络

**RNN 循环网络（Recurrent Neural Network）** 是一类用于处理**序列数据** 的神经网络模型。其核心特征在于网络内部存在**有向环** 连接，使得神经元能够保留前一时刻的**状态信息**，从而在时间维度上形成**共享参数**的深层前馈网络。

2017 年 Transformer 出现之前，RNN 循环网络是**处理文本、语音、时序数据的标准架构**，专门处理**有序序列**：一句话文字、语音波形、股票时间序列，自带「记忆」，能保存前面时刻的信息，处理到第 N 个字时，能记得前面所有字。

**致命缺陷**：

* **长距离依赖丢失（梯度消失 / 梯度爆炸）**：句子很长时，开头文字的信息经过几十次循环传递，数值不断衰减，到末尾几乎完全遗忘。
* **串行计算，无法并行**：必须先算完第 1 个字，才能算第 2 个字，GPU 并行效率极低，训练速度远不如 Transformer。

RNN 是最早带记忆的序列网络，依靠循环隐藏状态传递上文信息，但串行计算、长文本记忆差，被 Transformer 彻底淘汰；LSTM/GRU 是它的改良版本，如今仅少量传统时序场景使用。

## 权重参数

\*\*权重参数（Weight）\*\*是神经网络里所有固定、可训练的小数系数，是模型学到的全部知识；训练结束后固化保存。

### 参数总量段位分级

* **轻量入门段**：1B～8B。代表：Mistral-7B、Llama3-8B、Qwen2.5-7B。定位：平民 / 个人本地可用，轻量主力。
* **中端主力段**：13B～34B。定位：中小企业私有化首选，平衡效果与成本。
* **高端专业段**：50B～70B。代表：Llama3-70B、Qwen2-72B、DeepSeek-67B，**定位：企业高阶 / 科研级大模型，开源里的第一梯队**。
* **超大规模**：100B+（175B、600B、千亿级）。闭源主流：GPT3 175B、Claude 大版本、GPT4 底座；极少开源。

### 权重矩阵

WQ、WK、WV 是**权重矩阵**（模型参数，永久固定存在模型文件）：

* WQ：投影出查询向量 Q，专门用来 “检索匹配” 上下文。
* WK：投影出索引向量 K，用来被别的 token 的 Q 匹配打分。
* WV：投影出内容向量 V，用来做信息加权融合输出。

Q/K/V 是**动态向量**（每次输入句子实时算出来的临时中间数据，推理完销毁）：

* Q（查询）：当前词的检索诉求，主动去上下文匹配关联；
* K（索引）：每个词自带的语义标签，被动接受其他词的匹配打分；
* V（内容）：每个词存储的真实语义信息，打分后用来加权融合生成上下文感知特征。

Q/K/V 全部由固定不变的权重矩阵 WQ、WK、WV 实时计算生成。

**Transformer 里的 Q/K/V 投影矩阵**：

* 每个 token 先得到长度 4096 的原始特征 x；
* 乘 WQ 得到 Query、乘 WK 得到 Key、乘 WV 得到 Value；
* WQ/WK/WV 每个都是 4096 × 4096，每个格子都是权重。

**token 的原始特征**是模型转换成的**固定长度的一串浮点数**。这些浮点数是**文字的数字替身**，包含语义、词性、位置等信息。

**原始特征生成**：

* 查表层（Embedding）：每个 token 对应一个基础向量；
* 加上位置编码；
* 经过多层网络加权变换，最终得到长度 4096 的浮点数数组，进入注意力层。

## 深入研究 AI 学习路线

### 必备数学

* **线性代数**：重中之重，Transformer 全靠矩阵乘法。核心知识点：向量、矩阵、矩阵乘法、转置、矩阵维度、特征向量、内积 / 余弦相似度、矩阵求导。
* 微积分：一元 / 多元导数、偏导、链式法则、梯度。
* 概率论与数理统计：概率分布、期望、方差、极大似然、Softmax、损失函数、贝叶斯。
* 优化理论基础：梯度下降、SGD、Adam 优化器，理解模型如何一步步调整几十亿权重。

### 编程工具

* Python 基础：数据结构、类、函数、文件读写。
* 科学计算库
  * NumPy：手动实现矩阵、向量运算（手写简易 WQKV、卷积）。
  * Pandas：数据集处理。
  * Matplotlib：画图看损失、特征向量。
* 深度学习框架（二选一，推荐 PyTorch）
  * PyTorch：动态图，适合研究、复现 Transformer、自定义权重矩阵。
  * TensorFlow：工业部署多。
* 工具配套：Git、Linux 基础、CUDA 显卡加速。

### 传统机器学习

* 基础算法：线性回归、逻辑回归、SVM、决策树、K-Means 聚类。
* 核心概念：训练集 / 测试集、过拟合 / 欠拟合、正则化、损失、评估指标。
* 实战：文本分类、数据聚类，理解「特征 + 权重拟合标签」的核心思想。

### 深度学习核心（CNN/RNN/Transformer）

* 基础神经网络：全连接层、激活函数、残差连接、LayerNorm、反向传播，手动搭建简易网络看懂权重更新。
* CNN 卷积神经网络：卷积核、池化、权重共享、图像特征提取；复现 ResNet 简单模型。
* 序列模型 RNN/LSTM/GRU：循环单元、隐藏状态、梯度消失问题，理解 Transformer 诞生的必要性。
* Transformer 专项（核心重点）：
  * 原始论文《Attention Is All You Need》逐段拆解。
  * 核心组件：Embedding 词嵌入、位置编码、Q/K/V、WQ/WK/WV 多头注意力、FFN、掩码 Mask
  * 两大架构：Encoder、Decoder。

### 大模型专项进阶

* 词表与 Tokenizer 分词原理；
* 模型参数量计算：WQKV/FFN/Embedding 如何构成 7B 权重；
* 训练原理：预训练、自回归生成、上下文窗口；
* 轻量化技术：量化 (4bit/8bit)、LoRA 微调（不动原始 WQKV 权重）；
* 向量检索 RAG：Embedding 向量、相似度匹配、知识库问答。

### NLP / 大语言模型

* 开源大模型实操：Llama、Qwen、GLM，魔搭 ModelScope 下载权重本地部署。
* 微调实战：全量微调、LoRA、QLoRA，垂直领域定制模型。
* 推理优化：vLLM、llama.cpp、KV 缓存加速。
* 应用开发：对话机器人、知识库 RAG、代码助手、Agent 智能体。

### 计算机视觉

CNN、ViT 视觉 Transformer、文生图、目标检测、多模态大模型

### 工程落地 & 高阶科研

* 算力相关：CUDA、GPU 显存、模型量化、分布式训练。
* 部署：模型封装 API、容器 Docker、边缘端部署。
* 数据集构建、数据清洗、数据蒸馏。
* 科研能力：读顶会论文（NeurIPS/ICML/ICLR/ACL）、复现论文、实验评测。

## 模型应用示例

魔搭（ModelScope）是**阿里达摩院 + 阿里云 + CCF 中国计算机学会**联合推出的**国内最大中文 AI 开源模型社区**，2022 年云栖大会正式上线。

### LLM API 示例

```javascript
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 库**，可以用几行代码就能调用大语言模型（LLM）的 API。

### RAG示例

```javascript
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 工具库。
