2. 数学基础回顾:线性代数核心概念、概率论与信息论基础、优化理论入门
各位同学,欢迎来到第二章。说实话,很多搞AI的人一听到「数学基础」四个字就开始头疼。我当年也一样,觉得写代码就完事了,学什么矩阵特征值?
直到我第一次在嵌入式设备上部署ACT模型,发现推理速度慢得像蜗牛爬。排查了半天,问题出在矩阵运算的冗余计算上。嗯,从那以后,我再也不敢小看线性代数了。
这一章,咱们不讲纯数学推导,只讲ACT算法里真正会用到的数学工具。你想想看,搞懂这些,后面部署的时候你就能自己优化计算图了。
2.1 线性代数核心概念:矩阵运算与特征值
ACT算法里,矩阵运算无处不在。说白了,神经网络的前向传播就是一连串的矩阵乘法加激活函数。
2.1.1 矩阵乘法:别小看这个
我见过太多新手在矩阵维度上翻车。一个 (m×n) 的矩阵乘以 (n×p) 的矩阵,结果维度是 (m×p)。这个规则必须刻在脑子里。
# Python示例:矩阵乘法
import numpy as np
A = np.array([[1, 2], [3, 4]]) # 2x2
B = np.array([[5, 6], [7, 8]]) # 2x2
C = np.dot(A, B) # 结果还是2x2
print(C)
# 输出: [[19 22]
# [43 50]]
2.1.2 特征值与特征向量:ACT的「灵魂」
特征值这个东西,你可能会觉得抽象。但ACT算法里,它用来分析注意力机制的「信息流」。
简单说:对于一个方阵 A,如果存在向量 v 和标量 λ,使得 Av = λv,那么 λ 就是特征值,v 就是特征向量。
为什么会这样?因为特征值告诉我们:这个矩阵在哪个方向上「拉伸」了数据。在ACT中,注意力矩阵的特征值分布,直接决定了模型能不能有效捕捉长距离依赖。
2.2 概率论与信息论基础:熵与KL散度
ACT算法里,概率论不是用来算概率的,而是用来衡量「不确定性」的。你想想看,模型预测一个动作,它到底有多确定?
2.2.1 熵:不确定性的度量
熵的公式:H(X) = -∑ p(x) log p(x)
说白了,熵越大,系统越混乱。一个均匀分布(所有概率相等)的熵最大,一个确定性分布(某个概率为1)的熵为0。
在ACT中,策略网络的输出是一个概率分布。熵值高,说明模型还在探索;熵值低,说明模型已经「拿定主意」了。
2.2.2 KL散度:两个分布的「距离」
KL散度的公式:D_KL(P||Q) = ∑ p(x) log(p(x)/q(x))
它衡量的是:用分布Q去近似分布P时,损失了多少信息。注意,KL散度不是对称的,D_KL(P||Q) ≠ D_KL(Q||P)。
在ACT算法里,KL散度用来约束策略更新的步长。每次更新策略时,新策略和旧策略的KL散度不能太大,否则训练会不稳定。
2.3 优化理论入门:梯度下降与变体
ACT算法的核心是优化策略网络。说白了,就是找到一组参数,让期望回报最大。
2.3.1 梯度下降:最朴素的思路
公式:θ_new = θ_old - α * ∇J(θ)
其中 α 是学习率,∇J(θ) 是目标函数对参数的梯度。沿着梯度反方向走,就能找到局部最小值。
但这里有个坑:学习率太大,会震荡;学习率太小,收敛太慢。我刚开始做ACT时,调学习率调了一个星期。
2.3.2 Adam优化器:业界标配
Adam结合了动量和自适应学习率。它维护两个状态:一阶动量(梯度均值)和二阶动量(梯度方差)。
# Adam优化器的核心更新逻辑(简化版)
m_t = beta1 * m_{t-1} + (1 - beta1) * g_t
v_t = beta2 * v_{t-1} + (1 - beta2) * g_t^2
m_hat = m_t / (1 - beta1^t)
v_hat = v_t / (1 - beta2^t)
theta_t = theta_{t-1} - lr * m_hat / (sqrt(v_hat) + epsilon)
2.3.3 策略梯度中的优化技巧
ACT算法用的是策略梯度方法,优化目标不是简单的损失函数,而是期望回报。这里有个关键点:梯度估计的方差很大。
我常用的技巧:
- 优势函数归一化:减去均值,除以标准差,降低方差
- GAE(广义优势估计):平衡偏差和方差,我习惯用 λ=0.95
- 梯度裁剪:把梯度限制在 [-1, 1] 范围内,防止梯度爆炸
知识体系总览
下面这张图,是我自己总结的ACT数学基础框架。你把它存下来,后面学具体算法时,随时回来对照。
好了,数学基础就讲到这里。这些概念你不需要一次性全记住,后面每讲一个ACT的具体模块,我都会回头引用这里的知识点。你只需要知道:矩阵运算是骨架,熵和KL散度是约束,优化方法是引擎。三者缺一不可。
公众号:蓝海资料掘金营,微信deep3321