Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 人工智能 / Artificial Intelligence

大语言模型 / Large Language Models

1. LLM 前置知识学习路线 / A Prerequisite Learning Path for Large Language Models

2. 神经网络基础 - 从零理解 AI 的"计算单元" / Neural Network Fundamentals from Artificial Neurons

3. Token 与上下文窗口 - LLM 的计费与记忆单位 / Tokens and Context Windows as the Units of LLM Cost and Memory

4. 解码策略 - 控制 LLM 输出的艺术 / Decoding Strategies for Controlling LLM Output

5. 消息角色 - 构建 Agent 对话的基础 / Message Roles as the Foundation of Agent Conversations

6. 流式输出 - 实时交互的体验优化 / Streaming Output for Responsive Interaction

7. Prompt 工程基础 - 与 LLM 高效对话的技巧 / Prompt Engineering Fundamentals for Effective LLM Interaction

8. LLM 进化史 - 从词向量到 Transformer / The Evolution of LLMs from Word Embeddings to Transformers

9. Transformer 手动计算:从 Attention 到 Encoder-Decoder 完整数据流

10. Transformer 核心原理 - 现代 LLM 的基石 / Transformer Fundamentals Behind Modern LLMs

11. Decoder-Only LLM 深度解析:为什么扔掉 Encoder,以及 KV Cache 如何工作

12. 训练 vs 推理:同一个 Transformer,两条完全不同的执行路径

13. Transformer 训练阶段计算详解 - 手算每一行矩阵 / Transformer Training Computation Matrix by Matrix

14. Transformer 推理阶段详解 — 模型如何"思考"并生成回答 / Transformer Inference and Autoregressive Generation

15. 训练基础扫盲 - 理解 Fine-tune 在做什么 / A Training Primer for Understanding Fine-Tuning

16. LLM 预训练全景:数据管道、Scaling Laws 与训练稳定性

17. 训练基础设施 - 从单卡到千卡集群 / Training Infrastructure from One GPU to Thousand-GPU Clusters

18. Post-Training Pipeline - 从 Base Model 到可用助手 / The Post-Training Pipeline from Base Model to Assistant

19. SFT 深度解析:从 Base Model 到指令跟随——后训练第一步 / SFT Deep Dive: Teaching Base Models to Follow Instructions

20. RLHF 深度解析:从 Reward Model 到 PPO 的完整对齐流程

21. DPO 与对齐方法:从 RLHF 复杂度到直接偏好优化

22. 研究视角:DL/RL 理论到 LLM 训练的完整映射

本页目录

神经网络基础 - 从零理解 AI 的"计算单元" / Neural Network Fundamentals from Artificial Neurons ​

📅 创建时间:2026-04-28 🏷️ 标签:#神经网络 #基础 #神经元 📚 前置知识:无(本系列第一篇)


📋 本章目标 ​

  • 理解什么是神经元(Neuron)
  • 掌握权重(Weight)和偏置(Bias)的作用
  • 理解激活函数(Activation Function)的必要性
  • 理解多层神经网络(MLP)的工作原理
  • 为后续理解 Transformer 打下基础

第1部分:什么是神经元? ​

1.1 基本概念 ​

神经元是神经网络的基本计算单元,模拟了生物神经元的工作方式。

形象类比:

生物神经元:
    输入信号 → [处理] → 输出信号

人工神经元:
    输入数据 → [加权求和 + 激活] → 输出结果
1
2
3
4
5

1.2 神经元的组成部分 ​

一个神经元由三部分组成:

┌─────────────────────────────────────────────────────────┐
│                        神经元                             │
├─────────────────────────────────────────────────────────┤
│                                                         │
│    输入 x₁ ──→ × w₁ ──┐                                │
│                       │                                 │
│    输入 x₂ ──→ × w₂ ──→ ⊕ ──→ 激活函数 ──→ 输出 y     │
│                       │                                 │
│    输入 x₃ ──→ × w₃ ──┘     ↑                          │
│                             │                           │
│                      + 偏置 b ──→ ⊕                      │
│                                                         │
└─────────────────────────────────────────────────────────┘

