深度学习:在自动编码器中使用 dropout?

机器算法验证 神经网络 深度学习 自动编码器 退出
2022-04-18 01:29:23

我正在使用自动编码器并且几乎没有混淆,我正在尝试不同的自动编码器,例如:

  • 全连接自动编码器
  • 卷积自动编码器
  • 去噪自编码器

我有两个数据集,一个是带有浮点数值的数值,第二个是带有文本日期值的文本数据集。

数值数据集如下所示:

date ,        id ,             check_in , check_out , coke_per , permanent_values , temp
13/9/2017     142453390001    134.2       43.1        13         87                 21
14/9/2017     142453390005    132.2       46.1        19         32                 41
15/9/2017     142453390002    120.2       42.1        33         99                 54
16/9/2017     142453390004    100.2       41.1        17         39  

我的任何文本数据集都如下所示:

data              text
13/9/2017         i totally understand this conversation about farmer market and the organic products, a nice conversation ’cause prices are cheaper than traditional
14/9/2017         The conversation was really great. But I think I need much more practice. I need to improve my listening a lot. Now I’m very worried because I thought that I’d understand more. Although, I understood but I had to repeat and repeat. See you!!!

我的问题是:

  1. 在输入任何类型的自动编码器之前,我应该标准化我的数值数据值吗?如果它们是intfloat值,我还需要标准化吗?

  2. 我应该在自动编码器中使用哪个激活函数?有些文章和研究论文说“sigmoid”,有些说“relu”?

  3. 我应该在每一层都使用 dropout 吗?就像我的自动编码器看起来像

    编码器 (1000 --> 500 --> 256 ----> 128 ) --> 解码器 (128 --> 256 --> 500--> 784)

像这样的东西?

encoder(dropout(1000,500) --> dropout( 500,256) --> dropout (256,128) )----> decoder(dropout(128,256),dropout(256,500),dropout(500,784))
  1. 对于文本数据集,如果我使用word2vec或任何嵌入将文本转换为向量,那么每个单词都会有浮点值,我是否也应该规范化该数据?

    文本(你好,你好吗)-> word2vec(文本)---->([1854.92002,54112.89774,5432.9923,5323.98393])

我应该标准化这些值还是直接在自动编码器中使用它们?

1个回答

在输入任何类型的自动编码器之前,我是否应该标准化我的数值数据值?如果它们是 int 和 float 值,我还需要标准化吗?

规范化数据通常会改进模型,因为它相当于对输入进行预处理,以便优化进行得更顺利。

我应该在自动编码器中使用哪个激活函数?有些文章和研究论文说“sigmoid”,有些说“relu”?

使用最适合您的问题的一种。ReLU 越来越受欢迎,因为它们缓解了 sigmoid 单元的一些问题。请参阅深度神经网络中 ReLU 相对于 sigmoid 函数的优势是什么?了解更多信息。

我应该在每一层都使用 dropout 吗?

这取决于您希望模型做什么以及您希望它具有什么品质。包含 dropout 的自动编码器通常被称为“去噪自动编码器”,因为它们使用 dropout 随机破坏输入,目的是生成一个对噪声更鲁棒的网络。本教程有更多信息