在深度学习中有一个不常用的方法:LRN,首次提出于AlexNet论文,但现在一般会被Dropout等方法给替代

1.作用

在深度学习训练时提高准确度。

2.LRN原理

仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制(个人认为类似于生物学上的顶端优势))。通过对局部神经元的活动创建竞争机制,使得其中响应较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

3.公式

$ b^i_{x,y} = a^i_{x,y}/(k + \alpha \sum_{j=max(0, i-n/2)}^{min(N-1, i+n/2)}{(a_{x,y}^{j})^2})^{\beta} $

4.公式符号解释

a:表示卷积后的输出结果,这里卷积包括卷积操作和池化操作,输出结果是一个四维数组[batch, height, width, channel]
$ a^i_{x,y} $:表示输出结果中的一个位置[a,x,y,i],即第a张图片的第i个通道的高度为x、宽度为y的点
N:表示Kernal的总数
n:表示邻近位置上kernal map的数量
n/2, k, $ \alpha $, $ \beta $为自定义超参数
i:表示通道位置

5.对应tensorflow函数

$tf.nn.lrn(input, depth_radius=None, bias=None, alpha=None, beta=None, name=None)$
其中:

  1. $a -> input$
  2. $n/2 -> depth_radius$
  3. $k -> bias$
  4. $\alpha -> alpha$
  5. $\beta -> beta$

6.其他理解

  1. 归一化是为了实现抑制
  2. $\sum$是对同一通道的值求和,因为当$j$改变时,$x,y$是不变的
  3. 当$k=0,\alpha=1,\beta=1$时,公式相当于是当前点的值占该通道内所有点的平方和的百分比
  4. 名称中的“局部”应该就是指的某一个通道

橙茗
26 声望5 粉丝

python c


引用和评论

0 条评论