【AI基础学习系列】八、机器学习常见名词汇总

机器学习常见名词汇总

机器学习

机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习并提高性能,而无需进行明确的编程。机器学习算法使用统计技术来识别数据中的模式,然后使计算机能够做出预测或决策,无需人类直接指示。
主要特点

  1. 数据驱动:机器学习模型的性能很大程度上依赖于提供给它的数据。
  2. 模式识别:机器学习算法能够识别数据中的模式,并用这些模式来预测新数据的结果。
  3. 自适应:随着时间的推移,机器学习模型可以通过积累更多的数据来改进其性能。
  4. 多种算法:包括监督学习、无监督学习、强化学习等多种算法。

应用领域

  • 语音识别
  • 图像识别
  • 推荐系统
  • 自然语言处理
  • 预测分析

深度学习

深度学习是**机器学习的一个子集**,它基于**人工神经网络**的概念,特别是深层神经网络。深度学习模型通过模仿人脑的工作方式来处理数据,通过多层(或"深度")的神经网络来学习复杂的模式。

主要特点

  1. 多层结构:深度学习模型包含多个隐藏层,这使得它们能够学习数据中的复杂和抽象的表示。
  2. 自动特征提取:深度学习模型能够自动从原始数据中提取特征,减少了手动特征工程的需求。
  3. 大数据需求:深度学习模型通常需要大量的数据来训练,以便它们能够学习到有效的模式。
  4. 计算密集型:深度学习模型需要大量的计算资源,尤其是GPU,来训练复杂的模型。

应用领域

  • 语音识别(如语音助手)
  • 图像识别和分类(如面部识别)
  • 自动驾驶汽车
  • 自然语言理解(如机器翻译)
  • 游戏和模拟(如AlphaGo)

神经网络

  • y:通常是预测的输出或者目标变量。
  • f():是一个函数,通常在神经网络中指的是激活函数(如ReLU、sigmoid、tanh等),它引入非线性,使得模型能够学习复杂的模式。
  • W:是权重矩阵,包含了网络中的参数,这些参数在训练过程中会被优化。
    -x:是输入数据矩阵,每一行代表一个样本,每一列代表一个特征。
  • θ \theta θ:是偏置项,也是一个参数,它允许模型在没有输入或者所有输入都是零的情况下也能产生非零的输出。

区别

  • 复杂性:深度学习模型通常比传统机器学习模型更复杂,需要更多的数据和计算资源 。
  • 特征工程:在传统机器学习中,特征工程是一个重要的步骤,而在深度学习中,模型可以自动学习特征。
  • 应用范围:深度学习在处理大规模数据集和复杂问题时表现更好,而传统机器学习可能更适合数据量较小或问题较为简单的场景。

NPU

神经处理单元(Neural Processing Unit) ,是专门为优化人工智能和神经网络任务性能而设计的**硬件** 。与传统的CPU和GPU相比,NPU在处理AI任务时表现出更高的效率和性能,尤其是在执行深度学习算法时。NPU的设计初衷是快速完成大量的小规模并行计算,这使得它们在处理图片、视频等多媒体数据以及神经网络数据时特别出色

CUDA

**CUDA(Compute Unified Device Architecture,统一计算架构)**是由NVIDIA公司开发的一种并行计算平台和编程模型。它允许软件开发者和软件工程师使用NVIDIA GPU(图形处理单元)进行通用计算任务,而不仅仅是传统的图形渲染。CUDA提供了一套丰富的API(应用程序编程接口),使得开发者能够利用GPU的强大计算能力来加速计算密集型的应用。

Torch

Torch是一个科学计算框架,最初使用Lua语言开发,专门用于机器学习和深度学习算法,特别是神经网络的构建和训练。它以其动态图、自动求导功能、张量操作和丰富的模型库而闻名。Torch的设计注重简洁和灵活性,允许开发者快速构建和测试新的模型和算法

PyTorch

PyTorch是Facebook的人工智能研究团队开发,并在2016年开源的深度学习框架,它是Torch的Python版本。PyTorch继承了Torch的设计理念和一些基本功能,但在实现上有所不同。PyTorch使用Python作为主要开发语言,并提供了更友好和灵活的API接口。PyTorch的一个显著特点是其动态计算图,允许在运行时根据需要定义、更改和调整计算图,这使得PyTorch在处理复杂的模型和任务时非常灵活和方便。与Torch相比,PyTorch提供了更丰富的文档和社区支持,以及与其他流行框架的接口,如TensorFlow和Keras。PyTorch还支持多种计算设备,包括CPU、GPU和TPU,用户可以轻松地将模型迁移到不同的硬件上运行,以获得更高的计算效率。

FT(Fine-Tuning)

  • 通常指的是在预训练模型的基础上进行微调。这个过程涉及使用特定任务的数据来调整模型的权重,以便模型能够更好地执行该任务。
  • FT可以用于各种任务,包括分类、回归、命名实体识别等。
  • FT通常在模型的最后几层进行,而保留预训练的底层权重不变,因为底层权重已经在大量数据上学习到了通用特征。

