dropout+Batch Normalization理解

Dropout理解:

在没有dropout时,正向传播如下:

加入dropout后: 

测试时,需要每个权值乘以P: 

 

Dropout官方源码:

#dropout函数实现  
def dropout(x, level):  # level为神经元丢弃的概率值,在0-1之间
    if level < 0. or level >= 1:
        raise Exception('Dropout level must be in interval [0, 1[.')  
    retain_prob = 1. - level  
    # 利用binomial函数(二项分布),生成与x一样的维数向量。
    # 神经元x保留的概率为p,n表示每个神经元参与随机实验的次数,通常为1,。
    # size是神经元总数。  
    sample=np.random.binomial(n=1,p=retain_prob,size=x.shape)
    # 上一行代码最后生成一个0、1分布的向量,0表示该神经元被丢弃  
    x *=sample #用x乘sample决定哪些神经元被丢弃
    x /= retain_prob  
    return x  

Batch Normalization

BN是将输入的数据分布变成高斯分布,这样可以保证每一层神经网络的输入保持相同分布。BN就是通过规范化的手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值0方差1的标准正态分布,使得激活输入值落入非线性函数中比较敏感的区域。可以让梯度变大,学习收敛速度快,能大大加快收敛速度。

 

dropout+Batch Normalization理解_第1张图片

你可能感兴趣的:(machine,learning)