批量归一化
为什么不同的参数在更新时其梯度变化如此之大?
首先,对于模型中w1,w2两个参数,可以看到其w1参数的梯度变化较为平滑,w2梯度变化较为陡峭,原因是x1较小时,当w1变化较大,由于x1较小,其整体乘积较小,对损失值影响不大;x2较大时,w2发生变化,其乘积较大,其对损失值变化很大,影响较大。
如何解决这一问题呢?
可以考虑采用特征归一化,出现上述问题,其归根到底是因为输入数值的变化范围太大,将其范围设限在相同范围内,可以很好的解决误差表面较差的问题。
对于x进行归一化处理,但是其W1层输出结果作为新的输入时,其范围仍然可能不同,所以应该在输入到W2层前再次进行归一化处理,那么归一化处理在激活函数前处理还是在激活函数后处理呢?这个问题,其实往往都可以,但sigmoid激活函数往往希望在前面进行处理,即对z进行处理。
进行归一化处理时,需要计算数据集的均值和标准差?
整体数据集较大时,其GPU可能算力不够,所以往往采用批量归一化,即对一个批次的数据进行均值和标准差的计算,(如果一个批次的数据规模较大,其分布和全部数据的分布相似,可以用该批次的均值和标准差进行