1 什么是机器学习、深度学习
1.1 机器学习
目标:让机器具备找一个函数的能力
应用:以语音识别为例,函数的输入是声音信号,输出是声音信号的文字内容
任务类型:
①回归(Regression):函数输入输出是数值(标量scalar)
②分类(classification):从给出的输入选项中选一个输出
③结构化学习(Structured Learning):通过有结构的内容(如图像、文档)创造一些内容
1.2 机器学习查找函数
1.2.1 步骤一 创建带有未知参数的函数f
基于对问题本身的认识与理解,创建带有未知参数和已知影响因素所对应参数的函数f,根据函数的输出来推测问题结果。
其中,模型(model)指带有未知参数的函数。
对于简单的函数如y=b+w*x,其中w(weight,权重)、b(bias,偏置)为未知的参数。
1.2.2 步骤二 定义损失(loss)
损失函数(loss function):指的是在机器学习中用来衡量模型预测结果与实际结果之间差异的函数。其值越小,代表模型预测结果越接近实际结果。在训练模型时,需要通过不断调整模型参数来最小化损失函数的值。常见的损失函数包括均方误差、交叉熵等。
对于简单的模型(函数)y=b+w*x,可以有损失函数L(b,w)来表示损失,其输入是模型的未知参数b或w,输出是模型在当前参数下的预测结果与实际结果之间差异值。
对于差异值的计算,有不同的计算方法,其中:
①平均绝对误差(Mean Absolute Error,MAE):计算 y 与 yˆ 之间绝对值的差距
②均方误差(Mean SquaredError,MSE):算 y 与 yˆ 之间平方的差距
③交叉熵(cross entropy):当y 和 yˆ 都是概率分布时,可能会用到。
误差表面(error surface)
不同的 w 跟 b 的组合去计算它的损失,可以画出图所示的等高线图。
在这个等高线图上面,越偏红色系,代表计算出来的损失越大,就代表这一组 w 跟 b 越差。如果越偏蓝色系,就代表损失越小,就代表这一组 w 跟 b 越好,拿这一组 w 跟 b,放到函数里面,预测会越精准。
1.2.3 求解最优化问题
目标:找到最合适的一组w和b,使得损失值最小。
常见优化方法:
梯度下降算法(Gradient Descent Algorithm)
基本思路:通过求目标函数的导数来寻找目标函数最小化的方法,以图为例,首先要随机选取一个初始的点 w0。
注:算法参数的初始值选择不同,获得的最小值也有可能不同,因此梯度下降求得的可能只是局部最小值;如果损失函数是凸函数则一定是最优解。
由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
接下来计算 ,在 w 等于 w0 的时候,参数 w 对损失的微分。在 w0 这个位置的误差表面的切线斜率(蓝色的虚线),如果是负的,代表说在这个位置附近左边比较高,右边比较低,则把 w 的值变大,可以让损失变小。如果算出来是正的,代表左边比较低右边比较高,把 w 变小了,w 往左边移,则可以让损失的值变小。
“工程上实现时通常采用的是迭代法,它从一个初始点开始,反复使用某种规则从移动到下一个点,构造这样一个数列,直到收敛到梯度为0的点处,即梯度下降算法”
注:
模型所有的參数每次更新都是使用同样的学习速率。假设数据特征是稀疏的或者每一个特征有着不同的取值统计特征与空间,那么便不能在每次更新中每一个參数使用同样的学习速率。那些非常少出现的特征应该使用一个相对较大的学习速率。
其中,
移动步伐受以下因素影响:
①斜率大小:对应位置斜率大步伐便容易跨大一点,斜率小步伐便容易跨小一点。
②学习率(learning rate)η/步长α:学习率可以自行设定,若学习率较大,每次参数更新的变化量就大,学习可能会较快,但太大会妨碍收敛,导致损失函数在最小值附近波动甚至偏离最小值;学习率小的话,参数更新较慢,每次参数只会改变一点数值,导致收敛的速度很慢。
超参数(hyperparameter):在机器学习中,需要自己设定,而非机器自己找出来的参数。
包括参数更新次数等。
梯度下降的局限性
找到的可能是局部最小值,而非全局最小值。
梯度下降算法的变形形式
①批梯度下降法(batch gradient descent)
在整个训练数据集上计算损失函数关于参数θ的梯度,利用梯度的方向和学习率更新参数,学习率决定我们将以多大的步长更新参数。对于凸误差函数,批梯度下降法能够保证收敛到全局最小值,对于非凸函数,则收敛到一个局部最小值。
for i in range(nb_epochs):
params_grad = evaluate_gradient(loss_function, data, params)
params = params - learning_rate * params_grad
② 随机梯度下降法(stochastic gradient descent, SGD)
根据每一条训练样本x ( i )和标签y ( i ) 更新参数,对于大数据集,因为批梯度下降法在每一个参数更新之前,会对相似的样本计算梯度,所以在计算过程中会有冗余。而SGD在每一次更新中只执行一次,从而消除了冗余。因而,通常SGD的运行速度更快,同时,可以用于在线学习。SGD以高方差频繁地更新,导致目标函数出现如图所示的剧烈波动。
由于SGD的波动性,一方面,波动性使得SGD可以跳到新的和潜在更好的局部最优。另一方面,这使得最终收敛到特定最小值的过程变得复杂,因为SGD会一直持续波动。然而,已经证明当我们缓慢减小学习率,SGD与批梯度下降法具有相同的收敛行为,对于非凸优化和凸优化,可以分别收敛到局部最小值和全局最小值。与批梯度下降的代码相比,SGD的代码片段仅仅是在对训练样本的遍历和利用每一条样本计算梯度的过程中增加一层循环。
for i in range(nb_epochs):
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function, example, params)
params = params - learning_rate * params_grad
③小批量梯度下降法(Mini-batch Gradient Descent)
结合了上述两种方法的优点,在每次更新时使用n个小批量训练样本,这种方法,a)减少参数更新的方差,这样可以得到更加稳定的收敛结果;b)可以利用最新的深度学习库中高度优化的矩阵优化方法,高效地求解每个小批量数据的梯度。通常,小批量数据的大小在50到256之间,也可以根据不同的应用有所变化。当训练神经网络模型时,小批量梯度下降法是典型的选择算法,当使用小批量梯度下降法时,也将其称为SGD。
班群知识竞答
①判断题:机器学习中的超参数(hyperparameter)可以通过训练数据自动学习得到。——错,需要人为设置。
②多项选择题:下列哪些是梯度下降法的优点?
A) 快速收敛
B) 免疫于局部最小值
C) 简单实现
D) 适用于大规模数据
答案:CD
A) 梯度下降不一定总是快速收敛,其收敛速度取决于多个因素,如学习率的选择、问题的性质、损失函数的形状和初始化参数等,有些情况会收敛得很慢。
B) 在非凸优化问题中,损失函数的图形可能包含多个局部最小值,梯度下降法容易陷入局部最小值,这是它的一个常见问题。
C)梯度下降法的基本原理相对简单,即只需要计算梯度并沿梯度方向进行参数更新,实现起来也较为直接。
D) 梯度下降,特别是随机梯度下降(Stochastic Gradient Descent,SGD)和小批量梯度下降(Mini-batch Gradient Descent)等变体,在处理大规模数据时很高效,因为它不需要在每个迭代中计算整个数据集的梯度,而是可以基于小批量数据进行更新。
③关于梯度下降(gradient descent)算法,下列哪些说法是正确的?(多选)
A. 梯度下降通过计算损失函数的梯度来决定如何更新参数,以使损失最小化
B. 在梯度下降中,如果损失函数的梯度为零,则意味着算法已找到全局最小值
C. 学习率(learning rate)影响每次参数更新的步伐,学习率过大可能导致跳过最优解
D. 梯度下降算法在多参数情况下与单参数情况基本相同,但需要同时更新所有参数
E. 梯度下降总是能够找到全局最小值,因此不容易陷入局部最小值
答案:ACD
A. 梯度下降通过计算损失函数的梯度来决定如何更新参数,以使损失最小化
C. 学习率(learning rate)影响每次参数更新的步伐,学习率过大可能导致跳过最优解
D. 梯度下降算法在多参数情况下与单参数情况基本相同,但需要同时更新所有参数
④简答题:
你训练了一个线性回归模型来预测房价,在训练数据上的平均绝对误差(MAE)是5000元,在测试数据上的MAE是7000元。
问题:
a)在这个场景中,可能的特征(feature)和标签(label)分别是什么?
b) 这个结果说明了什么,为什么会出现训练误差和测试误差的差异?
c) 如果要改进模型,你会考虑哪些方面?
本题是开放性问题,以下是参考答案:
a) 这个结果说明了什么?
这个结果说明模型在训练数据上的表现比在测试数据上好。这是正常现象,因为模型是基于训练数据优化的。训练数据上的误差(即损失)通常会小于测试数据上的误差。
b) 为什么会出现训练误差和测试误差的差异?
模型参数(w和b)是通过最小化训练数据上的损失函数得到的。测试数据是模型没有见过的新数据,所以在测试数据上的表现通常会比训练数据差一些。
c) 如果要改进模型,你会考虑哪些方面?
1.调整模型参数:可以尝试使用不同的初始值或优化方法(如梯度下降)来寻找更好的w和b值。
2.重新考虑特征选择:检查是否选择了合适的特征(x)。可能需要添加新的相关特征或调整现有特征。
3.增加训练数据:如果可能,增加更多的训练数据可能会帮助模型学习到更好的参数。
(后面学到过拟合的相关知识之后,会往这方面思考。)
⑤问答题:你正在为一个在线视频平台开发一个视频推荐系统。你决定使用线性回归模型来预测用户对某个视频的观看时长。
a) 根据教程中的内容,你会选择哪些特征作为模型的输入?
b) 你选择了均方误差(MSE)作为损失函数。请解释为什么选择MSE而不是平均绝对误差(MAE)?在什么情况下你可能会考虑使用MAE?
c) 在训练过程中,你发现损失函数的值在波动,但整体呈下降趋势。这种现象反映了什么?你会如何调整学习率来改善这种情况?
视频推荐系统
a) 可能的特征包括:用户过去观看该类型视频的平均时长、视频的总时长、视频的类型、用户的历史观看行为数据(如常看的视频类型)以及视频的热度(如点赞数、评论数)。选择这些特征是基于它们与目标变量(观看时长)可能存在的相关性。
b) 选择MSE而非MAE的原因:
①MSE相比于MAE会给予更大的惩罚给那些严重偏离的预测。
在视频推荐系统中,我们特别关注那些预测严重偏离实际的情况,因为这些情况对用户体验影响最大。想象一下,如果系统推荐你看一部两小时的电影,但你看了几分钟就失去兴趣,这显然是个糟糕的推荐。这不仅会让你对推荐系统失去信任,还可能导致平台资源的浪费。
MSE通过平方误差给予了更大的惩罚给那些严重偏离的预测。比如,预测错误90分钟在MSE中的影响要比预测错误30分钟大得多,这样可以促使模型更加重视并减少这些可能严重影响用户体验的大误差预测。通过这种方式,我们可以提高推荐系统的整体质量和可靠性,确保用户获得更好的体验。
②MSE的导数计算更简单,有利于梯度下降的实施。
但在某些情况下,比如数据中存在许多异常值时,MAE可能是更好的选择,因为它对异常值不那么敏感。
c) 损失函数值波动但整体下降表明:模型正在学习,但学习过程不够平滑。这可能是因为学习率设置得过大,导致了波动。调整建议是减小学习率,使得每次参数更新的步长变小,可能会使学习过程更加平稳。
⑥假设你在训练一个图像分类模型,发现模型在训练集上的准确率很高,但在测试集上的准确率很低。以下哪些方法可能有助于提高模型的泛化能力?(选择两项) A. 增加训练数据的数量
B. 减少模型的参数数量
C. 使用更大的学习率
D. 使用更复杂的模型架构
E. 降低训练数据的质量
答案:A, B
A. 增加训练数据的数量: 训练数据越多,模型学习到的信息就越全面,泛化能力也就越强,就好比见多识广的人更容易处理新情况。
B. 减少模型的参数数量: 模型参数过多容易导致过拟合,即模型过度学习训练数据的细节,导致对新数据的预测能力下降。减少参数数量可以降低模型复杂度,提高泛化能力。
C. 使用更大的学习率: 学习率过大会导致模型训练不稳定,甚至无法收敛,不利于提高泛化能力。
D. 使用更复杂的模型架构: 更复杂的模型架构通常拥有更多参数,更容易过拟合,降低泛化能力。
E. 降低训练数据的质量: 训练数据质量越低,模型学习到的信息就越不准确,泛化能力自然也就越差。
⑦在一个线性回归模型中,如果所有特征的权重(w)都接近于0,而偏置(b)较大,这最可能表明什么?
A. 模型已经达到全局最优
B. 特征与目标变量之间存在强烈的线性关系
C. 模型可能过于复杂,需要简化
D. 所选特征可能与预测目标关系不大
E. 损失函数选择不当
答案:D
权重 (w) 接近于 0: 表示特征对预测结果的影响很小,几乎可以忽略不计。
偏置 (b) 较大: 表示模型的预测结果主要由偏置决定,而不是特征。
综合起来,这意味着模型的预测结果几乎不依赖于输入的特征,而是主要由一个常数决定。 这就好比无论你提供什么信息,模型都只会给出同样的答案。 暗示所选特征与预测目标之间并没有什么关联。
A. 模型已经达到全局最优: 全局最优意味着模型找到了最佳的参数组合,能够很好地拟合数据。 但如果特征与目标无关,即使找到了最优解,模型的预测能力也很差。
B. 特征与目标变量之间存在强烈的线性关系: 如果存在强烈的线性关系,权重就不会接近于 0。
C. 模型可能过于复杂,需要简化: 在这个情况下,模型过于简单,而不是过于复杂。
E. 损失函数选择不当: 损失函数选择不当可能会影响模型的训练效果,但不会导致所有权重都接近于 0。
参考资料
预测本频道观看人数(上) - 机器学习基本概念简介_哔哩哔哩_bilibili