6.8学习:

  • 观看华为人才在线HCIA-AI课程《第一章-人工智能概览》(第5节-实验)

其他机器学习的重要方法

机器学习的训练方法 - 梯度下降

  机器学习的一个重要问题是最小化成本函数,以便拟合目标模型

  梯度下降就是解决该问题的方法,其数学原理是:在函数梯度的方向上,函数值变化最快

  我们从成本函数的某一点开始,计算梯度(即导数),然后沿着梯度的反方向(因为要减小)移动一定步长,并不断迭代这个过程,直到达到局部最优解或全局最优解。梯度下降好比下山,从山坡上寻找一条路径一步一步走到山谷。

576fe3b04e8b0ab005949b15f0bcd12

  假设我们有一个成本函数 J(θ) ,我们想最小化成本函数,就要计算关于 参数θ 的梯度并采用新的 θ 。在每一个时间步上,更新 θ 的公式如下,其中: α 是学习率,决定了移动步长;红框内是成本函数 J(θ) 关于参数 θ 的梯度。

image-20240608140027665

  这里 参数θ 的含义是模型的权重(或参数),比如:

   -在线性回归模型中,θ 可以代表直线的斜率或截距,机器学习通过不断更新直线的斜率或截距,来完成回归直线的拟合;

   -在逻辑回归模型中,θ 代表与特征相乘的系数,这些系数决定了特征如何影响最终的分类;

   -在支持向量机SVM中,θ 可代表定义决策边界的参数,这些参数帮助模型确定数据点的分类;

   -在神经网络中,θ 通常代表网络层之间连接的权重或偏置,通过调整这两个重要参数以最小化网络的损失函数。

  值得注意的是,梯度下降不是一直进行下去的,当成本函数的变化小于设定的阈值或达到最大的迭代次数,就收敛

  Tips:我们要注意成本函数和损失函数的区别

   -成本函数是损失函数的总和的平均值,计算了整个训练集上所有样本误差的平均;

   -损失函数针对单个样本而言,计算的是一个特定样本的误差。

  在解释梯度下降原理处我们可以使用“成本函数”,但研究特定的某一个样本的一次迭代时,我们应该使用“损失函数”。

  常见的损失函数类型有三种:均方误差MSE、平均绝对误差MAE、交叉熵损失

   -MSE:yi是样本值,yi尖是预测值,n是样本数量

9b85f96a573a294c22819bac5af7bd3

   -MAE

208f701a7fa487f1f8f59df8f8e43dc

   -交叉熵损失:用于分类问题,yi是真实标签的独热编码,yi尖是预测的概率分布

fc450ba69023da8602f04409edb4983

  当计算成本函数所用的数据集不同和每次更新的参数不同时,梯度下降可以分为不同类型:批量梯度下降BGD、随机梯度下降SGD、小批量梯度下降MBGD

   -BGD批量梯度下降:最传统的梯度下降方式,每次迭代使用整个训练集来计算成本函数的梯度。优点是可以准确的沿着梯度下降最快的方向到达全局最优解,缺点是当训练集非常大时每一次迭代都非常慢且耗费资源;

   -SGD随机梯度下降:SGD每次迭代只使用一个训练样本来计算梯度更新参数。优点是算法运行速度非常快,缺点是对噪声非常敏感;

   -MBGD小批量梯度下降:现在常用的梯度下降法,结合了以上两者的优点,每次迭代使用一小部分训练样本来计算梯度,既保证了运算速度又保证了参数更新的稳定。

  在机器学习中,batch每次迭代过程中用于训练模型的子数据集,通常不会一次性使用所用数据集进行训练,而是把数据分为多个batch,每个batch包含多个样本,这样既减少了计算压力,又加速了训练过程。

  Batch中涉及了一些概念:

   -Batch Size:每个batch的大小,每次用于迭代计算梯度的样本数量;

   -Epoch:一个Epoch相当于使用训练集中的全部样本训练完一轮

   -Iteration:一次迭代是指使用一个Batch的样本进行一次前向传播和反向传播过程(即梯度计算和权重更新)。

  选择合适的Batch可以使模型处于最佳的效率,并且达到最佳的鲁棒性。鲁棒性是集模型的稳定性、对新问题的适配性、可靠性等于一体的综合概念。

