李宏毅机器学习2021-学习笔记(1-3/17)

(刚开始学习这方面,若有错误的地方 欢迎大家指正!)

目录

一、机器学习基础

1.1简介本质

1.2确立函数步骤

1.3激活函数

二、神经网络训练不起来怎么办

2.1模型偏差和优化问题

2.2过拟合和mismatch

2.3交叉验证

三、深度学习基础-优化神经网络

3.1梯度停止

3.2批量

3.3动量

3.4自适应学习率

3.5分类

3.6批量归一化


一、机器学习基础

1.1简介本质

机器学习和深度学习的本质是让机器具备找到合适函数的能力,这个函数的输入可以是向量、矩阵等,输出则根据任务不同呈现多样形式:①回归任务输出标量,e.g.预测未来某一时间的PM2.5数值;②分类任务让机器从预设选项中选择输出,e.g.邮箱的垃圾邮件检测、AlphaGo下围棋时从19×19个位置中选择落子点;③结构化学习要求机器产生有结构的输出,e.g.生成一张图或一篇文章。

1.2确立函数步骤

机器学习找函数的过程分为三个明确步骤。

①第一步:定义一个带有未知的参数(parameter)的函数称为模型(model)。以视频点击次数预测为例,假设函数为y = b + wx1,其中y是要预测的当天观看次数,x1是前一天的观看次数,b偏置(bias)和w权重(weight)是需要通过数据确定的未知参数,这一步的猜测往往依赖于领域知识(domain knowledge),

②第二步:定义损失函数,它是衡量参数好坏的标准,输入是模型参数,输出是损失值。损失可以通过计算预测值与真实值的差距得到,常见的有平均绝对误差(MAE)e = |yˆ − y|和均方误差(MSE)e = (yˆ - y)2,当输出为概率分布时则常用交叉熵。我们会计算所有训练数据的误差平均值作为最终损失L,L越小说明参数越好。

③第三步:解决最优化问题,找到使损失最小的参数,常用的方法是梯度下降(gradient descent)。梯度下降的过程是:先随机选取初始参数,计算损失关于参数的偏导数(梯度),根据梯度方向和学习率(learning rate)更新参数,反复迭代,直到损失不再明显下降。学习率是超参数(hyperparameter),影响参数更新的步伐大小,而当参数数量较多时,我们会将数据分成批量(batch)进行训练,遍历所有批量称为一个回合(epoch),批量大小也是超参数。

1.3激活函数

线性模型虽然简单,但存在局限性,它无法拟合复杂的非线性关系。在某些情况下,前一天观看次数与当天观看次数的关系可能不是简单的线性,而是呈现分段变化的趋势。这时候可以通过组合多个激活函数来增强模型的灵活性,分段线性曲线可以看作是一个常数加上一群Hard Sigmoid函数,而Sigmoid函数

可以逼近Hard Sigmoid函数。通过调整Sigmoid函数的参数,如斜率、偏移和高度,能组合出各种复杂的曲线,进而逼近任意连续曲线。引入多特征后,模型可以扩展为更复杂的形式,比如考虑前7天的观看次数,甚至更多天的数据。当模型中包含多个Sigmoid或ReLU等激活函数(activation function),且这些函数层层叠加时,就形成了深度学习模型,网络的深度增加能提升模型的表达能力,但也可能带来过拟合问题,需要合理设计。

(在定义一个函数时,当样本复杂一般的线性函数y=wx+b不能很好的描述,所以用到非线性函数,也就是激活函数f(x)=g(wx+b)来辅助,常见的激活函数:sigmoid、ReLU,当有多个输入f(x)=g(w1x1+w2x2+b),可以在此基础上无限套娃叠加,包含在输入与输出中的激活函数就变成了隐藏层(hidden layer),称为神经元(neuron),很多的神经元称为神经网络(neural network))

补充:

链式法则:复合函数的导数将是构成复合这有限个函数在相应点的导数的乘积,就像锁链一样一环套一环。

