【问题标题】:Why does neural net optimizer change from SGD to Adam lead to massive decrease in accuracies?为什么神经网络优化器从 SGD 更改为 Adam 会导致准确率大幅下降?
【发布时间】:2023-04-04 20:50:02
【问题描述】:

我正在用大约 10,000 张图像训练一个 covnet,并注意到将优化器从 opt = SGD() 切换到 opt = 'adam' 会导致精度大幅降低,同时保持所有其他参数相同。使用 SGD(),我可以达到大约 80% 的准确度(在每个 epoch 之后逐渐增加)。对于 Adam,我在每个 epoch 都被困在 22.25% 的验证准确率上。

我想了解造成这种情况的可能原因。

参数

dropout_prob = 0.2
activation_function = 'relu'
loss_function = 'categorical_crossentropy'
batch_size = 32
epoch_count = 20
num_classes = 3

型号

 model = Sequential()
        model.add(Conv2D(filters=16, kernel_size=(3, 3), input_shape=inp_shape))
        model.add(Conv2D(filters=32, kernel_size=(3, 3)))
        model.add(MaxPooling2D(pool_size=(2, 2)))
        model.add(Dropout(rate=dropout_prob))
        model.add(Flatten())
        model.add(Dense(128, activation=activation_function))
        model.add(Dropout(rate=dropout_prob))
        model.add(Dense(64, activation=activation_function))
        model.add(Dropout(rate=dropout_prob))
        model.add(Dense(32, activation=activation_function))
        model.add(Dense(num_classes, activation='softmax'))
        model.summary()
        model.compile(loss=loss_function, optimizer=opt, metrics=['accuracy'])
        history = model.fit(x_train, y_train_cat, batch_size=batch_size, epochs=epoch_count,
                            verbose=verbose_level,
                            validation_data=(x_test, y_test_cat))

【问题讨论】:

  • opt 是什么?
  • 我是古玩,我的回答解决了你的问题吗?

标签: neural-network keras conv-neural-network


【解决方案1】:

不同的优化器可能需要不同的优化超参数才能收敛。 尝试将opt='adam'(使用默认学习率)替换为

opt = keras.optimizers.Adam(lr=learning_rate)

不要使用默认值learning_rate,而是使用cross-validation 选择它的值。

根据经验,学习率通常在 1e-6..0.1 之间。您可以尝试使用以下学习率值:[1e-6, 3e-6, 1e-5, 3e-5, 1e-4, ..., 1e-1]

【讨论】:

    【解决方案2】:

    基于 SGD 的优化器的一个缺点是它们依赖于对所有方向(即要更新梯度的所有参数)梯度的标量和统一学习。相比之下,自适应学习策略(例如 Adam)根据函数曲率的估计对梯度进行对角缩放。 Adam 没有保持在多个参数之间共享的学习率,而是使用一个学习率向量,每个参数一个,并随着训练的进行而调整这些向量。正是这种梯度的非均匀缩放导致 Adam 的泛化能力滞后,并且可能在您的情况下,导致准确度大幅下降。

    Improving Generalization Performance by Switching from Adam to SGD中所述:

    尽管有出色的训练效果,但自适应优化方法如 正如发现 Adam、Adagrad 或 RMSprop 的泛化能力很差 与随机梯度下降(SGD)相比。这些方法往往 在训练的初始部分表现良好,但表现出色 在训练后期由 SGD 提供。

    为了结合两个优化器的优点,他们引入了从 Adam 到 SGD 的切换技术,方法是:(a) 切换点,即在切换到 SGD 之前使用 Adam 训练模型的时间。作为一个经验法则,论文指出在至少 10 个 epoch 之后进行切换。 (b) 切换后用于SGD的学习率:由Adam的动量参数beta_1决定。

    可以在here找到一个很好的解释。

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2020-04-13
      • 1970-01-01
      • 2017-07-30
      • 2021-12-12
      • 2019-08-07
      • 1970-01-01
      • 2015-09-03
      • 2018-06-11
      相关资源
      最近更新 更多