公式:y = f(w₁·x₁ + w₂·x₂ + w₃·x₃ + b)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

第2部分:权重和偏置详解 ​

2.1 权重(Weight)是什么? ​

权重 = 重要性系数,决定了每个输入对输出的影响程度。

具体例子:判断一篇文章是否值得阅读

输入:

  • x₁ = 点赞数(比如 1000)
  • x₂ = 评论数(比如 200)
  • x₃ = 转发数(比如 50)

权重设置:

w₁ = 0.3   (点赞数比较重要)
w₂ = 0.6   (评论数最重要)
w₃ = 0.1   (转发数不太重要)
1
2
3

计算加权和:

总分 = 0.3 × 1000 + 0.6 × 200 + 0.1 × 50
     = 300 + 120 + 5
     = 425
1
2
3

权重的作用总结:

权重值含义
正数且大这个输入很重要,正向影响
正数且小这个输入不太重要
接近0这个输入几乎被忽略
负数这个输入起反作用

2.2 偏置(Bias)是什么? ​

偏置 = 调整基准,决定了神经元激活的难易程度。

类比:就像考试中的"基础分"

没有偏置:y = w × x
  - 当 x = 0 时,y 必然 = 0

有偏置:y = w × x + b
  - 即使 x = 0,y 也可以 = b
  - 调整了"起点"位置
1
2
3
4
5
6

具体例子:判断是否下雨

场景:根据湿度判断下雨概率

情况1:b = -60
  - 需要 湿度 > 60 才能让结果 > 0(会下雨)

情况2:b = -40
  - 只需要 湿度 > 40 就能让结果 > 0(降低门槛)

情况3:b = -80
  - 需要 湿度 > 80 才下雨(提高门槛)
1
2
3
4
5
6
7
8

2.3 为什么权重和偏置重要? ​

没有权重和偏置的问题:

所有输入的影响都一样,无法区分重要性
y = 1×x₁ + 1×x₂ + 1×x₃  ← 每个输入权重都是1
1
2

有权重和偏置后:

可以学习复杂的非线性关系
y = 0.5×x₁ + 2×x₂ - 0.3×x₃ + 10  ← 每个输入权重不同
1
2

第3部分:激活函数 ​

3.1 为什么需要激活函数? ​

问题:如果只有线性计算,神经网络只能学习直线关系。

现实世界:很多关系不是直线!

例子:气温与舒适度的关系

气温(°C):  -10    0    15    25    35    40
             ↓    ↓    ↓     ↓     ↓     ↓
舒适度:     低    中    高    高    中    低

这是一个"倒U型"曲线,不是直线!
1
2
3
4
5

激活函数 = 引入非线性,让神经网络能够学习曲线、复杂形状。

3.2 常见激活函数对比 ​

ReLU(Rectified Linear Unit)- 最常用 ​

公式:

ReLU(x) = max(0, x)
1

数值示例:

输入 x   │ 输出 y = max(0, x)
─────────┼─────────────────────
  -10    │  0      (负数变0)
  -5     │  0      (负数变0)
  -1     │  0      (负数变0)
   0     │  0      (临界点)
   1     │  1      (正数保留)
   5     │  5      (正数保留)
  10     │  10     (正数保留)
1
2
3
4
5
6
7
8
9

图像:

y
│    /
│   /
│  /
│ /
│/____________ x
0
1
2
3
4
5
6
7

特点:

  • 计算简单,速度快
  • 能解决梯度消失问题
  • 是 Transformer 中 MLP 层使用的激活函数

Sigmoid - 用于概率输出 ​

公式:

Sigmoid(x) = 1 / (1 + e^(-x))
1

数值示例:

