【问题标题】:Reducing Losses of Autoencoder减少自动编码器的损失
【发布时间】:2020-09-13 05:48:48
【问题描述】:

我目前正在尝试训练一个自动编码器,它允许将长度为 128 个整数变量的数组表示为 64 的压缩。该数组包含 128 个整数值,范围从 0 到 255。

我在每个 epoch 使用超过 200 万个数据点训练模型。每个数组的形式如下:[ 1, 9, 0, 4, 255, 7, 6, ..., 200]

input_img = Input(shape=(128,))
encoded = Dense(128, activation=activation)(input_img)
encoded = Dense(128, activation=activation)(encoded)

encoded = Dense(64, activation=activation)(encoded)

decoded = Dense(128, activation=activation)(encoded)
decoded = Dense(128, activation='linear')(decoded)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss='mse')

history = autoencoder.fit(np.array(training), np.array(training),
                    epochs=50,
                    batch_size=256,
                    shuffle=True,
                    validation_data=(np.array(test), np.array(test)),
                    callbacks=[checkpoint, early_stopping])

我还会上传一张显示训练和验证过程的图:Loss graph of Training

我怎么可能进一步降低损失。到目前为止我所尝试的(两种选择都没有成功):

  1. 更长的训练阶段
  2. 更多层

【问题讨论】:

    标签: python deep-learning compression autoencoder


    【解决方案1】:

    当然,你可以做一些神奇的事情来立即减少损失,因为它是针对特定问题的,但我可以建议以下几个技巧:

    • 减少小批量大小。具有较小的批大小会使梯度在反向传播时更加嘈杂。首先这似乎违反直觉,但梯度下降中的这种噪声可以帮助下降克服可能的局部最小值。这样想;当下降嘈杂时,需要更长的时间,但高原会更低,当下降平稳时,需要的时间更少,但会在较早的高原中稳定。 (非常笼统!)
    • 尝试使图层具有扩展/收缩顺序的单元。因此,与其背靠背使用 128 个单元层,不如将其设置为 128 到 256。这样,您就不会强迫模型用另一包 128 个数字来表示 128 个数字。您可以拥有 128 个单位的所有层,理论上会产生无损自动编码,其中输入和输出实际上是相同的。但这在实践中不会发生,因为梯度下降的性质。这就像您从丛林中的某个地方随机开始,并尝试跟随领先(负梯度)穿过它,但仅仅因为您拥有领先优势并不意味着您可以到达您要去的地方。因此,要从您的分布中获取有意义的信息,您应该强制您的模型以较少的单位表示信息。这将使梯度下降的工作更容易,因为您正在设置先验条件;如果它不能对信息进行足够好的编码,就会有很高的损失。所以你有点让它理解你希望从模型中得到什么。
    • 误差函数的绝对值。您正在努力降低损失,但目的是什么?您需要它接近 0,还是只需要它尽可能低?因为随着潜在维度的缩小,损失会增加自动编码器将能够更好地捕获数据的潜在代表信息。因为您正在强制编码器用低维信息表示高维信息。因此,潜在维度越低,自动编码器就越会尝试从输入中提取最有意义的信息,因为它的空间有限。因此,即使损失更大,分布也能更有效地捕获。所以这取决于你的问题,如果你想对图像进行降噪,请使用更高的编码维度,但如果你想做异常检测之类的事情,最好在不完全破坏模型的代表能力的情况下尝试更低的维度.
    • 这是我的更多 tinfoil 建议,但您也尝试将数字向下移动,以便范围为 -128 到 128。我 - 不太准确 - 观察到一些激活 (尤其是 ReLU)在这些类型的输入下工作得更好。

    我希望其中一些对你有用。祝你好运。

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2018-09-13
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      相关资源
      最近更新 更多