SFT(Supervised Fine-Tuning)

监督微调是指在源数据集上预训练一个神经网络模型,即源模型。然后创建一个新的神经网络模型,即目标模型。目标模型复制了源模型上除了输出层外的所有模型设计及其参数。这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用。微调时,为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型时,将从头训练到输出层,其余层的参数都基于源模型的参数微调得到。

  1. 预训练阶段:首先在一个大型的源数据集上训练一个神经网络模型,这个模型我们称之为"源模型"。
  2. 模型复制:接着创建一个新的模型,即"目标模型"。这个目标模型复制了源模型除了输出层之外的所有层和参数。
  3. 输出层替换:因为源模型的输出层是针对源数据集的特定任务设计的,所以目标模型不使用源模型的输出层,而是添加一个新的输出层,这个新层的参数是随机初始化的。
  4. 微调训练:最后,目标模型在目标数据集上进行训练。在这个过程中,除了新添加的输出层是从头开始训练的,其他层的参数都是在源模型参数的基础上进行微调。

监督微调的步骤

具体来说,监督式微调包括以下几个步骤:

预训练

首先在一个大规模的数据集上训练一个深度学习模型,例如使用自监督学习或者无监督学习算法进行预训练;

微调

使用目标任务的训练集对预训练模型进行微调。通常,只有预训练模型中的一部分层被微调,例如只微调模型的最后几层或者某些中间层。在微调过程中,通过反向传播算法对模型进行优化,使得模型在目标任务上表现更好;

评估

使用目标任务的测试集对微调后的模型进行评估,得到模型在目标任务上的性能指标。

超参数

超参数是机器学习模型训练前需要设置的参数,它们通常控制着学习过程的某些方面,而不是模型本身的结构或行为。与模型参数不同,模型参数是通过训练数据学习得到的,而超参数则需要人为设定或通过交叉验证等技术进行调整。
学习率(Learning Rate) :控制模型权重更新的幅度。如果学习率太高,可能导致训练过程中的震荡或发散(跳过最低损失函数值);如果太低,则可能导致训练过程缓慢或陷入局部最优。
批量大小(Batch Size) :指定每次迭代中用于计算梯度的样本数量。小批量大小有助于提高模型的泛化能力,但可能增加训练时间。
迭代次数(Epochs) :表示整个训练数据集通过模型的次数。过多的迭代可能导致过拟合,而太少则可能导致模型欠拟合。
优化器(Optimizer) : 选择用于模型训练的优化算法,如梯度下降、随机梯度下降、Adam、RMSprop等。
正则化系数(Regularization Coefficient) :控制模型正则化的强度,以防止过拟合,如L1、L2正则化。
网络结构参数 :如神经网络中的层数、每层的神经元数量等。
激活函数(Activation Function) :选择模型中使用的非线性激活函数,如ReLU、Sigmoid、Tanh等。
dropout率 :在训练过程中随机丢弃一些网络连接的比例,用于防止过拟合。
卷积核大小(Kernel Size) :在卷积神经网络中,卷积核的尺寸会影响特征提取的范围。
池化窗口大小(Pooling Size):池化层中使用的窗口大小,影响特征图的下采样程度。

超参数调优

激活函数(Activation Function)

网络的每一层在输出时,都需要进行一次非线性变换,被称为激活。如果不进行激活,则网络中各层均进行线性变换。

线性变换:

  • 线性变换可以看作是对空间进行拉伸、压缩、反射、旋转等操作,而不改变点的相对位置。
  • 线性变换保持向量间的角度和比例不变,但不一定保持长度。
    激活函数在神经网络中起着重要的作用,主要有以下几点:
    1.完成数据的非线性变换 :激活函数引入非线性元素,解决线性模型的表达、分类能力不足的问题。非线性是现实世界中许多现象的基础,因此这非常有用。
    2.增加网络的能力 :激活函数的存在,使得神经网络的"多层有了实际的意义,使网络更加强大,增加网络的能力,使它可可以学习复杂的事物,复杂的数据,以及表示输入输出之间非线性的复杂的任意函数映射。
    3.执行数据的归一化 :激活函数将输入数据映射到某个范围内,再往下传递,这样做的好处是可以限制数据的扩张,防止数据过大导致的溢出风险。
    4.作为预测概率输出:某些激活函数,如sigmoid函数,其输出范围因为[0,1],适用于作为预测概率输出。

模型参数

权重

  • 来源 :权重是模型中的参数,它们在初始化时通常是随机设置的(例如,随机小数或零初始化)。权重的初始值不影响模型的学习能力,因为它们将在训练过程中被调整。
  • 作用:权重决定了输入特征对模型输出的影响程度。不同的权重值可以增强或减弱某些输入特征对最终预测结果的贡献。在线性回归中,权重是斜率,表示特征与目标变量之间的线性关系强度。

