论文原文里面是“weights -> batchnorm -> activation ->maxpooling-> weights -> batchnorm -> activation -> dropout”。原文认为这样可以利用到激活函数的不同区间(sigmoid的两个饱和区、中间的线性区等)实现不同的非线性效果,在特定的情况下也可能学习到一个恒等变换的batchnorm,一般用这个即可。 为了activatio...
同学你好,这几个的用法确实比较灵活,这里面的关键因素我觉得是bn,据我所知:
caffenet-benchmark-batchnorm中,还有BN层与不同激活函数、不同初始化方法、dropout等排列组合的对比实验,可以看看。 所以,BN究竟应该放在激活的前面还是后面?以及,BN与其他变量,如激活函数、初始化方法、dropout等,如何组合才是最优?可能只有直觉和经验性的指导意见,具体问题的具体答案可能还是得实验说了算(微笑)。
Linear->Relu->BatchNorm->Dropout 论文里有提到,BN层常常被加到Relu之前,但是没有明确的标准,需要尝试不同配置,通过实验得出结论(很多实验结果偏向于Relu在BN之前)。 那BN层和dropout层的顺序呢? 我们可以看到这样的代码,BN在dropout之后。 也可以看到这样的代码,BN在dropout之前。 实际上,BN消除了对dropout的依赖...
2. 激活函数(Activation Functions) 详细内容参见:激活函数 总结: 1)使用ReLU时,使Learning Rates尽量小 2)尝试使用Leaky ReLU/Maxout/ELU 3)可以使用tanh,但期望不要太高 4)不要使用sigmoid 3. 数据预算处理(Data Preprocessing) 1)为什么输入数据需要归一化(Normalized Data)?
原论文中,BN层是接在激活函数之前的(下文会讨论BN层与激活函数的顺序问题),在没有采用BN的时候,激活函数g(\cdot)计算公式是这样的: g(Wx+b) \\ 采用BN算法后,计算公式变成: g(BN(Wx+b)) \\ 其实因为偏置参数b经过BN层后会被均值标准化掉,所以b这个参数就可以不用了,计算公式变成: ...
2、还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果; 1. 3、另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。 1. 9、 Activation Function 激活函数包含饱和激活函数与非饱和激活函数。常见的sigmoid 和tanh 属于“饱...
所以,BN层的作用是把一个mini-batch内的所有数据,从不规范的分布拉到正态分布。这样做的好处是使得数据能够分布在激活函数的梯度较大的区域,因此也提高了泛化能力,可以在一定程度上解决梯度消失的问题,同时可以减少dropout的使用。 当参数更好地向前传播后,梯度的下降会更加稳定,可以使用更大的学习率来加快学习。对...
同学你好,我把另一个问题的回答贴到了这里,应该能回答你的问题。