在训练模型时,我们经常会对数据进行归一化,甚至在隐藏层中也加入归一化。这样做的主要目的是为了加快模型收敛速度。
假设特征在经过卷积层后没有经过归一化的数据如下图分布(xx表示数据点),用sigmoid函数作为激活函数。那么在不经过归一化的时候数据所在的分布会使sigmoid的函数值接近0,这样会导致出现梯度消失的情况。
在这里插入图片描述
假设在对经过卷积层的数据进行归一化后,数据分布如下图所示,分布会处在中间状态,sigmoid的函数值会取到比较大的值(相对于0)。这样便会加快模型的收敛速度。
在这里插入图片描述
但是,我们一般并不是简单的对数据进行归一化,即让数据表现一个正态分布,如果简单地把数据进行标准化,那么就会改变原始数据的分布状态,这不利于神经网络学习原始数据的分布状态,所以在对数据进行标准化后(x-u/方差),会对标准化后的结果在进行处理。
假设标准化后的结果是x,那么再对x进行处理
z = γ * x + β
为什么要多加两个可学习的参数呢,如下图
左边为没有对x再进行处理,右边为对x再进行处理
对x再进行处理可以使x可贴近原始数据的分布,而不会单纯地让数据分布集中地处于中间那一部分。
在这里插入图片描述

另外,如果数据集中地处于中间那一部分,那么sigmoid中间那一部分也可以看成线性函数了,这样也弱化了加激活函数的作用。激活函数本身就是想增强网络的非线性能力。
在这里插入图片描述
以上处于个人理解,如果有错误欢迎指正。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