李沐老师:线性回归是机器学习最基础的一个模型,也是我们理解之后所有深度学习模型的基础,所以我们从线性回归开始
1. 线性回归
由于是案例引入,没有很难的知识点,咱直接贴上李沐老师的PPT:
1.1 单层神经网络(线性模型)
李沐老师:神经网络起源于神经科学,但现在深度学习的发展远超神经科学的范畴,新的神经网络也不再追求神经科学上的解释了
李沐老师:我们在拥有模型后,需要开始做预测,也需要衡量预测的质量怎么样
1.2 平方损失(衡量预估质量)
李沐老师:
- 用来衡量没有完全猜中真实值带来的(经济)损失
- 这里的
是为了求导的时候方便消去
【符号(y^),读作 “y hat”】
李沐老师:定义完损失,就需要收集一些数据点来决定参数值(就是权重和偏差)
1.3 损失函数(训练/学习)
参数学习
- 上方是损失函数,每个真实值-预测值,结果平方
- 需要寻找最小化损失下的解w*,b*
- 因为是线性模型,所以有显示解
李沐老师:
- 因为是线性模型,所以是凸函数
- 最优解在梯度为 0 的地方
- 这也是咱深度学习里唯一有最优解的地方,之后就都没有了
1.4 总结
- 线性回归是对 n 维输入的加权,外加偏差(偏差是例子里的 “b”)
- 使用平方损失来衡量预测值和真实值的差异
- 线性回归有显示解 (很特别,有最优解说明模型很简单)
- 线性回归可以看做是单层神经网络(最简单的神经网络)
2. 基础优化算法
李沐老师:优化算法里,最常见的是梯度下降
2.1 梯度下降
李沐老师:
- 梯度下降可以直观地理解为去爬山,可以一直沿着最陡的路(山脊/山沟)走到终点(山顶/谷底)
- 步长(Step Size):爬山的速度(迭代的速度),指在一次更新中参数移动的距离,它实际上就是学习率乘以梯度的结果
2.2 学习率(Learning Rate)
- 步长(是向量) = 梯度(是向量) x 学习率
- 学习率是用来缩放这个梯度的,以确定参数更新的步长
- 参数更新的公式通常是:
参数 = 参数 - 学习率 * 梯度
李沐老师:
- 步长太小,就意味着计算更多次梯度
- 这太贵了
2.3 批量大小 (batch size)
李沐老师:
- b很大的时候,计算会很精确,但是贵
- b很小的时候,计算会容易很多,但不准
- 梯度的计算复杂度,和样本的个数线性相关
2.4 总结
- 梯度下降通过不断沿着反梯度方向更新参数求解
- 小批量随机梯度下降是深度学习默认的求解算法(最稳定、最简单)
- 两个重要的超参数是批量大小和学习率
李沐老师:优化算法是一个很大的课题,之后会细讲
3. 从零实现(造轮子/拓展)
李沐老师:真正使用时不必从零实现,但熟悉里面每个模块如何运作,是很好的教学方法
- “线性回归--从零实现” 对应课程jupyter目录:/chapter_linear-networks/linear-regresion-scratch.ipynb
- 从这里下载代码:GitHub - d2l-ai/d2l-zh: 《动手学深度学习》:面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。
- 以下代码我加了注释,更方便学习和理解
4. 简洁实现(重难点)
- 这部分对应课程Jupyter目录:/chapter_linear-networks/linear-regression-concise.ipynb
- 个人技巧:直接看李沐老师讲代码很难跟上,要真正理解代码,得读懂里面的逻辑,这个变量、这个函数是用来干嘛的,怎么定义的,整体的pipeline是什么,代码的逻辑性很强,不论整体还是细节,都需要一点一点GPT/查文档,读懂了受益无穷
- 一般前面是李沐老师讲理论,后面代码实现部分得自己反复看Jupyter文档!
- 李沐老师的代码讲解也很好,要配合起来交叉看、反复看
- 效仿李沐老师的思路,反复看,然后模仿复述他的思路,来检验自己是否理解代码,而不是简单记笔记
- 看代码看不懂时,要联系上下文看,再不懂就把上下文交给GPT
- 不必全都学明白,不懂得可以跳过,后期复现论文,代码能跑起来就是成功,不懂的就现场查GPT,回头再看也行,常用的概念会反复用到
- 代码看不懂,还有一种可能,你不懂“面向对象编程”,快去补Python基础,推荐B站资源:黑马Python(PPT在附件里)