我为什么要写下这篇文章?因为在我选课和期末复习时,发现学校机器学习这门数学课网上的相关信息基本没有,信息处于闭塞状态,这对我造成了极大困扰,我相信下一届同学一样会面临相似的问题。如果这篇文章对你有帮助,希望在下一学年机器学习期末考试后,你也可以把课程相关信息和期末真题分享出来,传承计算机的开源共享精神。
这门课以机器学习基础知识为主,由于课程时间有限(两次课程汇报会占用不少时间),讲不了太多东西,不过B站上也有不少机器学习/人工智能的课程,可以作为补充。郭老师前期比较严,后期感觉还算随和,不会恶意挂科,考前表示出题不会为难学生,尽量给分,但整体分数确实也不高,体感分数会集中在70 80之间(样本数不足,不一定准确)。高分建议:1、做好课堂笔记,计算题考上课讲的内容。2、课程小组报告争取第一第二作者,名字排后面的分数低。
本次考试因为疫情改为线上开卷考试,但是只能准备纸质材料,不可以搜题。由于考前老师不提供题库/样题、给的范围模糊,想要做到充足的准备有点困难,有些题目虽然看起来难度不大,但是如果没有复习、整理到相应的知识点,可能会出现完全写不出来的情况。
希望这篇文章能给后人提供一个参考的复习方向以及了解老师的命题风格。但是,线上考试已经成为过去式,这份真题仅供参考,线上考试和线下考试题量、命题风格和难度等可能天差地别,以数学课偏微分为例,往年期末基本为原题,但今年线上考试原题极少,大题量多、难度极大。
需要说明的是,参考答案非标准答案,全部由ChatGPT生成,答案可能有误,仅供参考。
老师给的考试范围,对比真题可以看出,有些考点没有明确给出。
老师当时展示的文档 :什么是机器学习?
机器学习成功的领域?机器学习流程?误差数有什么用?什么叫模型优化过程?机器学习主要分类?
解释下什么是监督学习?监督学习有哪些?无监督学习?介绍两个具体的无监督学习方法 k平均值聚类、概率聚类。半监督学习?具体介绍机器学习例子?机器学习的困难和挑战?
文档中可以找到上述问题的答案,考试范围包括但不限于上述内容。
请做好笔记,老师反感拍照,考前也不会说考哪个。今年计算题考的奇异值分解完全没想到,考前一晚老师提了一下,我当科普类复习了。
不是自己小组选题的内容也要了解。
第一次:
从下述主题中,每个小组任选一个主题,完成一份不少于10页的文档总结,以及,和文档对应的不少于20页的ppt展示。
本次可选主题:支持向量机、朴素贝叶斯、决策树、聚类、主成分分析、非负矩阵分解。
第二次:
任选其中一篇文献,写一下该论文研究了什么问题,有什么新的结果,取得了什么进展,围绕该问题写一个不少于3页的研究现状介绍。
《batch-normalization-preconditioning》批量归一化预处理
《Estimation Shift of Batch Normalization》Batch Normalization 的 Estimation Shift
《Failure of Batch Normalization forTransformers》Transformer 的批量归一化失败
《Controllable Orthogonalization》可控正交化
《Orthogonal Recurrent Neural Networks》正交循环神经网络
《Accelerated Zeroth-Order and First-OrderMomentum Methods》加速零阶和一阶动量方法
《Stochastic Zeroth-Order Optimization》随机零阶优化
《Unitary evolution》单一进化
参考答案非标准答案,全部由ChatGPT生成,答案可能有误,仅供参考。
请你举例描述至少一个和你生活密切相关的机器学习应用,简单介绍其功能和用到的机器学习知识。(10分)
假设你在进行神经网络的训练,采用学习率1r=0.001,运行了随机梯度下降100次,你发现损失函数的值在每次迭代后缓慢下降,并且在接近第100次迭代时仍在缓慢下降,基于此,以下哪个结论可能是合理的?A. 与其使用当前的1r值,不如尝试使用更大的1r值(如1r=0.01)。B. 最好使用较小的1r值(如1r=0.0001),而不是使用当前的1r值。C. 当前的1r=0.001是学习率的有效选择 。(10分)
选C当前的1r=0.001是学习率的有效选择。
因为在进行了100次迭代后,损失函数的值仍在缓慢下降。这表明学习率足够小,模型能够持续学习,而不会出现震荡或停滞。如果学习率太大,则模型可能会在最优解附近震荡,而如果学习率太小,则模型学习速度可能过慢。因此,选择当前的学习率 1r=0.001 是合理的。
主成分分析是常见机器学习数据降维方法。矩阵奇异值分解在主成分分析中是重要的。采用Matlab记号,A=[2 2;-1 1],求该矩阵的奇异值分解。(10分)
手算参考B站视频:奇异值分解|看完会做题
补充:
Matlab求矩阵奇异值分解
A = [2 2;-1 1];
[U,S,V] = svd(A)
Python求矩阵奇异值分解
import numpy as np
A = np.array([[2, 2], [-1, 1]])
U, S, V = np.linalg.svd(A)
在计算机视觉领域,简介一下稠密连接卷积网络(densely connected convolutional networks)具有的优势,100-200字。(10分)
稠密连接卷积网络(Densely Connected Convolutional Network, DenseNet)是一种由稠密块组成的卷积神经网络,其中稠密块由多个卷积层和“稠密连接”组成。稠密连接是指每个卷积层的输出都与后面所有卷积层相连。这种结构使得网络能够学习到更丰富的特征,并且能够有效避免过拟合。
DenseNet在计算机视觉领域具有一些优势,其中一个重要的优势是它能够有效地利用网络中的所有特征。在传统的卷积网络中,随着网络深度的增加,特征会被层层抛弃,而DenseNet通过稠密连接使得网络能够保留并利用所有特征。
另外,DenseNet还具有较好的参数效率,因为它采用了“跨层连接”的结构,使得网络中的参数数量相对较少。这也使得DenseNet能够更容易地在较小的数据集上进行训练。
此外, DenseNet在处理图像分类问题上取得了很高的效果,主要原因是它能够学习到更丰富的特征,这些特征能够帮助网络更好地识别图像中的不同物体。在 ImageNet数据集上,DenseNet被证明能够取得比传统卷积网络更高的准确率。
DenseNet还可以应用于其他计算机视觉任务,如目标检测、语义分割等。在目标检测中,DenseNet可以通过学习到更丰富的特征来更好地识别目标。在语义分割中,DenseNet可以通过学习到更丰富的特征来更好地识别图像中不同区域的类别。
总之,稠密连接卷积网络在计算机视觉领域具有许多优势,其中包括能够有效地利用网络中的所有特征、较好的参数效率、以及在图像分类等任务中取得较高的准确率。
假设自变量为z,Sigmoid函数的表达式是什么?s(z)关于z的导数表达式是什么?请再列举一个激活函数并求出其导数的表达式。(20分)
常见激活函数及其导数表达式如下:
s ( z ) = 1 1 + e − z s ′ ( z ) = s ( z ) ∗ ( 1 − s ( z ) ) s(z) = \frac{1}{1 + e^{-z}}\\s'(z) = s(z) * (1 - s(z)) s(z)=1+e−z1s′(z)=s(z)∗(1−s(z))
f ( z ) = m a x ( 0 , z ) f ′ ( z ) = { 0 ( z ≤ 0 ) 1 ( z > 0 ) f(z) = max(0, z)\\f'(z) = \begin{cases} 0 & (z \leq 0) \\ 1 & (z > 0) \end{cases} f(z)=max(0,z)f′(z)={01(z≤0)(z>0)
f ( z ) = e z − e − z e z + e − z f ′ ( z ) = 1 − f ( z ) 2 f(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}}\\f'(z) = 1 - f(z)^2 f(z)=ez+e−zez−e−zf′(z)=1−f(z)2
f ( z ) = m a x ( α z , z ) f ′ ( z ) = { α ( z ≤ 0 ) 1 ( z > 0 ) f(z) = max(αz, z)\\f'(z) = \begin{cases} α & (z \leq 0) \\ 1 & (z > 0) \end{cases} f(z)=max(αz,z)f′(z)={α1(z≤0)(z>0)
f ( z ) = { z ( z > 0 ) α ∗ ( e z − 1 ) ( z ≤ 0 ) f ′ ( z ) = { 1 ( z > 0 ) f ( z ) + α ( z ≤ 0 ) f(z) = \begin{cases} z & (z > 0) \\ α * (e^z - 1) & (z \leq 0) \end{cases} \\f'(z) = \begin{cases} 1 & (z > 0) \\ f(z) + α & (z \leq 0) \end{cases} f(z)={zα∗(ez−1)(z>0)(z≤0)f′(z)={1f(z)+α(z>0)(z≤0)
f ( z ) = e z i ∑ j = 1 n e z j f ′ ( z ) = f ( z ) ( 1 − f ( z ) ) f(z) = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}}\\f'(z) = f(z)(1-f(z)) f(z)=∑j=1nezjezif′(z)=f(z)(1−f(z))
在上面的表达式中,z表示自变量,α是参数,s’(z)表示s(z)关于z的导数。
使用必要的数学式子,简单描述一下什么是线性回归、逻辑回归?300字以内。(20分)
使用必要的数学式子,介绍一下批准标注化技术(batch normalization),300字内。(10分)
批准标注化(batch normalization)是一种对深度神经网络进行训练的技术,其目的是通过将输入数据的分布转换为标准正态分布来加速收敛并防止过拟合。具体来说,它通过计算每个层的输入的均值和标准差并对其进行规范化来实现这一目的。
对于一个批次的输入 x x x,批准标注化的数学表达式如下:
μ B = 1 m ∑ i = 1 m x i σ B 2 = 1 m ∑ i = 1 m ( x i − μ B ) 2 x i ^ = x i − μ B σ B 2 + ϵ y i = γ x i ^ + β \mu_{B}=\frac{1}{m} \sum_{i=1}^{m} x_{i}\\\sigma_{B}^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(x_{i}-\mu_{B}\right)^{2}\\\hat{x_i}=\frac{x_{i}-\mu_{B}}{\sqrt{\sigma_B^2+\epsilon}}\\y_{i}=\gamma \hat{x_i}+\beta μB=m1∑i=1mxiσB2=m1∑i=1m(xi−μB)2xi^=σB2+ϵxi−μByi=γxi^+β
其中, m m m 是批次大小, μ B \mu_B μB 和 σ B 2 \sigma_B^2 σB2 分别是批次的均值和方差。 ϵ \epsilon ϵ 是一个很小的常数(通常取 1 0 − 5 10^{-5} 10−5),用于防止除以 0 0 0 的情况。 x i ^ \hat{x_i} xi^ 是归一化后的输入,最后的结果 y i y_i yi 是标准化之后的输出, γ \gamma γ 和 β \beta β 是两个可学习的参数。
请简单介绍一下循环神经网络的梯度爆炸和消失问题是什么,及导致该问题的原因。(10分)
4.8.1 梯度爆炸
循环神经网络(RNN)是一种用于处理序列数据的神经网络。它通过在每个时间步将当前输入与上一个隐藏状态相结合来处理序列。但是,由于RNN中存在循环连接,导致梯度在传递过程中可能会膨胀或爆炸。这就是所谓的“梯度爆炸”问题。
当梯度爆炸时,权重矩阵中的值会变得非常大,这会导致模型的预测结果变得不稳定,并且训练过程中可能会发生错误。这是因为在每次迭代中,梯度被乘以网络中所有参数的矩阵,如果任意一个矩阵的权重值较大,则会导致梯度也较大。
RNN在处理序列数据时,会将每个时间步的梯度进行累加,这样梯度会在每次迭代中不断增大。而当梯度增大到一定程度时,就会导致梯度爆炸。
解决方法是使用梯度裁剪,它通过将梯度的值限制在一个较小的范围内来防止梯度爆炸。另外还有RNN的变体LSTM和GRU已经解决了这个问题。
4.8.1 梯度消失
循环神经网络中的梯度消失问题是指当在训练RNN时,梯度值变得非常小,甚至可能为0。这导致了在训练过程中权重的更新非常缓慢甚至停止,从而导致模型无法学习到有用的特征。
这个问题的根本原因是RNN中的权重共享,每一个时间步的隐藏状态都是通过相同的权重矩阵进行计算的,而这个权重矩阵的梯度值在迭代过程中会不断地被乘上,导致梯度值不断缩小。在一定深度后梯度值会变得非常小甚至为0,导致模型无法更新。
这个问题可以通过使用更高效的优化算法,如RMSProp和Adam来解决,或者使用LSTM或GRU等更先进的RNN结构来解决。另外还可以使用梯度裁剪来防止梯度爆炸,梯度剪裁就是将大于阈值的梯度值设置为阈值。