归一化网络的激活函数(Normalizing activations in a network)

  1. 如果你想训练这些参数,比如𝑤[3],𝑏[3],那归一化𝑎[2]的平均值和方差岂不是很好? 以便使𝑤[3],𝑏[3]的训练更有效率。<br />复习:[https://www.yuque.com/dengxiaotian0212/klyctg/wc8oai](https://www.yuque.com/dengxiaotian0212/klyctg/wc8oai)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/22608420/1652413123836-9ce04d88-4393-43f0-b1cc-5e1412345fae.png#clientId=ued36b06a-628b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=160&id=u5e593f10&margin=%5Bobject%20Object%5D&name=image.png&originHeight=156&originWidth=470&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21532&status=done&style=none&taskId=uaa332243-5de7-49ce-b97e-0be1ea4f891&title=&width=482)<br />也可以归一化经过激活函数之后的结果,如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/22608420/1652948303517-10ef5bcd-658e-44df-b18b-0b10ff1837f4.png#clientId=ud7e7007c-f04a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=378&id=uc861697b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=756&originWidth=1488&originalType=binary&ratio=1&rotation=0&showTitle=false&size=578054&status=done&style=none&taskId=uc230998f-fd24-4d24-88c5-aff9808aaf8&title=&width=744)<br /> 深度学习文献中有一些争论,关于在激活函数之前是否应该将值𝑧[l]( 𝑧[2] )归一化,或是否应该在应用激活函数𝑎[l]( a[2] )后再规范值。实践中,经常做的是归一化𝑧[l],(也可以归一化激活函数之后的结果)所以这就是我介绍的版本,我推荐其为默认选择,那下面就是 **Batch **归一化的使用方法。<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/22608420/1652944769761-0a48cd8a-d4f3-4996-8bd0-6b7da9c753cc.png#clientId=ud7e7007c-f04a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=458&id=ufcb21d54&margin=%5Bobject%20Object%5D&name=image.png&originHeight=916&originWidth=1008&originalType=binary&ratio=1&rotation=0&showTitle=false&size=202036&status=done&style=none&taskId=uc49e899d-06a6-4e09-8d93-0554c1c198f&title=&width=504)

1.Batch 归一化的作用是它适用的归一化过程,不只是输入层,甚至同样适用于神经网络中的深度隐藏层。
2.训练输入和这些隐藏单元值的归一化的一个区别是,隐藏单元值也许不是必须是平均值 0 和方差 1。比如,如果你有 sigmoid 激活函数,你不想让你的值总是全部集中在这里(线性区),你想使它们有更大的方差,或不是 0 的平均值,以便更好的利用非线性的 sigmoid 函数。
image.png

将 Batch Norm 拟合进神经网络

image.png
如图,需要强调的是 Batch 归一化是发生在计算𝑧和𝑎之间的,batch norm 中的𝛽[1],𝛽[2]和优化算法adam,Momentum中的𝛽不同。优化算法中的𝛽是超参数。batch norm 中的𝛽[1],𝛽[2]中的参数需要梯度下降法更新,即更新参数𝛽为𝛽[𝑙] = 𝛽[𝑙] − 𝛼𝑑𝛽[𝑙]。
tf.nn.batch_normalization

Batch Norm 的作用

1.加快收敛速度

由于x被标准化了,所以关于w的损失函数的几何表示是一个比较均衡的几何体, 在随机梯度下降过程中能更快地走到最优点。

2. 能够提高模型的精度

更容易到达局部最优点,而不是在最优点附近震荡

3.能解决梯度消失问题

BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,或者可以理解为BN将输出从饱和区拉倒了非饱和区。

4. 能提高模型的泛化能力

其实就是能够避免对训练集产生过拟合

Batch Norm 为什么奏效?

1.归一化输入特征值𝑥(包括隐藏层输入),使其均值为 0,方差 1。加速学习
2.轻微正则化作用,缩放过程 从𝑧 [𝑙] 到𝑧̃ [𝑙] ,过程也有一些噪音,所以和 dropout 相似,它往每个隐藏层的激活值上增加了噪音,dropout 有增加噪音的作用,它使一个隐藏的单元以一定的概率乘以 0,以一定的概率乘以 1。

测试时的 Batch Norm

这个时候只有一个样本,我们就没有办法获取均值和方差,就没有办法进行测试。为了解决这个问题,该算法是利用训练集均值和方差来代替。假设训练过程中每个mini-batch的均值和方差为Batch Normal - 图3Batch Normal - 图4