我应该在将特征放入 RNN 之前对其进行归一化吗?

Should I normalize my features before throwing them into RNN?

我正在玩一些关于递归神经网络的演示。

我注意到每一列中我的数据规模差异很大。因此,我正在考虑在将数据批次放入我的 RNN 之前做一些预处理工作。 close那一栏是我未来要预测的目标

     open   high    low     volume  price_change  p_change     ma5    ma10  \
0  20.64  20.64  20.37  163623.62         -0.08     -0.39  20.772  20.721
1  20.92  20.92  20.60  218505.95         -0.30     -1.43  20.780  20.718
2  21.00  21.15  20.72  269101.41         -0.08     -0.38  20.812  20.755
3  20.70  21.57  20.70  645855.38          0.32      1.55  20.782  20.788
4  20.60  20.70  20.20  458860.16          0.10      0.48  20.694  20.806

     ma20      v_ma5     v_ma10     v_ma20  close
0  20.954  351189.30  388345.91  394078.37  20.56
1  20.990  373384.46  403747.59  411728.38  20.64
2  21.022  392464.55  405000.55  426124.42  20.94
3  21.054  445386.85  403945.59  473166.37  21.02
4  21.038  486615.13  378825.52  461835.35  20.70

我的问题是,在我的情况下,是否需要使用 sklearn 中的 StandardScaler 来预处理数据?为什么?

(欢迎您编辑我的问题)

我找到了这个 https://arxiv.org/abs/1510.01378 如果你规范化它可能会提高收敛性,所以你会得到更少的训练时间。

绝对是的。大多数神经网络在 0-1 或 -1 到 1 之间的数据(取决于输出函数)下效果最佳。此外,当某些输入更高时,其他网络将 "think" 它们更重要。这会使学习时间变得很长。网络必须首先降低此输入的权重。

规范化您的训练数据将大有裨益。将具有不同尺度的不同特征馈送到模型中将导致网络对特征的加权不均等。这可能会导致表示中的某些特征错误地优先于其他特征。

尽管关于数据预处理的整个讨论都存在争议,无论是在什么时候是必要的,以及如何正确地规范化每个给定模型和应用领域的数据,但机器学习中的普遍共识是 运行 均值减法以及一般归一化预处理步骤很有帮助。

均值减法的情况下,从数据中减去每个单独特征的均值,这可以解释为将数据从几何点看法。每个维度都是如此。

标准化 均值减法步骤后的数据导致数据维度标准化到大致相同的比例。请注意,如上所述,在此步骤之后,不同的功能将失去彼此之间的优先级。如果您有充分的理由认为特征中的不同尺度包含重要信息,网络可能需要这些信息才能真正理解数据集中的基本模式,那么规范化将是有害的。一种标准方法是将输入缩放为具有 均值 0 方差 1

进一步的预处理操作在特定情况下可能会有帮助,例如对数据执行 PCAWhitening。查看 CS231n (Setting up the data and the model) 的精彩笔记,以进一步参考这些主题以及对上述主题进行更详细的解释。