第三章:数学基础
NLP 涉及大量的数学知识。本章将介绍理解 NLP 算法所必需的数学基础,包括线性代数、概率论和信息论的核心概念。
线性代数基础
标量、向量、矩阵和张量
| 术语 | 符号 | 形状 | 说明 | 示例 |
|---|---|---|---|---|
| 标量(Scalar) | () | 单个数值 | ||
| 向量(Vector) | 一维数组 | |||
| 矩阵(Matrix) | 二维数组 | |||
| 张量(Tensor) | 多维数组 | 形状为 |
NLP 中的张量
在 NLP 中,我们经常使用张量来表示数据。例如:
- 一个词的词向量:向量,形状为
,如 - 一个句子的词向量序列:矩阵,形状为
,如 - 一个批次的句子:三维张量,形状为
,如
向量运算
向量加法
示例:
标量乘法
示例:
点积(Dot Product)
点积是 NLP 中最常用的操作之一:
示例:
点积的几何意义
点积衡量两个向量的相似程度:
:两个向量方向大致相同 :两个向量正交(垂直) :两个向量方向大致相反
向量范数
L1 范数(曼哈顿距离)
L2 范数(欧几里得范数)
余弦相似度
余弦相似度是 NLP 中衡量两个向量相似程度的重要指标:
其中:
是两个向量的点积 和 分别是两个向量的 L2 范数 - 返回值范围为
- 值为 1 表示方向完全相同(最相似)
- 值为 0 表示正交(无相关性)
- 值为 -1 表示方向完全相反(最不相似)
示例:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 点积
dot = np.dot(a, b) # 32
# 余弦相似度
cos_sim = dot / (np.linalg.norm(a) * np.linalg.norm(b))
print(cos_sim) # 0.9746矩阵运算
矩阵乘法
矩阵乘法是深度学习中最核心的运算。对于矩阵
其中
示例:
维度要求
矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数:
矩阵转置
矩阵转置是将矩阵的行和列互换:
广播机制
在深度学习框架(如 PyTorch)中,广播(Broadcasting)允许不同形状的张量进行运算:
# 矩形 + 向量(广播)
A = torch.randn(3, 4) # 形状 (3, 4)
b = torch.randn(4) # 形状 (4,)
C = A + b # 形状 (3, 4),b 被广播到每一行概率论基础
随机变量与概率分布
随机变量是一个取值不确定的变量,用大写字母表示(如
离散随机变量
对于离散随机变量
示例:掷骰子,
连续随机变量
对于连续随机变量
期望与方差
期望(Expectation)
期望是随机变量的"平均值":
离散情况:
连续情况:
方差(Variance)
方差衡量随机变量的离散程度:
其中:
是期望 越大,表示数据越分散
条件概率与贝叶斯定理
条件概率
含义:在事件
贝叶斯定理
其中:
是先验概率(在观测到 之前对 的信念) 是后验概率(在观测到 之后对 的更新信念) 是似然(在 为真的条件下观测到 的概率) 是证据(归一化常数)
贝叶斯定理在 NLP 中的应用
在垃圾邮件过滤中:
= 邮件是垃圾邮件 = 邮件中包含"免费"这个词 = 包含"免费"的邮件是垃圾邮件的概率
通过贝叶斯定理,我们可以用已知的统计数据来计算这个概率。
Softmax 函数
Softmax 函数将一个实数向量转换为概率分布,是 NLP 中最常用的函数之一:
其中:
是输入向量的第 个元素 是类别数 - 输出满足
,且每个值都在 之间
示例:
输入:z = [2.0, 1.0, 0.1]
计算:
e^2.0 = 7.389
e^1.0 = 2.718
e^0.1 = 1.105
总和 = 11.212
输出:[7.389/11.212, 2.718/11.212, 1.105/11.212]
= [0.659, 0.242, 0.099]import torch
z = torch.tensor([2.0, 1.0, 0.1])
probs = torch.softmax(z, dim=0)
print(probs) # tensor([0.6590, 0.2424, 0.0986])信息论基础
信息量
一个事件的信息量与其发生的概率成反比——越不可能发生的事件,携带的信息越多:
其中:
是事件 发生的概率 的单位是比特(bit)
示例:
- 抛硬币正面朝上:
, bit - 掷骰子掷出6:
, bit
熵(Entropy)
熵是随机变量不确定性的度量,即信息量的期望值:
其中:
是随机变量 取值为 的概率 ,熵越大表示不确定性越高
示例:
公平硬币(
不公平硬币(
不公平硬币的熵更低,因为结果更确定。
交叉熵(Cross-Entropy)
交叉熵衡量用分布
其中:
是真实分布(ground truth) 是预测分布(模型输出) - 当
时,交叉熵等于熵 ,此时编码最优
交叉熵在 NLP 中的应用
交叉熵是 NLP 中最常用的损失函数。在语言模型中:
是真实的下一个词的分布(one-hot 向量) 是模型预测的概率分布 - 最小化交叉熵 = 让模型的预测尽可能接近真实分布
KL 散度(Kullback-Leibler Divergence)
KL 散度衡量两个概率分布之间的差异:
其中:
,当且仅当 时等于 0 - KL 散度不对称:
与交叉熵的关系:
由于
激活函数
激活函数为神经网络引入非线性,使其能够学习复杂的模式。
Sigmoid 函数
- 输出范围:
- 常用于二分类的输出层和门控机制(如 LSTM 的门)
- 缺点:存在梯度消失问题
Tanh 函数
- 输出范围:
- 零中心化,比 Sigmoid 更好
- 常用于 RNN 的隐藏状态
ReLU 函数
- 计算简单,收敛快
- 解决了梯度消失问题(正区间)
- 缺点:负区间梯度为 0("死亡 ReLU")
GELU 函数
其中
- GELU 是 Transformer 和 BERT 中使用的激活函数
- 比 ReLU 更平滑,效果通常更好
小结
本章介绍了理解 NLP 算法所必需的数学基础:
| 领域 | 核心概念 | NLP 中的应用 |
|---|---|---|
| 线性代数 | 向量、矩阵、点积、余弦相似度 | 词向量、注意力计算 |
| 概率论 | 条件概率、贝叶斯、Softmax | 语言模型、分类 |
| 信息论 | 熵、交叉熵、KL 散度 | 损失函数、模型评估 |
| 激活函数 | Sigmoid、ReLU、GELU | 神经网络非线性变换 |
这些数学工具将在后续章节中反复使用。如果某些概念不够熟悉,建议在学习后续章节时回头参考本章。