模型中的参数和超参数

  机器学习模型中不但有参数,还有超参数:

   -超参数是训练开始之前设置的,由人工手动设定的参数变量,比如神经网络中的学习率、批次大小、迭代次数、隐藏层神经元的数量、Lasso/Ridge回归当中的λ、支持向量机的𝐶和𝜎超参数、KNN中的K、随机森林当中的树的棵数等;

   -参数是模型中的固有的参数,是在训练过程中学习的,比如神经网络中的权重和偏置、支持向量机中的支持向量、线性回归或逻辑回归中的系数等。

  超参数的目的是让模型能学习到最佳的参数

  但是超参数有很多可能,究竟哪个组合是最好的呢?这个最好又是怎么定义的呢?

超参数搜索

  为了找到最优的超参数组合,使机器学习模型达到最佳的性能,我们对超参数进行搜索超惨数搜索一般包括以下步骤:

   -1、划分数据集为训练集、验证集、测试集

   -2、在训练集上根据模型的性能指标对参数进行优化(训练);

   -3、在验证集上根据模型的性能指标对超参数进行搜索(搜索超参数);

   -4、反复运行第2、3步,确定最终的超参数,并在测试集中评价模型的优劣(交叉验证)。

  这个过程甚至会重复成百上千次,其中最重要的是第3步搜索超参数。超参数的搜索算法有:网格搜索、随机搜索、启发式智能搜索和贝叶斯搜索

   -网格搜索:穷举所有超参数的组合,仅适用于超参数较少的情况;

2815457ce851b60f4b1d8e7504fbd2d

   -随机搜索:从所有可能的超参数分布中进行随机抽样,首先在一个粗范围内搜索,然后根据最佳结果出现的位置缩小范围

4ddf9fc50a2c5ea63717d95ab01f4d6

   -启发式搜索:利用问题相关的辅助信息来引导搜索过程的技术,不保证总能找到最优解但一定在可接收的时间和资源内找到相对较好的超参数组合;

   -贝叶斯搜索:基于贝叶斯统计原理的全局优化策略,假设超参数和性能指标之间存在某种未知的函数关系,使用高斯过程来建模这种关系。

交叉验证

  在评估比较机器学习中模型的性能时,常用交叉验证的方法。

  基本思想是将原始数据进行分组,一部分作为训练集,另一部分作为验证集,首先用训练集对模型进行训练,再利用验证集来测试训练得到的模型,以此做为评价模型性能的指标

  交叉验证可以有效的防止数据过拟合、确保模型具有良好的泛化能力

  交叉验证最常用的是k折交叉验证(𝐾 − 𝐶𝑉),其一般流程如下:

   -数据分割:首先将数据集分割成k个大小相似的互斥子集,每个子集尽可能保持数据分布的一致性。

   -模型训练与验证:然后进行k次训练和验证过程,每次选择一个不同的子集作为验证集,其余的k-1个子集合并作为训练集。这样,每个子集都将作为验证集使用

   -性能评估:在每一轮中,模型在训练集上进行训练,并在验证集上进行评估。计算每次的性能指标,包括准确率、召回率或F1分数等。

   -结果汇总:最后,计算所有k次验证的性能指标的平均值,作为模型的综合性能

6165625f83f7a39fb254b7de7ec5847

机器学习的常见算法

  这一节我们要学习的机器学习中最常见的算法,主要集中在有监督学习和无监督学习,半监督学习和强化学习虽然也是机器学习的分类,但是因为不常见且在初学阶段暂时不用掌握。

2c2791ae0f7e248af54974b516f4fc8

