机器学习笔记

计算图是用图论语言表示数学函数的一种方式。计算图被定义为有向图,其中节点对应于数学运算。节点由边连接,图中的一切要么是节点,要么是边。

PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。

零阶张量:标量 一阶张量:向量 Tensors of rank 1

线性回归

矩阵求导

范数 ∥x∥

前馈神经网络具有很强的拟合能力 (通用近似定理)

正则化(Regularization)是一种在机器学习和统计学中广泛使用的技术,主要用于防止过拟合(Overfitting)。过拟合是指模型在训练数据上表现得很好,但在未见过的测试数据上表现较差。过拟合的原因通常是模型过于复杂,以至于它开始学习训练数据中的噪声,而非数据中真实的关系。

正则化通过向模型的损失函数(Loss function)添加一个额外的正则项(Regularization term)来实现。这个正则项通常与模型的权重(Weights)有关,可以帮助限制模型的复杂度。常见的正则化方法有L1正则化和L2正则化。

L1正则化将权重的绝对值之和添加到损失函数中,这会导致模型中的许多权重变为零,从而产生稀疏模型。L2正则化则将权重平方和添加到损失函数中,这会使得模型的权重更加接近于零,但不会产生稀疏解。

通过使用正则化,我们可以在模型复杂度和泛化能力之间找到一个平衡点,从而提高模型在未见过的数据上的性能。

归一化(Normalization)和正则化(Regularization)是两种不同的概念,它们在机器学习和统计学中都有重要的应用。以下是它们之间的主要区别:

  1. 目的:

归一化的目的是调整特征值的范围,以消除不同尺度和量纲对模型的影响。通过将特征值缩放到相同的范围(例如 [0, 1] 或者均值为 0,方差为 1 的正态分布),可以加快模型的收敛速度,提高模型的性能。

正则化的目的是防止模型过拟合,提高模型的泛化能力。通过在损失函数中添加正则项,正则化方法限制了模型权重的大小,从而降低了模型的复杂度。

  1. 方法:

归一化是一种预处理技术,通常在模型训练之前对数据进行处理。常见的归一化方法有最小-最大缩放(Min-Max Scaling)、Z分数标准化(Z-score Normalization)等。

正则化则是模型训练过程中使用的一种方法,通过向损失函数添加正则项来实现。常见的正则化方法有 L1 正则化和 L2 正则化。

总结一下,归一化主要关注数据预处理,使得特征值在相同的尺度上,以便于模型训练;而正则化关注模型的复杂度,通过限制模型权重的大小来防止过拟合。两者都对提高模型性能有积极作用,但它们的关注点和方法有所不同。

在机器学习模型中,尤其是神经网络模型中,权重(Weights)是指模型内部的参数,它们决定了模型如何根据输入特征来进行预测。模型权重的大小通常是指这些参数的数值大小。

以线性回归模型为例,模型的目标是学习一组权重 w 和偏置项 b,使得模型可以尽可能准确地预测输出 y。这个模型可以表示为:

y = w1 * x1 + w2 * x2 + … + wn * xn + b

其中,w1、w2、…、wn 是权重,x1、x2、…、xn 是输入特征,y 是预测输出,b 是偏置项。在这个例子中,权重的大小是指 w1、w2、…、wn 的数值大小。

在训练过程中,模型会调整权重和偏置项的值,以便在训练数据上获得最小的损失。权重的大小会影响模型的复杂度。权重较大可能导致模型过拟合,因为它可能会过度强调某些特征,从而在训练数据上表现得很好,但在新数据上泛化能力较差。而权重较小则会降低模型的复杂度,有助于防止过拟合,但是过小的权重可能导致模型欠拟合,即在训练数据和新数据上都表现不佳。

正则化方法(如 L1 和 L2 正则化)通过向损失函数添加一个与权重大小相关的正则项来限制权重的大小,从而在模型复杂度和泛化能力之间达到一个平衡。

梯度消失和模式崩溃是深度学习中常见的两种训练问题,尤其是在训练生成对抗网络(GAN)时。这两个问题的具体描述如下:

  1. 梯度消失(Gradient Vanishing):梯度消失是指在训练深度神经网络时,网络中较低层的梯度值变得非常小,接近于零。这会导致权重更新变得非常缓慢,从而使网络难以学习到这些层的有用特征。梯度消失通常与激活函数(如 Sigmoid 和 Tanh)和深度网络结构有关。为了解决梯度消失问题,可以采用以下策略:
    • 使用 ReLU(Rectified Linear Unit)或其他抗梯度消失的激活函数。
    • 使用批量归一化(Batch Normalization)来减少梯度消失的影响。
    • 使用残差连接(Residual Connection)以便梯度更容易地通过网络传播。
    • 调整网络架构,减小网络深度。
  2. 模式崩溃(Mode Collapse):模式崩溃是指在训练生成对抗网络(GAN)时,生成器产生的输出变得单一和相似,丧失了多样性。这通常是因为生成器和判别器之间的训练不平衡导致的。当生成器学会生成一种“简单”的输出以欺骗判别器时,它可能会陷入这种局部最优解。为了解决模式崩溃问题,可以采用以下策略:
    • 为损失函数添加多样性惩罚项,以鼓励生成器产生更多样化的输出。
    • 使用特征匹配(Feature Matching)或最小类间距(Minibatch Discrimination)等技术,以便判别器关注更丰富的特征。
    • 调整训练策略,例如使用 WGAN(Wasserstein GAN)或 WGAN-GP(Wasserstein GAN with Gradient Penalty)等改进的 GAN 训练方法。
    • 更平衡地训练生成器和判别器,例如使用 TTUR(Two Time-Scale Update Rule)。