偏置

  • 来源:偏置(也称为偏差项或截距)同样是模型参数,在初始化时通常被设置为零或一个小的随机数。
  • 作用:偏置允许模型的输出在没有输入的情况下不从零开始。它为模型提供了沿目标轴平移的能力,使得模型可以更好地拟合数据集中的模式。

在训练过程中,权重和偏置通过优化算法(如梯度下降)不断更新。这些更新基于损失函数的梯度,目的是最小化预测输出和真实标签之间的差异。

对于线性回归模型,预测是通过将输入特征乘以权重,然后加上偏置来计算的。公式为 y p r e d = w ∗ x + b y_{pred} = w * x + b ypred=w∗x+b,其中 y p r e d y_{pred} ypred是预测值, w w w是权重, x x x是输入特征, b b b是偏置。

损失函数(Loss Function)

机器学习中用来衡量模型预测值与实际观测值之间差异的函数。损失函数的选择对模型的训练和最终性能有重要影响。常见的损失函数:

均方误差(Mean Squared Error, MSE):

  • 计算预测值与真实值差的平方的平均值。

  • 适用于回归问题。

  • 对大误差的惩罚较大,可能导致模型对异常值敏感。
    均方根误差(Root Mean Squared Error, RMSE):

  • MSE的平方根,与MSE相似,但更易于解释,因为它与原始数据在同一量级。

平均绝对误差(Mean Absolute Error, MAE):

  • 计算预测值与真实值差的绝对值的平均值。
  • 对异常值的敏感度较低。

交叉熵损失(Cross-Entropy Loss):

  • 常用于分类问题,特别是二分类和多分类问题。
  • 惩罚不正确的预测,鼓励模型产生概率分布,使正确类别的概率最大化。

对数损失(Log Loss):

  • 另一种说法是交叉熵损失,用于评估概率预测的质量。

Hinge损失(Hinge Loss):

  • 用于支持向量机(SVM)。
  • 目标是最大化正确类别与最近错误类别之间的边界。

指数损失(Exponential Loss):

  • 用于AdaBoost算法。
  • 对大误差的惩罚比平方误差小,但比线性误差大。

平均对数损失(Mean Log Loss):

  • 计算所有样本的对数损失的平均值。
  • 常用于二元分类问题。

三元组损失(Triplet Loss):

  • 用于训练深度学习模型,特别是在人脸识别和相似性度量任务中。
  • 目标是使来自同一类别的样本比来自不同类别的样本更接近。

IoU损失(Intersection over Union Loss):

  • 用于目标检测和分割任务。
  • 衡量预测的边界框与真实边界框之间的重叠程度。

Focal Loss:

  • 用于解决类别不平衡问题,特别是在目标检测和密集分类任务中。
  • 减少易分类样本的权重,增加难分类样本的权重。

Cosine损失(Cosine Loss):

  • 用于度量两个向量的相似性。
  • 常用于聚类和推荐系统。

优化器(优化算法)

在训练过程中,目标是通过优化算法(如梯度下降)调整模型的参数,以最小化损失函数的值。

优化器是实现特定优化算法的类或函数 ,它封装了优化算法的逻辑,并提供了一种方便的方式来更新模型参数。

机器学习中常见的优化器(优化算法):

梯度下降(Gradient Descent, GD):

  • 最基础的优化算法,通过计算损失函数相对于模型参数的梯度,并更新参数以减少误差。

随机梯度下降(Stochastic Gradient Descent, SGD)

  • 对每个训练样本计算梯度并更新参数,适用于大规模数据集。

Adam:

  • Adam优化器维护了每个参数的梯度的一阶矩(均值)和二阶矩(方差)估计,并使用这些矩来更新参数。Adam通常在实践中表现良好,需要的调参较少。

动量方法:

  • 动量方法通过将之前梯度的加权平均值纳入当前梯度计算中,减少了训练过程中的震荡,并加速了梯度下降的收敛。

优化器选择

  • 根据模型的特定需求和问题类型选择不同的优化器。

优化算法