接着从右向左依次求导,逐步更新每一层的参数,直到把所有神经网络的参数都更新一遍,在计算前一层时,用到的一些偏导数的值后面也会遇到,所以不用计算那么多而是让这些值从右往左,一点点传播过来。该过程为:反向传播(Backpropagation):通过链式法则(Chain Rule)有效计算梯度的方法。反向传播是梯度计算的方法,梯度下降法是参数优化的方法,二者结合使用完成神经网络的训练。

通过前向传播,输入x计算输出y,再根据反向传播计算出损失函数关于每个参数的梯度,然后每个参数都向着梯度计算的反方向变化。构成神经网络的一次训练。

二、神经网络训练不起来怎么办

2.1模型偏差和优化问题

模型在测试集上表现不佳,首先检查训练数据的损失:若训练损失很大,说明模型在训练集上都没有学好。原因:①模型偏差,即模型过于简单,函数集合太小,无法包含能使损失降低的函数。e.g.仅考虑前一天数据的线性模型预测观看次数,可能因模型灵活性不足而表现差。可以通过增加输入特征、使用深度学习增加模型复杂度等方式解决。②优化问题,即模型本身足够灵活,包含了损失低的函数,却因梯度下降等优化算法的局限无法找到。梯度停止有局部最小值,局部最大值,马鞍点三种情况,通过泰勒级数近似,结合其中的海森矩阵判断该点类型,以及更新参数。判断是模型偏差还是优化问题,可以比较不同模型:若深模型灵活性比浅模型大,但训练损失却未更低,说明是优化问题。

2.2过拟合和mismatch

若训练损失小但测试损失大,原因:①过拟合,即模型过于灵活,过度拟合了训练数据中的噪声,而对未见过的数据泛化能力差。解决过拟合的有效方法:包括增加训练数据、进行数据增强(如图像翻转),或是限制模型灵活性(如减少参数、使用共享参数、使用正则化、早停、dropout等)。不过,限制模型灵活性要适度,否则可能导致模型偏差。②mismatch,即模型参数或数据分布与实际环境不匹配‌,测试资料出现问题,导致结果误差无法避免。

补充:正则化(Regularization):使获得更平滑的模型,提高测试数据的预测。

参数接近0的模型会更平滑,对输入变化的敏感度降低。

2.3交叉验证

为了合理选择模型,交叉验证是常用方法。将训练数据分为训练集和验证集,用训练集训练模型,用验证集衡量性能并挑选模型。k折交叉验证则将训练集分成k等份,多次交替使用不同部分作为验证集,取平均性能作为模型评价,能减少数据划分带来的随机性影响。

三、深度学习基础-优化神经网络

3.1梯度停止

深度学习的优化过程中,遇到损失不再下降的情况,可能是因为参数收敛到了临界点,即梯度为零的点,包括局部极小值(local minima)、局部极大值(local maxima)和鞍点(saddle point)。判断临界点的类型需要借助海森矩阵(Hessian matrix),通过其特征值来确定:特征值全为正则是局部极小值,全为负则是局部极大值,有正有负则是鞍点。在高维空间中,鞍点比局部极小值更常见,且可以通过负特征值对应的特征向量方向逃离鞍点,找到损失更低的参数。

3.2批量

批量大小对梯度下降的效果影响显著。全批量梯度下降即批量梯度下降法(Batch Gradient Descent,BGD)使用所有数据计算梯度,更新稳定但计算量大;随机梯度下降(Stochastic Gradient Descent,SGD)每次用一笔数据计算梯度,更新有噪声但能更快迭代,且在非凸优化中更容易逃离局部最小值;小批量梯度下降(mini-batch gradient descent)则平衡了两者的优缺点。在有并行计算的情况下,较大批量能提高计算效率,但过大的批量可能导致模型泛化性能下降,因为大批量容易收敛到“峡谷”中的局部最小值,而小批量更可能收敛到“平原”上的更优解。

3.3动量

动量法(momentum method)是改进梯度下降的重要方法,它模拟物理中的惯性,将前一步的更新方向与当前梯度结合,帮助参数跨越鞍点或局部最小值。参数更新公式为