输入 x   │ e^(-x)      │ 输出 y
─────────┼─────────────┼──────────
  -10    │ 22026.47    │ 0.00005  ≈ 0
   -5    │ 148.41      │ 0.0067   ≈ 0
   -2    │ 7.39        │ 0.119    ≈ 0.12
   -1    │ 2.72        │ 0.269    ≈ 0.27
    0    │ 1.00        │ 0.500    = 0.5
    1    │ 0.37        │ 0.731    ≈ 0.73
    2    │ 0.14        │ 0.881    ≈ 0.88
    5    │ 0.0067      │ 0.993    ≈ 1
   10    │ 0.00005     │ 0.99995  ≈ 1
1
2
3
4
5
6
7
8
9
10
11

特点:

  • 输出范围 [0, 1],适合表示概率
  • S 形曲线,梯度平滑
  • 缺点:对于极端值(很大或很小),梯度接近0(梯度消失)

图像:

y
│╲
│  ╲
│   ╲________
│    ╲       ╱
│     ╲     ╱
│      ╲   ╱
│_______╲_╱___________ x
         0
1
2
3
4
5
6
7
8
9

Tanh(双曲正切)- 双向输出 ​

公式:

Tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
1

数值示例:

输入 x   │ 输出 y
─────────┼──────────
  -10    │ -0.99999  ≈ -1
   -5    │ -0.9933   ≈ -1
   -2    │ -0.9640   ≈ -0.96
   -1    │ -0.7616   ≈ -0.76
    0    │  0.0000   = 0
    1    │  0.7616   ≈ 0.76
    2    │  0.9640   ≈ 0.96
    5    │  0.9933   ≈ 1
   10    │  0.99999  ≈ 1
1
2
3
4
5
6
7
8
9
10
11

特点:

  • 输出范围 [-1, 1],可以是负数
  • 以0为中心,比 Sigmoid 收敛更快
  • 同样存在梯度消失问题

图像:

y
 1│    /
  │   ╱
  │  ╱
  │ ╱
──┼╱────────────────
  │╲
  │ ╲
  │  ╲
 -│   ╲
  │    ╲
  └────────────────── x
         0
1
2
3
4
5
6
7
8
9
10
11
12
13

GELU(Gaussian Error Linear Unit)- Transformer标配 ​

公式:

GELU(x) = x × Φ(x)
1

其中 Φ(x) 是标准正态分布的累积分布函数(CDF)。

数值示例(近似计算):

输入 x   │ 输出 y(近似)
─────────┼───────────────
  -2     │ -0.0455
  -1     │ -0.1587
   0     │  0.0000
   1     │  0.8413
   2     │  1.9545
1
2
3
4
5
6
7

特点:

  • Transformer(GPT、BERT 等)中最常用的激活函数
  • 比 ReLU 更"平滑",但计算更复杂
  • 可以看作是 ReLU 和 Sigmoid 的混合

为什么 Transformer 用 GELU:

  1. 更平滑的梯度流动
  2. 乘以一个概率权重(由输入决定)
  3. 在大量实验中被证明效果更好

第4部分:完整的神经元计算 ​

4.1 单个神经元的完整流程 ​

公式:

y = activation(w · x + b)
1

步骤分解:

步骤1:计算加权和 z = w · x + b
步骤2:应用激活函数 y = activation(z)
1
2

4.2 具体数值示例 ​

输入:

x = [2, 3, 1]  (3个输入)
1

权重和偏置:

w = [0.5, -0.3, 0.8]  (3个权重)
b = 0.1               (偏置)
1
2

步骤1:计算加权和

z = w · x + b
  = 0.5×2 + (-0.3)×3 + 0.8×1 + 0.1
  = 1.0 - 0.9 + 0.8 + 0.1
  = 1.0
1
2
3
4

步骤2:应用 ReLU 激活

y = ReLU(1.0)
  = max(0, 1.0)
  = 1.0
1
2
3

如果加权和是负数:

假设 z = -0.5

y = ReLU(-0.5)
  = max(0, -0.5)
  = 0  ← 负数被"截断"为0
1
2
3
4
5

4.3 神经元的工作可视化 ​

输入数据
   │
   ▼
