AoZai
AoZai

阅读声明

本页为个人学习整理与翻译笔记,仅供学习参考;原课程内容版权归 MIT OpenCourseWare 及相关权利方所有。

线性代数 ZoomNotes

Gilbert Strang,MIT 18.06 · 第10章 / 11

第 10 部分:从数据中学习

9.1(原文10.1) 学习函数 F(x,v0)F(x, v_0):数据 v0v_0 与权重 xx

一个神经网络LL层函数的复合:

vk=ReLU(Akvk1+bk)for k=1,,Lv_k = \text{ReLU}(A_k v_{k-1} + b_k) \quad \text{for } k = 1, \dots, L

其中:

  • v0v_0输入数据
  • AkA_k权重矩阵(可学习参数,统称为 xx)
  • bkb_k偏置向量 (bias vectors)
  • vLv_L输出(预测值)

**ReLU (整流线性单元,Rectified Linear Unit):**非线性激活函数:

ReLU(y)=max(y,0)\text{ReLU}(y) = \max(y, 0)

ReLU 是一个分段线性的斜坡函数 (ramp function),这使得整个网络在权重和输入上都是分段线性的。这对训练至关重要:函数 F(x,v0)F(x, v_0) 是分段线性的。

学习函数: F(x,v0)F(x, v_0) 将权重 xx 和输入 v0v_0 映射为输出 vLv_L。目标是找到使训练数据上的损失函数 (loss function) 最小化的权重 xx


9.2(原文10.2) 计算 FF 的图像中平坦片段的个数

由于 ReLU 会产生折痕 (y=0y=0 处的"折缝",crease),分段线性函数 FF 将输入空间划分为许多线性区域 (linear regions)。

**计数公式:**对于 Rp\mathbb{R}^p 中的 NN 个 ReLU 折缝:

r(N,p)=(N0)+(N1)++(Np)r(N, p) = \binom{N}{0} + \binom{N}{1} + \cdots + \binom{N}{p}

递推公式:

r(N,p)=r(N1,p)+r(N1,p1)r(N, p) = r(N-1, p) + r(N-1, p-1)

**增长性:**区域数量大约按 r(N,p)cNpr(N,p) \approx c N^p 增长,这表明即使中等规模的网络也能表示极其复杂的分段线性函数。

**示例:**对于 R10\mathbb{R}^{10} 中的 N=100N = 100 个 ReLU 神经元,线性区域的个数约为 (10010)1.7×1013\binom{100}{10} \approx 1.7 \times 10^{13}


9.3(原文10.3) 最小化损失:随机梯度下降

**梯度下降 (Gradient Descent):**沿着最陡下降方向 (steepest descent) 迭代更新权重:

xk+1=xkskF(xk)x_{k+1} = x_k - s_k \nabla F(x_k)

其中 sks_k学习率 (learning rate,步长),F(xk)\nabla F(x_k) 是损失在 xkx_k 处的梯度。

损失函数:

  • 平方损失 (Square loss): L=(ypredytrue)2L = (y_{\text{pred}} - y_{\text{true}})^2
  • 交叉熵损失 (Cross-entropy loss): L=yilog(y^i)L = -\sum y_i \log(\hat{y}_i) (用于分类任务)

**随机梯度下降 (SGD,Stochastic Gradient Descent):**不在整个数据集上计算梯度(成本高昂),而是每次使用一个随机样本:

xk+1=xkskFik(xk)x_{k+1} = x_k - s_k \nabla F_{i_k}(x_k)

其中 iki_k 是随机选取的索引。这样做每次迭代快得多,且随机性有助于逃离局部极小值。

**小批量随机梯度下降 (Minibatch SGD):**对 BB 个随机样本组成的一小批 (batch) 求梯度平均:

xk+1=xksk1BibatchFi(xk)x_{k+1} = x_k - s_k \cdot \frac{1}{B} \sum_{i \in \text{batch}} \nabla F_i(x_k)

典型的批量大小 (batch size):32、64、128、256。批量在梯度精度与计算效率之间取得平衡。


9.4(原文10.4) 锯齿状收敛缓慢:加入动量

当损失地形 (loss landscape) 呈狭长形状(高条件数,high condition number)时,标准的梯度下降会产生锯齿状振荡 (zigzag),导致收敛缓慢。

**动量法 (Momentum,或称重球法 Heavy Ball Method):**加上上一次更新量的一部分:

zk+1=βzk+F(xk)xk+1=xkskzk+1\begin{aligned} z_{k+1} &= \beta z_k + \nabla F(x_k) \\ x_{k+1} &= x_k - s_k z_{k+1} \end{aligned}

动量项 βzk\beta z_k (通常取 β0.9\beta \approx 0.9)平滑了轨迹,减小了振荡并加速了收敛。

**ADAM (自适应矩估计,Adaptive Moment Estimation):**将动量与每个参数的自适应学习率相结合:

  • 维护过去梯度与梯度平方的指数衰减平均值
  • 为每个参数单独调整学习率
  • 有效处理稀疏梯度
  • 通常是深度学习的默认优化器

9.5(原文10.5) 卷积神经网络:一维与二维CNN

卷积神经网络 (CNN) 使用通过滑动窗口应用的共享权重,使其具有平移不变性 (shift-invariant,或称平移等变性 translation equivariant)。

**一维卷积:**一个滤波器(卷积核,kernel/filter) ww 在输入上滑动,在每个位置计算点积:

(fw)[i]=jf[i+j]w[j](f * w)[i] = \sum_{j} f[i+j] \, w[j]

**二维卷积 (用于图像):**一个小型卷积核(如 3×33 \times 3)在图像上滑动,在每个图块 (patch) 处计算相同的加权和:

(IK)[i,j]=p,qI[i+p,j+q]K[p,q](I * K)[i,j] = \sum_{p,q} I[i+p, j+q] \, K[p,q]

关键性质:

  • **权重共享:**同一组滤波权重在每一个位置使用(大幅减少参数数量)
  • **局部性:**每个输出像素仅依赖一个局部邻域
  • **层次性:**浅层检测边缘,深层检测形状和物体

**池化层 (Pooling Layers):**减少空间维度:

  • **最大池化 (Max-pooling):**在每个 2×22 \times 2(或其他尺寸)的块中取最大值
  • **平均池化 (Average-pooling):**取平均值

其他组成部分:

  • Softmax: softmax(z)i=ezi/jezj\text{softmax}(z)_i = e^{z_i} / \sum_j e^{z_j} 将输出转换为概率
  • **批量归一化 (Batch Normalization):**在每一层对激活值进行重新缩放和重新居中 (rescale and recenter),以维持稳定的梯度
  • **残差网络 (ResNet):**跳跃连接 xf(x)+xx \to f(x) + x 通过缓解梯度消失问题 (vanishing gradient problem),使得训练非常深的网络成为可能

9.6(原文10.6) 反向传播:FF 的链式法则

反向传播 (Backpropagation) 是神经网络中计算梯度的算法。它是以高效的反向模式 (reverse mode) 应用的链式法则

**前向传播 (Forward Pass):**计算 v1,v2,,vLv_1, v_2, \dots, v_L 和损失 LL

**反向传播 (Backward Pass,反向模式):**从输出层反向逐层计算梯度,直至输入层:

Lvk1=Lvkvkvk1\frac{\partial L}{\partial v_{k-1}} = \frac{\partial L}{\partial v_k} \cdot \frac{\partial v_k}{\partial v_{k-1}}

对于每一层 vk=ReLU(Akvk1+bk)v_k = \text{ReLU}(A_k v_{k-1} + b_k),对 AkA_kbkb_k 的梯度通过局部导数计算:

LAk=Lvkvk1TLbk=Lvk\begin{aligned} \frac{\partial L}{\partial A_k} &= \frac{\partial L}{\partial v_k} \cdot v_{k-1}^T \\ \frac{\partial L}{\partial b_k} &= \frac{\partial L}{\partial v_k} \end{aligned}

自动求导为何高效:前向传播花费一次函数求值。反向传播在大致等同于一次前向传播的时间内计算出所有偏导数——相比通过有限差分法对一个有 nn 个参数的函数进行 O(n)O(n) 次前向传播,这是巨大的提升。

核心洞察:永远不要构造完整的雅可比矩阵(其规模将是巨大的)。取而代之的是,将梯度信息沿着计算图反向传播,同时存储并复用中间结果。

上一篇 下一篇
© MIT OpenCourseWare  |  18.06 Linear Algebra  |  Gilbert Strang  |  Spring 2010
ocw.mit.edu  ·  CC BY-NC-SA 4.0