,其中mt是动量,λ是动量因子,η是学习率,gt-1是前一步的梯度。动量与梯度下降反向做矢量相加,在梯度停止时,告诉我们是否还继续训练,以及更新方向。

3.4自适应学习率

当学习速率太大导致无法到达最低点,梯度在两侧来回震荡时,自适应学习率方法能为不同参数定制学习率,解决梯度下降中学习率难以统一设置的问题。①AdaGrad根据梯度平方的积累调整学习率,对稀疏数据友好,但可能导致学习率逐渐减小至零;②RMSProp通过指数移动平均调整梯度累积,解决了AdaGrad学习率递减过快的问题;③Adam结合了动量法和RMSProp的优点,是目前常用的优化器。学习率调度则通过调整学习率随时间的变化(如衰减、预热),进一步提高优化稳定性。

3.5分类

分类(Classificaion)任务中,通常用独热向量表示类别,模型输出通过softmax函数归一化得到概率分布,softmax函数能让输出在0到1之间且和为1。损失函数常用交叉熵而非均方误差,因为交叉熵在分类任务中梯度更大,能加速参数更新,避免均方误差在损失大时梯度小导致的优化困难。

3.6批量归一化

当输入的不同维度的特征数值相差很大时,由于共用同一个模型,导致随着参数改变,loss的差距也会变动很大,误差曲面很曲折,所以模型在训练模型中的梯度下降优化会变得很困难。批量归一化(Batch Normalization,BN)是加速深度学习训练的重要技术,它对每批数据的特征进行归一化(减均值、除标准差)并引入可学习参数和调整分布。训练时用当前批量的统计量,测试时用训练过程中累积的移动平均统计量。批量归一化能改变误差表面,为了让模型的收敛速度更快,对于使用梯度下降优化的模型,每次迭代会找到梯度最大的方向迭代更新模型参数,寻求最优解的特征空间,提高训练稳定性。

### 李宏毅2021机器学习课程笔记资源 对于李宏毅教授的2021年春季机器学习课程,其官方提供了丰富的教学材料,包括视频、幻灯片以及Colab实验文件等内容。这些资源可以通过以下途径获取: #### 1. 官方课程主页 课程主页包含了所有的讲义、作业和相关链接,可以直接访问并下载所需的内容。具体地址为: [https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.html](https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.html)[^1] #### 2. B站搬运视频 为了方便国内用户观看,该课程还被上传至哔哩哔哩平台,可通过以下链接查看完整的课程录像: [https://www.bilibili.com/video/BV1Wv411h7kN](https://www.bilibili.com/video/BV1Wv411h7kN)[^1] #### 3. GitHub笔记整理 有社区成员基于此课程制作了详细的笔记文档,并托管于GitHub仓库中。以下是其中一个较为全面的项目地址: [https://github.com/lihongyi-ml/notes-lihongyi-2021-ml](https://github.com/lihongyi-ml/notes-lihongyi-2021-ml)[^1] 该项目涵盖了每节课的核心知识点总结,部分章节甚至附带了额外的学习指导。 #### 4. 图像分类相关内容摘要 针对图像分类任务,李宏毅教授在其深度学习课程中提到一种基础方法——即将图片数据转换成一维向量形式输入到全连接神经网络中完成训练过程[^2]。尽管这种方法实现起来相对直观简便,但在实际应用中可能面临维度灾难等问题,因此后续还会引入卷积神经网络(CNN)作为更优解决方案之一。 ```python import torch from torchvision import datasets, transforms transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) trainset = datasets.MNIST('PATH_TO_STORE_TRAINSET', download=True, train=True, transform=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True) dataiter = iter(trainloader) images, labels = dataiter.next() print(images.shape) # 输出应类似于torch.Size([64, 1, 28, 28]) # 将二维矩阵展平为一维向量 input_images = images.view(images.shape[0], -1) print(input_images.shape) # 转换后的形状应该是torch.Size([64, 784]) ``` 以上代码片段展示了如何利用PyTorch框架加载MNIST手写数字识别数据集,并对其进行预处理操作以便适配传统全连接层结构的要求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值