这两个问题可能会影响模型的性能和训练速度,因此在训练深度学习模型和 GAN 时需要特别关注。解决这些问题通常需要调整网络架构、激活函数和训练策略等方面的设置。

为什么卷积网络可以接受不同尺寸的数据输入

卷积神经网络(Convolutional Neural Network,CNN)可以接受不同尺寸的数据输入,这是因为CNN中的卷积层和池化层等操作都是局部操作,不关心输入数据的整体尺寸大小,而是关注数据的局部结构和特征。

具体来说,卷积层通过滑动卷积核在输入数据上进行卷积操作,卷积核的大小是固定的,而输入数据的大小可以是任意的。卷积核在输入数据上滑动时,只关注当前滑动位置的局部区域,并进行卷积运算,因此输入数据的尺寸可以是任意的。

同样,池化层也是通过对局部区域进行池化操作,从而对数据进行下采样,进一步降低数据的尺寸大小。因此,池化层也可以接受不同尺寸的数据输入。

此外,卷积神经网络还可以通过使用全连接层等操作将输入数据的尺寸统一调整到相同的大小,以便于网络的后续处理。因此,卷积神经网络可以处理不同尺寸的输入数据,具有较强的灵活性和适应性。

卷积 计算公式

W:输入特征图的宽,H:输入特征图的高

K:kernel size卷积核宽和高,P:padding(特征图需要填充的0的个数),S:stride步长

width_out:卷积后输出特征图的宽,height_out:卷积后输出特征图的高

普通卷积
计算公式:
width_out = (W – K + 2 * P)/ S + 1(向下取整)

height_out = (H – K + 2 * P) / S + 1(向下取整)

池化
计算公式:
width_out = (W – K)/ S + 1(向下取整)

height_out = (H – K) / S + 1(向下取整)

上采样UpSampling2D
上采样相当于放大多少倍,size=倍数

计算公式:
width_out = W * size

height_out = H * size

转置卷积
转置卷积俗称反卷积,是上采样方式中的一种,转置卷积用来增大特征图的分辨率。

计算公式:
width_out = (W – 1)* S – 2 * P + K

height_out = (H – 1)* S – 2 * P + K

nn.Upsamplenn.ConvTranspose2d都可以实现图像的上采样操作,但它们的具体实现方式有所不同。

nn.Upsample是一种常用的上采样方式,它通过对输入特征图进行插值操作来实现图像的放大。具体来说,nn.Upsample通过双线性插值等方式,对输入特征图中的每个像素进行放大,并生成相应大小的输出特征图。虽然nn.Upsample能够实现图像的上采样,但由于其采用了插值等方式,因此可能会产生一定程度的平滑或失真。

nn.ConvTranspose2d则采用卷积操作来实现图像的上采样。具体来说,nn.ConvTranspose2d会对输入特征图进行补零操作,并对补零后的特征图进行卷积操作。这样可以在保证特征图尺寸不变的同时,通过卷积操作实现图像的放大。与nn.Upsample相比,nn.ConvTranspose2d更加灵活,并且可以通过调整卷积核大小、步长、填充等参数来控制图像的清晰度和质量。

需要注意的是,nn.ConvTranspose2d可能会产生一些棋盘格等不良影响,而nn.Upsample不会产生这些问题。因此,实际应用中应该根据具体情况选择合适的上采样方式。

CycleGAN的原始生成器采用的是转置卷积,会产生棋盘格

消融实验

消融实验(ablation study)是指通过逐步削减模型中的某些模块或组件,来验证这些模块或组件对模型性能的贡献。它通常被用于探究模型中的某些设计选择的有效性和必要性,或者对某些假设进行验证。

具体来说,消融实验通常分为以下几个步骤:

  1. 定义基准模型:定义一个基准模型作为对照组,它是最基本的模型,包含所有的设计组件。基准模型通常具有较高的性能。
  2. 削减模型组件:逐步削减模型中的某些组件,比如某些层、某些特征、某些连接方式等,得到一系列消融模型。
  3. 测试消融模型:对所有的消融模型和基准模型进行测试,比较它们的性能差异。可以采用各种指标进行评估,比如准确率、F1-score等。
  4. 分析结果:根据测试结果,分析不同模型之间的性能差异。可以发现哪些模型组件对模型性能有重要的贡献,哪些模型组件对模型性能没有显著的影响。

通过消融实验,我们可以深入了解模型的性能和设计选择,从而为进一步的模型优化和改进提供指导。

卷积网络参数量计算
参数量 = (输入通道数 × 卷积核尺寸 × 卷积核尺寸 + 1) × 卷积核个数(输出通道数)