线性回归

  这里先给一个非常好的学习网站:线性回归的数学表示 | 鲁老师 (lulaoshi.info)

  线性回归曾经在统计学中学习过,其基本思想是找到一条最佳的拟合直线或平面来尽可能的拟合所有数据点,从而预测新数据点的目标值。属于【有监督学习】-【回归】的分类。

线性回归基础知识

  线性回归模型的函数形式如下(多元,一元就只加到x1),其中:θ是模型参数,表示斜率;x是特征变量,表示相关的因素。

3106813b09f418760412408df5f5e6f

  我们的目标是让拟合出的预测值和实际值之间尽量小,在下图中,就是让点到面之间的黑线距离之和尽量小。

c5a575144c07eacfa6cc5220475a732

  线性回归的损失函数常采用和MSE同样的形式:

940e140c11309106e01f59274973662

  线性回归的求解方法常用的有最小二乘和梯度下降。

最小二乘法

  以一元线性回归为例,假设我们有一元线性回归模型 f(x) = wx + b ,这里w为斜率,b为截距,分别对应上面的θ1和θ0。有数据集D = {(x_1, y_1), (x_2, y_2), … , (x_m, y_m)}

  我们定义损失函数为:(为简化计算,求平均值可以省略)

9c4878a43272d13a4407378815b4ba8

  为了最小化损失函数L,我们对 w 和 b 分别求偏导,并令其为 0 :

b37dadf7e256679fe735b7e82891b76

  联立求解这两个方程即可得到最优的 w 和 b 。

梯度下降法

  以多元线性回归为例,假设我们有一个线性回归模型,预测基于 n 个特征的房价,模型可用函数表示成:

269b4fca2f25c6d5982f45b5a10978e

  我们使用均方误差MSE作为损失函数,其中:n是样本数量,xi是样本的特征值,yi是样本的实际房价。

d55937b5836a460bf30032f20b0f458

  为了最小化损失函数 J(θ) ,我们要对每个 θ 都进行更新,更新规则如下:

6ef54a29a53716ff2eae9405780ff68

  其中,α 是学习率,决定了梯度下降过程中每一步长的大小。求偏导的那一块可以拆开写成:(这就是为什么要把损失函数定义为2n,当我们对损失函数求导时,平方项的导数会出现一个 2,如果损失函数本身就包含 1/2 的话,在求导时就会相互抵消,从而简化了梯度的表达式)

e52067523b6c1beb1f97067443dd638

  带入后,参数的更新规则整体变成:

c0f6c2cbc811402b7aff4725d4c8049

  梯度下降法需要多次迭代,每次迭代按照以下的步骤进行:

   -1、计算当前参数下的损失函数 J(θ)

   -2、计算损失函数梯度

   -3、更新所有参数 θ

   -4、重复1-3步,直到损失函数收敛

  通过一系列流程,我们就找到了一组使得损失函数 J(θ) 最小的参数 θ ,从而得到了一个优化后的线性回归模型。

线性回归拓展-多项式回归

  如果数据集复杂无法用一条直线或一个平面无法很好拟合,那就可以采用多项式回归。

  多项式回归简单来说,就是加入自变量的高次方,把直线掰弯来拟合,理论上可以叠加无数高次项,次幂越高,函数的拟合能力越强。

e29bc9a4b35d448ce7638ece09751da

  当自变量只有一个时,交一元多项式回归,当自变量有多个时,叫多元多项式回归,我们给两个模型函数示例。

  一元 n 次多项式回归方程如下,其中:只有一个自变量 x ,误差项 ε 可以不管。

ee7d2658511439324b9f3d457a4734f

  二元二次多项式回归方程如下,其中:有两个自变量 x1 和 x2 ,这样拟合出来的是一个曲面,每个自变量和交互项都可以达到二次幂。在多元多项式回归中,不仅考虑了每个自变量的高次项,还要考虑自变量之间的交互项。这使得模型能捕捉更复杂的非线性关系,有助于理解不同自变量如何共同影响因变量。

