如何对不同激活函数的训练数据进行归一化?

How to normalize training data for different activation functions?

我正在训练完全连接的神经网络来对 MNIST 数据集进行分类。输入数据是像素值为 [0, 255].

的方形黑白图像

我读到过要使用 sigmoid() 激活器,需要将输入标准化为 [0, 1](S 形范围)。

如何规范化 tanh() 激活器的输入数据?我是否需要将其重新调整为 [-1, 1](tanh 的范围)或者它仍然可以在 [0, 1].

哪种方法更好,为什么?一般指导是什么?

您不必对不同的激活函数使用不同的归一化。事实上,对于 sigmoid,您不必将输入标准化为 [0, 1]。 sigmoid的范围[0, 1]就是它输出的范围。它的输入(域)范围实际上是从负无穷大到正无穷大。

更重要的是,您的输入不会直接进入 sigmoid 函数,因此您的图像输入范围与 sigmoid 将获得的输入范围不同。中间会有一些线性层改变数据范围。

一般指导是将您的输入规范化为 [-1, 1]。这与激活函数无关,而是反向传播的一般有效措施。参见 Effective BackProp

归一化导致神经网络的正确行为,因为它简化了网络权重调整,为此您可以选择标准化或归一化。

标准化 = (x - mean(x)) / std(x);

归一化 = (x - x_min) / (x_max - x_min);

此外,Hampel 等人对 tanh 估计量进行了很好的研究。就异常值而言,这似乎是稳健的。 他们考虑了以下 x_norm = (1/2) * (tanh (0.01 * ((x - mean(x)) / std(x))) + 1)

Tanh 估计器归一化参考可在以下位置找到:https://www.cs.ccu.edu.tw/~wylin/BA/Fusion_of_Biometrics_II.ppt