笔记布局为整体学习感受和知识补充,包括在课后习题和在讨论区学习到的以及torch小知识整理。没有贴大段代码,因为感觉用得多查得多细节就会慢慢清楚了。
比较适合自己的学习方式:
1.导出并自己跑一遍notebook
2.带着疑问去看代码讲解视频,稍微查查不懂的大点,暂时不耽溺于细节
3.做习题、看原书最后归纳笔记
4.nn.sequential这种东西真的还挺一目了然的,但过度依赖深度学习框架的便利会难以深入了解工作原理。
Task01学习内容为:线性回归;Softmax与分类模型;多层感知机
粗浅地看,线性回归和Softmax的区别在输出值的连续和离散上,多层感知机和前两者的区别在加入了全连接隐藏层,以及运用了激活函数对隐藏层输出进行的变换。
各种模型的背后都来源于统计学推导(没自己推导过我就不写上来了),所以可以从深层的理论依据出发创造满足假设的新的算法模型。
线性回归:
1.训练集(求参)、验证集(调参炼丹)、测试集(笑哈哈还是哭唧唧)的经典配比量:6:2:2。
2.课后练习的重点:矩阵形状(广播机制容易被坑到)、损失函数的具体计算(样本总数,求导结果优雅对系数的改动)、函数定义的pytorch实现实例(越了解torch就越能避免自己造轮子)。
Softmax与分类模型:
1.交叉熵详细推导参考:https://www.cnblogs.com/kyrieng/p/8694705.html、https://zhuanlan.zhihu.com/p/35709485、统计学方法第五章、https://blog.youkuaiyun.com/b1055077005/article/details/100152102
2.课后:softmax常数不变性
多层感知机:
1.在多层感知机中引入激活函数的原因是,将多个无激活函数的线性层叠加起来,其表达能力与单个线性层相同。
2.相较于sigmoid和tanh,Relu的主要优势是计算效率高且不会出现梯度消失问题。
3.如果需要网络输出范围是[0, 1],可以考虑使用sigmoid函数。
“关于激活函数的选择:
ReLu函数是一个通用的激活函数,目前在大多数情况下使用。但是,ReLU函数只能在隐藏层中使用。
用于分类器时,sigmoid函数及其组合通常效果更好。由于梯度消失问题,有时要避免使用sigmoid和tanh函数。
在神经网络层数较多的时候,最好使用ReLu函数,ReLu函数比较简单计算量少,而sigmoid和tanh函数计算量大很多
在选择激活函数的时候可以先选用ReLu函数如果效果不理想可以尝试其他激活函数。”
torch小知识:
- torch.mul(a, b)是矩阵a和b元素相乘,故维度要一致。
- torch.mm(a, b)是矩阵乘法。
- 关于 tensor的requires_grad参数可参考https://zhuanlan.zhihu.com/p/85506092 本质上服务于反向传播求梯度。
- 梯度清零:Pytorch中张量的梯度是会不断累加的,做完一次反向传播之后,梯度就已使用故该清空。
- X.view()有resize的作用。
- torch.max(tensor1,tensor2) element-wise 比较tensor1 和tensor2 中的元素,返回较大的那个值。
- matplotlib不能可视化tensor,故有时会出现.numpy()。
记下来感觉学得比较浅,准备再去看看基础课多思考。