┌──────────────────────────────────────┐
│         加权求和:z = w · x + b        │
│                                      │
│  0.5×2 = 1.0  ──────────────────┐   │
│ -0.3×3 = -0.9 ─────────────────┤   │
│  0.8×1 = 0.8  ─────────────────┤ + │
│                               + 0.1  │
│                              ──┤     │
│                                 ▼     │
│                            z = 1.0   │
└──────────────────────────────────────┘
   │
   ▼
┌──────────────────────────────────────┐
│      激活函数:y = ReLU(1.0)          │
│                                      │
│           ReLU(x) = max(0, x)       │
│                                      │
│           y = max(0, 1.0) = 1.0     │
└──────────────────────────────────────┘
   │
   ▼
输出结果:y = 1.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

第5部分:多层神经网络(MLP) ​

5.1 从单个到多个神经元 ​

单神经元:

输入(3) → [单个神经元] → 输出(1)
1

多层网络:

输入(3) → [神经元1] ─┐
         → [神经元2] ─┼→ 输出
         → [神经元3] ─┘
1
2
3

5.2 全连接层(Fully Connected Layer) ​

全连接 = 每个输入都连接到每个输出

示意图:

        输出 h₁  h₂  h₃
输入    ┌────────────────
 x₁ ───┼──●────●────●
 x₂ ───┼──●────●────●
 x₃ ───┼──●────●────●
        └──●────●────●

每个圆点代表一个连接
每个连接都有权重
"全连接"因为每个输入都连到每个输出
1
2
3
4
5
6
7
8
9
10

5.3 矩阵表示(更简洁) ​

单个神经元计算:

h = w · x + b

w 是一个向量:[w₁, w₂, w₃]
x 是一个向量:[x₁, x₂, x₃]
1
2
3
4

多个神经元(全连接层)计算:

H = X · W + B

X 是输入矩阵:(batch_size, input_dim)
W 是权重矩阵:(input_dim, output_dim)
B 是偏置向量:(output_dim,)
H 是输出矩阵:(batch_size, output_dim)
1
2
3
4
5
6

具体数值示例:

输入向量:
X = [1.0, 0.5]  (2维)

权重矩阵 W (2×3):
     h₁   h₂   h₃
x₁ [ 0.5  0.2 -0.1]
x₂ [-0.3  0.4  0.6]

偏置向量 B = [0.1, -0.2, 0.3]

计算过程:
h₁ = 1.0×0.5 + 0.5×(-0.3) + 0.1 = 0.5 - 0.15 + 0.1 = 0.45
h₂ = 1.0×0.2 + 0.5×0.4 + (-0.2)  = 0.2 + 0.2 - 0.2 = 0.2
h₃ = 1.0×(-0.1) + 0.5×0.6 + 0.3   = -0.1 + 0.3 + 0.3 = 0.5

输出向量:H = [0.45, 0.2, 0.5]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

第6部分:MLP(多层感知机) ​

6.1 什么是 MLP? ​

MLP = Multi-Layer Perceptron(多层感知机)

就是多个全连接层 + 激活函数堆叠在一起。

基本结构:

输入 → [线性变换 → 激活] → [线性变换 → 激活] → ... → 输出
1

6.2 两层 MLP 示例 ​

结构:

输入(2) → 隐藏层(4) → 激活 → 输出(3)
1

数值计算:

输入:

x = [1.0, 0.5]
1

第一层(输入2 → 隐藏4):

W₁ = [[0.5, -0.3, 0.2, 0.1],    (2×4矩阵)
      [0.1,  0.4, -0.1, 0.3]]

b₁ = [0.1, -0.2, 0.3, 0.0]

hidden_pre = x · W₁ + b₁