优化算法是数学、计算机科学和工程领域中用于找到函数最小值(或最大值)的一系列方法。在机器学习和深度学习中,优化算法用于调整模型参数,以最小化损失函数,从而提高模型的性能。

  1. 梯度下降(Gradient Descent):
    • 最基础的优化算法,通过计算损失函数相对于模型参数的梯度,并沿着梯度的反方向更新参数。
  2. 随机梯度下降(Stochastic Gradient Descent, SGD):
    • 每次更新只使用一个样本(或一小批样本)来计算梯度,从而加快计算速度并减少内存消耗。
  3. 小批量梯度下降(Mini-batch Gradient Descent):
    • 介于批量梯度下降和随机梯度下降之间,每次更新使用一小批样本来计算梯度。
  4. 动量(Momentum):
    • 在SGD的基础上增加了动量项,帮助加速梯度下降过程,并减少震荡。
  5. AdaGrad:
    • 调整每个参数的学习率,对于稀疏数据集特别有效。
  6. RMSprop:
    • 通过使用梯度的指数加权平均值来调整学习率,适用于非平稳目标和具有不同尺度参数的问题。
  7. Adam(Adaptive Moment Estimation):
    • 结合了动量和RMSprop的思想,自适应调整每个参数的学习率,是目前最流行的优化算法之一。
  8. Nadam(Nesterov-accelerated Gradient with Momentum for Adam):
    • Adam的变种,结合了Nesterov动量。
  9. 牛顿法(Newton's Method):
    • 使用二阶导数(Hessian矩阵)来寻找函数的极值,适用于二阶可微的凸优化问题。

前向传播(Forward Propagation)

是神经网络中的一种过程,它涉及将输入数据传递通过网络的每一层,直到生成最终的输出。这个过程是神经网络的核心,因为它决定了网络如何从输入数据中学习并做出预测。前向传播的步骤一般为:

输入层:

  • 输入数据首先被送入网络的输入层。这些数据可以是原始数据,也可以是经过预处理的数据。

隐藏层:

  • 输入数据在每一层中通过一系列的计算节点(或称为神经元)进行处理。每个节点会接收来自前一层的输入,进行加权求和,然后通过激活函数处理。
  • 加权求和是将输入数据与节点的权重相乘并累加的过程。权重是网络在训练过程中学习得到的参数。
  • 激活函数负责引入非线性,使网络能够学习和模拟复杂的函数。常见的激活函数包括ReLU、sigmoid和tanh。

输出层

  • 经过一系列隐藏层的处理后,数据最终到达输出层。输出层的节点数量通常取决于任务类型(例如,二分类问题通常有一个输出节点,多分类问题有多个输出节点)。
  • 输出层的激活函数取决于特定的应用。例如,分类问题可能使用softmax激活函数,回归问题可能不使用激活函数或使用线性激活函数

损失计算

  • 输出层生成的预测结果与真实标签之间的差异通过损失函数进行计算。损失函数是评估模型性能的指标,常见的损失函数包括均方误差(MSE)和交叉熵损失。

输出

  • 前向传播的最终输出是模型的预测结果,这些结果可以是类别标签、连续值或概率分布。
    前向传播的伪代码可以如下表示:
python 复制代码
def forward_propagation(X, weights, biases, activation_functions):
    for layer in range(number_of_layers):
        Z[layer] = X.dot(weights[layer]) + biases[layer]
        A[layer] = activation_functions[layer](Z[layer])
    return A[-1]  # 最后一层的激活值作为输出

反向传播(Backpropagation)

反向传播是神经网络中用于训练模型的关键算法,它通过计算损失函数相对于网络参数的梯度来更新模型的权重和偏置。反向传播算法结合了梯度下降方法,旨在最小化损失函数,从而提高模型的预测准确性。以下是反向传播的基本步骤:

前向传播:

  • 在反向传播之前,首先进行前向传播,即将输入数据通过网络层正向传递,计算每层的输出,最终得到预测结果。

计算损失:

  • 使用损失函数(如均方误差或交叉熵损失)计算模型预测输出与真实标签之间的差异,得到损失值。

反向传播:

  • 从输出层开始,逆向通过网络层,逐层计算损失函数相对于每个参数(权重和偏置)的偏导数,即梯度。
  • 这个过程涉及到链式法则,即利用每个层的激活函数的导数和层间的连接权重来计算梯度。
  • 在反向传播过程中,首先需要计算各层的误差,然后根据各层的误差计算权重梯度和偏置梯度。

权重更新:

  • 使用计算得到的梯度和选择的优化器(如SGD、Adam等)来更新网络的权重和偏置。
  • 更新规则通常是: ( θ = θ − η ∇ θ J ( θ ) ) ( \theta = \theta - \eta \nabla_{\theta} J(\theta) ) (θ=θ−η∇θJ(θ)),其中 θ \theta θ表示参数, η \eta η是学习率, ∇ θ J ( θ ) \nabla_{\theta} J(\theta) ∇θJ(θ)是损失函数 J J J相对于参数 θ \theta θ的梯度。
  • 具体来说,反向传播算法计算梯度下降算法所需要的梯度。

迭代过程:

  • 重复执行前向传播和反向传播,直到模型在训练数据上的性能不再提升或达到预定的迭代次数。

参数初始化:

  • 在训练开始之前,需要对模型的权重和偏置进行初始化。不恰当的初始化可能导致梯度消失或爆炸问题。

激活函数选择:

  • 激活函数的选择对反向传播过程中梯度的计算有重要影响。某些激活函数(如ReLU)可以缓解梯度消失问题。

梯度消失/爆炸处理:

  • 在训练深度网络时,需要注意梯度消失或爆炸问题。可以通过使用特定的激活函数、权重初始化策略、批量归一化等方法来缓解这些问题。

反向传播算法是深度学习中的核心,它使得神经网络能够自动和有效地学习复杂的非线性关系。通过不断地调整参数,神经网络可以逐渐减少预测误差,提高模型的泛化能力。

梯度下降(Gradient Descent)

是一种优化方法,用来找到一个函数的最小值(或最大值)。简单来说,它是一种**"循着山坡往下走"**的方法,逐步调整参数,直到找到函数的最低点。

梯度消失(Vanishing Gradient)

是深度学习中训练神经网络时可能遇到的一种问题,尤其是在使用传统的激活函数(如sigmoid或tanh)和较深的网络结构时。这个问题会导致网络中的梯度变得非常小,以至于在训练过程中权重的更新几乎停止,从而使网络难以学习。

梯度爆炸(Exploding Gradients)

梯度爆炸是深度学习中训练神经网络时可能遇到的一个问题,特别是在使用较深的网络结构时。这个问题会导致网络中的梯度变得非常大,以至于在数值上溢出或者使得权重更新过大,从而使模型训练变得不稳定。

以下是梯度爆炸的一些关键点:

成因:

  • 在深度神经网络中,梯度是通过反向传播算法逐层计算的。如果网络层数较多,梯度需要通过多层进行链式求导。
  • 如果网络中的激活函数(如ReLU)或权重初始化值较大,那么在反向传播过程中,梯度可能会在每一层被放大,导致梯度值指数级增长。

影响:

  • 梯度爆炸会导致权重更新过大,使得模型在训练过程中迅速发散,无法收敛到最小损失值。
  • 在极端情况下,梯度值可能超出计算机浮点数的表示范围,导致数值溢出错误。

解决策略:

  • 权重初始化:使用合适的权重初始化方法,如He初始化或Glorot初始化,可以减少梯度爆炸的风险。
  • 激活函数:选择如ReLU及其变体(Leaky ReLU、PReLU)等激活函数,因为它们在正区间内导数为1,可以减少梯度爆炸的可能性
  • 梯度裁剪:通过梯度裁剪(Gradient Clipping)限制梯度的最大值,防止梯度更新过大。
  • 批量归一化:使用批量归一化(Batch Normalization)可以减少内部协变量偏移,有助于稳定梯度。
  • 使用残差连接:在网络中使用残差连接(Residual Connections)可以帮助梯度直接流向前面的层,减少梯度爆炸的风险。
  • 调整学习率:适当调整学习率,避免过大的学习率导致梯度更新过大。

与梯度消失的关系:

  • 梯度爆炸与梯度消失是深度学习中的两个相反问题。梯度消失通常发生在梯度在反向传播过程中变得非常小,而梯度爆炸则是梯度变得过大。

实际应用:

  • 在实际应用中,梯度爆炸问题可以通过上述策略得到缓解,从而使得深度神经网络能够稳定训练。
    梯度爆炸问题强调了在设计和训练深度神经网络时,对网络结构、激活函数、权重初始化和优化算法选择的重要性。通过采取适当的措施,可以有效地控制梯度爆炸,提高模型的训练效果和稳定性。

强化学习RLHF

基于人类反馈的强化学习

近端策略优化(Proximal Policy Optimization, PPO):

  • PPO是RLHF框架中常用的强化学习算法之一,它是一种"on-policy"算法,直接学习和更新当前策略,而不是从过去的经验中学习。

偏好学习算法(Direct Preference Learning Algorithms):

  • 包括Slic、DPO(Direct Preference Optimization)、IPO(Implicit Preference Optimization)、KTO(Knowledge Transfer Optimization)、ARM(Adversarial Reward Modeling)和GPO(Greedy Policy Optimization)等。这些算法跳过奖励建模步骤,直接在离线偏好数据集上优化设计的损失目标。

基于人类偏好的强化学习(Reinforcement Learning from Human Preferences):

  • 这种算法不是标记状态-行动对,而是标记整个轨迹,使用最大似然估计(MLE)目标来更新RLHF。

偏好基础的奖励学习(Preference-Based Reward Learning):

  • 在这种算法中,代理在无监督预训练期间被鼓励访问多样化的状态以收集多样化的经验,然后基于老师提供的偏好学习奖励模型,并更新代理以最大化模型下的预期回报。

二次代价函数(Quadratic Penalty Function

是优化问题中的一种方法,用于处理带有等式或不等式约束的优化问题。在数学优化中,代价函数是一种将约束条件整合到目标函数中的技术,使得原本的约束优化问题可以转化为无约束优化问题来求解。

二次代价函数特别适用于处理等式约束,其基本思想是在目标函数中添加一个与约束违反程度成比例的惩罚项。这个惩罚项通常是约束违反程度的平方,因此得名"二次代价函数"。

泛化能力

适当的权重和偏置值有助于模型捕捉数据中的潜在模式,并提高模型的泛化能力,即在未见过的数据上做出准确预测的能力。在某些情况下,权重和偏置的初始化方式可以作为超参数进行调节,以改善模型的训练效果和避免问题如梯度消失或梯度爆炸。

神经元

在人工神经网络(ANN)中,神经元是一个简单的计算单元,模拟生物神经元的功能。每个神经元接收多个输入,对它们进行加权求和,然后通过一个非线性激活函数来生成一个输出。

人工神经网络中的神经元通常具有以下特点:

  • 输入连接:每个神经元接收来自前一层神经元的输出作为输入。
  • 权重:每个输入都有一个权重,这些权重决定了输入信号对神经元输出的影响程度。
  • 偏置:神经元通常有一个偏置项,它类似于在生物学中的阈值,可以调整神经元激活的难易程度。
  • 激活函数:输入经过加权求和后,会通过一个激活函数来生成输出。激活函数可以是非线性的,允许网络学习复杂的模式。
  • 输出:神经元的输出是输入、权重、偏置和激活函数共同作用的结果。
    在多层神经网络中,每个神经元可以属于不同的层,包括输入层、隐藏层和输出层。输入层的神经元直接对应于输入数据的特征,隐藏层的神经元负责提取和组合特征,而输出层的神经元则生成最终的预测结果。

机器学习

监督学习(Supervised Learning)

监督学习是一种机器学习方法,其中模型从标记的训练数据中学习,每个训练样本都包含输入特征和应用的输出标签。模型的目标是学习一个映射规则,使其能够根据新的输入预测输出标签。监督学习通常用于分类和回归任务。

特点:

  • 训练数据包含输入特征和对应的输出标签。
  • 模型通过最小化预测输出和真实标签之间的差异来进行训练。
  • 常用于分类(如图像识别、文本分类)和回归(如房价预测)任务。

常见算法:

  • 决策树
  • 支持向量机(SVM)
  • 神经网络
  • 线性回归
  • 逻辑回归

无监督学习(Unsupervised Learning)

无监督学习是一种机器学习方法,其中模型从未标记的训练数据中学习。模型试图找到数据中的结构和模式,而不是预测特定的输出标签。无监督学习通常用于聚类、关联规则学习和降维任务。

特点:

  • 训练数据不包含输出标签。
  • 模型试图发现数据的内在结构和模式。
  • 常用于探索数据、发现数据的潜在特征和聚类。

常见算法:

  • K-均值聚类
  • 主成分分析(PCA)
  • 自动编码器
  • 层次聚类
  • 异常检测

区别

训练数据:

  • 监督学习使用标记的数据,每个训练样本都有输入和对应的输出标签。
  • 无监督学习使用未标记的数据,模型需要自己发现数据的结构。

目标:

  • 监督学习的目标是预测或决定输出标签。
  • 无监督学习的目标是探索和理解数据的内在结构。

应用场景:

  • 监督学习适用于有明确输出标签的任务,如分类和回归。
  • 无监督学习适用于数据探索和发现隐藏模式的任务,如市场细分和社交网络分析。

挑战:

  • 监督学习可能需要大量的标记数据,这可能是昂贵和耗时的。
  • 无监督学习可能难以解释模型发现的结构,因为它们没有明确的预测目标。

过拟合

拟合:

拟合是指模型对训练数据的适配程度。在训练过程中,模型通过调整其参数来最小化预测值和实际值之间的差异,这个过程称为拟合。拟合的目标是找到一个能够准确描述训练数据的模型。

  • 好的拟合:模型能够捕捉到数据中的关键特征和模式,对训练数据有较高的准确率。
  • 拟合的度量:通常使用一些指标来衡量拟合的好坏,如均方误差(MSE)、平均绝对误差(MAE)、交叉熵误差等。

过拟合(Overfitting):

过拟合是指模型在训练数据上表现得太好,以至于它学习到了数据中的噪声和异常值,而不仅仅是底层的数据分布。这样的模型在训练集上可能表现很好,但在新的、未见过的数据上表现差,即泛化能力差。

  • 过拟合的原因:
    • 模型过于复杂:模型的参数或结构过于复杂,拥有太多的自由度,可以完美地拟合训练数据中的每一个细节,包括噪声。
    • 训练数据不具代表性:如果训练数据不能很好地代表整个数据分布,模型可能学习到训练数据的特定特征,而不是普遍的特征。
    • 训练时间过长:在深度学习中,如果训练时间过长,模型可能对训练数据过度敏感,学习到训练数据中的噪声。
  • 过拟合的后果:
    • 泛化能力差:模型在新的数据上表现不佳,无法很好地预测或分类。
    • 可解释性差:过拟合的模型可能捕捉到了训练数据中的特定特征,这些特征在新数据中可能不存在,使得模型难以解释。
  • 避免过拟合的方法:
    • 简化模型:减少模型的复杂度,如减少层数或参数数量。
    • 增加数据:使用更多的训练数据可以帮助模型学习到更一般化的特征。
    • 正则化:如L1或L2正则化,可以惩罚模型的复杂度,防止模型过于复杂。
    • 交叉验证:使用交叉验证来评估模型的泛化能力。
    • 早停:在训练过程中,当验证集上的性能不再提高时停止训练。
    • Dropout:在训练深度学习模型时,随机丢弃一些神经元,以减少模型对训练数据的依赖。

模型量化

模型量化是一种深度学习模型压缩技术,它通过降低模型参数的精度来减少模型的体积和计算复杂度,同时尽量保持模型性能。量化技术主要包括训练后量化(PTQ)和量化感知训练(QAT)两种方法。在PTQ中,模型在训练完成后进行量化,操作简单但可能面临精度损失;而QAT在训练过程中模拟量化过程,通过调整训练策略来优化量化后的模型精度,通常能更好地保持模型性能 。

量化可以针对权重、激活函数输出或梯度进行,并且有不同的量化位宽可供选择,常见的有16位、8位等。量化的过程涉及到将浮点数映射到整数的过程,其中包括对称量化和非对称量化两种形式。对称量化中,量化空间的值域以零为中心对称,而非对称量化则允许值域不对称分布 。

在实际应用中,模型量化可以显著提升模型的效率,降低部署成本,并保持模型性能。量化后的模型更适合在资源受限的设备上运行,如移动设备和嵌入式设备 。此外,量化技术还可以提高模型的运行速度,因为整数运算通常比浮点运算更快 。

量化技术面临的挑战包括精度损失、硬件兼容性和训练复杂度。为了解决这些问题,研究者们在选择合适的量化方法、调整量化参数以及进行量化感知训练或微调方面做出了努力 。

模型量化导致的精度丢失应该怎么解决?

  1. 选择合适的量化方法:静态量化和动态量化是两种常见的量化方法。静态量化在模型训练后确定量化参数,适用于对精度要求较高的场景;而动态量化在推理过程中动态确定量化参数,适用于需要快速部署的场景 。
  2. 使用混合精度:对于模型中的关键层或参数,可以保留较高的FP32精度,以确保模型的准确性。混合精度量化能够在保持模型精度的同时,进一步减少存储和计算需求 。
  3. 优化量化参数:精细调整量化参数,如量化因子和量化偏移,可以减少量化过程中的精度损失。例如,可以使用KL散度等方法来寻找最优的量化阈值 。
  4. 量化感知训练(Quantization Aware Training, QAT):在训练过程中引入量化操作,使模型能够学习如何适应量化带来的误差。这种方法通常比训练后量化更准确,因为它在训练过程中已经考虑了量化的影响 。
  5. 逐层量化:根据神经网络每一层的特性选择不同的量化策略,可以更好地适应各层不同的数据分布特点,减少全局量化带来的精度损失 。
  6. 利用先进的量化技术:例如,GPTQ(Gradient-based Progressive Tensor Quantization)是一种动态量化方法,它通过在训练过程中逐渐增加量化的严格程度来实现量化,并利用梯度信息来指导量化过程,减少量化误差 。
  7. 修正特定算子计算误差 :针对训练框架与推理后端中行为不一致的算子,进行特定的修正,以减少量化训练精度与实际量化模型精度之间的差异 。
    通过这些策略,可以在量化过程中有效减少精度损失,实现模型的高效部署和推理。

Bitsandbytes

Bitsandbytes是一种深度学习模型量化技术,它通过将模型的权重和激活从传统的32位浮点数转换为更低位宽的表示,例如8位或4位整数,来达到减小模型大小和加速推理的目的。这种方法特别适用于需要在资源受限的设备上运行大型模型的场景,如边缘设备或移动设备 。

Bitsandbytes的量化过程主要包括三个步骤:归一化、量化和反量化。在归一化阶段,模型权重被调整到一个特定的范围内,以便于更有效的量化。量化阶段将权重映射到更低位宽的表示,例如4位。最后,在反量化阶段,虽然权重以低位宽存储,但在计算过程中会进行反量化,以便在推理时获得性能提升 。

使用Bitsandbytes进行量化时,可以通过BitsAndBytesConfig配置类来指定量化的详细参数,如是否使用双量化技术(bnb_4bit_use_double_quant),以及计算过程中使用的精度类型(bnb_4bit_compute_dtype),例如bfloat16 。

此外,Bitsandbytes提供了与其他量化技术相比较的优势,例如与GPTQ和AWQ相比,Bitsandbytes在某些情况下更适合微调和部署,而GPTQ更适合生成任务 。在实际应用中,可以考虑将Bitsandbytes量化与QLoRA技术结合使用,通过在量化模型上添加低秩适配器来进行微调,以实现在保持模型性能的同时减少内存使用和提高计算效率 。

总的来说,Bitsandbytes是一种强大的量化工具,可以帮助开发者在不同的应用场景中更有效地部署和运行大型模型,同时保持模型性能和减少资源消耗。

HQQ

HQQ(Half-Quadratic Quantization)是一种深度学习模型量化技术,它以快速和准确的量化过程著称,并且不需要校准数据集。HQQ支持从8位到1位的多种比特量化,并且具有高度的兼容性,适用于各种模型,包括大型语言模型(LLMs)、视觉模型等 。HQQ的一个显著特点是它的去量化(dequantization)步骤是一个线性操作,这意味着它可以与多种优化的CUDA/Triton内核兼容,从而提高推理速度 。

HQQ的量化过程是快速的,可以在几分钟内完成大型模型的量化。此外,HQQ还与PyTorch的torch.compile特性兼容,这可以进一步提升模型的训练和推理速度 。HQQ提供了灵活的参数设置,包括group_size和量化轴(axis)的选择,使用户能够根据不同的应用场景优化模型,找到最佳的精度与资源消耗比 。

HQQ的一个关键优势是它能够处理低比特数的量化,例如4位或更少,而不会显著降低模型性能。这使得HQQ在资源受限的环境中特别有用,例如在边缘设备上部署模型时。HQQ还支持添加低秩适配器来改善量化质量,即使在极低比特数下也能保持模型性能 。

总的来说,HQQ是一种强大的量化工具,可以帮助开发者在保持模型性能的同时减少模型大小和提高效率,特别是在需要在多种设备上部署模型的场景中 。

大模型训练整体流程

  1. 数据预处理:
  • 在训练开始之前,需要对数据进行预处理,包括清洗、标准化、归一化、编码等,以确保数据质量。
  1. 定义模型结构:
  • 设计神经网络的结构,包括层数、每层的神经元数量、连接方式等。
  1. 选择激活函数:
  • 为神经网络的每个层选择激活函数,如ReLU、sigmoid、tanh等。
  1. 初始化模型参数:
  • 为模型的权重和偏置选择初始化方法,如随机初始化、Xavier初始化等。
  1. 选择损失函数:
  • 根据任务类型选择合适的损失函数,如均方误差(MSE)、交叉熵损失等。
  1. 选择优化算法:
  • 选择用于调整模型参数的优化算法,如梯度下降、Adam、RMSprop等。
  1. 前向传播:
  • 计算模型的预测值,即通过网络结构将输入数据传递至输出层。
  1. 计算损失:
  • 使用损失函数计算模型预测值与真实值之间的差异。
  1. 反向传播:
  • 通过反向传播算法计算损失函数关于模型参数的梯度。
  1. 参数更新:
  • 使用优化算法根据梯度更新模型的权重和偏置。
  1. 梯度消失/爆炸处理:
  • 如果出现梯度消失或爆炸问题,采取相应措施,如使用ReLU激活函数、批量归一化、梯度裁剪等。
  1. 迭代训练:
  • 重复执行前向传播、损失计算、反向传播和参数更新步骤,直到模型性能不再提升或达到预定的迭代次数,即得到最优模型权重W。
  1. 模型评估:
  • 使用验证集或测试集评估模型的性能。
  1. 超参数调优:
  • 调整学习率、批量大小、正则化参数等超参数以优化模型性能。
  1. 模型验证和测试:
  • 在独立的验证集和测试集上验证模型的泛化能力。
  1. 模型部署:
  • 将训练好的模型部署到生产环境中。

在整个训练过程中,这些步骤通常是迭代执行的,每个步骤都依赖于前一个步骤的结果。例如,前向传播的结果用于计算损失,而损失的结果用于反向传播计算梯度,梯度则用于更新参数。优化算法在整个过程中起到核心作用,它决定了如何根据梯度更新参数。激活函数和损失函数则定义了模型的非线性特性和优化目标。

此外,模型训练过程中还可能涉及到正则化技术(如L1、L2正则化)、早停策略(early stopping)、模型保存和加载等其他技术和策略,以提高模型的性能和稳定性。

相关推荐
Flying pigs~~2 小时前
机器学习之KNN算法
算法·机器学习·大模型·knn·k近邻算法·大数据处理
勾股导航2 小时前
蚁群优化算法
人工智能·pytorch·python
SmartBrain2 小时前
FastAPI实战(第三部分):浏览历史的接口开发详解
数据库·人工智能·aigc·fastapi
skywalk81632 小时前
解决opencode报错:Error: Failed to spawn OpenCode Server
人工智能
学编程的闹钟2 小时前
E语言窗口设计实战指南
学习
极客先躯2 小时前
高级java每日一道面试题-2025年7月15日-基础篇[LangChain4j]-如何集成国产大模型(如通义千问、文心一言、智谱 AI)?
java·人工智能·langchain·文心一言·异常处理·密钥管理·参数调优
阿星AI工作室3 小时前
我搭了一个 AI 写作机器人,每天自动写文章发到公众号草稿箱
人工智能·程序员
陈天伟教授3 小时前
人工智能应用- 材料微观:04.微观结构:金属疲劳
人工智能·神经网络·算法·机器学习·推荐算法
未来之窗软件服务3 小时前
AI人工智能(五)天猫精灵部署开发自己服务—东方仙盟练气期
人工智能·仙盟创梦ide·东方仙盟