FRN提升方法

跟風遠走 提交于 2020-01-13 06:08:32

FRN提升方法

经过一些实验,找到了FRN的提升方法,首先上结果。

实验结果

数据集 FRN NewFRN NewL1FRN BN
cifar10 91.24% 92.00% 91.60% 92.40%
cifar100 64.54% 68.38% 68.28% 69.06%
  • cifar10的实验结果
    在这里插入图片描述

  • cifar100的实验结果
    在这里插入图片描述

从上面两图以及表格可以看出,新方法可以比FRN更快的收敛,并且在大数据集上取得更好的结果。

方法说明

  • FRN:y=max(γxσfrn+β,τ),σfrn=xi2HW+ϵFRN:y=max(\gamma\frac{x}{\sigma_{frn}}+\beta,\tau),\sigma_{frn}=\sqrt{\frac{\sum x_i^2}{H*W}+\epsilon}

FRN公式如上。用该公式进行训练,存在一个问题。就是收敛太慢。经过实验对比,当把σfrn\sigma_{frn}置为1时,收敛速度大大加快。新方法就是利用了这个特性,

epochepoch为当前训练的Epoch数量。total_epochtotal\_epoch为需要训练的总Epoch数量。为方便书写,令epoch/total_epoch = E。
σNewfrn={1,if E <startmax(1,ασfrn),if start<E\sigma_{Newfrn}= \begin{cases}1, & \text {if E <start} \\ max(1,\alpha*\sigma_{frn}), & \text{if start<E}\end{cases}
当start<E<end时,α\alpha从0线性增长到1,当E>end时,α\alpha以同样的斜率继续增长。通常假设start=0.1,end=0.9.

  • NewFRNy=max(γxσNewfrn+β,τ)NewFRN:y = max(\gamma\frac{x}{\sigma_{Newfrn}}+\beta,\tau)

从实验结果来看,NewFRN大幅好于FRN。

NewFRN需要计算二阶矩,在前向和反向传播时,计算量都比较大。用一阶矩代替,可以降低一部分计算量
σfrn=xi2HW+ϵ\sigma_{frn}=\sqrt{\frac{\sum x_i^2}{H*W}+\epsilon}替换成σl1=abs(x)HW+ϵ\sigma_{l1}=\frac{\sum abs(x)}{H*W}+\epsilon,其余不做变化。
从实验结果来看,NewL1FRN并没有明显的差于NEWFRN。

方法弊端

  • 没有降低计算量
  • 对BN,LN,GN等方法没有效果。猜测之所以出现这种情况,是因为σBN,σGN,σLN\sigma_{BN},\sigma_{GN},\sigma_{LN}都是方差,但是σfrn\sigma_{frn}是二阶矩。所以σfrn>>σBN,σGN,σLN\sigma_{frn}>>\sigma_{BN},\sigma_{GN},\sigma_{LN}

实验潜在问题

FRN的实验结果很难复现。在GitHub上找了两个复现FRN的人,也没有复现出paper的结果。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!