402bca1710ceb4566c03d51c7be1de1

  Tips:多项式回归虽然能够拟合数据中的非线性关系,但它仍是线性回归的一种,因为它符合线性回归的一个关键特性:模型是参数的线性函数。

  在统计学和机器学习中,只要模型参数的关系是线性的,无论自变量的关系如何,该模型都被认为是线性模型。

  在上面的式子中,我们把自变量 x 无论多少次幂都看成一个方块,参数 β 和一个个的方块相乘再相加,所以方程对于参数 β 来说是线性的,这就属于线性回归。

线性回归模型评估

  这里和《统计学》中的知识能够对应上,衡量线性回归模型性能常采用以下几个参数:均方误差MSE、均方根误差RMSE、决定系数R²。

   -均方误差MSE:它衡量了预测值和真实值之间差异值的平方的平均值,越小表示模型越准确。因为差异被平方了一下,所以MSE对异常值非常敏感。

8a084e5c756d375e8ac7e5f65b4681f

   -均方根误差RMSE:RMSE是MSE开根号,因为MSE有一个平方,所以开根号后,RMSE与原来的因变量数据就有相同的单位,RMSE 通常被认为是误差的标准度量。

   -决定系数 R² :可以衡量模型的拟合优度, R² 越接近1,表示模型拟合的越好。其中 y尖 是预测值, y拔 是数据族中所有因变量 yi 的平均值。

226bdc3b15d11cf90abd29f53ac79f5

  MSE、RMSE和 R² 不同的地方是:MSE和RMSE是衡量模型误差大小的指标, R² 是衡量模型拟合优度的指标, R² 更加抽象。

利用正则化防止线性回归过拟合

  当训练数据不够或者过度训练时,线性回归容易出现过拟合的现象。表现为在训练集上误差很小,但是在验证集上误差很大。

  避免过拟合的方法有很多,比如提早停止、扩充数据集、特征选择、正则化、简化模型、Dropout(多用于神经网络)等。

  正则化通过在损失函数中添加一个惩罚项来显示模型参数的大小,从而控制模型的复杂度,防止出现过拟合的现象。

  正则化分为L1正则(Lasso回归)和L2正则(岭回归),L1正则是在损失函数中加入参数的绝对值之和作为惩罚项,L2正则是在损失函数中加入参数的平方和作为惩罚项。

  以一元线性回归为例,推导L2正则防止过拟合的过程。

  一元线性回归模型可以按如下表示,其中:y 是因变量,x 是自变量,w 是斜率,b 是截距。

d1f0da25b26e19dd884a8fa33f6edd2

  不带正则化的损失函数(均方误差)为:

5157816fc63dcfd94ff16302787059f

  L2 正则化会在原始损失函数的基础上加上参数 w 的平方项作为惩罚项,新的损失函数如下,其中: λ 是正则化系数,控制正则项的强度。

48f8e4ac0eeb1f3b5ca52d8cf3dc1b6

  为了最小化损失函数,要计算 w 和 b 的梯度,并用梯度下降更新这些参数。对 w 的梯度和对 b 的梯度分别为:

b8c425cb242f0fdeedd9ac566365bd0 cbfae1b5055c73dceff406924564858

  之后我们迭代的更新 w 和 b ,其中:α 是学习率。

ba8c3d9599872a3f20c3d66cbe9d26f

  于是我们就可以看到正则项的作用:防止 w 变的过大,从而减少过拟合的风险。

  正则化系数 λ 的选择非常重要,它决定了模型对过拟合的敏感度。通常,λ 的值通过K折交叉验证来确定。

  今天遇到了讯方的北部片区教学主管帖莎娜老师,老师人非常好,给我分享了慕课和学习路径,根据老师的建议,我决定先学习完华为的HCIA-AI课程,作为基础,不懂的地方自己找答案并思考做笔记,同时对每一节课的内容配合去学习老师给的慕课Python3入门机器学习 经典算法与应用 _课程 (imooc.com)结合编程学数学 专为程序员设计的线性代数_课程 (imooc.com),还有专为程序员设计的统计课 _课程 (imooc.com)