我们发现这个sigmoid函数在小于-4或者大于4的时候他的导数趋近于0。然后我们送进去的input的值在[-100,100]之间,这样很容易引起梯度弥散的现象。所以我们一般情况下使用ReLU函数,但是我们有时候又不得不使用sigmoid函数。这个时候我们在送到下一层的时候我们应该先经过Normalization操作。使得这个input变成N(0,\(z^2\))就是他的的input变成以0为均值,然后以z为方差的一个输入。就是使得这个input均匀的散布到0附近,然后再一个很小的范围变动。
我们发现这个\(x_1\)在很小的范围内进行变动的时候这loss变化很缓慢,但是这个\(x_2\)在一个很大的范围内进行变动的时候loss会急剧的变化。就像是第二张图一样,我们\(x_1\),\(x_2\)的范围一样,所以我们这个loss就像是一个圆一样。从哪个方向都一样。
这就是一个Feature scaling的概念。
-
image Normalization
-
Batch Normalization
dynamic mean/std
Batch Norm
这就是一个标准的batch Bormalization
layer.BatchNormalization
net = layers.BatchNormalization()
- axis=-1,
- center=True,
- scale=True
- trainable=True
net(x, training=None)
上面是是否使用\(\alpha\)和\(\beat\)
实战:
就是把一些N(10,10)=>N(0,1)(就是在0附近)
好处: