神经网络 input data normalization

2021年6月28日 / 12次阅读 / Last Modified 2021年6月28日
神经网络

对神经网络输入数据进行normalization,其目的是为了防止神经元的输出过大(或过小),导致学习速度缓慢。normalizaiton的目的与weight和bias的合理初始化的目的是一样的,都是为加快网络的学习速度。

业界的最佳实践是,对于使用sigmoid的神经网络,input数据要normalize到0-1之间,对于使用tanh的神经网络,input的数据要normalize到-0.5-0.5之间(不是从-1到1,我想原因是想保持数据的standard deviation是1吧)。

不过,有人在网络上咨询对于使用ReLU的神经网络,如何做input data的normalization?是否就可以不做了?

我看到的回答依然是还是要做normalization,神经元输出值过大也可能会带来计算方面的困难。而这时的normalize范围,可以依据这样一个规则:保持均值为0,标准差1.

保持均值为0,其实在sigmoid作为神经元的时候,就已经不对了。tanh做到了,但是个人的测试结果不如sigmoid,有可能跟其值的范围跨度是2有关系。

从初始化weight和bias的角度看,在使用ReLU神经元激活函数的时候,可以直接考虑将数据normalize到跟sigmoid一样,0-1之间。

从input data normalization可以看出,神经网络的计算,其实并不关心具体的数值,关心的只是数据之间的关系。

也有人说,其实input data的normalization没有必要,可以是任何数值,只是一般情况下,通常都是rescale到-1到1这个区间而已。input data不是直接作为激活函数的参数,而是要与一组数据(w和b)参与一个线性计算。不做normalization可能会导致计算上的一些困难,比如计算结果overflow。

-- EOF --

本文链接:https://www.pynote.net/archives/3744

留言区

您的电子邮箱地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top