hidden_pre[0] = 1.0×0.5 + 0.5×0.1 + 0.1 = 0.5 + 0.05 + 0.1 = 0.65
hidden_pre[1] = 1.0×(-0.3) + 0.5×0.4 + (-0.2) = -0.3 + 0.2 - 0.2 = -0.3
hidden_pre[2] = 1.0×0.2 + 0.5×(-0.1) + 0.3 = 0.2 - 0.05 + 0.3 = 0.45
hidden_pre[3] = 1.0×0.1 + 0.5×0.3 + 0.0 = 0.1 + 0.15 + 0 = 0.25

hidden_pre = [0.65, -0.3, 0.45, 0.25]
1
2
3
4
5
6
7
8
9
10
11
12
13

应用 ReLU 激活:

hidden = ReLU(hidden_pre)

hidden[0] = max(0, 0.65) = 0.65
hidden[1] = max(0, -0.3) = 0      ← 负数变0
hidden[2] = max(0, 0.45) = 0.45
hidden[3] = max(0, 0.25) = 0.25

hidden = [0.65, 0, 0.45, 0.25]
1
2
3
4
5
6
7
8

第二层(隐藏4 → 输出3):

W₂ = [[0.8, -0.5, 0.3],     (4×3矩阵)
      [0.2,  0.6, -0.1],
      [0.3, -0.2, 0.4],
      [0.1,  0.3, 0.2]]

b₂ = [0.1, -0.1, 0.2]

output = hidden · W₂ + b₂

output[0] = 0.65×0.8 + 0×0.2 + 0.45×0.3 + 0.25×0.1 + 0.1
          = 0.52 + 0 + 0.135 + 0.025 + 0.1
          = 0.78

output[1] = 0.65×(-0.5) + 0×0.6 + 0.45×(-0.2) + 0.25×0.3 + (-0.1)
           = -0.325 + 0 - 0.09 + 0.075 - 0.1
           = -0.44

output[2] = 0.65×0.3 + 0×(-0.1) + 0.45×0.4 + 0.25×0.2 + 0.2
           = 0.195 + 0 + 0.18 + 0.05 + 0.2
           = 0.625

output = [0.78, -0.44, 0.625]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

应用最终激活(假设用 ReLU):

final = ReLU(output) = [0.78, 0, 0.625]
1

第7部分:MLP 在 Transformer 中的作用 ​

7.1 Transformer 的基本结构 ​

一个 Transformer Encoder Block:

输入
  ↓
┌─────────────────────────────────────┐
│  Self-Attention 层                  │ ← 收集信息
│  (理解输入之间的关系)                │
└─────────────────────────────────────┘
  ↓
┌─────────────────────────────────────┐
│  Add & Norm(残差 + 层归一化)        │
└─────────────────────────────────────┘
  ↓
┌─────────────────────────────────────┐
│  MLP 层 ← 这就是我们要理解的!         │ ← 处理信息
│  (两层全连接 + 激活)                │
└─────────────────────────────────────┘
  ↓
┌─────────────────────────────────────┐
│  Add & Norm(残差 + 层归一化)        │
└─────────────────────────────────────┘
  ↓
输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

7.2 Transformer MLP 的特点 ​

标准配置(以 BERT-base 为例):

d_model = 768      (输入/输出维度)
d_ff = 3072        (隐藏层维度 = 4 × d_model)

输入(768) → 线性变换(W₁) → 隐藏层(3072) → 激活(GELU) → 线性变换(W₂) → 输出(768)
1
2
3
4

为什么隐藏层要扩大:

类比理解:
原始信息(768维) → 展开分析(3072维) → 提炼总结(768维)

就像:
读一篇文章(768字) → 头脑风暴想很多点(3072个想法) → 写总结(768字)
1
2
3
4
5

7.3 SwiGLU:更先进的 MLP ​

现代 LLM(如 LLaMA、ChatGLM)使用 SwiGLU 替代标准 MLP:

传统 MLP:

output = GELU(x · W₁) · W₂
1

SwiGLU:

gate = SiLU(x · W_gate)     ← 门控信号
up = x · W_up               ← 信息通道
output = (gate ⊙ up) · W_down  ← 门控后的信息
1
2
3

直观理解:

传统 MLP:一条路
  输入 → [激活] → 输出

