1-机器学习初入
1.监督学习
监督学习是一种机器学习方法,在训练模型时,使用的是已标注的数据。这意味着每个训练样本都有一个已知的目标输出(标签)。模型通过学习输入与输出之间的关系,来预测新的未标注数据的输出。简单来说就是输出结果是来源于一直的数据集和标注数据带来的指引学习而得出的结果。
我们用一个例子介绍什么是监督学习把正式的定义放在后面介绍 。假如说你想预测房价。
🌰 前阵子,一个学生从波特兰俄勒冈州的研究所收集了一些房价的数据。你把这些数据画出来,看起来是这个样子:横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。那基于这组数据,假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。
我们应用学习算法,可以在这组数据中画一条直线,或者换句话说,拟合一条直线,根据这条线我们可以推测出,这套房子可能卖$15000,当然这不是唯一的算法。可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线,我们可以从这个点推测出,这套房子能卖接近$20000。稍后我们将讨论如何选择学习算法,如何决定用直线还是二次方程来拟合。两个方案中有一个能让你朋友的房子出售得更合理。这些都是学习算法里面很好的例子。以上就是监督学习的例子。
可以看出,监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。比如你朋友那个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。
特点:
-
数据要求:需要带有标签的训练数据。
-
目标:训练模型,使其能够根 据已知数据的特征和标签预测未知数据的标签。
-
应用场景:用于分类(Classification)和回归(Regression)任务。
2.无监督学习
无监督学习是一种机器学习方法,在训练模型时,使用的是未标注的数据。即训练数据没有目标输出或标签,模型的目标是从数据中发现潜在的结构或模式。
对于监督学习里的每条数据,我们已经清楚地知道,训练集对应的正确答案了。
在无监督学习中,我们已知的数据。看上去有点不一样,不同于监督学习的数据的样子,即无监督学习中没有任何的标签或者是有相同的标签或者就是没标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。
无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法。事实证明,它能被用在很多地方。常见的无监督聚类例子:谷歌新闻每天都在,收集非常多,非常多的网络的新闻内容。它再将这些新闻分组,组成有关联的新闻。所以谷歌新闻做的就是搜索非常多的新闻事件,自动地把它们聚类到一起。所以,这些新闻事件全是同一主题的,所以显示到一起。
特点:
-
数据要求:数据不需要标签。
-
目标:通过数据中的结构、模式、相似性等进行聚类或降维,揭示数据的内在规律。
-
应用场景:主要用于聚类(Clustering)和降维(Dimensionality Reduction)任务。
3.损失函数
损失函数也称为代价函数(),是机器学习和深度学习中非常重要的一个概念,它用于衡量模型预测值与真实值之间的差距。通过优化损失函数,我们可以训练模型使其逐渐减少误差,提高预测准确性。
损失函数用于评估模型参数指导训练的结果与真实结果之间的误差,我们当然是希望其越小越好,损失函数的设计是为了让模型选择更合适的参数,参数决定了我们得到的模型结果相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线 所指)就是建模误差(modeling error)。
常用的损失函数:
均方误差: 也就是平方差,,表示预测值和实际值之间的平方差。
公式表达为:
通过一个等高线图来看三个变量的关系:
在三维空间中是存在一点使得最小,如下是二维平面上的展示:
我们对模型的目标要求就是使得损失函数,找的最小的。
4.梯度下降
梯度下降是用来计算损失函数最小值的方法(个人理解应该是局部极小值或者尽可能极小,在复杂的 数学函数中,找到最小值会相对非常困难)。
梯度下降的思想: 开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值 (local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值 (global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
通过下图来理解会更简单:
假设我们站在红色顶点的高山上,我们需要需要走到谷底,当然了,上帝视角是直接可以看到的。但是假设我们身临其境,我们的做法应该是:旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。
批量梯度下降的算法表达为:
其中式子中的就是我们训练过程中所说的学习率。梯度下降的方向,也就是我们高数中所学的那种梯度,通过求偏导的方式来计算。
5.学习率
损失函数是评估模型是否OK的检验标准,而学习率是优化的核心参数,决定了损失函数的下降速度。控制模型在每次迭代更新时的步伐大小。它直接影响优化算法在更新模型参数时的速度,学习率不可过大或者过小。
过大:
- 参数更新快,初期训练效率高
- 可能导致模型不稳定,甚至无法收敛,出现震荡或发散现象
过小:
- 训练过程稳定,容易接近局部最优解
- 收敛速度慢,训练时间长,可能陷入鞍点或局部极小值
看下图:
我想找到它的最小值,首先初始化我的梯度下降算法,在那个品红色的点初始化,如果我更新一步梯度下降,也许它会带我到这个点,因为这个点的导数是相当陡的。现在,在这个绿色的点,如果我再更新一步,你会发现我的导数,也即斜率,是没那么陡的。随着我接近最低点,我的导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点点。然后我想再梯度下降一步,在这个绿点,我自然会用一个稍微跟刚才在那个品红点时比,再小一点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所以,我再进行一步梯度下降时,我的导数项是更小的,更新的幅度就会更小。所以随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现,已经收敛到局部极小值。
在训练过程中,固定学习率可能并不总是最佳选择,因此可以采用动态学习率调整策略:
- 学习率衰减: 随着训练的进行逐步降低学习率,常见方法包括:
- 指数衰减()
- 分段衰减()
- 自适应优化器(如 )
- 自适应学习率: 根据梯度变化调整学习率:
- 、、 等优化算法会自动调整学习率。
- : 训练初期采用较小的学习率,然后逐渐升高到目标值。