归一化与正则化-Question

2020-11-20  本文已影响0人  魏鹏飞

1. 介绍BN。

BN动机:神经网络训练过程的本质是学习数据分布,如果训练数据与测试数据的分布不同将大大降低网络的泛化性能,因此我们需要在训练开始前对所有输入数据进行归一化处理。(参数变化后使得后一层的输入发生变化,每一批次训练数据的分布不一致,致使网络在每次迭代中都需要拟合不同的数据分布,增大训练的复杂度以及过拟合的风险。)

2. 了解BN吗?

3. BN的原理、作用以及训练测试时的不同。

# BN计算步骤:
1.计算样本均值。
2.计算样本方差。
3.样本数据标准化处理。
4.进行平移和缩放处理。引入了γ和β两个参数。来训练γ和β两个参数。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。

作用:

训练测试的不同:
就是BN在训练阶段每一个batch按照如上图的算法流程计算每个batch的均值和方差,然后通过一个滑动平均值方法保存,在pytorch中是通过一个参数momentum保存每个连续计算的batch的均值和方差的。

# 其中x'表示新的保存下来的值,x是之前旧的保存的值,x''是表示新的batch计算的当前均值方差等。
x' = (1-momentum)*x + momentum*x''

其中的均值是每个batch的均值的均值,方差是每个batch的无偏估计量。但是在pytorch具体实现是采用以上所说的滑动平均值方法计算的,所以最后一旦整个训练阶段完成,BN层中的所有参数也就固定下来,然后直接用于test。

4. 手写softmax、手写BN公式。

S_i=\frac{e^i}{\sum_j e^j}

5. BN的缺点。

6. LN的计算方法。

LN是一个独立于batch size的算法,所以无论一个batch样本数多少都不会影响参与LN计算的数据量,从而解决BN的两个问题。LN的做法是根据样本的特征数做归一化。


7. BN和LN的不同。


LN不依赖于batch的大小和输入sequence的深度,因此可以用于batch-size为1RNN中对边长的输入sequence的normalize操作。但在大批量的样本训练时,效果没BN好。
实践证明,LN用于RNN进行Normalization时,取得了比BN更好的效果。但用于CNN时,效果并不如BN明显。

1. dropout的原理、作用以及训练测试时的不同。

原理:训练时,每个神经元节点激活值以一定的概率p被“丢弃”;测试时,每个神经元参数要预先乘以概率系数1-p,以恢复在训练中该神经元只有1-p的概率被应用到整个神经网络的前向传播计算(以使得在训练时和测试时每一层输入有大致相同的期望。)
两种方法处理:(通常采用第一种方案)

# coding:utf-8
import numpy as np
 
# dropout函数的实现
def dropout(x, level):
    if level < 0. or level >= 1: #level是概率值,必须在0~1之间
        raise ValueError('Dropout level must be in interval [0, 1[.')
    retain_prob = 1. - level
 
    # 我们通过binomial函数,生成与x一样的维数向量。binomial函数就像抛硬币一样,我们可以把每个神经元当做抛硬币一样
    # 硬币 正面的概率为p,n表示每个神经元试验的次数
    # 因为我们每个神经元只需要抛一次就可以了所以n=1,size参数是我们有多少个硬币。
    random_tensor = np.random.binomial(n=1, p=retain_prob, size=x.shape) #即将生成一个0、1分布的向量,0表示这个神经元被屏蔽,不工作了,也就是dropout了
    print(random_tensor)
 
    x *= random_tensor
    print(x)
    x /= retain_prob
 
    return x
 
#对dropout的测试,大家可以跑一下上面的函数,了解一个输入x向量,经过dropout的结果  
x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)
dropout(x,0.4)

作用:

2. dropout为什么可以防止过拟合?

Dropout作用于每份小批量训练数据,随机丢弃部分神经元,相当于每次迭代都在训练不同的神经网络(对于包括N个神经元节点的网络,在Dropout的作用下可看作为2^N个模型的集成。这2^N个模型可认为是原始网络的子网络,它们共享权值,并且具有相同的网络层数,而模型整体的参数数目不变,这就大大简化了运算。)。类比于Bagging方法,Dropout可被认为是一种实用的大规模深度神经网络的模型集成算法。对于任意神经元,每次训练中都与一组随机挑选的不同的神经元集合共同进行优化,这个过程会减弱全体神经元之间的联合适应性,减少过拟合的风险,增强泛化能力。

3. Dropout了解吗,说下作用,白板实现以下。

Dropout 是在训练过程中以一定的概率的使神经元失活,即输出为0,以提高模型的泛化能力,减少过拟合。

4. 在Transformer模型中dropout主要用在哪里?看过源码吗?

droput在每个子层(BertEmbeddings、BertAttention、BertOutput)之间,设置为0.1

1. 正则化L1和L2正则化,区别是什么?

L1(L1-Norm)和L2(L2-Norm的平方)都是正则化项,又叫做惩罚项,是为了限制模型的参数防止模型过拟合而加在损失函数后面的一项。

2. L2正则化作用?

3. 为什么参数越小代表模型越简单?

4. 实现参数的稀疏有什么好处?

因为参数的稀疏,在一定程度上实现了特征的选择。一般而言,大部分特征对模型是没有贡献的。这些没有用的特征虽然可以减少训练集上的误差,但是对测试集的样本,反而会产生干扰。稀疏参数的引入,可以将那些无用的特征的权重置为0.

5. 正则化有什么用,为什么有用,L1正则为什么能使参数稀疏,为什么能防止过拟合

加入了正则化项就是在原来目标函数的基础上加入约束。当目标函数的等高线L1、L2范数函数的等高线第一次相交时,得到最优解。

上一篇 下一篇

猜你喜欢

热点阅读