感知机
丢弃法
即dropout,解决模型过拟合问题
深度学习中Dropout原理解析
- 丢弃法将一些输出项随机置0,来控制模型的复杂度
- 常作用在多层感知机的隐藏层的输出上
- 丢弃概率是控制模型复杂度的超参数,常见的技巧是在靠近输入层的地方设置较低的暂退概率
宏观印象:
net = nn.Sequential(nn.Flatten(),
nn.Linear(784, 256),
nn.ReLU(),
# 在第一个全连接层之后添加一个dropout层
nn.Dropout(dropout1),
nn.Linear(256, 256),
nn.ReLU(),
# 在第二个全连接层之后添加一个dropout层
nn.Dropout(dropout2),
nn.Linear(256, 10))
内部实现:
def dropout_layer(X, dropout):
assert 0 <= dropout <= 1
# 在本情况中,所有元素都被丢弃
if dropout == 1:
return torch.zeros_like(X)
# 在本情况中,所有元素都被保留
if dropout == 0:
return X
mask = (torch.rand(X.shape) > dropout).float()
return mask * X / (1.0 - dropout) # 1-p保证期望不会改变
梯度损失、梯度爆炸
两者来自于神经网络的层次

随着层次的增加,计算梯度时会导致多次矩阵乘法
梯度爆炸带来的问题:
原因:每个层输出的值太大,累加导致爆炸
- 对学习率敏感。学习率太大,会导致更大的梯度;学习率太小,训练无进展
- 需要在训练过程中不断调整学习率
梯度消失带来的问题:
- 不论如何调整学习率,训练无进展
- 仅仅顶部训练的比较好,无法让网络加深