在用于回归问题的Neural Nets中,我们会根据输出激活函数一致地重新缩放连续标签,例如,如果使用逻辑Sigmoid函数,则对其进行归一化;如果使用tanh函数,则进行调整后的归一化。最后,我们可以通过重新归一化输出神经元来恢复原始范围。
我们是否也应该对输入特征进行归一化?如果是,应该如何操作?例如,如果隐藏层的激活函数与输出层的激活函数不同呢?比如,如果隐藏层的激活函数是TANH,而输出层的激活函数是LOGISTIC,输入特征应该归一化到[0,1]还是[-1,1]区间呢?
回答:
简短的回答是肯定的,你也应该对输入值进行缩放,尽管这样做的原因与输出神经元的不同。激活函数只是使得某些输出值无法达到(例如,Sigmoid只能输出[0,1]区间内的值,tanh只能输出[-1,1]区间内的值),而这对于输入来说并非如此(所有激活函数都在整个实数域上定义)。缩放输入是为了加速收敛(以避免进入激活函数的“平坦”部分),但没有确切的规则。至少有三种广泛使用的可能性:
- 线性缩放到[0,1]
- 线性缩放到[-1,1]
- 归一化到均值为0和标准差为1
每种方法在某些特定数据集上都有其优缺点。据我所知,最后一种方法具有最佳的统计特性,但在神经网络的背景下仍然是一种“经验法则”。