产品网站建设框架,小程序源码能直接用吗,seo优化师是什么,企业网络费用批标准化#xff08;Batch Normalization,BN#xff09;是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深#xff0c;训练会越来越困难#xff0c;收敛速度会很慢#xff0c;常常会导致梯度消失问题。梯度消失问题是在神经网络中#xff0c;当前… 批标准化Batch Normalization,BN是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深训练会越来越困难收敛速度会很慢常常会导致梯度消失问题。梯度消失问题是在神经网络中当前隐藏层的学习速率低于后面隐藏层的学习速率即随着隐藏层数目的增加分类准确率反而下降这种现象叫梯度消失问题。
传统机器学习中有一个ICS理论这是一个经典假设源域Source Domain和目标域Target Domain的数据分布是一致的也就是说训练数据和测试数据是满足相同分布的这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。
协变量转移(Covariate Shift)是指当训练集的样本数据和目标集样本分布不一致时训练得到的模型无法很好地泛化。它是分布不一致假设之下的分支也就是之源域和目标域的条件概率是一致的但是边缘概率不同。 对于神经网络的各层输出在经过层内操作之后各层输出分布就会与对应的输入信号分布不同而且差异会随着网络深度增大而增大但是每一层所指向的样本标记仍然是不变的。
解决思路根据训练样本的比例对训练样本做一个矫正因此通过引入批标准化来规范某些层或者所有层的输入从而固定每层输入信号的均值与方差。
批标准化一般用在非线性映射(激活函数)之前对于 x W u b xWub xWub做规范化使结果输出信号各个维度的均值为0方差为1。让每一层的输入有一个稳定的分布会有利于网络的训练。批标准化通过规范化让激活函数分布在线性区间结果就是加大了梯度让模型更加大胆地进行梯度下降。
批标准化具有以下几个优点
加大探索的步长从而加快收敛的速度。更容易跳出局部最小值。破坏原来的数据分布在一定程度上缓解过拟合。
对每一次的Wx_plus_b 进行批标准化这个步骤放在激活函数之前示例片段如下
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
out_size10
wtf.Variable(tf.ones([out_size]))
utf.Variable(tf.ones([out_size]))
btf.Variable(tf.ones([out_size]))
Wx_plus_bw*ub
#计算Wx_plus_b的均值和方差其中axex[0]表示想要标准化的维度
fc_mean,fc_vartf.nn.moments(Wx_plus_b,axes[0])
scaletf.Variable(tf.ones([out_size]))
shifttf.Variable(tf.zeros([out_size]))
epsilon0.001Wx_plus_btf.nn.batch_normalization(Wx_plus_b,fc_mean,fc_var,shift,scale,epsilon)
#下面两步等同用于上面一步
#Wx_plus_b(Wx_plus_b-fc_mean)/tf.sqrt(fc_var0.001)
#Wx_plus_bWx_plus_b?scaleshift