更深的卷积神经网络能否产生更少的参数?

Can deeper convolutional neural nets result in lesser parameters?

我在 Keras 中训练了两个卷积神经网络。第一个是net如下

def VGG1(weights_path):
    model = Sequential()
    model.add(Convolution2D(nb_filters, nb_conv, nb_conv,
                        border_mode='valid',
                        input_shape=(1, img_rows, img_cols)))
    model.add(Activation('relu'))
    model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(128))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes))
    model.add(Activation('softmax'))

    if weights_path:
        model.load_weights(weights_path)

    return model

第二网

def VGG2(weights_path):
    model = Sequential()

    model.add(Convolution2D(nb_filters, nb_conv, nb_conv, border_mode='valid', input_shape=(1, img_rows, img_cols)))
    model.add(Activation('relu'))
    model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
    model.add(Dropout(0.25))

    model.add(Convolution2D(64, nb_conv, nb_conv, border_mode='valid'))
    model.add(Activation('relu'))
    model.add(Convolution2D(64, nb_conv, nb_conv))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(256))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))

    model.add(Dense(nb_classes))
    model.add(Activation('softmax'))

    if weights_path:
        model.load_weights(weights_path)

    return model

当我调用model.count_params()方法时,第一个网络结果为604035参数,第二个网络结果为336387。

这怎么可能?第二个网络更深,应该包含更多参数。有没有错?

网络的深度并不是影响其参数数量的唯一因素。每层参数的数量有很大的影响。这意味着对于每个卷积层,过滤器的大小和过滤器(学习到的特征)的数量都会产生巨大的差异。看看这个link http://arxiv.org/pdf/1409.1556.pdf

VGG小组的论文

另请查看论文“Deep Residual Learning for image recognition”,它代表了最多 152 层的网络,即比 VGG 网络深 8 倍,同时仍然具有较低的复杂性。

是的,更深层次的神经网络可以有更少的参数。如果它们是 CNNs 也没关系。您可能会感到困惑,因为在图形表示中,人们倾向于关注神经元。然而,学到的是权重,它们位于神经元之间的边缘。

除了 link 到 "Deep Residual Learning for image recognition"(请为 Midos 的答案投票)之外,我想举一个多层感知器 (MLP) 的玩具示例。

玩具示例:瓶颈特征

第一个 MLP 有一个包含 784 个神经元的输入层、两个包含 2000 个神经元的隐藏层和一个包含 10 个神经元的输出层(简称:784:2000:2000:10)。这导致网络具有 神经元。现在考虑具有架构 784:2000:50:2000:10 的网络。这有 个神经元。

这意味着再增加一层,即使不减少任何一层,网络的大小也减少到之前大小的 32%!