2019/03/09 16:16
归一化方法:
简单放缩(线性归一化):这种归一化方法比较适用在数值比较集中的情况。这种方法有个缺陷,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量值来替代max和min。
特征标准化:经过处理的数据符合标准正态分布,即均值为0,标准差为1。
逐样本均值消减(非线性的归一化): 经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。
同时他可以加快梯度下降求解速度,也可以提高精度。
2.归一化是为了消除不同数据之间的量纲,方便数据比较和共同处理,比如在神经网络中,归一化可以加快训练网络的收敛性;
标准化是为了方便数据的下一步处理,而进行的数据缩放等变换,并不是为了方便与其他数据一同处理或比较,比如数据经过零-均值标准化后,更利于使用标准正态分布的性质,进行处理;
正则化而是利用先验知识,在处理过程中引入正则化因子(regulator),增加引导约束的作用,比如在逻辑回归中使用正则化,可有效降低过拟合的现象。
2019/03/18 19:04
3.总结起来就是BN解决了反向传播过程中的梯度问题(梯度消失和爆炸),同时使得不同scale的整体更新步调更一致。BN带来的好处。

(1) 减轻了对参数初始化的依赖,这是利于调参的朋友们的。

(2) 训练更快,可以使用更高的学习率。

(3) BN一定程度上增加了泛化能力,dropout等技术可以去掉。
BN的缺陷
从上面可以看出,batch normalization依赖于batch的大小,当batch值很小时,计算的均值和方差不稳定。研究表明对于ResNet类模型在ImageNet数据集上,batch从16降低到8时开始有非常明显的性能下降,在训练过程中计算的均值和方差不准确,而在测试的时候使用的就是训练过程中保持下来的均值和方差。
这一个特性,导致batch normalization不适合以下的几种场景。
(1)batch非常小,比如训练资源有限无法应用较大的batch,也比如在线学习等使用单例进行模型参数更新的场景。
(2)rnn,因为它是一个动态的网络结构,同一个batch中训练实例有长有短,导致每一个时间步长必须维持各自的统计量,这使得BN并不能正确的使用。在rnn中,对bn进行改进也非常的困难。不过,困难并不意味着没人做,事实上现在仍然可以使用的,不过这超出了咱们初识境的学习范围。
2019/03/18 21:22
4.那么,输出的尺寸最终如何计算?在PyTorch中,可以用一个公式来计算,就是floor((W-F+2P)/ S + 1)。其中,floor 表示下取整操作,W表示输入数据的大小,F表示卷积层中卷积核的尺寸,S表示步长,P表示边界填充0的数量。比如输入是5×5,卷积核是3×3,步长是1,填充的数量是0,那么根据公式,就能得到(3+2×0)/ 1 + 1 = 3,输出的空间大小为3×3;如果步长为2,那么(3+2×0)/ 2 + 1 = 2,输出的空间大小为2×2。
在PyTorch中, 类nn.Conv2d()是卷积核模块。卷积核及其调用例子如下:
nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0,dilation=1,groups=1, bias=True)nn.Conv2d中参数含义:in_channels表示输入数据体的深度;out_channels表示输出数据体的深度;kernel_size 表示卷积核的大小;stride表示滑动的步长;padding表示边界0填充的个数;dilation表示输入数据体的空间间隔;groups 表示输入数据体和输出数据体在深度上的关联;bias 表示偏置。

05-21 10:16