LSTM 论文(Hochreiter & Schmidhuber, 1997)精读(五)

文章:Sepp Hochreiter, Jürgen Schmidhuber; Long Short-Term Memory. Neural Comput 1997; 9 (8): 1735–1780. doi: https://doi.org/10.1162/neco.1997.9.8.1735

这段在讲 “全局误差信号流”是如何消失(vanish)的数学分析。核心思想是:在RNN中,如果网络结构和参数满足一定条件,误差信号在反向传播时会呈指数衰减,导致“梯度消失”问题


总体结构

🔹 分析一个从u反向传播到某个中间单元 v 的误差信号有多大。

🔹 用矩阵和向量表达式将这个传播过程数学化。

🔹 推导出一个上界估计(upper bound),说明这个误差信号最多多大。

🔹 如果这个上界随着时间 q 增大而指数减小,就说明:误差信号越来越小,最终消失(梯度消失)

Global error flow. The local error flow analysis above immediately shows that global error flow vanishes, too.

  • 前面分析了局部误差传播(即从一层传到下一层时梯度是如何变化的),得出梯度会越来越小。么在此基础上的 global error flow,作为多个 local error flow 的传播与组合,自然也会 整体上趋于消失

  • “局部(local)”与“全局(global)”的区别,本质上就体现在误差传播的范围关注的对象上:

局部误差传播(Local Error Flow)

  • 指的是相邻两层之间,例如从输出层传播到最后一层隐藏层,或者从隐藏层 l+1 传播到隐藏层 l

  • 研究的是:“一小步”传播过程中,梯度是如何被某个激活函数的导数和权重矩阵影响的。

 全局误差传播(Global Error Flow)

  • 指的是从输出层一路传播回较早的隐藏层,甚至输入层的路径总和

  • 你可以把它看成很多 local error flow 串联起来之后的“乘积效应”。

  • 我们要计算的是——从 u 开始,误差往前(通过网络)传了 q 步,传到输出单元 v 的量级是多少?


将误差传播写成矩阵乘积形式

 矩阵下标:[W]_{ij} = w_{ij}

  • \mathbf{W} \in \mathbb{R}^{n \times m}:表示从 第 m 层(前一层)第 n 层(后一层) 的权重矩阵。

  • 所以:

    [\mathbf{W}]_{ij} = w_{ij}

    表示:从第 j 个单元(前一层)指向第 i 个单元(当前层) 的权重。

 \mathbf{W}_vv 单元的 outgoing 权重向量

这是 矩阵 \mathbf{W}v 列

  • 因为每一列代表的是:从单元 v 出发,指向所有其他单元的权重

  • 所以(\mathbf{W}_v)_i = w_{iv}v 出发,连向第 i 个单元的权重

👉 可以理解为:v 的输出连接(outgoing)

\mathbf{W}_{u^T}:u 单元的 incoming 权重向量

这是 \mathbf{W} 的 u(不是列):

  • 因为每一行表示的是:所有其他单元指向 u 的连接

  • 所以 (\mathbf{W}_{u^T})_i = w_{ui}从第 i 个单元连向 u 的权重

👉 可以理解为:u 的输入连接(incoming)


📌 图示(可视化理解):

假设:

  • 三个单元 x_1, x_2,x_3,连接到下层单元 y_1, y_2

  • 权重矩阵 W 大小是 2 \times 3,即从 3 个输入连接到 2 个输出

那么:

        x1   x2   x3
         ↓    ↓    ↓
     ┌-----------------┐
y1 ← │ w11  w12  w13   │   ← 第1行:y1的incoming(W_{y1^T})
y2 ← │ w21  w22  w23   │   ← 第2行:y2的incoming(W_{y2^T})
     └-----------------┘
        ↑    ↑    ↑
      第1列 第2列 第3列
      ↓    ↓    ↓
   x1's outgoing (W_{x1})
   x2's outgoing (W_{x2})
   x3's outgoing (W_{x3})
  • W_{x2}:是第2列,包含 w_{12}, w_{22},是 x2 的输出连接

  • W_{y1^T}:是第1行,包含 w_{11}, w_{12}, w_{13},是 y1 的输入连接

 转置怎么理解?

  • 如果你想把一个单元的 incoming 向量 变成一个列向量,就写作 \mathbf{W}_{u^T}^T

  • 所以(\mathbf{W}_{u^T})^T就是把 row vector(第 u 行)转成 column vecto

可以类比成:

  • 第 v 列:v 发出多少条线(输出路径)

  • 第 u 行:u 收到多少条线(输入路径)

incoming / outgoing 的方向是按照 前向传播(forward pass) 来定义的,不是反向传播!


分析上界,推导梯度消失条件

 步骤一:定义 compatible 范数

 Using a matrix norm \|\cdot\|_A compatible with vector norm \|\cdot\|_x

👉 使用一个与向量范数兼容的矩阵范数

✅ 什么叫 compatible?

就是满足不等式:

\|Ax\|_x \leq \|A\|_A \cdot \|x\|_x

  • 这是矩阵范数和向量范数之间的“兼容性定义”。

  • 也就是说,这种范数组合是“良好配合”的,能保持不等式结构成立,特别方便后续推导中“估上界”。

 步骤二:定义导数矩阵的最大范数

