杂点
算法效率分两种:一种是时间效率,又称时间复杂度,主要衡量算法的运行速度;另一种是空间效率,称空间复杂度,衡量算法所需要的额外空间。
时间复杂度,简单来说就是算法中的基本操作的执行次数;
空间复杂度,是对一个算法运行过程中临时占用储存空间大小的量度。
batch,翻译成汉语为批(一批一批的批)。在神经网络模型训练时,比如有1000个样本,把这些样本分为10批,就是10个batch。每个批(batch)的大小为100,就是batch size=100。
每次模型训练更新权重时,就拿一个batch的样本来更新权重。
Hardmax最大的特点就是只选出其中一个最大的值,即非黑即白。
Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
当 x>0 时,在x轴上一个很小的变化,可以导致y轴上很大的变化。这种函数曲线能够将输出的数值拉开距离。
在信息论中,交叉熵是衡量两个概率分布之间差异的一种指标。用预测分布q来表示真实分布p时所需的平均信息量。如果q与p完全相同,那么交叉熵就等于p的信息熵,此时达到最小;如果q与p差异较大,那么交叉熵就会较大,因为用q来表示p需要更多的信息量。
在二分类任务中,MLP输出层通常只有1个节点,输出值可以表示属于某一类别的概率;在多分类任务中,输出层节点数量等于类别数量;在回归任务中,输出层一般只有一个节点,输出一个连续的数值结果。
多层感知机(Multilayer Perceptron,MLP)的工作原理主要包括信号的前向传播和误差的反向传播(更新权重和偏置)两个过程。
常见的激活函数包括 logistic(Sigmoid)函数、ReLU 函数、Tanh 函数等。
残差连接的核心思想是引入“捷径”或“跳过连接”,它允许输入信号可以直接传递到网络的较深层,而不仅仅依赖于逐层前向传播的计算结果。具体实现上,某个层的输入不仅经过一系列的非线性变换(如卷积、ReLU激活等),其原始输入还会绕过这一系列变换,然后与变换后的输出相加。数学上可以表示为 H(x) = F(x, W) + x,其中 x 是输入,F(x, W)是包含一组可学习参数W的一系列层的组合,H(x)是最终输出,即网络要学习的是残差映射而不是原始的全映射。
残差连接这种结构有助于解决随着网络加深带来的梯度消失问题。因为在反向传播过程中,梯度可以通过捷径直接回传到浅层,无需经过所有层级的非线性激活函数的连续链式法则,从而缓解梯度消失或梯度爆炸的风险,使得优化更加稳定,进而允许构建和训练出更深层次的神经网络。此外,残差连接还有助于特征重用,增强浅层特征在网络较深层级的重要性,从而提升模型的学习能力和泛化能力。
前馈神经网络(Feedforward Neural Network,FNN):最简单和常见的神经网络结构,信息从输入层依次通过隐藏层传递到输出层,在传递过程中没有反馈连接或循环路径。在具有多个层的前馈神经网络中,会按照顺序依次计算每一层的输出。它不保留历史信息,每个神经元的输出只取决于当前时刻的输入值。
卷积神经网络(Convolutional Neural Network,CNN):专门用于处理具有网格结构的数据,如图像。它通过卷积层和池化层提取特征。卷积层中的卷积核在输入图像上滑动,进行局部的加权求和操作,得到特征图。池化层则对特征图进行下采样,减少数据量,同时保留主要特征。
循环神经网络(Recurrent Neural Network,RNN):适用于处理序列数据,如文本、语音等。它在隐藏层中引入了循环连接,使得神经元能够记住过去的信息。其中,长短期记忆网络(Long Short-Term Memory,LSTM)和门控循环单元(Gate Recurrent Unit,GRU)是 RNN 的改进版本,能够更好地处理长序列中的长期依赖关系。
级联神经网络(Cascaded Neural Network):是从一个小网络开始,自动训练和添加隐含单元,最终形成一个多层的结构。级联相关神经网络具有以下优点:学习速度快;自己决定神经元个数和深度;训练集变化之后还能保持原有的结构;不需要后向传播错误信号。
损失函数用于衡量网络的预测输出与真实目标值之间的差异。其选择取决于具体的任务和数据特点。常见的损失函数包括:
- 均方误差(Mean Squared Error,MSE):常用于回归问题
- 交叉熵(Cross Entropy):常用于分类问题
端到端(End-to-End, E2E)训练是一种机器学习方法,指的是直接从原始输入数据到最终输出结果的完整模型训练过程,无需手动设计中间步骤或分阶段处理。其核心思想是让模型自动学习从输入到输出的全部映射关系,省去传统流水线中的人工特征工程或分模块优化的环节。
信息量可以理解成一个事件从不确定到确定的难度有多大,如:f(0.01)到f(1)的信息量比f(0.5)到f(1)的信息量大:国足世界杯夺冠的信息量很大,国乒夺冠的信息量不大。2的10次方分之1到1的信息量是10比特。
熵就是衡量一个系统从不确定到确定的难度有多大。
KL散度就是相对熵
反向传播算法基于梯度下降的思想,首先计算网络预测结果与真实标签之间的误差,通过链式法则从输出层开始反向计算误差对每个权重和偏置的梯度。梯度表示了误差(损失函数)随权重和偏置变化的方向和速率,根据梯度的方向,以一定的学习率对权重和偏置进行更新,使得误差逐渐减小。这个过程不断重复,直到网络达到一定的性能指标或训练次数达到上限。
梯度消失是指在深层神经网络的反向传播过程中,当网络通过链式法则计算梯度以更新权重时,梯度值随着层数的增加而迅速减小,最终趋近于零。这会导致靠近输入层的权重更新变得非常缓慢,甚至几乎不更新,从而阻止网络从输入数据中学习有效的特征表示。
在深度神经网络中,梯度是通过链式法则从输出层逐层反向传播到输入层的。每一层的梯度都是前一层梯度与该层激活函数导数的乘积。
残差连接是一种连接方式,它将输入直接添加到输出上。
假设有一个三层的神经网络,其中每一层的输出为F(x),那么通常的计算方式是:
Y = F(X)
而有了残差连接后,计算方式变为:
Y = F(X) + X
这种直接的连接使得每一层都可以直接学习到输入的变化,而不仅仅是新的特征。这在一定程度上减轻了梯度消失问题,使得更深的网络能够更有效地训练。
梯度爆炸是指在反向传播过程中,梯度值随着层数的增加而迅速增大,最终变得非常大,超出了神经网络的正常处理范围,从而导致模型参数更新不稳定,甚至训练失败。
卷积神经网络Flatten() 操作按通道优先(默认行为)逐行展开,若输入形状为 (batch_size, h, w, c)
,输出形状为 (batch_size, h × w × c)
。
Channel 1: Channel 2: Channel 3:
[[1, 2, 3, 4], [[5, 6, 7, 8], [[9, 10,11,12],
[5, 6, 7, 8], [9,10,11,12], [13,14,15,16],
[9,10,11,12], [13,14,15,16], [17,18,19,20],
[13,14,15,16]] [17,18,19,20]] [21,22,23,24]]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, # Channel 1
5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20, # Channel 2
9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24] # Channel 3
Adam(Adaptive Moment Estimation)优化器是一种基于梯度下降法的优化算法,它结合了动量法(见文章指数移动平均)和自适应学习率的方法,通过计算梯度的一阶矩(平均值)和二阶矩(方差)来调整每个参数的学习率,从而加速训练并提高收敛性。
AdaGrad算法,它根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题。
束搜索(Beam Search) 是一种 常用于序列生成任务
的启发式搜索算法,广泛应用于自然语言处理中的机器翻译、文本生成等任务。它是一种 平衡了搜索效率和搜索质量
的方法,相比于贪心搜索,它能找到更优的解,但计算复杂度比穷举搜索更低。
束搜索是一种宽度受限的最优搜索方法,在生成序列时,它会同时保留多个最优候选,而不是只关注当前最优的选择。具体来说,束搜索会保留固定数量的候选序列,这被称为束宽(beam width or beam size),并在每一步扩展这些候选序列,最终从中选择得分最高的一个作为结果。
sequence transduction models(序列转导模型)是将输入序列转换为输出序列的任何任务。
特征工程是一个将原始数据转化为更能反映问题核心特征的过程,这样做能够显著提高预测模型在不可见数据上的预测准确性。简而言之,特征工程就是寻找那些对目标变量y具有显著影响的特征,我们通常称这些影响目标变量的因素为自变量x,即特征。特征工程的根本目标就在于发掘这些重要的特征。
最小二乘法与极大似然估计法、梯度下降法:
最小二乘法通过使实际数据点与拟合直线的误差平方和最小来确定参数,对 S 分别求关于 β 和 b 的偏导数,并令其等于 0,可解出 β和 b 的最优值。
极大似然估计法通过求概率分布的联合概率函数的最大值点来确定参数,先写出目标分布的似然函数,取对数后求导使其等于0,可解出参数的最优解。
梯度下降法通过沿着误差函数的负梯度方向逐步调整参数,以达到最小化误差(损失函数最小)的目的。对于参数β,β = β - α * ∂E/∂w(其中 α 是学习率,E 是误差函数:均方误差),对于参数b同理。
惩罚回归模型都是在线性回归模型的基础上,通过在损失函数上添加一定的惩罚项来实现的。要求添加惩罚项后的损失函数达到最小,其目的是,能够避免过度复杂化和过拟合的问题。
岭回归(Ridge回归)
岭回归是一种用于处理线性回归中多重共线性问题的方法。当自变量之间存在高度相关性时,普通最小二乘法估计的系数可能会变得不稳定且方差较大。岭回归通过在损失函数中加入 L2 正则项(系数的平方和)来对系数进行约束
-
data.iloc[:, 1:]
-
选取所有行(
:
),以及第 2列到最后一列(1:
),作为特征矩阵X
。 -
逻辑:
iloc
是基于位置的索引,1:
表示从索引 1(Python 从 0 开始计数)开始到末尾的所有列。
-
-
data.iloc[:, 0]
-
选取所有行(
:
),以及第 1列(索引 0),作为目标变量y
。 -
逻辑:通常目标变量(如标签、因变量)存储在 DataFrame 的第一列。
-
Lasso 回归与岭回归类似,也是为了解决多重共线性和过拟合问题。但 Lasso 回归使用的是 L1 正则项(系数的绝对值之和)。L1 正则项具有稀疏性诱导的作用,它可以使一些不重要的系数直接变为 0,从而实现特征选择。这对于处理高维数据和筛选关键特征非常有帮助。Lasso 回归可以在减少特征数量的同时构建一个简洁有效的模型。
弹性网络回归是岭回归和 Lasso 回归的结合。它同时使用 L1 和 L2 正则项。这种混合的方式结合了两者的优点。一方面,L2 正则项可以保持模型的稳定性和泛化能力;另一方面,L1 正则项可以实现特征选择和稀疏性。弹性网络回归可以根据数据的特点和需求,通过调整 L1 比例来灵活地控制模型的性质。它在处理具有复杂关系和混合特征的问题时表现出色,能够更好地平衡模型的复杂度和预测能力。
目前常用的分类算法主要有:朴素贝叶斯分类算法、支持向量机算法、 KNN最近邻算法、神经网络算法以及决策树等等。
k 近邻法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其 k 个最近邻的训练实例的类别,进行预测。K邻近算法没有显式的训练过程。它在训练阶段仅仅是把样本保存起来,训练时间为零,待收到测试样本后再进行处理。
如下图所示,圆点代表第一类,三角形代表第二类,现在要判断“未知点?”属于哪一类,假设K=4,那么观察距离“未知点?”最近的4个点,可以发现有三个三角形,一个圆点,因此可以判断“未知点?”属于第二类(三角形)。
使用K邻近模型对未知点分类,需要找K个距离它(未知点)最近的点作出判断,因此K近邻模型的三个基本要素:距离度量、K值的选择和分类规则。
闵可夫斯基距离(Minkowski Distance),也叫Lp 距离,是一种度量两个点之间的距离的方法。它是由第p次方的各维坐标的差的绝对值的和的第p次根得到的。Lp 距离是一种 Lp 范数,其中 p 为正实数。当 p = 1 时,称为曼哈顿距离;当 p = 2 时,称为欧几里得距离。
当p=1时,称为曼哈顿距离
当p=2时,称为欧氏距离
当p=无穷时,公式变为
如果选择较小的k值,意味着整体模型变得复杂,容易发生过拟合,输入与训练集较近的实例才会对预测结果起作用。如果选择较大的k 值,可以减少学习的估计误差,意味着整体的模型变得简单,预测效果变差。在应用中,通常采用交叉验证法来选取最优的k 值。
分类规则:误分类率最小化。
混淆矩阵:用于展示分类模型预测结果和实际标签之间的对应关系。可以帮助我们计算出各种评估指标,如准确率、召回率、精确率、F1值等。
TP :真正例,将正类预测为正类的样本数。
TN:真负例,将负类预测为负类的样本数。
FP:假正例,将负类预测为正类的样本数。
FN:假负例,将正类预测为负类的样本数。
random_state 相当于随机数种子 random.seed() 。random_state 与 random seed 作用是相同的。设置了随机种子的值后,那么当别人重新运行你的代码的时候就能得到完全一样的结果,复现和你一样的过程。
决策树是一种基本的分类方法。其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。预测时,对新的输入数据,利用决策树模型对实例进行分类。决策树模型是由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。决策树模型通常包括3 个步骤:划分选择、决策树的生成和决策树的修剪。
决策树模型通常包括3 个步骤:划分选择、决策树的生成和决策树的修剪。决策树常用的划分选择准则有:信息增益、信息增益比和基尼指数;决策树模型生成的常用算法有 ID3、C4.5与CART;决策树剪枝的策略一般有:预剪枝和后剪枝。
经验熵和经验条件熵都是信息论中的概念,用于度量随机变量的不确定性或信息量。
- 经验熵用来度量随机变量的不确定性或混乱程度;
- 经验条件熵用于度量在已知另一个随机变量的条件下,随机变量的不确定性或混乱程度。
ID3算法决策树只能针对分类变量,因此需要把年龄和月薪转换成分类变量。
CART决策树是一种用于分类和回归的决策树算法。它的基本思想是通过对特征的选择和划分,将数据集逐步分割成不同的子集,以构建决策树结构。在构建过程中,关键在于选择最优的特征和划分点,使得划分后的子集纯度更高。对于分类问题,通常使用基尼指数(Gini Index)来衡量子集的不纯度;对于回归问题,则使用平方误差等指标。CART 决策树生成的是二叉树,即每个节点最多有两个分支。
决策树使用的不纯度衡量指标有很多,其中最常用的有三种:分类误差(Classification Error),信息熵(Entropy)和基尼系数(Gini)。
C4.5 是在 ID3 算法基础上改进而来的一种决策树算法。它同样用于分类问题。其主要改进在于能够处理连续型特征,不是简单地基于信息增益选择特征,而是采用信息增益率。这能避免倾向于选择取值较多的特征。C4.5 还具备对生成的决策树进行剪枝的能力,以防止过拟合,提高模型的泛化能力。
C5.0 算法决策树,与CART决策树不同,它允许使用多叉树,而不局限于二叉树。在效率和内存使用方面有所改进,能够处理更大规模的数据。
信息熵(是度量样本集合纯度最常用的一种指标):
- 从信息的完整性描述:当系统的有序状态一致时,数据越集中的地方熵值越小,数据越分散的地方熵值越大。
- 从信息的有序性描述:当数据量一致时,系统越有序,熵值越低;系统越混乱或者分散,熵值越高。
信息增益:以某特征划分数据集前后的熵的差值。
预剪枝是在决策树生成过程中进行的剪枝操作。后剪枝则是先从训练集中生成一棵完整的决策树,然后自底向上地对决策树进行考察和修剪。
交叉验证(Cross Validation)是一种评估模型泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。交叉验证不但可以解决数据集中数据量不够大的问题,也可以解决模型参数调优的问题。
数据标准化是一种将原始数据从其初始度量范畴转换为规范化度量范畴的处理过程,它通常作为机器学习模型训练前的重要预备步骤。其核心目的在于实现数据的零均值和单位标准差状态,或者将数据限定在特定区间内,如[0,1]或[-1,1],以确保数据的一致性和可比性,从而提高机器学习模型的训练效果和预测准确性。
常用的标准化方法:
- Z分数标准化
- 原理:通过减去均值并除以标准差,将数据转换为均值为 0,标准差为 1 的分布。
- MinMax标准化(归一化)
- 原理:将数据映射到[0, 1]区间内,通过减去最小值并除以极差来实现。
- 对数化
- 原理:对数据取对数,通常用于处理具有指数增长或幂律分布的数据,使其分布更接近正态。
支持向量机(Support Vector Machine,SVM)分类器是一种有监督的学习算法,用于解决分类问题。其基本思想是在特征空间中寻找一个能够将不同类别数据分开的最优超平面。这个超平面具有最大化分类间隔的特点,即离超平面最近的点到超平面的距离最大。
超平面是n维欧氏空间中余维度等于一的线性子空间,也就是必须是(n-1)维度。这是平面中的直线、空间中的平面之推广(n大于3才被称为“超”平面)
硬间隔支持向量机要求所有的训练样本都能够被超平面正确分类,并且间隔最大化。软间隔支持向量机允许一些样本点违反分类规则,即在一定程度上容忍错误分类。
那些位于间隔边界上或者违反间隔但程度较小的样本点被称为支持向量,因为超平面的位置和方向完全由这些点决定,若移除所有非支持向量的样本,超平面不变;但移除任意支持向量,超平面会移动。
当数据在原始特征空间中不是线性可分的,可以通过核函数将数据映射到高维特征空间,使其在高维空间中变得线性可分。常见的核函数有线性核、多项式核、高斯核等。
Cover定理指出:非线性映射将数据投射到更高维空间时,样本线性可分的概率随维度增加而提高。
聚类分析是一种无监督学习,它的基本思想是根据样本之间的相似度或距离,将数据集划分为若干互不相交的子集,每个子集中的元素与本子集内的其他元素具有更高的相似度。用这种方法划分出的子集就是聚类,每个聚类都代表了一个潜在的类别。
分类和聚类的区别在于: 分类是先确定类别再划分数据:聚类是先划分数据再确定类别。
多项式回归是一种回归分析技术,它假设自变量和因变量之间的关系可以用多项式函数来近似表示。即通过在回归方程中引入自变量的高次项,来捕捉数据中的非线性模式。
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。
如上图所示:蓝点是真实数据,黄点是每个真实数据的估计值,红线的长短即代表真实与估计距离,目标就是找到一条直线(模型)使得所有红线累和最短,推广到多维空间,就是找到一个超平面,而这个超平面是有数学公式解的。
x.reshape(-1, 1)
:将输入数据 x
转换为二维数组(矩阵),确保其形状为 (n_samples, n_features)
。
reshape(-1, 1)
将一维数组转换为 (n, 1)
的二维矩阵,明确表示有 n
个样本,每个样本有 1
个特征。
K 折交叉验证将数据集随机平均分成 K 份,每次选择其中一份作为测试集,其余 K - 1 份作为训练集,重复进行 K 次实验,得到 K 次实验的评估结果,最终取这 K 个结果的平均值作为模型性能的估计。
模型参数和超参数。模型参数是通过训练数据学习得到的,例如线性回归中的回归系数;而超参数则是在训练之前就需要人为设定的,它们控制着模型的结构、训练过程和性能。超参数是模型外部的配置变量,它们不能通过训练过程直接学习得到。常见的超参数包括学习率、正则化参数、神经网络的层数和神经元数量、决策树的深度等。
常用的超参数调优方法:
- 网格搜索(Grid Search):它将超参数的可能取值范围划分为离散的网格点,然后对每个可能的超参数组合进行评估,选择性能最优的组合;
- 随机搜索(Random Search):随机搜索法的基本原理是在给定的参数空间中随机采样,以寻找可能的最优参数组合;
- 启发式算法:能够处理复杂的超参数空间,具有较强的全局搜索能力。
grid_search.best_estimator_
返回通过网格搜索(或随机搜索)找到的最优模型,该模型已用最佳超参数重新训练过,可直接用于预测或进一步分析。
SVR(支持向量机回归模型)与SVM的区别:
- SVM 希望找到一个最优超平面,使得两侧支持向量到该超平面的距离最大化,将不同类别的数据尽可能清晰地分开,解决的是分类问题。
- SVR 希望找到一个最优超平面(回归函数),使得尽可能多的数据点位于一个给定宽度的“管道”内,未落在“管道”内的数据点到超平面的距离之和尽量小,解决回归问题。
决策树回归的核心思想是通过对输入特征的一系列二元划分,将数据集逐步分割成不同的子集,每个子集内的目标变量具有相似的取值。在决策树的构建过程中,关键是选择合适的特征和划分点,以最大化某种评估指标。
在回归树中,两个重要的超参数是最大深度(max_depth)和最小样本分裂数(min_samples_split)。使用网格搜索回归树的超参数:树的最大深度和节点包含的最少样本数量。
'''返回一个数组,表示每个特征对预测的贡献度(重要性),数值越大越重要'''
importances = regressor.feature_importances_
'''对重要性数组进行升序排序,返回的是排序后的索引值,将升序结果反转,变为降序排列'''
indices = np.argsort(importances)[::-1]
主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术(无监督学习方法),利用正交变换把线性相关变量表示的数据转换为少数几个由线性无关变量表示的数据,线性无关的变量,即主成分。主成分的数量通常小于原始变量的个数。
例:有一个包含学生多门课程成绩的数据集,如数学、物理、化学、语文、英语、历史等成绩。这些成绩变量之间可能存在一定的相关性。通过 PCA 进行降维,可以将这些相关的成绩变量转换为2个不相关的主成分。其中,第一个主成分可能反映了学生的综合学习能力,第二个主成分可能反映了不同学科之间的偏科情况等。这样的转换不仅降低了数据的维度,还能更清晰地揭示数据中的潜在模式和结构。
方差,刻画了一组数据(一个特征)的离散程度(波动程度)。
协方差,又称共变异数,被用来描述两个随机变量之间线性相关程度,或多组(列)数据之间的相关程度。
均值归零化,又称中心化,将一组(列)数据中的每个值减去该组的均值。
- 均值归零化后,每列的均值都变成了0
- 均值归零化后,每列方差不变,这表明并不影响数据原有的分布
- 均值归零化后,协方差不变,这表明并不影响原有的线性相关程度
相关矩阵,也叫相关系数矩阵,其是由矩阵各列间的相关系数构成的。也就是说,相关矩阵第i行第j列的元素是原矩阵第i列和第j列的相关系数。
对 R 进行特征分解,得到:
-
特征值(λi):表示主成分方向的方差大小,按从大到小排序(λ1≥λ2≥⋯≥λp)。
-
特征向量(ui):每个特征值对应的方向向量,表示原始变量如何线性组合成主成分。
对于一个方阵A(例如协方差矩阵 S 或相关矩阵 和一个标量 λ,使得:Au=λu,则:
-
λ 称为矩阵 A 的 特征值(eigenvalue)。
-
u 称为对应 λ 的 特征向量(eigenvector)。
奇异值分解(SVD)是PCA的一种高效计算方法,尤其适用于高维数据或样本量远大于特征数(n≫p)的场景。其核心优势在于:
- 避免显式计算协方差矩阵:直接对中心化后的数据矩阵 X′X′ 进行分解,计算复杂度更低。
- 数值稳定性更高:SVD的算法(如Householder变换)比协方差矩阵的特征分解更稳定。
- 通用性:适用于任何实数矩阵,无需矩阵是方阵或对称。
主成分分析与因子分析的区别
- 主成分分析的主要目的是通过线性变换,将原始数据投影到新的坐标系中,使得新坐标系的坐标轴(即主成分)能够最大程度地解释数据的方差,从而实现数据的降维。
- 因子分析旨在寻找潜在的公共因子,这些因子能够解释观测变量之间的相关性。需要注意的是,主成分法可以看作是寻找潜在公共因子的一种方法。
集成学习是一种通过结合多个学习器来提高学习性能的方法。它不是依赖于单个强大的学习模型,而是通过整合多个相对较弱但多样化的学习器,以达到比任何单个学习器更优的泛化能力和预测准确性。集成学习的方法主要包括:Bagging、Boosting等。
Adaboost 是一种自适应提升(Boosting)算法,其核心在于串行集成。串行集成意味着多个弱学习器依次进行训练,前一个学习器的结果会影响后一个学习器的训练。
- 基本思想是通过迭代地训练一系列弱学习器,并根据它们的表现给予不同的权重,然后将这些弱学习器组合成一个强学习器。
- 想象有一堆不同大小、形状和颜色的水果。一开始,平等地看待每一个水果(即赋予每个样本相同的初始权重)。之后,训练一个分类器,它可能会分错一些水果。接下来,根据这个分类器的错误情况,增加那些被分错水果的“重要性”(即权重),而降低分类正确水果的权重。然后,再用新的权重训练一个新的分类器。如此反复,每次都根据前一个分类器的表现调整权重,让后续的分类器更关注那些难分的水果。
- 每一轮调整样本权重,使分类器更关注之前分错的样本。
- 最终模型是所有弱分类器的加权组合。
样本权重影响弱分类器对特定样本的关注,分类器权重决定弱分类器贡献度。
关联算法可以帮助超市管理者了解顾客的购买行为模式。关联算法的核心目标是从大量数据中找出频繁出现的项集,并基于这些频繁项集确定变量之间的关联规则。其原理基于支持度和置信度两个重要指标。
- 支持度表示一个项集在数据集中出现的频繁程度,{X, Y}同时出现的概率;
- 支持度 = 包含特定项集的数量 / 总数
- 置信度则衡量了在一个项集出现的情况下,另一个项集出现的概率(以一定概率落在同一个置信区间),购买X的人,同时购买Y的概率。
- 置信度 = 包含 A 和B 的数量 / 包含 A 的数量
通过遍历数据集,统计每个项集的出现次数,找出满足最小支持度的数据集作为频繁项集。这一步通常使用 Apriori 关联算法。
GBM(梯度提升机)是一种基于基于梯度下降和加法模型的集成学习方法,其基本思想是通过迭代地训练一系列弱学习器,并将它们组合成一个强学习器。基于梯度提升方法构建的回归树模型就是GBRT模型。
- 统计每个单项(1 项集)的出现次数,确定其是否满足最小支持度要求。如果满足,则保留为频繁 1 项集。
- 基于频繁 1 - 项集,通过组合生成候选项集(2 - 项集)。然后再次扫描数据集,计算每个候选项集的支持度,保留满足最小支持度的项集作为频繁 2 - 项集。
- 重复上述过程,通过对频繁 (k - 1)- 项集进行组合生成候选项集 k - 项集,再计算支持度以确定频繁 k - 项集,直到无法再生成更大的频繁项集为止。
与Adaboost的联系:
相似:两者都是串行集成的方法,即依次训练弱学习器,并将它们组合起来形成一个强学习器。
区别:
- 在GBM中,弱学习器的权重是通过学习率来控制的,每次迭代增加的幅度相对较小。而在 AdaBoost 中,弱学习器的权重是根据其分类错误率计算得出的,错误率越低,权重越大;
- GBM 由于其不断累加的特性,可能会导致模型变得较为复杂,容易出现过拟合。AdaBoost 相对来说模型复杂度较易控制;
- GBM通常使用决策树作为弱学习器,尤其是深度较浅的决策树,以避免过拟合。而Adaboost可以使用多种弱学习器。
GradientBoostingClassifier(),分类任务
GradientBoostingRegressor(),回归任务
机器学习中的学习曲线是一种用于评估模型性能随训练样本数量变化的工具。其含义在于通过绘制不同训练样本规模下模型的性能指标变化曲线,来反映模型的学习能力和泛化能力。学习曲线可以为确定合适的训练样本规模提供参考,以在计算资源和模型性能之间取得平衡。
y_scaler = StandardScaler() # 创建一个标准化器对象
y_scaled = y_scaler.fit_transform(y.reshape(-1, 1)).flatten() # 标准化并展平
reshape(-1, 1)
将 y
转换为 (n_samples, 1)
的形状,例如:
-
如果
y = [1, 2, 3]
,reshape(-1, 1)
会变成[[1], [2], [3]]
。
fit_transform()
计算 y
的均值(μμ)和标准差(σσ),然后应用标准化转换,例如:
-
如果
y = [1, 2, 3]
,标准化后变成[-1.2247, 0, 1.2247]
(均值为 2,标准差为 0.8165)。
fit_transform
返回的是二维数组((n_samples, 1)
),flatten()
将其转换回一维数组((n_samples,)
),例如:
-
[[-1.2247], [0], [1.2247]]
→[-1.2247, 0, 1.2247]
。
在回归任务中,如果目标变量 y
的尺度较大,可能会导致模型训练困难(如梯度下降收敛慢)。标准化 y
可以加速模型训练,特别是对于神经网络、SVM 等对数据尺度敏感的算法。注意:如果使用 y_scaled
训练模型,预测时需要用 y_scaler.inverse_transform()
转换回原始值。
在机器学习和深度学习中,梯度下降是一种常用的优化算法,用于寻找函数的最小值。它的基本思想是通过不断地沿着函数的负梯度方向更新参数,使得函数值逐渐减小,最终达到最小值。
梯度下降算法有多种变体,包括批量梯度下降(Batch Gradient Descent,BGD)、随机梯度下降(Stochastic Gradient Descent,SGD)和小批量梯度下降(Mini-Batch Gradient Descent,MBGD)等。
批量梯度下降,在每次迭代中使用整个训练数据集来计算目标函数的梯度,然后根据这个梯度来更新模型参数。
随机梯度下降在每次迭代中只使用一个训练样本(随机选择)来计算目标函数的梯度,然后更新模型参数。
小批量梯度下降在每次迭代中使用一小批训练样本(称为小批量)来计算目标函数的梯度,然后更新模型参数。
k-邻近回归(k-Nearest Neighbors Regression,简称 kNN 回归)是一种监督学习方法。其基本原理是:对于给定的新样本,在训练数据集中找到距离该新样本最近的 k 个样本,然后根据这 k 个邻近样本的目标值来预测新样本的目标值。具体的预测方式通常是对这 k 个邻近样本的目标值进行平均(或使用其他加权平均的方法),得到新样本的预测值。
与普通回归的区别
- 普通回归方法是通过构建一个明确的数学模型,例如线性方程或多项式方程,来拟合数据并进行预测。
- 而 k-邻近回归则是一种非参数方法,不依赖于对数据分布的先验假设和特定的函数形式。它更侧重于通过局部样本的相似性来进行预测。
集成学习(LightGBM)在每一轮迭代中,模型会计算训练数据的预测值与真实值之间的差异,即残差。然后,以残差的负梯度作为新的学习目标,训练一个新的弱学习器(通常是决策树)来拟合这些残差。最后,将新训练的弱学习器以一定的学习率添加到模型中,逐步减小模型的整体误差,提升模型的预测能力。通过不断地迭代这个过程,多个弱学习器组合成一个强大的集成模型。
层次聚类是一种基于簇间相似度在不同层次分析数据以形成树形聚类结构的方法。它主要分为凝聚式和分裂式两种方式。
与K-均值聚类的区别
- 层次聚类:(1)没有明确的聚类中心概念,主要关注簇间的距离关系;(2)聚类数量不是预先确定的;
- 均值聚类:(1)以聚类中心为核心,将数据点分配到距离其最近的聚类中心所在的簇;(2)需要预先指定聚类的数量。如果选择不当,可能会导致聚类结果不理想。
判别分析是一种多元统计分析方法,用于根据已知分类的样本数据构建判别函数,对未知分类的样本进行分类。其基本思想是在已知的分类情况下,找出一个(或多个)判别准则,使得不同类别的样本尽可能地区分开来。
LASSO(Least Absolute Shrinkage and Selection Operator)回归,即最小绝对收缩和选择算子回归,是一种线性回归的正则化方法,主要用于变量选择和参数估计。
在传统的线性回归中,目标是最小化残差平方和。然而,当数据中存在多个相关变量时,普通最小二乘法可能会导致过拟合,即模型在训练数据上表现良好,但在新数据上的泛化能力较差。LASSO 回归通过在损失函数中加入一个惩罚项来解决这个问题。这个惩罚项是参数向量的L1范数,即参数绝对值之和。其作用是将一些不重要的变量的系数收缩至零,从而实现变量选择。
DBSCAN即基于密度的空间聚类算法,是一种非常重要的聚类算法。它能够将具有足够高密度的区域划分为簇,并可在有噪声的数据中发现任意形状的聚类。与K-均值聚类不同,DBSCAN 不要求预先指定聚类的数量,并且对数据的分布形状没有严格的假设,能够适应复杂的数据结构。
Ridge Regression(岭回归),即 Tikhonov 正则化回归,是一种线性回归的正则化方法,主要用于变量选择和参数估计。岭回归通过在损失函数中加入一个惩罚项来解决普通最小二乘法(OLS)估计的参数可能会产生较大的方差导致模型过拟合的问题。这个惩罚项是参数向量的L2范数,即参数平方和的平方根。其作用是对所有参数进行一定程度的收缩,避免参数过大而导致过拟合。
在机器学习中,特征选择的目的是从原始特征集合中挑选出最具代表性和信息量的特征子集,使得在该子集上构建的机器学习模型能够达到最佳的预测或分类效果。特征选择方法通常可以分为三类:过滤式方法、包裹式方法和嵌入式方法。
- 过滤式方法:独立于模型,在模型训练之前基于数据的内在特性对特征进行评估和选择,计算速度快,但可能无法充分考虑特征与特定模型的相互作用。
- 包裹式方法:以特定的机器学习模型为基础,将特征选择过程视为一个搜索问题,通过在特征子集空间中进行搜索,以模型在验证集上的性能作为评价标准来选择最优特征子集,这种方法通常能获得较好的效果,但计算成本较高。
- 嵌入式方法:将特征选择与模型训练过程相结合,在模型训练的过程中自动进行特征选择,例如Lasso回归通过在损失函数中添加L1正则化项,使得模型在训练过程中自动将一些不重要的特征的系数收缩为零,从而实现特征选择的目的。
基于树的特征选择方法是机器学习中一种重要且广泛应用的特征选择技术,它主要基于决策树或树集成模型来评估和选择特征。
在决策树的构建过程中,通过计算每个特征的信息增益,并选择信息增益最大的特征作为分裂特征,决策树能够自动地对特征进行排序和筛选,在树的生长过程中,那些对分类或回归没有太大贡献的特征往往不会被选择为分裂特征,从而实现了特征选择的效果。
树集成模型如随机森林(Random Forest)和梯度提升树(Gradient Boosting Tree)等,也被广泛用于特征选择。在随机森林中,包含了多个决策树,通过对训练数据进行有放回的抽样构建多个子数据集,然后分别训练决策树,最后综合多个决策树的结果进行预测。在这个过程中,可以通过计算每个特征在所有决策树中的平均重要性得分来评估特征的重要性。
T-SNE(t-Distributed Stochastic Neighbor Embedding)即 t 分布随机邻域嵌入,是一种用于高维数据可视化的降维算法。t-SNE 的目标是最小化高维空间和低维空间中数据点相似度分布之间的差异,使用 KL 散度来衡量这种差异,通过最小化目标函数,使得高维空间中的数据点在低维空间中的分布能够尽可能地保持原有的相似性结构。
SHAP(SHapley Additive exPlanations)可以深入了解模型做出决策的依据。具体建模过程中,SHAP考虑了所有可能的特征组合情况。对于一个给定的样本,计算在包含某个特征时模型预测值与不包含该特征时预测值的差异,这一差异体现了该特征的影响。然后,对所有可能的特征组合进行这种计算,并取平均值,最终得到的结果就是该特征在这个样本上的SHAP值。它具有出色的模型无关性。
可视化方式:特征重要性图(展示了每个特征的平均SHAP值大小)、依赖性图(聚焦于某个特定特征,展示该特征与SHAP值之间的关系)
Bagging,即自助聚集,是一种集成学习方法。它属于并行集成方式,通过从原始数据集有放回地随机抽取样本,形成多个不同的子数据集,然后基于每个子数据集训练一个基学习器,最后将这些基学习器的结果综合起来,以获得比单个学习器更优的性能。对于分类问题,通常采用简单投票法来综合各个基学习器的结果;对于回归问题,则采用平均法。
随机森林(Random Forest)是一种集成学习算法,它基于决策树构建。随机森林的构建过程如下:
- 从原始数据集中有放回地随机抽取多个样本,形成多个子数据集。
- 对于每个子数据集,随机选择部分特征。
- 使用选定的特征和子数据集构建决策树。
- 重复上述步骤,构建多棵决策树。
对于分类问题,最终的预测结果通过多数投票决定;对于回归问题,最终的预测结果是所有决策树预测值的平均值。
随机森林是 Bagging 的一种推广。随机森林不仅对样本进行随机抽样,还对特征进行随机选择。在构建随机森林中的每棵决策树时,首先从原始数据集通过 Bagging 方法抽取样本形成子数据集。然后,在每个节点分裂时,不是从所有特征中选择最优特征,而是随机选择一个特征子集,再从这个子集中选择最优特征进行分裂。
数据编码方式:
- 标签编码:一种相对基础且简易的对分类变量进行编码的方法。其主要操作方式是为每一个类别赋予一个唯一的整数标签;
- 独热编码:一种在数据预处理环节广泛应用的技术手段,主要用于应对分类变量的处理难题。独热编码的核心操作逻辑是,针对每一个分类变量的类别,构建一个全零向量,然后将对应类别的位置元素赋值为 1 ,其余位置保持为 0;
- 语义编码:专注于挖掘数据中的语义内涵,致力于将数据转化为能够精准反映其内在含义以及语义关联的编码形式。语义编码通常借助先进的词向量模型来达成,比如经典的 Word2Vec 和 GloVe 模型,能够将每个单词映射到一个低维的连续向量空间。在这个向量空间里,语义相近的单词所对应的向量在空间位置上也较为接近。
词云图是文本可视化的关键手段。在生成词云图的过程中,系统会对文本内所有词汇的出现频次进行精确统计。那些在文本中频繁现身的词汇,基于其较高的出现频率,在词云图里被赋予大字体以及鲜明色彩,以此凸显其在文本中的显著地位。而出现频次较低的词汇,则相应地以小字体、暗淡色调呈现。通过这种差异化的视觉表达,词云图将文本数据原本抽象的分布状况,转化为直观、可感知的图形化展示,让观察者能够迅速洞悉文本中词汇的主次关系以及整体的分布态势,极大提升了文本信息的可理解性与分析效率。
文本预处理是自然语言处理(NLP)任务中的关键步骤,其目的是将原始文本数据转换为适合机器学习或深度学习模型处理的格式。由于原始文本通常包含噪声、不规范的字符和多样的表达方式,这些因素会影响模型的性能,因此需要通过一系列处理步骤来提高文本数据的质量和一致性。
常见的文本预处理步骤包括:
- 去除特殊字符:原始文本中可能包含各种特殊符号、标点、HTML 标签等,这些符号通常对文本的语义理解没有实质性帮助,去除它们可以减少噪声。(使用正则表达式实现)
- 分词:将文本拆分成单个的词语或标记(tokens),便于后续的处理和分析。(中文分词用jieba库)
- 转换为小写:统一文本的大小写,避免因大小写不同而导致相同词语被视为不同的实体。
- 去除停用词:停用词是指在文本中频繁出现但对语义理解贡献不大的词语,如 “的”、“是”、“在” 等,去除它们可以减少数据的维度。(用stopwordsiso库获取中文停用词列表)
- 词干提取或词形还原:将词语还原到其基本形式,减少词语的变体,提高数据的一致性。“running”、“runs” 的词干都是 “run”,“better” 的词形还原结果是 “good”。(nltk库的PorterStemmer进行词干提取、nltk库的WordNetLemmatizer进行词形还原)
在自然语言处理领域,情感分析是一项极具实用价值的技术,它能够帮助我们理解文本背后蕴含的情感倾向,广泛应用于舆情监测、市场调研、客户反馈分析等多个场景。SnowNLP 类是 snownlp 库中用于处理中文文本情感分析的核心类。从对象的 sentiments 属性获取情感得分,该得分范围在 0 到 1 之间,越接近 1 表示积极情感越强,越接近 0 表示消极情感越强。
不平衡数据集是指数据集中不同类别的样本数量存在显著差异的数据集。例如,在一个二分类问题中,正类样本可能有 950 个,而负类样本只有 50 个,这种数量上的巨大差距就导致了数据集的不平衡。而机器学习模型通常基于最大化整体准确率等目标进行训练,在不平衡数据下,模型容易过度拟合多数类,对少数类的识别能力差。
产生原因
- 数据收集的局限性:在某些领域,特定类别的数据本身就难以获取或出现频率低。如在医疗领域,患有罕见疾病的患者数量相对健康人群少很多,导致疾病诊断数据集中患病样本少。
- 数据生成的自然偏态:一些自然现象或业务场景天然就会产生不平衡数据。如在信用卡交易数据中,正常交易数量远远多于欺诈交易数量。
解决方法
(一)数据层面
1.过采样
(1)随机过采样:随机复制少数类样本,增加其数量以平衡数据集。优点是简单直接,能快速增加少数类样本数量;缺点是可能导致模型过拟合,因为复制的样本完全相同,没有引入新的信息。
(2)SMOTE 算法:通过在少数类样本的特征空间中插值来生成新的样本。具体是对每个少数类样本,找到其最近邻的少数类样本,然后在它们之间随机插值生成新样本。它克服了随机过采样的缺点,能生成更具多样性的样本,但可能会生成一些边界上的模糊样本,导致模型泛化能力下降。
2.欠采样
(1)随机欠采样:随机删除多数类样本,使数据集达到平衡。优点是计算简单,能减少数据量,降低计算成本;缺点是会丢失多数类中的一些信息,可能导致模型对多数类的学习不充分。
(2)Tomek Links:通过删除多数类中与少数类样本距离很近的样本对来实现欠采样。它能有效去除多数类中的噪声和边界样本,提高模型性能,但可能会删除一些对分类有帮助的多数类样本。
(二)数据合成
基于生成对抗网络(GAN):由生成器和判别器组成,生成器学习生成与少数类相似的新样本,判别器区分真实样本和生成样本,通过对抗训练来生成高质量的少数类样本,可用于图像、文本等多种数据类型的合成,但训练难度较大,容易出现模式崩溃等问题。
(三)算法层面
代价敏感学习:为不同类别的错误分类赋予不同的代价。在不平衡数据中,将少数类误分类的代价设置得更高,使模型在训练时更关注少数类的分类正确性。可以通过修改损失函数或算法内部的参数来实现,如在支持向量机中,调整不同类别的惩罚参数。
(四)集成学习
1.Bagging:从原始不平衡数据集中有放回地采样多个子集,分别训练基模型,然后综合基模型的结果进行预测。如随机森林算法,它能降低模型的方差,对不平衡数据集有一定的鲁棒性,不同的子集可能会包含不同比例的少数类样本,有助于模型学习到更多少数类的特征。
2.Boosting:在训练过程中,根据样本的分类情况调整样本的权重,使模型更关注难分类的样本,尤其是少数类样本。如 AdaBoost 算法,通过不断调整样本权重,让后续的基模型更注重对少数类的学习。
(五)评估层面(精确率、召回率、F1 值、ROC、AUC介绍)
1.精确率、召回率和 F1 值:精确率是预测为正类的样本中真正正类的比例,召回率是实际正类样本中被正确预测为正类的比例,F1 值是精确率和召回率的调和平均值,能综合反映模型对少数类的识别能力。
2.ROC 曲线和 AUC 值:ROC 曲线以假正率为横轴,真正正率为纵轴,AUC 值是 ROC 曲线下的面积,取值范围在 0 到 1 之间,越接近 1 表示模型性能越好,能全面评估模型在不同阈值下的分类性能,不受数据集不平衡的影响。
GAN架构:GAN(Generative Adversarial Networks,生成对抗网络)架构由两个主要组件构成:生成器(Generator)和判别器(Discriminator)。这两个组件在训练过程中相互对抗,共同提升,最终目标是使生成器能够生成与真实数据难以区分的新数据。
- 对抗训练:生成器和判别器进行交替训练。在每次迭代中,先训练判别器以提高其区分能力,然后训练生成器以提高其生成能力。
- 优化目标:生成器的优化目标是最大化判别器将其生成的数据误判为真实数据的概率;判别器的优化目标是最小化其误判的概率。
- 收敛性:在理想情况下,随着训练的进行,生成器生成的数据分布将逐渐接近真实数据分布,判别器将无法准确区分两者。
文本特征提取通过特定的算法和技术,将原始文本转换为一组能够代表文本本质特征的数值向量或其他形式的特征表示,从而为后续的文本分类、聚类、信息检索、机器翻译等任务提供数据基础。
相关方法:
词袋模型(BoW)
- 文本的语义可以通过其中所包含的词语来体现,而忽略词语之间的顺序关系。在具体实现过程中,首先需要构建一个涵盖所有待处理文本中出现的不重复词语的词汇表。词汇表的构建是词袋模型的基础步骤,它决定了后续特征向量的维度。对于每一篇单独的文本,算法会统计词汇表中每个词语在该文本中出现的频次,这些频次信息按照词汇表的顺序依次排列,就构成了该文本对应的特征向量。
- 由于完全忽略了词语顺序,它无法捕捉文本中的语义信息,导致文本的语义结构被破坏。此外,随着词汇表规模的增大,生成的特征向量往往具有很高的维度,且其中大部分元素为零,呈现出稀疏性,这不仅增加了计算成本,还可能影响模型的性能。
TF - IDF
- 综合考虑词语在文本中的出现频率以及在整个文档集合中的稀有程度,来对词语的重要性进行度量。TF(词频)部分反映了某个词语在单篇文本中的出现频繁程度,其计算公式通常为该词语在文本中出现的次数除以文本的总词数。一般来说,某个词语在一篇文本中出现的频率越高,说明它对该文本的主题表达可能越重要。
- IDF(逆文档频率)则从整个文档集合的角度来衡量词语的重要性。其计算方式是通过统计包含该词语的文档数在总文档数中的比例的倒数,并取对数得到。如果一个词语在大多数文档中都出现,那么它的 IDF 值较低,表明该词语是一个常见词,对区分不同文本的作用有限;相反,稀有词语的 IDF 值较高,说明其在文档集合中具有较强的区分性。
- TF - IDF 值为 TF 和 IDF 的乘积,通过这种方式,TF - IDF 能够突出文本中的关键特征。在文本分类等任务中,相比于单纯使用词频,TF - IDF 能够更好地区分不同文本的特征,提高模型的分类准确率。
- TF - IDF 同样忽略了词语顺序和语义信息,无法捕捉文本中词语之间的语义关联。此外,TF - IDF 对文本长度较为敏感,长文本往往会因为包含更多的词语而在特征向量中具有更高的 TF 值,这可能导致长文本在特征表示上占据主导地位,影响模型对不同长度文本的公平性。
n - gram 模型
- n - gram 模型旨在弥补词袋模型和 TF - IDF 方法中忽略词语顺序信息的缺陷。该模型将文本按照连续的 n 个词语进行划分,生成 n - gram 特征。例如,对于文本 “我喜欢苹果”,当 n = 2 时,生成的 2 - gram 为 {"我 喜欢", "喜欢 苹果"} 。通过这种方式,n - gram 模型能够捕捉到词语之间的相邻关系,从而在一定程度上保留文本的局部顺序信息。
- 然而,n - gram 模型也面临着一些挑战。随着 n 值的增大,特征空间会急剧膨胀。例如,当 n = 3 时,可能生成的三元组数量远多于 n = 2 时的二元组数量,这会导致计算复杂度大幅增加。同时,数据稀疏问题也会随着 n 值的增大而更加严重,因为较长的 n - gram 组合在文本中出现的概率相对较低,可能导致很多 n - gram 特征在训练数据中出现的次数极少甚至为零,从而影响模型的训练效果和泛化能力。
词嵌入(Word Embedding)
- 词嵌入将文本中的词语映射到一个低维的连续向量空间中,使得语义相近的词语在向量空间中的距离也相近。常见的词嵌入方法包括 Word2Vec 和 GloVe 等。Word2Vec 通过构建神经网络模型,利用大规模的文本数据来学习词语的分布式表示。
线性回归是回归分析中最基础且应用广泛的模型。它假设因变量(目标变量)和自变量(特征变量)之间存在线性关系,这种关系可以用一个线性方程来表示。线性回归的目标是找到一组最优的回归系数,使得预测值与真实值之间的误差最小。通常使用最小二乘法来实现这一目标,即通过最小化SSE(误差平方和)来确定回归系数。
岭回归是线性回归的一种改进形式,主要用于处理多重共线性问题。当自变量之间存在高度相关性(多重共线性)时,普通线性回归的系数估计会变得不稳定,方差很大,导致模型的泛化能力下降。岭回归通过在损失函数中添加 L2 正则化项来解决这个问题。L2 正则化项会对回归系数进行约束,使得系数的平方和受到惩罚。
Lasso 回归与岭回归类似,也是为了解决多重共线性问题并进行特征选择。不同之处在于,Lasso 回归使用的是 L1 正则化项,L1 正则化的特性使得部分回归系数能够被压缩为 0,从而实现自动特征选择。这意味着 Lasso 回归可以在训练过程中识别出对目标变量不重要的特征,并将其系数设为 0,简化模型的同时减少过拟合的风险。
多项式回归是对线性回归的一种拓展,用于处理自变量与因变量之间的非线性关系。它通过在模型中添加自变量的多项式项,将线性回归模型扩展为能够拟合曲线的形式。通过增加多项式的次数,可以拟合复杂的曲线。但需要注意的是,多项式次数过高可能导致过拟合。
决策树回归是一种基于树结构的非参数回归模型。它通过对特征空间进行递归划分,将数据分为不同的区域,每个区域对应一个预测值。决策树的构建过程是一个贪心算法,每次选择能够最大程度降低预测误差的特征和分割点进行分裂。决策树可以处理非线性关系,并且不需要对数据进行特征缩放。但决策树容易过拟合,尤其是在数据量较小或树的深度过大时。
随机森林回归是基于决策树的集成学习模型。它通过构建多个决策树,并对这些决策树的预测结果进行平均来得到最终的预测值。随机森林在构建每棵决策树时,会从原始数据集中有放回地随机抽取样本(bootstrap 抽样),同时在选择分裂特征时,也会随机选择一部分特征进行考虑。这种随机化的操作使得每棵决策树之间具有一定的独立性,从而减少了过拟合的风险,提高了模型的稳定性和泛化能力。
梯度提升回归也是一种基于决策树的集成学习方法。它通过迭代地训练弱学习器(通常是决策树),每一轮训练都尝试拟合前一轮模型的残差,即预测值与真实值之间的误差。通过不断累加这些弱学习器的预测结果,逐步提高模型的性能。梯度提升回归利用了梯度下降的思想,通过最小化损失函数的梯度来确定下一个弱学习器的参数。与随机森林不同,梯度提升回归是顺序构建弱学习器,每一个新的弱学习器都依赖于前面已训练好的模型。
支持向量回归是支持向量机在回归问题上的应用。与支持向量机分类类似,SVR 的目标是找到一个最优的超平面,使得预测值与真实值之间的误差在一定的容忍范围内(不敏感损失函数),并且尽可能使超平面到数据点的间隔最大。SVR 可以处理线性和非线性回归问题,对于非线性问题,通过核函数将数据映射到高维空间,在高维空间中寻找最优超平面。常见的核函数有线性核、多项式核、径向基核(RBF)等。
K-近邻回归(KNN)是一种基于实例的学习算法,属于非参数模型。对于一个待预测的数据点,KNN 回归会在训练数据集中找到与其距离最近的 K 个邻居,然后根据这 K 个邻居的目标值来预测该数据点的目标值。通常使用欧氏距离或曼哈顿距离来衡量数据点之间的距离。预测值的计算方式有多种,常见的是简单平均法,即取 K 个邻居目标值的平均值作为预测值;也可以使用加权平均法,距离越近的邻居权重越大。
十大回归模型对比
回归模型 | 优点 | 缺点 | 使用场景 |
线性回归 | 简单直观,易于理解和解释;计算效率高,能快速训练和预测;在数据呈线性关系时表现良好 | 对数据的线性假设要求严格,若数据存在非线性关系,模型拟合效果差;对异常值敏感,异常值可能严重影响回归系数;无法处理自变量间的多重共线性 | 数据呈现明显线性关系,如预测房屋价格与面积、身高与体重关系;自变量间无多重共线性,且数据无明显非线性趋势 |
岭回归 | 有效处理多重共线性问题,通过 L2 正则化提高模型稳定性和泛化能力 | 引入正则化参数 α,需调参;相比普通线性回归,解释性稍弱 | 分析多个经济指标对股票价格影响,指标间存在共线性;处理存在多重共线性的金融数据、生物数据建模 |
Lasso 回归 | 可进行特征选择,自动将不重要特征系数压缩为 0,简化模型;处理多重共线性问题,减少过拟合风险 | 对超参数 α 敏感,调参难度较大;不适用于特征间相关性极高的情况 | 基因数据分析中筛选与疾病相关的关键基因特征;文本分类中特征选择,降低维度 |
弹性网络回归 | 兼具 L1 和 L2 正则化优点,既能特征选择又能处理多重共线性;在复杂数据场景表现出色 | 需同时调整 α 和 l1_ratio 两个超参数,调参复杂 | 图像识别特征回归任务,处理丰富且复杂相关的图像特征;综合考虑特征选择和共线性处理的场景 |
多项式回归 | 可拟合自变量与因变量间的非线性关系,拓展了线性回归应用范围 | 多项式次数难以确定,次数过高易过拟合;计算复杂度随多项式次数增加而上升 | 描述产品销售量随时间的非线性变化;拟合物理实验中变量间的曲线关系 |
决策树回归 | 能处理非线性关系,无需数据特征缩放;可生成易于理解的决策规则,解释性强 | 容易过拟合,尤其在数据量小或树深度过大时;对数据微小变化敏感,稳定性差 | 预测客户购买行为与客户属性关系;分析学生成绩与学习习惯、家庭环境等因素关系 |
随机森林回归 | 基于决策树集成,有效降低过拟合风险,提高模型稳定性和泛化能力;能处理高维数据和复杂数据集,无需特征工程;可并行训练,计算效率高 | 模型复杂度高,训练时间长;对内存要求较高;难以解释单个预测结果 | 预测天气数据与农作物产量关系,处理大量气象和环境因素数据;电商平台商品销量预测,处理复杂用户行为和商品特征数据 |
梯度提升回归 | 在许多实际应用和竞赛中表现优异,能有效提升模型性能;可灵活处理不同类型数据,对复杂非线性关系建模能力强 | 顺序训练模型,计算成本高;对超参数敏感,调参复杂;容易过拟合 | 金融风险评估,根据客户数据和市场信息预测风险水平;医疗诊断预测,基于多种医疗指标预测疾病可能性 |
支持向量回归 | 在小样本、非线性和高维数据处理上表现出色;通过核函数可灵活处理不同类型数据 | 对核函数和参数选择敏感,调参困难;计算复杂度高,训练时间长;模型解释性较差 | 生物医学领域,分析少量样本疾病指标与病情严重程度关系;小样本图像识别任务,处理图像特征与分类关系 |
K 近邻回归 | 简单直观,易于实现;无需模型训练,预测时计算开销小;能捕捉数据局部模式 | 对 K 值选择敏感,不同 K 值可能导致结果差异大;计算量大,尤其在样本数量多和维度高时;对数据分布不均匀敏感 | 推荐系统中,根据用户历史行为为目标用户推荐商品;基于用户地理位置信息进行周边服务推荐 |
注意力机制
当人类观察事物时,往往会选择性地关注较为重要的信息,这种现象称为注意力机制。
注意力和自注意力机制的区别
注意力机制:发生在目标元素(输出)与源元素(输入)之间。
自注意力机制:不同于输入与输出之间的注意力机制,自注意力机制是在输入序列内部元素之间,或者输出序列内部元素之间的相互作用。
区别在于,注意力机制的查询和键来自不同的来源。例如,在中译英模型中,查询是中文单词的特征,而键是英文单词的特征。而自注意力机制的查询和键则来自同一组元素,即查询和键都是中文特征,彼此之间进行注意力计算。这可以理解为,同一句话中的词元或同一张图像中的不同patch之间的相互作用。因此,自注意力机制(Self-Attention)也被称为内部注意力机制(Intra-Attention)。
多头注意力机制类似于CNN卷积神经网络的多通道。
自回归(auto-regressive):过去时刻的输出会作为当前时刻的输入。
编码器:多头注意力层 + MLP前馈神经网络 + 残差连接 + normalization(归一化),N = 6个相同的编码器组成(两个子层:多头注意力层 + MLP,每个子层用一个残差连接)。
解码器:编码器的输出(走编码器相同的结构) + mask多头注意力机制,重复N = 6块。注意力机制每次能看到完整的输入,但是在解码器训练过程中预测第t时刻的输出时,需要遮蔽当前输入后面的输入。李沐35:00讲QKV注意力机制。
残差连接的输入和输出是一样大小的否则需要投影,文章统一每层输出维度均为512维。
LayerNorm:对于二维矩阵,各列为特征,各行为样本,对每个样本(行)进行归一化(使得均值为0,方差为1),以样本为单位,对于非等长时序数据来说更方便处理。
BatchNorm:对于二维矩阵,各列为特征,各行为样本,对每个特征(列)进行归一化(使得均值为0,方差为1)
得到标准正态分布:随机变量X减去均值除以方差(归一化)
归一化公式推导过程如下:
对于序列中的每个值,进行平移和缩放,使得归一化后的序列
满足标准正态分布的特性,即均值为0,方差为1。
语言大模型发展历程
语言大模型通过在海量无标注数据上进行大规模预训练,能够学习到大量的语言知识与世界知识,并且通过指令微调、人类对齐等关键技术拥有面向多任务的通用求解能力。在原理上,语言大模型旨在构建面向文本序列的概率生成模型,其发展过程主要经历了四个主要阶段:
1.统计语言模型:统计语言模型主要基于马尔可夫假设建模文 本序列的生成概率。此类语言模型的问题在于容易受到数据稀疏问题的影响,需要使用平滑 策略改进概率分布的估计,对于文本序列的建模能力较弱。
2.神经语言模型:针对统计语言模型存在的问题,神经语言模型主要通过神经网络(MLP、RNN)建模目标词汇与上下文词 汇的语义共现关系,能够有效捕获复杂的语义依赖关系,更为精准建 模词汇的生成概率。
3.预训练语言模型:预训练语言模型主要是基于“预训练+微调”的学习范式构建,首先通过自监督学习任务从无标注文本中学习可迁移的模型参数,进而通过有监督微调适配下游任务。早期的代表性预训练语言模型包括ELMo、GPT-1和BERT等。其中,ELMo 模型基于传统的循环神经网络(LSTM)构建,存在长距离序列建模能力弱的问题;随着 Transformer的提出,神经网络序列建模能力得到了显著的提升,GPT-1 和BERT都是基于Transformer架构构建的,可通过微调学习解决大部分的自然语言处理任务。
自监督学习的核心思想是通过设计某些任务,让模型从数据中自动生成目标值(伪标签),以此来学习数据的潜在表示。与监督学习不同,监督学习依赖于大量的人工标注数据,而自监督学习则通过从数据本身构造监督信号来训练模型,避免了人工标注的需求。
自监督学习通常依赖于预训练-微调(Pretrain-Finetune) 的方式。模型首先在大量无标签的数据上进行预训练,然后通过微调来解决具体的任务。
补充:Transformer是一种革命性的深度学习模型,最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出,主要针对序列数据的处理任务,如自然语言处理(NLP)。它颠覆了以往循环神经网络(RNN)和长短时记忆网络(LSTM)在NLP领域的主导地位,通过引入自注意力(Self-Attention)机制,实现了对序列数据的强大处理能力,特别是在处理长距离依赖问题上表现优异。
4.语言大模型(探索阶段):在预训练语言模型的研发过程中,一个重要的经验性法则是扩展定律(Scaling Law):随着模型参数规模和预训练数据规模的不断增加,模型能力与任务效果将会随之改善。当模型参数规模达到千亿量级,语言大模型能够展现出多方面的能力跃升。例如,GPT-3在没有微调的情况下,可以仅通过提示词或少数样例(In-context learning,上下文学习)完成多种任务,甚至在某些任务上超过当时最好的专用模型。学术界引入了“语言大模型”(Large language models)来特指这种超大规模的预训练语言模型,以突出与早期预训练语言模型的不同。
5)语言大模型(提升阶段):虽然早期的语言大模型表现出一定的少样本学习能力,但是其学习目标主要通过预测下一个单词实现, 仍不能很好地遵循人类指令,甚至会输出无用的、有害的信息,难以有效对齐人类的偏好。针对这些问题,主要有两种大模型改进技术,包括指令微调(Instruction Tuning)以及基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF) 。指令微调利用格式化(指令和回答配对)的训练数据加强大模型的通用任务泛化能力;基于人类反馈的强化学习将人类标注者引入到大模型的学习过程中,训练与人类偏好对齐的奖励模型,进而有效指导语言大模型的训练,使得模型能够更好地遵循用户意图,生成符合用户偏好的内容。
平行语料库(Parallel Corpus)是自然语言处理(NLP)中用于训练机器翻译、跨语言检索等任务的核心数据集,由互为翻译的文本对构成。包含源语言(Source Language)和目标语言(Target Language)的句子或段落对,且每一对在语义上严格对应。
非注意力机制:
像试图用一句话总结整本书的内容,然后基于这句话写读后感——细节必然丢失。
注意力机制:
像写读后感时,随时翻书参考具体段落——精准引用关键部分。
在早期的序列到序列(Seq2Seq)模型中(如Sutskever et al., 2014),编码器的最后一个隐藏状态被用作唯一的上下文向量(Context Vector),这是由当时模型的设计目标和计算限制共同决定的。因为传统的编码器是单向RNN或LSTM,其隐藏状态按顺序处理输入序列,最后一个隐藏状态理论上会累积整个序列的信息(类似“总结”)。即假设RNN/LSTM能够完美记忆长序列信息,最后一个状态 h_S 已编码全部输入语义。
微调(Fine-tuning)是一种在自然语言处理(NLP)中使用的技术,用于将预训练的语言模型适应于特定任务或领域。Fine-tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它。
常见的微调技术有
指令微调是一种用有标记的指令提示和相应输出数据集对大型语言模型(LLM)进行微调的技术。指令微调可以被视为有监督微调(Supervised Fine-Tuning,SFT)的一种特殊形式。但是,它们的目标依然有差别。
- SFT是一种使用标记数据对预训练模型进行微调的过程,以便模型能够更好地执行特定任务。
- 而指令微调是一种通过在包括(指令,输出)对的数据集上进一步训练大型语言模型(LLMs)的过程,以增强LLMs的能力和可控性。
指令微调的特殊之处在于其数据集的结构,即由人类指令和期望的输出组成的配对。这种结构使得指令微调专注于让模型理解和遵循人类指令。
指令微调的作用与大多数微调技术一样,在于预训练的大模型没有针对对话或指令执行进行优化。从字面意义上讲,大模型不会根据提示词回答问题,它们只是根据提示词向其添加生成的文本。指令调优有助于使大模型的回答更有用。
基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF) ,思想就是使用强化学习的方式直接优化带有人类反馈的语言模型。RLHF 使得在一般文本数据语料库上训练的语言模型能和复杂的人类价值观对齐。
RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,一般会分为三步,这也是一个生成自己大模型所必需的:
- 第一步是监督微调(Supervised Fine Tuning,SFT),即用数据集进行模型微调,预训练一个语言模型 (LM);
- 第二步是训练一个奖励模型,它通过对于同一个 prompt 的不同输出进行人工排序,聚合问答数据并训练一个奖励模型 (Reward Model,RM);
- 奖励基于三个原则:
- 有用性(Helpful):判断模型遵循用户指令以及推断指令的能力。
- 真实性(Honest):判断模型产生幻觉(编造事实)的倾向。
- 无害性(Harmless):判断模型的输出是否适当、是否诋毁或包含贬义的内容。
- 奖励基于三个原则:
- 第三步则是用强化学习算法(RL) 方式微调 LM。
超大规模的预训练语言模型(大语言模型)只是一个基座模型(Base Model),需要使用微调技术对模型进行优化。然而优化后的大模型仅是一个通用大模型,在使用过程中还会遇到诸如胡言乱语的问题(幻觉)、不专业的问题、不与时俱进的问题,还需要使用其他技术如提示工程(Prompt Engineering)、检索增强生成(RAG)等进行强化。
大模型获取知识有三种途径:大模型训练知识(蓝图)、用户输入的文本(绿图)、引入的外部知识库(红图)。
- 仅用大模型训练知识(蓝图)和用户输入(绿图):就是我们常用的底模,如果用户输入太简单,这通常会导致胡乱回答。对应的优化方法就是【1】提示工程(Prompt Engineering)。
- 仅用户输入(绿图)和外部数据库(红图):就是平时使用的搜索【2】,它没有自然语言输入、对话管理、大模型以及推理能力。
- 仅用大模型训练知识(蓝图)和外部数据库(红图):如果没有外部专家数据库的强化训练,就不能很好地遵循人类指令,甚至会输出无用的、有害的信息,难以有效对齐人类的偏好。对应的优化方法就是【3】微调(Fine-Tuning)。
- 把用户输入(绿图)、外部数据库(红图)和大模型训练知识(蓝图)结合:如果没有准确的上下文输入,专家数据库的参考,就回答的不与时俱进,对应的优化方法就是【4】检索增强生成(RAG,Retrieval-Augumented Generation)。
提示工程就是研究如何提高与大模型的沟通效率,把大模型当成一种编程语言来看待。人们通过描述角色技能、任务关键词、任务目标及任务背景,告知大模型需要输出的格式,并调用大模型进行输出。提示工程就是为了优化“用户输入”信息的,以便于更精确的从大模型中“抽取”我们想要的知识或信息。
提示词万能公式:
角色+角色技能+任务核心关键词+任务目标+任务背景+任务范围+任务解决与否判定+任务限制条件+输出格式+输出量
零样本提示(Zero-Shot Prompting):
- 不提供任何示例,仅通过自然语言指令描述任务,让模型直接推理并生成结果。
- 适用于模型已经具备较强的泛化能力,能够理解任务要求。
小样本提示(Few-Shot Prompting):
- 提供少量示例(通常1-5个),帮助模型理解任务格式和预期输出。
- 比零样本提示更可靠,适用于复杂任务。
思维链(CoT,Chain of Thought)提示过程鼓励大语言模型解释其推理过程。思维链的主要思想是通过向大语言模型展示一些少量的样例,在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果。模拟了人类逐步推理的过程,让语言模型也能够逐步组织语言进行多步推理。
问题:小明有5个苹果,吃了2个,又买了3个,现在有多少个?
推理:
1. 初始有5个。
2. 吃掉2个,剩余5-2=3个。
3. 买了3个,现在有3+3=6个。
答案:6
分步骤思考 (Zero-shot-CoT)即使不用小样本提示,只是在问题后面加一句“let's think step by step”(让我们来分步骤思考)也能提升大模型得到正确答案的概率。这是一种成本非常低的方法,用思维链还需要我们设计样本示范,而这种方法只需要加上简单一句话,大模型就会自行生成中间步骤进行推理。
其实使用提示工程优化后的大模型还仅是一个通用大模型,并没有给它提供额外的专业知识,如果想要构建专用或者私有大模型,还需要使用检索增强生成(RAG)技术为它增加专业知识库。
检索增强生成(Retrieval-Augmented Generation,RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。在LLM本就强大的功能基础上,RAG将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进LLM输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。
- 降低成本、增强安全性:把私有数据作为一个外部数据库,让LLM在回答基于私有数据的问题时,直接从外部数据库中检索出相关信息,再结合检索出的相关信息进行回答。这样就不用通过预训练或者微调的方法让LLM在参数中记住私有知识,既节省了训练或者微调成本,也一定程度上避免了私有数据的泄露风险。
- 保证数据实时性:可以使用RAG将LLM直接连接到实时社交媒体提要、新闻网站或其他经常更新的信息来源。然后,LLM可以向用户提供最新信息。
- 增强用户信任度:RAG允许LLM通过来源归属来呈现准确的信息。输出可以包括对来源的引文或引用。如果需要进一步说明或更详细的信息,用户也可以自己查找源文档。
下图显示了将RAG与LLM配合使用的概念流程图,主要分为2个阶段:数据准备阶段(紫色动线)、应用阶段(绿色动线)。
数据准备阶段工作流程(紫色动线):
私有数据经过数据提取和文本分割,再经过嵌入向量化(Embeding),生成语义向量(Semantic Vector),并把数据存入向量数据库(Vector Database),这个向量数据库也就是所谓的本地知识库。
应用阶段工作流程(绿色动线):
用户准备提示词和问题,生成查询向量(Query Vector),进入本地向量数据库进行数据检索(召回),返回的信息注入Prompt,再把Prompt输入大模型生成最终响应。
特别解释一下【注入Prompt】:
Prompt作为大模型的直接输入,是影响模型输出准确率的关键因素之一。在RAG场景中,Prompt一般包括任务描述、背景知识(检索得到)、任务指令(一般是用户提问)等,根据任务场景和大模型性能,也可以在Prompt中适当加入其他指令优化大模型的输出。一个简单知识问答场景的Prompt如下所示:
【任务描述】
假如你是一个专业的客服机器人,请参考【背景知识】,回
【背景知识】
{content} // 数据检索得到的相关文本
【问题】
石头扫地机器人P10的续航时间是多久?
Prompt的设计只有方法、没有语法,比较依赖于个人经验,在实际应用过程中,往往需要根据大模型的实际输出进行针对性的Prompt调优。
三种典型的RAG的调用模式:
- 模式一:用户提出问题,非结构化数据通过Embedding Model把非结构化数据进行embedding存到向量数据库中,然后形成Construct Prompts给到LLM。LLM返回结果给到用户。
- 模式二:用户提出问题,下一步把问题通过Embedding Model向量化,然后保存到长时记忆数据库(向量数据库)中,然后调用LLM完成问题的回答,接下来将大模型的回答存到长时记忆数据库中,最后返回给用户。
- 模式三:用户提出问题,下一步把问题通过Embedding Model向量化,然后从Cache中(向量数据库)查询类似的问题和答案,返回给用户。如果没有命中,则去和LLM交互。然后把LLM的回答存到Cache中,最后把回答返回给用户。
模式 | 核心机制 | 优势 | 适用场景 |
---|---|---|---|
标准RAG | 实时检索+生成 | 知识实时性强 | 静态知识库问答(如文档检索) |
长时记忆RAG | 存储历史交互供未来检索 | 个性化、持续学习 | 对话系统、个性化推荐 |
缓存优化RAG | 缓存高频查询答案 | 减少LLM调用,提升响应速度 | 高并发、重复查询(如客服FAQ) |
AGI市场划分为四层结构,自下向上分为基础设施层、模型层、中间层和应用层四层,这四层结构共同构成AGI产品的技术框架。
中间层常见形式包含微调、检索增强⽣生成、提示工程和智能体。中间层是连接应用层和模型层的桥梁,现阶段是作为大模型应用落地能力补充的重要层级,随着底层模型技术的持续进步与演化,未来可能会出现模型层逐渐内化并泛化出原本由中间层提供的部分能力。与此同时新的沟通应用和模型层的需求还会持续出现。
智能体(Agent)是融合微调(Fine-Tuning)、提示工程(Prompt Engineering)、检索增强生成(RAG)三大技术于一体的解决方案。
目前为止,大型模型的应用可以分为以下几类:
- 问答应用:如ChatGPT等一系列网页交互式问答应用。
- RAG:基于知识库向量化检索的问答应用,如支持上传文档和图片以及网络检索的网页应用。
- Agent:是前两者的线性变换,构成更加复杂,提示工程(Prompt Engineering)、检索增强生成(RAG)都是其组成部分。
- Multi-Agent:单个智能体完成的任务有限,可以根据人类社会群体组成,构建多个Agent组成,通过协调分配任务和Agent相互通信完成更为复杂的任务。
《人工智能:现代方法(第4版)》中定义:“理性智能体是做正确事情的事物”,“理性智能体(Rational Agent)是研究人工智能的方法的核心”,“任何通过传感器(Sensor)感知环境(Environment)并通过执行器(Actuator)作用于该环境的事物都可以被视为智能体(Agent)”。
基于语言大模型的智能体是通过包含计划模块(Planning)、存储模块(Memory)、感知模块(Sensor)、执行模块(Tools)等关键模块的架构来执行复杂任务的大模型应用程序。在构建智能体时,大模型充当主控制器或“大脑”,控制完成任务或用户请求所需的操作流。
Agent智能体 = 大语言模型的推理能力 + 计划能力 + 反馈能力 + 使用工具行动的能力
一个智能体(Agent)的基本组成应该包含如下四个方面:计划(Planning)、工具(Tools)、执行(Action)、记忆(Memory)。
1. 计划(Planning):
- 子目标和分解:智能体将大型任务分解为较小、可管理的子目标,从而有效地处理复杂的任务;
- 反思和改进:智能体可以对过去的行动进行自我批评和自我反思,从错误中学习并改进未来的步骤,从而提高最终结果的质量。
- 无反馈计划:
- 计划模块帮助分解必要的步骤或智能体单独求解以回答用户请求的子任务。这一步骤对于使智能体更好地解决问题并可靠地找到解决方案很重要。计划模块将利用LLM分解一个详细的计划,其中包括子任务以帮助解决用户问题。任务分解的流行技术包括思维链(CoT)和思维树(ToT),可以分别归类为单路推理和多路推理。
- 有反馈计划:
- 上面的计划模块不涉及任何反馈,这使得实现长期计划(长期规划)以解决复杂的任务具有挑战性。为了应对这一挑战,可以利用一种机制,该机制使模型可以根据过去的动作和观察结果迭代地反映和完善执行计划,目的是纠正和改善过去的错误,有助于提高最终结果的质量。这在复杂的现实世界环境和任务中尤其重要,在这些环境和错误是完成任务关键的关键的情况下。这种反思或批评机制的两种流行方法包括ReAct(Reson-Action)和Reflexion。
2. 工具(Tools):
智能体(Agent)可以通过调用函数或API获取模型权重和数据库中不存在的信息。常见的Agent工具包括网络检索工具、文件读写工具、API调用工具。例如,让Agent通过访问高德API来获取位置,调用SD的API来实现图像生成。
3. 执行(Action):
智能体按照计划,根据记忆,利用工具进行操作,并作用于所处环境(Environment)。
4. 记忆(Memory):
- 短期记忆:所有的上下文学习都看成是利用模型的短期记忆来学习,常见的提示词工程都属于短期记忆。通过短期记忆,我们可以让AI能在当前会话(Session)中生成我们想要的回答,例如我们让Agent扮演某个角色,然后使用某种格式进行输出。
- 长期记忆:长期记忆为智能体提供了长期存储和召回(无限)信息的能力,它们通常通过利用外部的向量存储和快速检索来存储和召回(无限)信息。长期记忆也就是将短期记忆存储起来,来自其他数据库、用户输入、互联网爬取的文本图像数据通过Embedding模型向量化被存储到向量数据库中,然后每次模型调用时都会先去检索向量数据库,然后将相似度最高的检索结果反馈,通过提示词工程包装,输入给LLM,得到较为精准的回答,从而实现长期的记忆,其主要的应用就是检索增强生成(RAG)。
思维树(ToT,Tree of Thoughts),传统的语言模型在规划和决策过程中存在局限性,而"思维树"通过同时考虑多个潜在的可行计划,并利用价值反馈机制进行决策,扩展了现有的规划方法。此外,该方法还引入了自我反思机制,使语言模型能够评估自身生成的候选项的可行性。与其他相关工作相比,"思维树"方法更加灵活,可以处理具有挑战性的任务,如创意写作,并提供了更高水平的问题解决能力。《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》
ReAct算法的核心是通过交替进行Reasoning(推理)和Acting(行动)的方式帮助智能体更好地应对和解决复杂问题。相较于一般的Reasoning方法,能够根据当前的场景进行分析,做出更具有针对性的行动,并且提供了更好的可解释性和更高的容错度。《ReAct:Synergizing Reasoning and Acting in Language Models》
Reflexion是一个新的框架,通过自然语言反馈来增强Agents的功能。Reflexion在HumanEval编码基准上实现了91%准确率,超过了之前最先进的GPT-4的80%。
Reflection基于ReAct方法,提出增加一个LLM的代理器,从之前的错误中反思,在规划序列中重定向未来的决策,从而可以避免人类训练员需要作为中间人参与。这种设定在AlfWorld和HotPotQA基准测试中展示了学习曲线,其性能明显优于基础ReAct代理。
Reflexion应用性很强,可以提高决策和知识密集型任务的试错性能,只需要依赖一个二元的奖励模型。它应用在更复杂任务中,可以帮助智能体学会新想法,探索更大不可见的状态空间,并通过在过去环境中的经验形成更准确的行动规划。《Reflexion: Language Agents with Verbal Reinforcement Learning》
知识密集型任务(Knowledge-Intensive Tasks)指的是那些需要大量背景知识、复杂推理以及对领域专有信息有深入理解的任务。
基于Transformer神经网络架构的产品大致可以分为三类:decoder-only LLMs、encoder-only LLMs、encoder-docoder LLMs。以下是各个技术路线的主流产品。
上图是一个现代大模型演进树,标识为非灰色的是基于Transformer的模型,可以分为三类:
- 用蓝色标注的分支是自回归模型(decoder-only LLMs):仅采用解码器模块来生成目标输出文本。很多decoder-only的大模型(如GPT, Generative Pre-trained Transformer)通常可以根据少量示例或简单指令执行下游任务,而无需添加预测头或微调。模型的训练范式是预测句子中的下一个单词。
- 代表作品:OpenAI公司的GPT系列,对应论文《Generative Pre-trained Transformer: A Comprehensive Review on Enabling Technologies, Potential Applications, Emerging Challenges, and Future Directions》。
- 用粉色标注的分支是自编码器模型 (encoder-only LLMs):仅用编码器对句子进行编码并理解单词之间的关系(如BERT, Bidirectional Encoder Representations from Transformers),训练模式预测句子中的掩码词语,需要添加额外的预测头来解决下游任务,胜在自然语言理解任务(如文本分类、匹配)。
- 代表作品:Google公司的BERT系列,对应论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。
- 用绿色标注的分支是序列到序列模型(encoder-decoder LLMs):同时使用编码器和解码器模块,编码器模块负责将输入句子进行编码,解码器用于生成目标输出文本。编码器-解码器大模型(如GLM,General Language Model)能够直接解决基于某些上下文生成句子的任务,例如总结、翻译和问答。
-
代表作品:清华大学的GLM系列,对应论文《GLM- General language model pretraining with autoregressive blank infilling》。
-
国外大模型产品
一、OpenAI公司:技术路线吹哨人,背靠微软打造应用生态
主要产品为GPT系列:
-
ChatGPT:基于GPT-3.5开发的对话大模型应用,2022年11月30日OpenAI发布ChatGPT,随即引爆社交网络。
-
新发布的GPT-4o,o代表omni(所有的,表示支持多模态)
-
Sora:通过文本生成视频的大模型应用。
二、Google公司:大模型基础Transformer的研发者
-
发明Transformer神经网络架构
-
深度学习框架TensorFlow
-
BERT系列大模型
-
NLP(自然语言处理,Nature Language Processing)对话模型LaMDA系列
-
CV(计算机视觉,Computer Vision)模型ViT
-
多模态模型PaLM-E
-
Bard系列大模型
三、Mata(元宇宙):Facebook背景,基于大模型完善元宇宙生态
-
深度学习框架Pytorch
-
NLP(自然语言处理,Nature Language Processing)对话模型LLaMA系列(LLaMA2,LLaMA3)
-
CV(计算机视觉,Computer Vision)模型SEER
-
多模态模型data2vec
国内大模型产品
一、腾讯
主要基于混元大模型系列产品:
-
NLP对话应用:腾讯元宝
-
智能体应用:腾讯元气
二、百度
主要基于文心大模型系列
-
NLP对话应用:文心一言
三、阿里巴巴
主要基于通义大模型系列:
-
NLP对话应用:通义千问
四、字节跳动
基于豆包大模型
-
NLP对话应用:豆包
-
智能体应用:扣子
五、清华
主要基于智谱大模型系列:
-
对话应用:智谱清言
六、华为
主要基于盘古大模型系列。与其他公司使用英伟达(NVIDIA)GPU产品(CUDA深度绑定)不同,华为使用自己研发的GPU芯片进行研发,具有完整的自主可控技术栈。
七、月之暗面
主要基于moonshot大模型系列:
-
月之暗面kimi
神经网络中的参数是指连接神经元的权重和偏差,它们决定了神经元之间的传递和网络的输出。大模型中的参数量(Parameter Count or Number of Parameters)指的是模型中所有可训练的权重(weights)和偏置(biases)的总数。通常情况下,参数量越多,模型的表现力越强,但同时也意味着模型的计算复杂度和训练时间会增加。
Token是指模型处理的基本数据单位。它可以是单词、字符、短语甚至图像片段、声音片段等,每个Token都有一个独一无二的编码(Token ID)。
上下文窗口(Context Window)是Transformer一次可以处理的最大序列长度,即在进行预测或生成文本时,所考虑的前一个token或文本片段的大小范围。简言之,上下文窗口指的是模型在计算当前词的表示时所考虑的其他词的范围大小。
注意力机制并不关心输入词语的远近距离,而是只关心每个词的权重。在这种机制下,大模型认为你和他说过的所有对话,都对后面的回答是有影响的,因此,它把你问的问题和它前面的回答都作为输入,再综合所有的权重,去寻找下一个词,不断递归,一个词一个词拼接起来,作为答案返回给你。词向量空间的大小、注意力机制的运算成本决定了上下文窗口的大小。
注意力机制分为软注意力和硬注意力。它们之间的区别主要在于:
- 输出方式不同,软注意力可以给序列或集合中的每个元素分配一个权重,并通过加权平均的方式得到整个序列或集合的输出;硬注意力只能选择序列或集合中的一个元素作为输出。
- 计算方式不同,软注意力通常使用神经网络来计算每个元素的权重,从而实现对每个元素的加权平均;硬注意力通常使用贪心算法或强制性选择来确定输出序列或集合中的元素。
上下文长度(Context Length)是AI模型一次能够处理的最大Token数量,指的是模型在生成输出时能够一次性考虑的最大输入序列长度,它决定了模型处理能力的上限。上下文长度越大,模型能够处理的数据量就越大。上下文长度决定了模型在生成每个输出时能够一次性"记住"多少信息。
上下文窗口 vs. 上下文长度
- 上下文长度(Context Length)是模型设计时的一个参数,它定义了模型能够处理的最大序列长度。任何给定的输入序列(如一段文本)的长度都不能超过这个上下文长度。
- 上下文窗口(Context Window),是在预测某个token时模型实际考虑的输入序列的长度。这个窗口小于或等于上下文长度。在某些情况下,模型可能会使用滑动窗口或其他技术来处理超出上下文窗口的较长序列,但这些方法仍然受到上下文长度的限制。
- 因此,上下文长度是模型能够处理的最大序列长度,而上下文窗口是在实际预测时模型考虑的输入序列的长度。
温度(Temperature)参数调节随机性的程度,从而导致更多样化的输出,是控制大模型生成输出随机性的参数。它决定了模型在生成输出时更倾向于创造性还是保守和确定性。因此,它常被称为创造力参数。
温度值越高,模型越倾向于生成随机的、意想不到的输出,但也可能导致语法错误或无意义的文本。温度值越低,模型越倾向于生成符合逻辑和常识的输出,但也可能缺乏创造性和趣味性。
知识蒸馏(Knowledge Distillation)是一种模型压缩技术,通过训练小型“学生模型”模仿大型“教师模型”的输出分布,实现知识迁移。其核心在于利用教师模型的软标签(概率分布)而非硬标签,传递更丰富的类别间关系信息。《Distilling the Knowledge in a Neural Network》
蒸馏过程通常包括以下几个步骤:
- 教师模型训练:首先,训练一个性能强大的大模型,这个模型通常具有大量的参数,能在各种任务上提供优异的性能。这个大模型即为“教师模型”。
- 学生模型设计:学生模型通常较小,参数量比教师模型少得多。其目的是在保证模型精度的同时,减少计算资源消耗,提高推理速度。
- 蒸馏过程:在训练学生模型时,采用教师模型的输出作为监督信号。不同于传统的监督学习,蒸馏技术利用教师模型的软标签(Soft Labels)而非硬标签。软标签通常是教师模型的输出概率分布,它携带了更多的信息,例如类别之间的相似度,这使得学生模型能够在较少的数据和参数的情况下,学到更加丰富的知识。
- 优化与精炼:学生模型通过模拟教师模型的行为,逐渐学习到其潜在的知识结构。通过反复训练,学生模型在大部分情况下能够接近或达到教师模型的性能,同时具有更高的计算效率和更小的内存占用。
知识蒸馏的主要作用
- 模型压缩:蒸馏技术可以将大型模型压缩成较小的模型,使得其在移动设备或计算资源有限的环境中依然可以发挥较高的性能。
- 知识迁移:学生模型不仅继承了教师模型的知识,还能在一些情况下进行自我优化,提升性能。
- 推理效率:由于学生模型的规模较小,它在推理时所需的计算资源和时间都显著减少,有助于加速推理过程,尤其适用于实时应用场景。
模型量化(Quantization)是指以较低的推理精度损失将连续取值(通常为float32或者大量可能的离散值)的浮点型权重近似为有限多个离散值(通常为int8)的过程。通过以更少的位数表示浮点数据,模型量化可以减少模型尺寸,进而减少在推理时的内存消耗,并且在一些低精度运算较快的处理器上可以增加推理速度。
混合专家(MoE)技术通过将大型模型分解成更小的、专门的网络来解决所需计算资源大这一难题。MoE(Mixture of Experts,混合专家模型)是一种通过动态选择子模型(专家)处理输入数据的深度学习架构,旨在提升模型性能与效率。其核心思想是“术业有专攻”,即让不同专家专注于特定任务,通过门控网络动态调度专家资源,在降低计算成本的同时实现高性能输出。MoE是“分而治之”的方法。
多头注意力(Multi-Head Attention)是一种在Transformer模型中被广泛采用的注意力机制扩展形式,它通过并行地运行多个独立的注意力机制来获取输入序列的不同子空间的注意力分布,从而更全面地捕获序列中潜在的多种语义关联。最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。
在多头注意力中,输入序列首先通过三个不同的线性变换层分别得到Query、Key和Value。然后,这些变换后的向量被划分为若干个“头”,每个头都有自己独立的Query、Key和Value矩阵。对于每个头,都执行一次Scaled Dot-Product Attention(缩放点积注意力)运算,即:
最后,所有头的输出会被拼接(concatenate)在一起,然后再通过一个线性层进行融合,得到最终的注意力输出向量。
私有化训练专用大模型资金成本和时间成本都很高,然而公用大模型的所包含的所有数据,通过一定的提示词引导,均可输出其掌握的信息,不具备隐私保护功能。
在使用RAG系统之后,由于模型组织答案所用到的知识来源于预先提供的知识库信息,利用个人私有数据不仅可以使得模型的答案具有个性化,同时能让整个系统的数据更加安全,防止隐私数据被诱导泄露。
RAG本质上是一种大模型“外挂数据库”,为提升数据的检索速度和数据命中率,不同的数据类型需要不同的组织形式,需要不同类型的数据库进行存储。实现RAG的数据库主要有:向量数据库(最常用)、图数据库、知识图谱(一般基于图数据库)、混合架构数据库(一般基于搜索引擎如Elasticsearch)等。
- 向量数据库
- 代表产品:LanceDB、Chroma、Pinecone。
- 适用数据类型:
- 非结构化数据:文本、图像、音频等,并根据语义相似性搜索数据。向量模型用于为数据库中存储的数据生成向量嵌入。根据数据类型、任务和向量模型的不同,数据需要被切分成更小的块。例如,如果要存储文本数据,则可以将数据切分成句子或段落。
- 高维语义特征数据:如语义相似度匹配的问答对、商品描述向量等。
- 图数据库
- 以节点和边的形式存储数据。它适用于存储结构化数据,如表格、文档等,并使用数据之间的关系搜索数据。例如,如果你正在存储有关人员的数据,可以为每个人创建节点,并在彼此相识的人之间创建边。当对图数据库进行查询时,图数据库返回与查询节点相连的节点。
- 代表产品:Neo4j、Nebula Graph、HugeGraph
- 适用数据类型:
- 结构化关系数据:实体(如人物、产品)及其关联关系(如“推出”“属于”)。
- 知识网络:企业组织架构、产品技术图谱。
-
知识图谱
- 通常与图数据库结合存储,并集成向量检索模。知识图谱与图数据库在RAG中形成“语义层+存储层”的协同架构:
- 知识图谱解决“为什么”(推理依据)的问题,例如法律咨询中引用法规条款的合法性验证;
- 图数据库解决“是什么”(数据存储)的问题,例如实时查询社交网络中的用户关系链。
- 两者结合可覆盖从数据管理到知识推理的全链路需求,例如油气行业RAG系统常采用Neo4j(图数据库) + 领域知识图谱 + 向量数据库的混合架构,兼顾精准检索与语义理解。
- 代表产品:AWS Neptune(全托管知识图谱服务)、Stardog(企业级语义推理引擎)、Apache Jena(开源RDF框架)。
- 适用数据类型:
- 混合型数据:结构化实体属性(如电影票房)+非结构化文本描述。
- 多源异构数据:跨数据库、API和文档整合的知识体系。
- 通常与图数据库结合存储,并集成向量检索模。知识图谱与图数据库在RAG中形成“语义层+存储层”的协同架构:
KAG (Knowledge Augmented Generation, 知识增强生成)是基于OpenSPG 引擎和大型语言模型的逻辑推理问答框架,用于构建垂直领域知识库的逻辑推理问答解决方案。
KAG通过直接将结构化知识图或外部知识库融入到大模型体系结构中来增强语言模型的生成能力。
与RAG检索非结构化数据不同,KAG侧重于结构化知识的集成,以提高生成的质量。它基于OpenSPG引擎,解决了传统问答系统的局限性。KAG可以有效克服传统RAG向量相似度计算的歧义性和OpenIE引入的GraphRAG的噪声问题。KAG支持逻辑推理、多跳事实问答等,并且明显优于目前的SOTA方法。
SOTA(State of the Art)是科技领域描述技术最高水平的术语,指的是最先进的技术或模型。
RAG和KAG都是最先进的增强生成模型能力的方法,但是它们适用于不同类型的任务。RAG擅长于需要检索和合成动态和非结构化数据的开放域任务。而KAG在需要从知识图谱中获得结构化和事实性信息的场景中更有效。关键区别:RAG的检索基于文本相似性,而KAG的推理基于知识图谱的逻辑关系。未来,随着多模数据库和自主更新技术的发展,RAG与KAG的边界将进一步消融,推动AI从“信息检索”向“认知理解”进行跃迁。
N×M 问题:对于开发者和企业来说,还有一个更棘手的问题:“N×M 问题”,其中N代表大型语言模型,M代表工具。在N方面,有许多大模型,在M方面,有无数的外部对接工具。每个大型模型提供商都有自己的协议来连接外部工具,使得潜在的集成点无穷无尽。
MCP(Model Context Protocol,模型上下文协议)是由Anthropic提出的开放标准协议,旨在解决大模型(LLMs)与外部数据源及工具之间的交互难题,目标是实现大模型与外部数据源和工具之间交互的标准化,因而其有望成为智能体开发的标准化基础协议。
MCP通过标准化RAG和代理式AI实现大模型与外部数据源和工具的无缝集成,用于大模型和数据源之间建立一个安全的双向连接通道,以提高大模型的提高可扩展性和稳定性。其核心功能主要包括:
- 统一接口:规范大模型与外部资源的交互方式,避免重复开发各种类型的适配器。
- 安全双向通信:通过本地运行、权限控制和用户确认机制保护敏感数据。
- 模块化扩展:支持插件式接入数据库、API、文件系统等以便适应不同场景需求。
MCP为客户端-服务器架构,主要由4部分组成:
- 宿主应用程序(AI应用)即与用户交互并发起连接的大语言模型。例如DeepSeek客户端、像 Cursor 这样的人工智能增强型集成开发环境以及标准的基于网络的大型语言模型聊天界面。
- MCP客户端(Client)即为集成在宿主应用程序中发起连接的客户端,用于处理与 MCP 服务器的连接,并在宿主应用程序的需求和模型上下文协议之间进行数据转换。
- 服务器(Server)即为提供数据资源(上下文,工具和提示)的对象,它是一个轻量级程序,每个程序都通过标准化的模型上下文协议公开特定的功能。每个独立服务器通常具有专一的功能,例如数据库 PostgreSQL。
- 客户端和服务器之间保持1:1连接,即一个MCP客户端只能对应一个MCP服务器。由于MCP服务器与MCP客户端通信时,无须将API密钥提供给客户端,这种机制就保证了数据安全性。
- 传输层:客户端与服务器之间的通信机制。MCP 支持两种主要传输方法:
- 标准输入输出(STDIO):主要用于本地集成,此时服务器与客户端在同一主机中。
- HTTP+SSE(Server-Sent Events):用于远程连接,其中 HTTP 用于客户端请求,SSE用于服务器响应和流传输。
专家系统:基于规则与符号逻辑
专家系统采用“自上而下”的设计逻辑,依赖人工编码的规则库和推理引擎。其核心是符号主义(Symbolism),通过将领域专家的知识转化为显式的逻辑规则(如“IF-THEN”规则)进行决策例如,早期的医疗诊断系统MYCIN通过人工输入的医学规则实现疾病推理。其特点:强解释性、依赖专家经验、规则维护成本高。
深度学习:基于数据驱动的特征学习
深度学习属于联结主义(Connectionism),通过多层神经网络自动从数据中提取特征,无需人工设计规则。例如,卷积神经网络(CNN)通过逐层学习图像的边缘、纹理等抽象特征完成分类任务。其特点:数据依赖性高、黑箱性显著、需大规模算力支持。
大模型发展进入加速发展和演进时期,下图是从Transformer到DeepSeek-R1时间段的重要时间节点总结,主要可以总结为以下几个阶段:
DeepSeek在核⼼架构层⾯创新应用了多头潜在注意力(MLA)、混合专家模型(MoE)和Token并行预测机制(MTP),达到了性能和效率兼顾的升级版Transformer架构。
在机器翻译任务中,BLEU 和 ROUGE 是两个常用的评价指标,BLEU 通过计算N-gram(连续N个词)的匹配程度,根据精确率(Precision)衡量翻译的质量,而 ROUGE 主要关注机器生成的摘要中是否捕捉到了参考摘要的信息,着重于涵盖参考摘要的内容和信息的完整性,根据召回率(Recall)衡量翻译的质量。
SLMs(小型语言模型)更适合精准的细分领域,例如基于企业内部数据训练的客服机器人或特定金融分析模型,而不是承担通用型人工智能的角色。世界经济论坛研究指出,这种“专注小场景”的定位,决定了SLMs更适用于有明确边界和数据来源的业务环境,例如企业内部数据的知识问答或特定垂直领域的内容生成。