# Gradient Vanishing vs Gradient Exploding

### 梯度消失与梯度爆炸

在训练深层神经网络时，梯度消失和梯度爆炸是两种常见的问题。它们都与反向传播过程中梯度的更新方式有关，特别是在网络层数较多时尤为显著。

#### 梯度消失（Gradient Vanishing）

梯度消失发生在反向传播过程中，梯度随着层数增加逐渐变得非常小，以至于无法对较早层的权重进行有效更新。这通常发生在使用某些激活函数（如 Sigmoid 或 Tanh）时。

**原因：**

在反向传播中，梯度通过链式法则计算：

$$
\frac{\partial \text{Loss}}{\partial w} = \frac{\partial \text{Loss}}{\partial z\_L} \cdot \frac{\partial z\_L}{\partial z\_{L-1}} \cdot \cdots \cdot \frac{\partial z\_1}{\partial w}
$$

当层数 $$L$$ 较大时，每一层的导数如果小于 1，那么梯度会呈指数级减小，最终导致前几层几乎没有梯度更新。

例如，对于 Sigmoid 激活函数：

$$
\sigma(z) = \frac{1}{1 + e^{-z}}
$$

其导数为：

$$
\sigma'(z) = \sigma(z)(1 - \sigma(z))
$$

当 $$\sigma(z)$$ 靠近 0 或 1 时，导数会变得非常小，导致梯度消失。

**影响：**

* 神经网络的早期层权重几乎不会更新，学习变得非常缓慢。
* 随着网络层数的增加，这个问题会变得更加严重。

#### 梯度爆炸（Gradient Exploding）

梯度爆炸是与梯度消失相对的问题。当层数较多时，梯度在反向传播中不断增大，导致权重更新过大，模型变得不稳定。

**原因：**

与梯度消失类似，梯度爆炸也是由于链式法则的累乘。如果某一层的梯度大于 1，则通过多层传递后，梯度会变得非常大，导致参数更新过大。

例如，在网络中使用线性激活函数或 ReLU 激活函数时，如果权重初始化不当或者梯度更新没有限制，容易发生梯度爆炸。

**影响：**

* 模型的权重可能会变得非常大，导致梯度更新不稳定，甚至可能导致损失函数变为 NaN。
* 训练过程可能会失败，网络无法收敛。

#### 例子

假设我们有一个 3 层的神经网络，每一层使用 Sigmoid 作为激活函数。对于输入 $$x$$，我们通过权重 $$w$$ 和偏置 $$b$$ 计算输出 $$\hat{y}$$：

$$
z\_1 = w\_1 \cdot x + b\_1
$$

$$
a\_1 = \sigma(z\_1)
$$

$$
z\_2 = w\_2 \cdot a\_1 + b\_2
$$

$$
a\_2 = \sigma(z\_2)
$$

$$
z\_3 = w\_3 \cdot a\_2 + b\_3
$$

$$
\hat{y} = \sigma(z\_3)
$$

在反向传播时，若 Sigmoid 的导数值较小，前几层的权重更新会变得非常缓慢，导致梯度消失。而如果我们初始化权重过大，则可能导致梯度在反向传播中指数级增长，最终发生梯度爆炸。

#### 解决方法：

1. **梯度消失**：
   * 使用不同的激活函数，例如 ReLU、Leaky ReLU 等，它们的导数不会像 Sigmoid 那样趋近于 0。
   * 使用批归一化（Batch Normalization）来缓解梯度消失问题。
   * 使用合适的权重初始化方法（例如 Xavier 初始化或 He 初始化）。
2. **梯度爆炸**：
   * 使用梯度裁剪（Gradient Clipping）来限制梯度的大小。
   * 使用更小的学习率。
   * 使用合适的权重初始化来防止梯度在反向传播时过大。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ai.younglimit.com/deep-learning/basic-neural-network/gradient-vanishing-vs-gradient-exploding.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
