LRN全称为Local Response Normalization,即局部响应归一化层,LRN函数类似DROPOUT和数据增强作为relu激励之后防止数据过拟合而提出的一种处理方法。这个函数很少使用,基本上被类似DROPOUT这样的方法取代,见最早的出处AlexNet论文。
首先在弄懂原理之前,希望读者能够认真的看两边公式,而不是直接看别人解释的原理
- bix,ybxi,y是归一化后的值,i是通道的位置,代表更新第几个通道的值,x与y代表待更新像素的位置。
- aix,yaxi,y 是输入值,是激活函数Relu的输出值
- k、alpha、beta、n/2 都是自定义系数,读者可以先不用理会有什么用
总结的来说,是对输入值aix,yaxi,y 除以一个数达到归一化的目的
N是总的通道数,不同通道累加的平方和,累加效果如下图。
累加多少个通道的像素值呢?这个是取决于自定义系数 n/2 如果读者熟悉tensorflow的话:官方文档API如下
sqr_sum[a, b, c, d] = sum(input[a,b, c, d - depth_radius : d + depth_radius + 1] ** 2)
output = input / (bias +alpha * sqr_sum) ** beta
就是参数depth_radius设置;第一次看到文档介绍感觉到云里雾里的读者也不用担心,完全可以不理解api的介绍,只要知道累加多少个通道的像素值,取决于你的参数设置,至于设置为多少,那就多查看文献吧。