写在前面
老师喜欢课上提问,有一些思考性质的问题我就记录下来了,不全,因为问题有点多,我课上也记不住这么多。
Begin
问题一
好像问的是:
Q1.为啥自编码器需要向上图这样设计,也就是我有一个encoder后,为啥后面还需要一个decoder将其解码,并比较这两个结果的误差?
A1. 实际上述是一个自编码器(Autoencoder),其设计核心思想是通过一个“编码-解码”的过程来学习数据的高效表示。
自编码器的主要目标是学习数据的低维表示(即隐空间表示)。为了实现这一目标,需要以下几个步骤:
- 编码器(Encoder):将高维输入数据映射到低维的隐空间表示。这个低维表示是对原始数据的一种压缩形式,它捕捉了数据的关键特征。
- 解码器(Decoder):从隐空间表示中重构出原始输入数据。解码器的作用是验证编码器是否学到了有意义的低维表示。
通过这种方式,自编码器能够学习到一种既能有效压缩数据、又能保留重要信息的表示方法。
解码器的作用不仅是帮助训练,还可以验证编码器是否学到了有意义的特征:
- 如果解码器能够从隐空间表示中准确地重建输入数据,说明编码器成功地提取了数据的关键特征。
- 如果重建误差较大,说明隐空间表示可能丢失了重要的信息,或者模型的容量不足。
通过这种方式,解码器实际上充当了一个“质量检查器”,确保编码器学到的表示是有效的。
三点概括,就是:
- 1.编码器负责压缩数据,提取关键特征。
- 2.解码器负责验证隐空间表示的有效性,并生成监督信号(重建误差)。
- 3.通过最小化重建误差,模型能够学习到数据的低维表示,同时满足特定任务的需求。
Q2. 有的时候在自编码器前面加入了一个noise这有啥用,为啥需要加入呢?
A2.
这种模型被称为去噪自编码器(Denoising Autoencoder, DAE)。
在自编码器中加入噪声的核心目的是让模型更具鲁棒性、防止过拟合,并提升其特征学习能力。这种方法不仅能够帮助模型更好地适应真实场景中的噪声数据,还能增强隐空间的稳定性和表达能力。此外,去噪自编码器还可以直接用于去噪任务,具有广泛的应用价值。因此,加入噪声不仅是对自编码器的一种改进,也是为了让模型更贴近实际需求的一种策略。
问题二
Q2:在机器学习的线性回归中,为什么实际应用中一般不采用显式求解的方法来寻找最优参数,而是倾向于使用优化方法如梯度下降法?请解释原因并简述梯度下降法的基本原理和优势。
A2:纯数学的方法缺陷:对于大规模的数据,效率低下,甚至没法去求
计算复杂度高和内存限制:正规方程法需要进行矩阵逆运算,其计算复杂度为 (O(n^3)),其中 (n) 是特征数量,这对大规模数据集来说成本极高;此外,该方法需要将整个数据集加载到内存中,对于大数据集可能不可行。
因此,在实践中更常使用优化算法如梯度下降法来迭代地寻找最优参数。梯度下降法通过沿损失函数梯度的反方向更新权重以减少损失值。这种方法具有以下优势:
- 适应大规模数据:能够处理非常大的数据集,因为它通常每次仅需处理一个或一小批样本。
- 高效性:特别是在数据维度很高时,比直接求解法更加高效。
- 灵活性:不仅适用于线性回归,还可以应用于其他类型的模型和损失函数,是一种通用的优化算法。
问题三
1. 理解全局最优解为负值
- 全局最优解:在损失函数 (L) 的图像中,全局最优解是指整个定义域内使损失函数达到最小值的点。从图上看,全局最优解位于曲线的最低点。
- 负值:损失函数的值可以是负数,这取决于具体的损失函数定义。例如,在某些情况下,损失函数可能经过平移或缩放后包含负值区域。但这并不影响我们寻找全局最优解的过程。
2. 局部最优解与全局最优解的关系
- 局部最优解:在图中可以看到,除了全局最优解外,还存在一个局部最优解(即右侧的小波谷)。如果梯度下降法陷入这个局部最优解,它将无法继续找到全局最优解。
- 壁垒问题:从局部最优解到全局最优解之间可能存在很高的“壁垒”,即损失函数值显著增大的区域,这使得算法难以直接跨越。
3. 如何找到全局最优解
- 调整学习率 ( η \eta η):适当调整学习率可以帮助算法更好地探索参数空间。过小的学习率可能导致收敛速度慢,而过大的学习率可能导致算法越过最优解甚至发散。可以通过实验选择合适的学习率。 适当的让学习率设置高一点,但是保证不了一定能找到全局最优解
- 随机初始化:多次随机初始化权重 ( w 0 w^0 w0) 并运行梯度下降法,增加找到全局最优解的机会。不同的初始点可能会导致算法收敛到不同的局部最优解,从而提高找到全局最优解的概率。
- 使用更高级的优化算法:如动量梯度下降、AdaGrad、RMSProp、Adam等,这些方法通过引入动量项或自适应学习率来帮助算法更好地逃离局部最优解,更有可能找到全局最优解。
问题四
适当的让学习率设置高一点,但是保证不了一定能找到全局最优解,这句话如何理解?
回答:
学习率过高可能导致错过全局最优解:
- 学习率过高的情况下,参数更新步长可能过大,导致算法在接近最优解时产生震荡甚至发散。
局部最优解和壁垒的存在:
- 局部最优解对梯度下降法具有吸引力,尤其是在损失函数形状复杂(存在多个局部最优解)的情况下。
- 从局部最优解到全局最优解之间可能存在高壁垒或宽壁垒,使得即使学习率较高,也难以跨越这些障碍。
随机性不足与非凸损失函数的挑战:
- 梯度下降本质上是一个确定性算法,对于初始点的选择非常敏感。
- 在面对复杂的非凸损失函数时,由于存在多个局部最优解,高学习率不一定能帮助算法准确地定位到全局最优解。
问题五
是不是全局最优解一定就是最优选择呢?
回答:
不一定,原因如下:
1.数据分布未知:
在实际应用中,我们通常无法得知真实的数据分布。训练模型时使用的数据集只是从整个数据分布中抽取的一部分样本,因此即使找到了全局最优解,该解也可能仅对训练数据表现良好,而对未见过的数据(测试集或现实世界中的数据)表现不佳。
2. 过拟合问题:
当模型过度适应训练数据时会发生过拟合,即模型学到了训练数据中的噪声和细节而非普遍规律。这种情况下的全局最优解可能导致模型在训练集上的误差极低,但泛化到新数据时性能显著下降。
'针形’现象:有时模型会针对特定的训练样本形成非常尖锐、狭窄的决策边界(如图所示),这表明模型对于某些特例进行了过度拟合,导致其泛化能力差。
3. 训练样本采集与特征表示问题:
如果训练样本采集过程存在问题,例如样本不具代表性或者存在偏差,那么基于这些样本找到的任何解,包括全局最优解,都可能不是理想的解决方案。
特征表示不当也会限制模型的能力,使得即便找到了全局最优解,该解也无法准确反映输入特征与输出之间的真正关系。
问题六
一般来说,测试集误差>训练集误差,但是一定会大吗?
不一定,测试集到底是啥样的,看不到,说不定模型就学习到了测试集上面的特征,测试集和训练集的抽取也不一定很均匀
在机器学习中,通常情况下测试集误差会大于训练集误差,但这并不是绝对的。以下是对这一现象的标准解释:
测试集误差与训练集误差的关系
-
过拟合:最常见的原因是模型在训练集上过拟合。当模型过于复杂或训练时间过长时,它可能会学到训练数据中的噪声和细节,而不是普遍适用的模式。这会导致模型在训练集上的表现非常好(误差较小),但在未见过的数据(如测试集)上的表现较差(误差较大)。
-
样本差异:如果训练集和测试集之间存在显著差异,例如它们不是从同一分布中随机抽样得到的,那么即使模型没有过拟合,也可能在测试集上的表现不如在训练集上的表现。
-
数据量:训练集通常比测试集大。更大的数据集意味着更多的信息供模型学习,从而可能导致训练误差较低。然而,这种情况下测试集误差高于训练集误差并不总是必然的,特别是当数据集非常大且分布均匀时。
-
特殊情况:在某些特殊情况下,测试集误差可能小于或等于训练集误差。例如:
- 如果训练集相对较小而测试集相对较大,且两者都是从相同的数据分布中随机抽取的。
- 在使用交叉验证等技术时,每个“训练”集实际上都包含了大量的数据点,使得每次评估的训练误差可能较高,因为这些“训练”集更接近于整个数据集的真实分布。
- 模型正则化效果特别好,有效防止了过拟合,同时保持了一定程度的泛化能力。
问题七
对于图中的损失函数:
要是我不想在前面乘上 1/N ,对我的结果有没有影响?
回答:
1/N可以不要,因为梯度的更新不需要N,N只是表现了一种平均的损失,乘了一个1/N 对求偏导是没有影响的,只是说物理意义不一样而已,单个样本的平均损失or样本总的损失
损失函数是不是必须要完全包含模型里面的所有的参数?
回答:
是的,损失函数必须完全包含模型中的所有参数。这是因为优化的目标是找到使损失最小化的参数值。如果损失函数中缺少某些参数,则无法对这些参数进行梯度计算和更新,从而导致无法通过梯度下降等方法进行优化。
要是loss里面没有这个参数,那我如何进行优化呢?
回答:
如果损失函数中缺少某个参数,那么就无法对该参数进行有效的优化。因为优化过程依赖于损失函数对各个参数的偏导数(梯度),如果某个参数不在损失函数中,其梯度将始终为零,这意味着该参数在优化过程中不会被更新。因此,为了确保模型能够有效训练,损失函数必须包含所有需要优化的参数。
问题八
Batch size选多大合适?
回答:
选择合适的Batch size需要考虑以下因素:
- 效率与计算资源:较大的Batch size可以利用并行计算提高训练速度,但需要更多的内存和计算资源。
- 参数更新频率:较小的Batch size(如1)每次只用一个样本进行参数更新,虽然更新频繁但收敛可能不稳定;较大的Batch size则能提供更稳定的梯度估计,但更新频率降低。
- 过拟合风险:一次学习所有参数容易导致过拟合,因此通常不建议使用非常大的Batch size。
一般来说,Batch size选择2的倍数(如32、64、128等)较为常见,既便于程序实现,又能平衡效率和稳定性。
为什么一次epoch刷一次10000个样本不好,要取其局部?
回答:
一次epoch处理全部样本(如10,000个样本)存在以下问题:
- 效率低:一次性处理大量数据会占用大量内存和计算资源,可能导致训练过程缓慢。
- 参数较大:处理大规模数据集时,模型参数量也会增加,进一步加重计算负担。
- 容易过拟合:一次性学习所有参数容易导致模型过拟合,影响泛化能力。
因此,通常采用分批处理的方式(即使用Batch size),每次只处理一部分样本,既能提高训练效率,又能避免过拟合问题。
问题九
为什么我们想要“深”网络,而不是“胖”网络?
-
定义“深”和“胖”网络:
- “深”网络指的是具有许多隐藏层的神经网络(如图中所示的Residual Net有152层)。
- “胖”网络指的是具有较少层数但每层节点数较多的神经网络。
-
历史发展与性能对比:
- 几个经典神经网络模型及其错误率:
- AlexNet (2012): 16.4%
- VGG (2014): 7.3%
- GoogleNet (2014): 6.7%
- Residual Net (2015): 3.57%
- 可以看到,随着网络深度的增加(从AlexNet到Residual Net),模型的错误率显著降低,说明更深的网络在某些任务上表现更好。
- 几个经典神经网络模型及其错误率:
-
深层网络的优势:
- 特征层次化提取:深层网络可以逐层学习更复杂的特征表示。浅层网络可能只能学习简单的低级特征,而深层网络可以通过多层抽象逐步学习到高级特征。
- 表达能力更强:理论上,深层网络具有更强的函数逼近能力,能够更好地拟合复杂的数据分布。
-
解决深层网络训练难题:
- 尽管深层网络有诸多优势,但早期的深层网络训练面临梯度消失/爆炸等问题,导致难以训练。图中提到的“Special structure”(特殊结构)指的就是为了解决这些问题而设计的技术,例如残差连接(Residual Connection),使得训练非常深的网络成为可能。
-
类比建筑高度:
- 图片右侧展示了上海中心大厦(119层),进一步形象地说明了“深”的概念。就像高楼大厦通过增加楼层来实现更高的建筑目标,神经网络通过增加层数来提升模型性能。
最终答案:
我们想要“深”网络而不是“胖”网络,是因为深层网络能够逐层学习更复杂的特征表示,具有更强的表达能力和更好的泛化性能。虽然早期的深层网络训练存在困难,但通过引入特殊结构(如残差连接),已经成功解决了这些问题,使得深层网络在实际应用中表现出色。但是,从数学上来说,这两者是等价的。
问题十
如何将一个回归问题转化为分类问题?
回答:
将回归问题转化为分类问题的关键步骤如下:
- 输出结构调整:将单节点输出改为多节点输出,每个节点对应一个类别。
- 使用Softmax函数:在输出层应用Softmax函数,将输出值归一化为概率分布(注意,Softmax的作用是归一化,而非直接解决分类)。
- 标签转换:将目标标签表示为One-hot向量形式,与输出节点一一对应。
通过以上方法,可以将回归问题转化为分类问题。
(问题1、如何从一个回归的问题变成一个分类问题:
将单节点输出变成多节点输出,再加上softmax(这是为了解决归一化,不是为了解决分类的),将其标签想象成一个one-hot的向量)
问题十一
前馈型全连接神经网络中的“全连接”是什么含义?
回答:
“全连接”意味着某一层的每个神经元都与前一层的所有神经元相连接,即两层之间的神经元存在两两连接。在全连接网络中,输入层之后的每一层神经元均与前一层的所有神经元相连,确保信息可以全面从前一层传递到下一层。
(问题2、前馈型的全连接的神经网络的全连接是啥含义?
某一层神经元的节点和前面一层的神经元节点之间都有两两的连接。两层之间都会有一个连接。输入层之后的所有层中的神经元均与前面一层的所有神经元有连接,定义为全连接网络。)
2025/4/3 课堂问题:
BP 算法的流程是啥?
回答:
BP算法的流程主要包括以下几个步骤:
- 前向传播:输入数据通过网络向前传播,计算每一层的输出直到得到最终预测值。
- 计算损失:使用损失函数比较预测值与真实标签之间的差异,得到损失值。
- 反向传播误差:从输出层开始,向输入层反向传播误差,计算每个参数(权重和偏置)对损失值的梯度。
- 更新参数:根据计算出的梯度,使用优化算法(如梯度下降)调整网络中的权重和偏置,以减小损失值。
通过重复上述过程,网络能够逐渐学习到使损失最小化的参数设置。
卷积神经网络相对于全连接神经网络的特点?
简单来说就是八个字:局部感知,权值共享。
详细回答:
- 局部连接:CNN中的每个神经元只与输入数据的一个局部区域相连,而不是全连接网络中的全部连接,这有助于捕捉数据的局部特征。
- 权值共享:同一层内的不同神经元使用相同的权重进行计算,减少了参数数量,提高了模型效率,并且能够识别平移不变的特征。
- 池化操作:通过池化层(如最大池化)减少数据的空间大小,降低计算复杂度和过拟合风险,同时保留主要特征。
- 适用于网格结构数据:特别适合处理图像等具有网格结构的数据,能有效提取多尺度、多层次的特征。
这些特点使得CNN在处理图像识别等相关任务时比全连接网络更有效。
CNN 如何让参数规模减小的同时不让特征表达能力不下降呢?
加深,每个层学习一点。 (不是最本质的,不是同一个层面上的东西)
可以使用多个卷积核,使用多个feature。
33或者55,形成一个多通道的排列,不同的感受野提取不同的感知能力。
本质是多卷积核
问题:
CNN如何在减小参数规模的同时保持特征表达能力?
回答:
通过使用多个不同大小的卷积核(如3×3或5×5),形成多通道排列,每个卷积核能够提取不同感受野的特征,从而增强网络的特征表达能力。本质在于利用多卷积核来捕捉多样化的特征,而不是单纯增加网络深度。这样可以在不显著增加参数数量的情况下,提高网络的表现力和效率。
GoogLeNet 就是这样干的,就是 小孩子才做选择,我全都要
通过 Inception 模块同时使用不同大小的卷积核(如1×1、3×3、5×5)提取多尺度特征