课程《动手学深度学习PyTorch版》笔记:
伯禹学习平台www.boyuai.com第一节 过拟合/欠拟合、梯度消失/梯度爆炸
重、难点:
- 优化器中一般只对权重参数设置衰减,而不对偏置参数设置衰减,因为对偏置增加正则不会明显的产生很好的效果。而且偏置并不会像权重一样对数据非常敏感,所以不用担心偏置会学习到数据中的噪声。而且大的偏置也会使得我们的网络更加灵活,所以一般不对偏置做正则化。
- 网络在训练时,要通过net.eval()将网络设置为改为评估模式,这时候输入X不会对神经元进行dropout,训练时用net.train()改为原本模式
- 标签偏移可以简单理解为测试时出现了训练时没有的标签
第二节 卷积神经网络
重、难点:
- 输出特征图大小的计算:
![v2-4d688af26e2ef6a6c84a740f32e41c78_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=59138d41-be2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-4d688af26e2ef6a6c84a740f32e41c78_b.jpg)
2. 1×1 卷积层的作用与全连接层等价,可以用来调节特征图的通道数
3. 两个连续的3×3卷积层的感受野与一个5×5卷积层的感受野相同
4. LeNet的绝大多数参数集都集中在卷积层块部分
5. 下列两行代码是卷积网络进行梯度下降的代码
# 梯度下降
可修改为:
with torch.no_grad():
conv2d.weight -= lr * conv2d.weight.grad
conv2d.bias -= lr * conv2d.bias.grad
这里可以通过pytorch的autograd包中关于梯度的反向传播机制来理解:
①对于修改tensor的数值,但是又不希望被autograd记录(即不会影响反向传播),那么我么可以对tensor.data进行操作。
②对于被torch.no_grad():包裹的tensor,在反向传播的过程中,其梯度是不会回传的
第三节 语言模型及循环神经网络(RNN)
重、难点:
- 随机采样中前后批量中的数据是不连续的;
- 随机采样与相邻采样解释(小罗同学图):
![v2-4db292a7c06c3d876d3a32d40e2a7b3f_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=59138d41-be2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-4db292a7c06c3d876d3a32d40e2a7b3f_b.jpg)
3. 梯度裁剪后的梯度L2范数小于阈值θ
4. 随机采样中每个样本只包含局部的时间序列信息,因为样本不完整所以每个批量需要重新初始化隐藏状态
5. 当我们再训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整;或者值训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一些分支的反向传播;而detach_()将一个Variable从创建它的图中分离,并把它设置成叶子variable,其实就相当于变量之间的关系本来是x -> m -> y,这里的叶子variable是x,但是这个时候对m进行了.detach_()操作
6. 双向循环神经网络前向和后向RNN连结的方式是前向的hiddenstate和后向的hidden_state进行concat
7. 对数据进行padding操作。因为机器翻译模型本质上是一个固定输入长度的Seq2Sqe模型,所以我们需要设置最大的数据长度,如果超出了设定的长度直接把后面的截断,少了的,根据需要进行不同的padding
8. 对于加入了attention的seq2seq模型,decoder仍由encoder的最后一个时间步的hidden state进行初始化