目录
step2:define loss from training data
0. task1任务:1.1通过案例了解机器学习
对应《深度学习详解》目录
第一章 机器学习基础
1.1 案例学习
1. 机器学习基础
1.1概念
- 机器学习 ML Machine Learning : 让机器具备找函数的能力。输出->函数f->输出
- 回归 regression :要找的函数f的输出是一个数值 scalar 时的这个找函数任务。举例:预测PM2.5值
- 分类 classification : 人类做选项(类别 class),机器做选择当做输出。举例:邮箱检测垃圾邮件(判断是/不是);AlphaGo选择下一步落子
- 结构化学习 structured learning :创造有结构的物体。举例:画图;写文章
- 深度学习 DL Deep Learning
1.2 案例学习——视频的点击数预测
任务:输入频道过往信息,输出预测观看次数
step1:function with unknown
猜测未知函数f的构成:[根据问题本质的了解(领域知识 domain knowledge)]
(模型 model )
——y-预测值
——x1 - 同y类型已知值 (特征 feature)
——b,w - 未知参数(b - 偏置 bias w - 权重 weight )
step2:define loss from training data
定义一个函数L (损失 loss ) [loss函数也是自己定义的,不仅是以下举例的绝对误差值]
——L(b,w) 输入b,w,输出输入的值好/不好
举例:
①假设输入:b=500, w=1, y=500+x1. 带入过去的观看次数计算。
②计算差距e值:预测值=5300, 真实值(标签 label)y=4900
(计算平均绝对误差 MAE Mean Absolute Error) 差距=400; e2=X; e3=X…
(计算均方误差 MSE Mean Squared Error)
(概率分布—交叉熵 cross entropy)
③损失L=差距e的均值: [L即差值平均,L越小,误差越小,公式越准确]
④绘制L的等高线L(b,w) ——(误差表面 error furface)
step3:optimization
找最优解(最优w, b)——方法:梯度下降 gradient descent
①假设位置参数只有一个w(假设b已知),得到w-L曲线,
i ) 随机选取一个初试值,
ii ) 计算微分 ,
iii ) 设定学习率learning rate
,决定参数更新大小/学习快慢。 [类似参数b的
大小]
超参数 hyperparameter :需要自己设定的值,不是机器找出来的值。
ix ) 把,,右移一步(步伐=
×微分),得到新位置
,
x ) 反复重复以上操作,移动到,
,……,直到:a)设定的计算次数;b)微分值=0
存在问题:微分值=0的点不止一个,遇到一个即停止。[但这是个假问题,并不是难题]
[比如说,可以设定从第一个局部最小值开始找下一个,一直到找完,再对比得出极小值]
全局最小值 global minima —— 最小值
局部最小值 local minima —— 极小值
②推广到两个参数,计算两个参数的微分
i ) 计算 ;
,
ii ) 计算,
,
iii ) 反复重复以上操作,找到最优解 ,
其中,L(,
)代表平均误差。(这个例子里)
Training = Step1:function with unknown
+ step2:define loss from training data
+ step3:optimization
2.隐藏任务
2.1隐藏任务①
找出本篇中形如回归(regression)加粗字体的术语,并用自己的话进行解释,列成表格,与学习群的其他小伙伴讨论你的理解和搜索到的相关案例。
2.2隐藏任务②
整理出本篇中所有的公式,手动摘录,并尝试理解。
(1.1) [模型 model,假设的函数f]
(1.2) [假设b,w,计算估测值 ]
(1.3) [第一对估测值和标签的误差 ]
(1.4) [第二对估测值和标签的误差 ]
(1.5) [损失函数L=平均误差 ]
(1.6) [计算平均绝对误差时,e值计算成绝对误差]
(1.7) [计算均方误差时,e值计算成方差]
(1.8) [从0走向1,步伐是设定的学习率×微分]
(1.9) ;
[二维函数求微分]
(1.10) ;
[二维函数从0走向1,同一个点带入对不同变量的微分×学习率,得到一对wb]
2.3隐藏任务③
找出机器学习找函数的3个步骤!并查找资料,交叉佐证这些步骤。
Training = Step1:function with unknown
+ step2:define loss from training data
+ step3:optimization
2.4隐藏任务④
归纳梯度下降的步骤。
step1:从某个点开始,计算参数的微分(如计算 ;
,)
step2:通过参数微分×学习率,计算下一个点的位置
(如,
;
;
)
step3:反复重复以上操作,找到最优解的位置(使微分=0的位置)
2.5隐藏任务⑤
为什么局部最小是一个假问题,局部最小怎么解决?真正的难题是什么?
局部最小:比如说,可以设定在一定范围内,从第一个局部最小值开始找下一个局部最小值,再对比所有得到的最小值,可以得出极小值。
真正的难题:推测是,①函数的构成推测,②相关特征的选取,③权重的分配,④极端数据的处理
3.知识竞答Q&A
3.1 8.23
Q1: 多项选择题:下列哪些是梯度下降法的优点?
A) 快速收敛
B) 免疫于局部最小值
C) 简单实现
D) 适用于大规模数据
A1: AC,排除法。B不免疫,D它计算微分,步伐越小越准,推测不适用大规模
参考答案:CD。
A) 梯度下降不一定总是快速收敛,其收敛速度取决于多个因素,如学习率的选择、问题的性质、损失函数的形状和初始化参数等,有些情况会收敛得很慢。
B) 在非凸优化问题中,损失函数的图形可能包含多个局部最小值,梯度下降法容易陷入局部最小值,这是它的一个常见问题。
C)梯度下降法的基本原理相对简单,即只需要计算梯度并沿梯度方向进行参数更新,实现起来也较为直接。
D) 梯度下降,特别是随机梯度下降(Stochastic Gradient Descent,SGD)和小批量梯度下降(Mini-batch Gradient Descent)等变体,在处理大规模数据时很高效,因为它不需要在每个迭代中计算整个数据集的梯度,而是可以基于小批量数据进行更新。
Q2: 关于梯度下降(gradient descent)算法,下列哪些说法是正确的?(多选)
A. 梯度下降通过计算损失函数的梯度来决定如何更新参数,以使损失最小化
B. 在梯度下降中,如果损失函数的梯度为零,则意味着算法已找到全局最小值
C. 学习率(learning rate)影响每次参数更新的步伐,学习率过大可能导致跳过最优解
D. 梯度下降算法在多参数情况下与单参数情况基本相同,但需要同时更新所有参数
E. 梯度下降总是能够找到全局最小值,因此不容易陷入局部最小值
A2:CD
A(?)计算损失函数的梯度√,来决定(?)如何更新参数
BX 可能是局部最小值,不是全局
C√ 比如大于整个取值范围
D√
EX
参考答案:ACD
A. 梯度下降通过计算损失函数的梯度来决定如何更新参数,以使损失最小化
C. 学习率(learning rate)影响每次参数更新的步伐,学习率过大可能导致跳过最优解
D. 梯度下降算法在多参数情况下与单参数情况基本相同,但需要同时更新所有参数
Q3: 简答题:
你训练了一个线性回归模型来预测房价,在训练数据上的平均绝对误差(MAE)是5000元,在测试数据上的MAE是7000元。
问题:
a)在这个场景中,可能的特征(feature)和标签(label)分别是什么?
b) 这个结果说明了什么,为什么会出现训练误差和测试误差的差异?
c) 如果要改进模型,你会考虑哪些方面?
A3: 涉及知识:特征(feature):x1 - 同y类型已知值;标签(label):真实值y
a)特征(feature):训练数据中的前一天已知房价x;标签(label):训练数据中的后一天已知房价y
b)训练误差是函数的平均误差,测试误差是一次数据误差
c)调整学习率,改函数构成,增加影响参数
参考答案:
a) 这个结果说明了什么?
这个结果说明模型在训练数据上的表现比在测试数据上好。这是正常现象,因为模型是基于训练数据优化的。训练数据上的误差(即损失)通常会小于测试数据上的误差。
b) 为什么会出现训练误差和测试误差的差异?
模型参数(w和b)是通过最小化训练数据上的损失函数得到的。测试数据是模型没有见过的新数据,所以在测试数据上的表现通常会比训练数据差一些。
c) 如果要改进模型,你会考虑哪些方面?
1.调整模型参数:可以尝试使用不同的初始值或优化方法(如梯度下降)来寻找更好的w和b值。
2.重新考虑特征选择:检查是否选择了合适的特征(x)。可能需要添加新的相关特征或调整现有特征。
3.增加训练数据:如果可能,增加更多的训练数据可能会帮助模型学习到更好的参数。
(后面学到过拟合的相关知识之后,会往这方面思考。)
3.2 8.24
Q1: 问答题:你正在为一个在线视频平台开发一个视频推荐系统。你决定使用线性回归模型来预测用户对某个视频的观看时长。
a) 根据教程中的内容,你会选择哪些特征作为模型的输入?
b) 你选择了均方误差(MSE)作为损失函数。请解释为什么选择MSE而不是平均绝对误差(MAE)?在什么情况下你可能会考虑使用MAE?
c) 在训练过程中,你发现损失函数的值在波动,但整体呈下降趋势。这种现象反映了什么?你会如何调整学习率来改善这种情况?
a) 以前的用户对类似视频的观看时长,类似视频:同作者、同分类、同视频长度、同标签、
b)MSE放大误差,MSE倾向于找到所有样本点的平均预测值。MAE适合不太在意误差,偏向找到样本点的中位数预测值。
c) 反应逐渐接近最优解,但错过零点,需要调小学习率
参考答案:
a) 可能的特征包括:用户过去观看该类型视频的平均时长、视频的总时长、视频的类型、用户的历史观看行为数据(如常看的视频类型)以及视频的热度(如点赞数、评论数)。选择这些特征是基于它们与目标变量(观看时长)可能存在的相关性。
b) 选择MSE而非MAE的原因:
①MSE相比于MAE会给予更大的惩罚给那些严重偏离的预测。
在视频推荐系统中,我们特别关注那些预测严重偏离实际的情况,因为这些情况对用户体验影响最大。想象一下,如果系统推荐你看一部两小时的电影,但你看了几分钟就失去兴趣,这显然是个糟糕的推荐。这不仅会让你对推荐系统失去信任,还可能导致平台资源的浪费。
MSE通过平方误差给予了更大的惩罚给那些严重偏离的预测。比如,预测错误90分钟在MSE中的影响要比预测错误30分钟大得多,这样可以促使模型更加重视并减少这些可能严重影响用户体验的大误差预测。通过这种方式,我们可以提高推荐系统的整体质量和可靠性,确保用户获得更好的体验。
②MSE的导数计算更简单,有利于梯度下降的实施。
但在某些情况下,比如数据中存在许多异常值时,MAE可能是更好的选择,因为它对异常值不那么敏感。
c) 损失函数值波动但整体下降表明:模型正在学习,但学习过程不够平滑。这可能是因为学习率设置得过大,导致了波动。调整建议是减小学习率,使得每次参数更新的步长变小,可能会使学习过程更加平稳。
Q2: 假设你在训练一个图像分类模型,发现模型在训练集上的准确率很高,但在测试集上的准确率很低。以下哪些方法可能有助于提高模型的泛化能力?(选择两项)
A. 增加训练数据的数量
B. 减少模型的参数数量
C. 使用更大的学习率
D. 使用更复杂的模型架构
E. 降低训练数据的质量
A C
参考答案:A, B
A. 增加训练数据的数量: 训练数据越多,模型学习到的信息就越全面,泛化能力也就越强,就好比见多识广的人更容易处理新情况。
B. 减少模型的参数数量: 模型参数过多容易导致过拟合,即模型过度学习训练数据的细节,导致对新数据的预测能力下降。减少参数数量可以降低模型复杂度,提高泛化能力。
C. 使用更大的学习率: 学习率过大会导致模型训练不稳定,甚至无法收敛,不利于提高泛化能力。
D. 使用更复杂的模型架构: 更复杂的模型架构通常拥有更多参数,更容易过拟合,降低泛化能力。
E. 降低训练数据的质量: 训练数据质量越低,模型学习到的信息就越不准确,泛化能力自然也就越差。
Q3: 在一个线性回归模型中,如果所有特征的权重(w)都接近于0,而偏置(b)较大,这最可能表明什么?
A. 模型已经达到全局最优
B. 特征与目标变量之间存在强烈的线性关系
C. 模型可能过于复杂,需要简化
D. 所选特征可能与预测目标关系不大
E. 损失函数选择不当
D
AX最优应该是L小 BX(相反) CXL情况未知不能做这个判断 D√ EX没有提到L
参考答案:D
权重 (w) 接近于 0: 表示特征对预测结果的影响很小,几乎可以忽略不计。
偏置 (b) 较大: 表示模型的预测结果主要由偏置决定,而不是特征。
综合起来,这意味着模型的预测结果几乎不依赖于输入的特征,而是主要由一个常数决定。 这就好比无论你提供什么信息,模型都只会给出同样的答案。 暗示所选特征与预测目标之间并没有什么关联。
A. 模型已经达到全局最优: 全局最优意味着模型找到了最佳的参数组合,能够很好地拟合数据。 但如果特征与目标无关,即使找到了最优解,模型的预测能力也很差。
B. 特征与目标变量之间存在强烈的线性关系: 如果存在强烈的线性关系,权重就不会接近于 0。
C. 模型可能过于复杂,需要简化: 在这个情况下,模型过于简单,而不是过于复杂。
E. 损失函数选择不当: 损失函数选择不当可能会影响模型的训练效果,但不会导致所有权重都接近于 0。
4.直播补充
4.1补充参考书
苹果书《深度学习详解》
西瓜书 《机器学习 machine learning》周志华著
深度学习《动手学深度学习》李沐
花书《深度学习 deep learning》IanGoodfellow、YoshuaBengio、AaronCourville
南瓜书《机器学习公式详解 (“西瓜书”学习伴侣“南瓜书”)》
An Introduction to Statistical Learning ——统计学入门
4.2复现深度学习的论文
寻找开源的可复现代码,用AI解读代码,尝试运行,再尝试修改参数