② we define f'_{​{\max}} := \max_{m=1,\dots,q} \|F'(t-m)\|_A

  • F'(t - m):是某一时刻的导数矩阵,来自反向传播中激活函数的导数(例如 sigmoid 的导数)。

  • 它是一个对角矩阵,形如:

F'(t - m) = \begin{bmatrix} f_1'(net_1(t - m)) & 0 & \cdots & 0 \\ 0 & f_2'(net_2(t - m)) & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & f_n'(net_n(t - m)) \end{bmatrix}

  • 然后我们对这些矩阵求范数(即 \|F'(t - m)\|_A),再在所有 m = 1 \dots q中取最大值:

f'_{​{\max}} := \max_{m=1,\dots,q} \|F'(t - m)\|_A

 步骤三:引入不等式估计

 For \max_{i=1,\dots,n} |x_i| \leq \|x\|_x

👉 这是一个简单的性质:你向量里单个最大分量的绝对值,不会比整个向量范数更大。

举个例子:对\ell_2 范数来说:

\|x\|_2 = \sqrt{x_1^2 + \dots + x_n^2} \geq |x_i|

x = [3, 4] \Rightarrow \|x\|_2 = \sqrt{3^2 + 4^2} = 5

显然:

\max\{|3|, |4|\} = 4 < \|x\|_2 = 5

所以:

\max_i |x_i| \leq \|x\|_x

这个结论在后面帮助我们“用一个范数控制所有分量”。

 步骤四:使用内积不等式

④ we get |x^T y| \leq n \cdot \|x\|_x \cdot \|y\|_x

这是在用一个简单的不等式给出:

|x^T y| \leq n \cdot \|x\|_x \cdot \|y\|_x

这个估计来自将内积写成分量和的形式:

x^T y = \sum_{i=1}^{n} x_i y_i

然后使用 Cauchy-Schwarz 不等式(或极端估计法):

|x_i y_i| \leq |x_i| \cdot |y_i| \leq \|x\| \cdot \|y\|

于是所有的 x_i y_i加起来总共不会超过:

\sum_{i=1}^{n} |x_i y_i| \leq n \cdot \|x\| \cdot \|y\|

这种估计虽然“粗糙”,但对分析足够用了。

✅ 解释:
  • 当你不知道内积到底多大时,可以用这种“松弛”的估计方式;

  • 这是在用“所有元素都可能最大”的极端情况来估上界;

步骤五:将每一层的导数估上界

Since |f'_v(net_v(t-q))| \leq \|F'(t-q)\|_A \leq f'_{\max}

这句话是说:

  1. f'_v(net_v(t-q))是某个输出神经元的激活函数在某个时间点的导数;

  2. 这个值不会超过F'(t-q) 这个对角矩阵的范数;

  3. 由于对角矩阵范数(比如 \ell_\infty)就是所有对角线元素的最大值,因此:

  4. |f'_v(net_v(t - q))| \leq \|F'(t - q)\|_A

    而我们前面定义了一个最大上界 f'_{\text{max}},所以:

    \|F'(t - q)\|_A \leq f'_{\text{max}}

  • 于是这一层的导数被包住了,也就是说

我们在估计梯度传播时,要考虑每一层的“激活函数导数”
比如你用了 tanh,它的一阶导数最大也就 1。

这一层的激活函数导数矩阵(对角矩阵)记作:

F'(t - m)

我们对它求范数:

\|F'(t - m)\| \leq f'_{\max}

这个 f'_{\max} 是我们人为设置的「最大可能值」上界。

——就是这个范数不会再比这个上界大了,我们不需要关心具体数值,只关心它最多多少(“保守估计”)。

而那个范数又不会超过你上面定义的 f'_{\max}

前文你定义过:

f'_{\max}= \max_m \|F'(t - m)\|

也就是说你在所有时间步上找到一个最大值 f'_{\max},把它作为「最坏情况」的估计。

所以每一层的:

\|F'(t - m)\| \leq f'_{\max}

所以就是一层一层地把上限传递下去


从当前时刻 t 的单元 u,反向传播 q 步回到单元 v 的时候,梯度的上界:

\|\mathbf{W}_v \|_x = \| \mathbf{W} \mathbf{e}_v \|_x \leq \| \mathbf{W} \|_A \cdot \| \mathbf{e}_v \|_x \leq \| \mathbf{W} \|_A

\| \mathbf{W}_{u^T}|_x = \| \mathbf{e}_u^T \mathbf{W} \|_x \leq \| \mathbf{W} \|_A \cdot \| \mathbf{e}_u \|_x \leq \| \mathbf{W} \|_A

Note that this is a weak, extreme case upper bound...

上面这个上界 很宽松(loose upper bound),它只在以下极端情况下才可能成立

  1. 所有激活函数的导数都刚好是最大值:

  2. 所有路径上的误差传播方向都一致(正号或负号相同),所以乘积不会抵消。

🔁 在实际中这很少发生——所以这个上界只是用来说明「最坏情况下,误差如何快速衰减」,而非真实情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值