DenseNet 论文演练:所有连接

当我们尝试训练一个非常深的神经网络模型时,我们可能遇到的一个问题是梯度消失问题。这本质上是一个问题,即模型在训练过程中权重更新减慢甚至停止,从而导致模型无法改进。当网络非常深时,[...]DenseNet 论文演练:所有连接的帖子首先出现在走向数据科学上。

来源:走向数据科学

我们尝试训练一个非常深的神经网络模型,我们可能遇到的一个问题是梯度消失问题。这本质上是一个问题,即模型在训练过程中权重更新减慢甚至停止,从而导致模型无法改进。当网络很深时,反向传播期间的梯度计算涉及通过链式法则将许多导数项相乘。请记住,如果我们将小数(通常小于 1)乘以太多次,结果将会变得非常小。在神经网络的情况下,这些数字用作权重更新的基础。所以,如果梯度很小,那么权重更新就会很慢,导致训练也很慢。

为了解决梯度消失问题,我们实际上可以使用快捷路径,以便梯度可以更轻松地流经深层网络。 ResNet 是尝试解决此问题的最流行的架构之一,它实现了跳过网络中多个层的跳跃连接。这个想法被 DenseNet 采用,其中跳跃连接的实现更加积极,使其在处理梯度消失问题方面比 ResNet 更好。在这篇文章中,我想谈谈 DenseNet 到底是如何工作的以及如何从头开始实现该架构。

DenseNet 架构

密集块

在标准 CNN 中,如果我们有 L 个层,那么我们也将有 L 个连接。假设上图只是一个传统的 5 层 CNN,我们基本上只有从每个张量出来的 5 个直箭头。在 DenseNet 中,如果我们有 L 层,我们将有 L (L+1)/2 个连接。所以在上面的例子中我们基本上总共得到了 5(5+1)/2 = 15 个连接。您可以通过手动一一统计箭头来验证这一点:5 个红色箭头、4 个绿色箭头、3 个紫色箭头、2 个黄色箭头和 1 个棕色箭头。

  • H₁→ 6×3×3×4 = 216
  • H2→ 10×3×3×4 = 360
  • H₃→ 14×3×3×4 = 504
  • H₄→ 18×3×3×4 = 648
  • 等等...