-
机器学习基础
机器学习(MachineLearning,ML)
深度学习(Deep Learning, DL)
机器学习就是让 机器具备找一个函数的能力
假设要找的函数的输出是一个数值,一个 标量(scalar),这种机器学习的任务称为回归。找这个函数的任务称为回归(regression)。
另一个任务是分类(classification),让机器做选择题,这些选项称为类别(class)。从设定好的选项里面选择一个当作输出,该任务称为分类。
结构化学习(structuredlearning),有结构的物体,比如一张图,一篇文章。机器产生有结构的东西称为结构化学习。
机器学习找函数的过程,分成3个步骤:
-
写出一个带有未知参数的函数f
b跟w是未知的参数,要通过数据去找出。猜测来自于领域知识(domain knowledge)。
带有未知的参数(parameter)的函数称为模型(model)。
模型在机器学习里面,就是一个带有未知的参数的函数。
特征(feature)x1 是这个函数里面已知的,w跟b是未知的参数。w称为权重(weight),b称为偏置(bias)。
-
定义损失(loss),损失也是一个函数。
损失是函数L(b,w),其输入是模型参数 b 跟 w。损失函数输出的值代表,现在如果把这一组未知的参数,设定某一个数值的时候,这笔数值好还是不好。
N 代表训验数据的个数,L 是每一笔训练数据的误差e相加以后的结果。L越大,代表现在这一组参数越不好,L越 小,代表现在这一组参数越好。
计算y与ˆ y之间绝对值的差 距,称为平均绝对误差(Mean Absolute Error,MAE)。
y 与 ˆ y 之间平方的差距,为均方误差(Mean Squared Error,MSE)。
交叉熵(cross entropy)
误差表面(error surface)
在等高线图上,越偏红色系,代表计算出来的损失越大, 就代表这一组w跟b越差。如果越偏蓝色系,就代表损失越小,就代表这一组w跟b越好, 拿这一组w跟b,放到函数里面,预测会越精准。
3.解一个最优化
让损失最小的w跟b称为w∗跟b∗代表它们是最好的一组w跟b,可以让损失的值最小。
梯度下降(gradient descent)是经常会使用优化方法。
这一步的步伐的大小取决于两件事情:
• 第一件事情是这个地方的斜率,斜率大步伐就跨大一点,斜率小步伐就跨小一点。
• 另外,学习率(learning rate)η 也会影响步伐大小。学习率是自己设定的,如果η 设 大一点,每次参数更新就会量大,学习可能就比较快。如果η设小一点,参数更新就很慢,每次只会改变一点点参数的数值。这种在做机器学习,需要自己设定,不是机器自己找出来的,称为超参数(hyperparameter)。
梯度下降有一个很大的问题,没有找到真正最好的解,没有找到可以让损失最小的w。在 图1.4 所示的例子里面,把w 设定在最右侧红点附近这个地方可以让损失最小。但如果在梯 度下降中,w0是随机初始的位置,也很有可能走到wT 这里,训练就停住了,无法再移动w的 位置。右侧红点这个位置是真的可以让损失最小的地方,称为全局最小值(globalminima), 而wT 这个地方称为局部最小值(local minima),其左右两边都比这个地方的损失还要高一点,但是它不是整个误差表面上面的最低点。
Q: 为什么损失可以是负的? A: 损失函数是自己定义的,在刚才定义里面,损失就是估测的值跟正确的值的绝对值。 如果根据刚才损失的定义,它不可能是负的。但是损失函数是自己决定的,比如设置一 个损失函数为绝对值再减100,其可能就有负的。这个曲线并不是一个真实的损失,并 不是一个真实任务的误差表面。因此这个损失的曲线可以是任何形状
把w0 往右移一步,新的位置为w1,这一步的步伐是η乘上微分的结果,即:
隐藏任务
隐藏任务①:找出本篇中形如回归(regression)加粗字体的术语,并用自己的话进行解释,列成表格,与学习群的其他小伙伴讨论你的理解和搜索到的相关案例。
回归 | regression | 归分析是一种统计学方法,用于确定一个或多个因变量和一个或多个自变量之间的定量关系,然后用它们来预测未知数据的值。回归分析可分为一元回归和多元回归,简单回归和多重回归,线性回归和非线性回归。 |
分类 | classification | 做选择题 |
类别 | class | 选择项 |
结构化学习 | structured learning | 有结构的物体,比如一张图,一篇文章 |
领域知识 | domain knowledge | 对这个问题本质上的了解 |
模型 | model | 带有未知的参数(parameter)的函数 |
特征 | feature | 已知的 |
权重 | weight | |
偏置 | bias | |
损失 | loss | 预测值与实际值之间的误差 |
平均绝对误差 | Mean Absolute Error,MAE | |
均方误差 | Mean Squared Error,MSE | |
交叉熵 | cross entropy | 是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性 |
误差表面 | error surface |
|
梯度下降 | gradient descent | 梯度下降”是一个常用的优化算法,用于求解目标函数的最优解或局部最优解。它通过不断调整模型参数的值,使目标函数的值逐渐下降。具体来讲,每次迭代时,它计算目标函数的梯度(即函数在当前点处的斜率),并朝着梯度的反方向更新参数值,以使函数值下降。这个过程一直持续到目标函数的值收敛(即不再变化或变化极小),此时,算法得到的参数值就是目标函数的最优解或近似最优解。 |
学习率 | learning rate | 学习率是机器学习算法中的一个参数,用来控制模型在每次迭代中对数据学习的速率。它表示模型每次更新参数时改变的量的大小。学习率越小,模型对数据的学习速度越慢,但可以降低其过拟合的风险;学习率越大,模型对数据的学习速度越快,但容易导致过拟合或者不稳定。 |
超参数 | hyperparameter | 超参数是机器学习算法中的一种参数,它通常是在算法运行之前设置的。与模型学习时自动获得的参数不同,超参数在运行模型之前必须由数据科学家或开发者选择并设置。一些常见的超参数包括学习率、正则化参数、分类器种类等。超参数的选择往往会影响模型的性能和准确度,因此需要进行反复的试验和调整。 |
全局最小值 | globalminima | 损失最小的地方 |
局部最小值 | local minima | 左右两边都比这个地方的损失还要高一点,但是它不是整个误差表面上面的最低点 |
隐藏任务②:整理出本篇中所有的公式,手动摘录,并尝试理解。
机器学习函数 | |
损失L函数 | |
平均绝对误差(Mean Absolute Error,MAE) | |
均方误差(Mean Squared Error,MSE) | |
在w=w0,b=b0 的位置,计算w对L的微分,计算b对L的微分 | |
把w0 减掉学习率乘上微分的结果得到w1,把b0 减掉学习率乘上微分的结果得到b1 |
隐藏任务③:找出机器学习找函数的3个步骤!并查找资料,交叉佐证这些步骤。
机器学习中的找函数三步骤可以概括为:
-
定义模型:选择一个模型并初始化其参数。
-
定义损失函数:定义一个损失函数来量化模型预测的准确性。
-
优化:使用优化算法来最小化损失函数,从而找到最佳的模型参数。
https://blog.csdn.net/lijunhcn/article/details/134548621
隐藏任务④:归纳梯度下降的步骤。
梯度下降是一种优化算法,用于在机器学习和深度学习中找到损失函数的最小值。以下是梯度下降的基本步骤:
-
初始化参数
-
选择模型: 根据问题类型选择一个合适的模型。
-
初始化参数: 为模型参数选择初始值。这些初始值可以是随机的或其他预先设定的值。
-
计算梯度
-
计算损失函数: 使用当前的参数值计算损失函数的值。
-
计算梯度: 损失函数关于每个参数的偏导数称为梯度。梯度指向损失函数增加最快的方向,因此我们需要计算负梯度来找到减少损失函数的方向。
-
更新参数
-
选择学习率: 学习率是一个超参数,它控制着每次更新时参数的变化幅度。
-
更新参数: 使用以下公式更新参数:
迭代
-
重复步骤 2 和 3: 不断迭代,直到满足某个停止条件。常见的停止条件包括达到最大迭代次数、梯度足够小(即损失函数的变化很小)、损失函数的值低于某个阈值等。
-
结束条件
-
检查停止条件: 如果满足停止条件,则结束迭代过程。否则返回到步骤 2 并继续迭代。
-
输出结果
-
输出最优参数: 最终得到的参数值就是模型的最优解。
示例伪代码
下面是一个简化的梯度下降算法的伪代码示例:
def gradient_descent(X, y, theta, alpha, num_iterations):
m = len(y) # 样本数量
cost_history = [0] * num_iterations # 保存每次迭代的成本值
for iteration in range(num_iterations):
# 计算预测值
hypothesis = X @ theta
# 计算损失函数的梯度
loss = hypothesis - y
gradient = (1/m) * (X.T @ loss)
# 更新参数
theta = theta - alpha * gradient
# 计算当前损失函数的值
cost = (1/(2*m)) * np.sum(loss**2)
cost_history[iteration] = cost
return theta, cost_history
隐藏任务⑤:为什么局部最小是一个假问题,局部最小怎么解决?真正的难题是什么?
在机器学习和深度学习中,局部最小值(local minima)是一个经常被提及的概念,尤其是在讨论优化算法时。过去,人们担心优化算法会在局部最小值处停止,而无法达到全局最小值。然而,随着对高维优化问题理解的加深,局部最小值被视为一个相对次要的问题。下面详细解释为什么局部最小值可能不是一个严重的“假问题”,以及如何解决它,并指出真正的挑战所在。
为什么局部最小是一个假问题
-
高维空间中的局部最小值: 在高维空间中,局部最小值实际上是很难形成的。这是因为局部最小值要求函数在所有维度上都是局部最小的,而在高维空间中,这一点很难满足。
-
深度学习中的局部最小值: 对于深度学习模型,尤其是深层神经网络,即使模型收敛到一个局部最小值,这个局部最小值往往具有良好的泛化能力。也就是说,即使不是全局最小值,模型的性能仍然可以相当不错。
-
鞍点(Saddle Points): 在高维空间中,鞍点比局部最小值更常见。鞍点是梯度为零的点,但它既不是局部最小值也不是局部最大值。鞍点的存在可能导致优化算法陷入停滞状态。
如何解决局部最小值
尽管局部最小值可能不是最大的问题,但仍然有一些策略可以帮助模型跳出局部最小值:
-
使用随机梯度下降(SGD): SGD通过每次迭代仅使用一小部分数据来更新模型参数,这种随机性可以帮助模型跳出局部最小值。
-
动量(Momentum): 动量技术通过保留一部分上一步的梯度方向,使得优化过程更平滑,有助于克服局部最小值的障碍。
-
不同的初始化: 通过多次随机初始化模型参数,可以增加找到全局最小值的机会。
-
自适应学习率: 使用如Adam、Adagrad或RMSprop等自适应学习率方法,可以根据历史梯度信息调整学习率,有助于避免陷入局部最小值。
-
正则化: 使用正则化技术(如L2正则化)可以减少过拟合的风险,从而间接帮助模型避免陷入局部最小值。
真正的难题
-
鞍点(Saddle Points): 在高维空间中,鞍点比局部最小值更常见,它们可能导致优化算法陷入停滞状态。
https://blog.csdn.net/qq_39852676/article/details/106967368
-
过拟合(Overfitting): 即使模型收敛到了全局最小值,也可能因过拟合而导致泛化能力差。
-
欠拟合(Underfitting): 如果模型太简单,它可能无法捕获数据中的复杂模式,导致欠拟合。
-
计算资源: 训练大规模模型需要大量的计算资源和时间。
-
模型设计: 构建一个既能准确建模又能高效训练的模型是一个挑战。
https://www.cnblogs.com/oten/p/17982334
综上所述,尽管局部最小值在过去被认为是一个问题,但在现代深度学习实践中,真正的问题更多地集中在如何处理鞍点、避免过拟合/欠拟合以及合理利用计算资源等方面。