探索深度学习中的梯度消失问题,它对神经网络的影响,以及 ReLU、ResNet 等有效解决方案。
The Vanishing Gradient problem is a significant challenge encountered during the training of deep artificial neural networks. It occurs when the gradients—the values that dictate how much the network's parameters should change—become incredibly small as they propagate backward from the output layer to the input layers. Because these gradients are essential for updating the model weights, their disappearance means the earlier layers of the network stop learning. This phenomenon effectively prevents the model from capturing complex patterns in the data, limiting the depth and performance of deep learning architectures.
To understand why this happens, it is helpful to look at the process of backpropagation. During training, the network calculates the error between its prediction and the actual target using a loss function. This error is then sent backward through the layers to adjust the weights. This adjustment relies on the chain rule of calculus, which involves multiplying the derivatives of activation functions layer by layer.
If a network uses activation functions like the sigmoid function or the hyperbolic tangent (tanh), the derivatives are often less than 1. When many of these small numbers are multiplied together in a deep network with dozens or hundreds of layers, the result approaches zero. You can visualize this like a game of "telephone" where a message is whispered down a long line of people; by the time it reaches the start of the line, the message has become inaudible, and the first person doesn't know what to say.
人工智能领域已开发出多种有效的策略来缓解梯度消失问题,从而能够创建Ultralytics 强大的模型。
尽管它们源于相同的根本机制(重复乘法),但梯度消失与梯度爆炸是截然不同的现象。
NaN (Not a Number). This is often fixed by
gradient clipping.
克服梯度消失问题已成为现代人工智能应用成功的必要条件。
现代框架和模型抽象了其中许多复杂性。当训练YOLO26这类模型时, 其架构会自动包含SiLU激活函数和批量归一化等组件,以防止梯度消失问题。
from ultralytics import YOLO
# Load the YOLO26 model (latest generation, Jan 2026)
# This architecture includes residual connections and modern activations
# that inherently prevent vanishing gradients.
model = YOLO("yolo26n.pt")
# Train the model on a dataset
# The optimization process remains stable due to the robust architecture
results = model.train(data="coco8.yaml", epochs=10)