SwiGLU:两条路,门控决定信息量
  输入 ─→ [门控] ─┐
                ├─→ ⊙ → 输出
  输入 ─→ [信息] ─┘
1
2
3
4
5
6
7

核心总结 ​

总结1:神经元的本质 ​

神经元 = 加权求和 + 激活函数

y = activation(w₁×x₁ + w₂×x₂ + ... + wₙ×xₙ + b)
1
2
3

总结2:权重和偏置的作用 ​

组件作用类比
权重 w决定输入的重要性考试中各科的分值比例
偏置 b调整激活的基准考试的及格线

总结3:激活函数的作用 ​

激活函数输出范围特点使用场景
ReLU[0, +∞)简单高效Transformer MLP
Sigmoid(0, 1)平滑S曲线二分类概率
Tanh(-1, 1)以0为中心LSTM门控
GELU(-∞, +∞)平滑近似Transformer标配

总结4:MLP 的结构 ​

输入 → [线性变换 → 激活] × N层 → 输出

Transformer MLP:
  输入(d_model) → W₁ → 隐藏层(4×d_model) → GELU → W₂ → 输出(d_model)
1
2
3
4

章节测试 ​

测试1:神经元计算 ​

假设一个神经元有输入 [1, 2, 3],权重 [0.5, -0.3, 0.2],偏置 0.1。 使用 ReLU 激活函数,输出是多少?

测试2:权重作用 ​

如果要强调某个输入的重要性,应该把这个输入的权重设置得更大还是更小?

测试3:激活函数选择 ​

如果要输出一个概率值(0到1之间),应该选择哪个激活函数?

测试4:MLP 结构 ​

一个 MLP 第一层输入维度是 100,输出维度是 200;第二层输入维度是 200,输出维度是 50。请问第二层权重矩阵的形状是什么?

测试5:Transformer MLP ​

在 Transformer 中,为什么 MLP 的隐藏层维度通常设置为输入维度的 4 倍?


参考答案 ​

测试1答案 ​

步骤1:计算加权和

z = 0.5×1 + (-0.3)×2 + 0.2×3 + 0.1
  = 0.5 - 0.6 + 0.6 + 0.1
  = 0.6
1
2
3

步骤2:应用 ReLU

y = max(0, 0.6) = 0.6
1

答案:0.6


测试2答案 ​

答案:更大

解析:权重越大,该输入对输出的影响越大。权重为负数时,该输入会反向影响输出。


测试3答案 ​

答案:Sigmoid

解析:Sigmoid 的输出范围是 (0, 1),适合表示概率。ReLU 输出可以是任意非负数,Tanh 输出可以是负数。


测试4答案 ​

答案:(200, 50)

解析:权重矩阵的形状是 (输入维度, 输出维度),所以第二层权重矩阵形状是 (200, 50)。


测试5答案 ​

答案:为了增加模型的表达能力,同时保持计算效率。

解析:

  1. 表达能力:更大的隐藏层可以学习更复杂的特征表示
  2. 信息筛选:先扩展再压缩,强迫模型提炼关键信息
  3. 效率平衡:4倍是一个经验值,在表达能力和计算成本之间取得平衡
  4. 历史传承:这个比例来自 original Transformer 论文,被后续模型广泛采用

相关笔记 ​

  • [[02 - Token 与上下文窗口]] - LLM 的基本单位
  • [[08 - Transformer 原理]] - Self-Attention 与 MLP
  • [[SwiGLU 详解]] - 现代 LLM 的 MLP 变体

下一步学习 ​

  • [ ] 阅读 02 - Token 与上下文窗口

学习状态:✅ 已完成

最后更新于:

Pager
上一篇1. LLM 前置知识学习路线 / A Prerequisite Learning Path for Large Language Models
下一篇3. Token 与上下文窗口 - LLM 的计费与记忆单位 / Tokens and Context Windows as the Units of LLM Cost and Memory

持续记录,持续成长

Copyright © Tidenflow