局部响应归一化层(Local Response Normalization)
LRN全称为Local Response Normalization,即局部响应归一化层,LRN函数类似Dropout和数据增强作为relu激活函数之后防止数据过拟合而提出的一种处理方法。这个函数很少使用,基本上被类似Dropout这样的方法取代.
为什么要引入LRN层?
首先要引入一个神经生物学的概念:侧抑制(lateral inhibitio),即指被激活的神经元抑制相邻的神经元。归一化(normaliazation)的目的就是“抑制”,LRN就是借鉴这种侧抑制来实现局部抑制,尤其是我们使用RELU的时候,这种“侧抑制”很有效 ,因而在alexnet里使用有较好的效果。
归一化有什么好处?
1.归一化有助于快速收敛;
2.对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
补充:神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
LRN公式
code:
normal = tf.nn.lrn(input, depth_radius. bias, alpha, beta,name)
●i:代表下标,你要计算像素值的下标,从0计算起
●j:平方累加索引,代表从j~i的像素值平方求和
●x,y:像素的位置,公式中用不到
●a:代表feature map里面的 i 对应像素的具体值
●N:每个feature map里面最内层向量的列数
●k:超参数,由原型中的blas指定
●α:超参数,由原型中的alpha指定
●n/2:超参数,由原型中的deepth_radius指定
●β:超参数,由原型中的belta指定
Tensorflow示例
import tensorflow as tf
a = tf.constant(