1、线性模型


输出层不算一层,因为不带权重。

训练数据:收集数据点来决定参数值(权重和偏差)。

数据在每个样本上损失的均值:

线性模型有显示解。
因为线性模型,所以损失是一个凸函数,所以最优解是梯度为0的地方。


2、基础优化方法
(1)梯度下降

学习率,不能选太小,也不能太大

总结

3、线性回归的从零开始实现
chapter_linear-networks/linear-regression-scratch.ipynb
用batch就是,把数据集随机分成好多个数据集,每组有batch_size个数据。然后每次用一组数据,来计算这组数据的损失,然后用这个损失算参数(权值和偏差)的梯度,然后根据梯度和学习率更新参数(权值和偏差)。然后用更新后的参数来评估下整个数据集(用新的参数,算完整数据集的损失)。然后再在这个基础上,用下一组样本数据,来重复上面的过程。
4、线性回归的简洁实现
chapter_linear-networks/linear-regression-concise.ipynb
PyTorch中,一般函数加下划线代表直接在原来的 Tensor 上修改,即in-place操作
5、答疑
(1)Q:为什么用平方损失而不是绝对差值?
A:其实区别不大,但是绝对差值不可导。
(2)Q:损失为什么要求平均
A:求不求是都可以的,本质上没关系。求了平均,梯度跟样本在一个scale上;不求平均,梯度会比较大,给学习率除个n是一样的。

(3)Q:怎么找到合适的学习率
A:找到一个对学习率不那么敏感的算法;或者通过合理的参数的初始化,使学习率不那么敏感。
(4)Q:batchsize是否影响模型的结果,过小会不会导致梯度计算不准?
A:其实batchsize小了是好的,大了不行。batchsize越小,对梯度越好,对收敛越好。因为随机梯度下降会带来噪音,每次batchsize小(eg,百万样本,每次采样两张),噪音会比较大,但是噪音对神经网络是件好事。一定的噪音会使深度神经网络不走偏。对噪音容忍度越好,那么模型的泛化性越好。
(5)随机梯度下降的随机,是指随机采样。
(6)Q:如果样本大小不是批量数的整数倍,怎么处理多余的样本?
A:通常三种做法:一个是最后就再取一个小一点的样本集;一个是直接扔掉;再一个是,从下一个epoch中补一些过来。
(7)整个课程中,学习率都没有做衰减,虽然按道理说,学习率应该逐渐减小,然后收敛。但是可以调整学习率,不做衰减问题不大。
(8)Q:如何判断收敛,设置epoch?
A:可以看两次的loss差的不大了停,或者看验证数据集精度不再增加了停。第一次可能就是凭经验自己设的。