赞
踩
目录
GPT 是基于 Transformer 架构的预训练语言模型。以下是 GPT 发展历程的重要时间节点:
众所周知谷歌团队在"Attention is all you need"中首次提出Transformer模型, 而Transformer模型与ChatGPT又有着密不可分的联系,所以我们不妨先来从这篇论文入手,看看Transformer模型出现的契机到底是什么?
先来看一篇大佬的文章https://blog.51cto.com/yunyaniu/2913904
我们不难发现该论文的重心是为了解决NLP中使用RNN不能并行计算
RNN/LSTM不能并行计算,原因是存在序列依赖关系,即t时刻的计算依赖t-1时刻的隐层计算结果,其训练是迭代的,是一个接一个字的来,当前这个字过完RNN/LSTM单元,才可以进下一个字。
Transformer可以并行的计算句子中不同的query,因为每个query之间并不存在先后依赖关系。
在2023年3月15日公布的GPT-4的演示视频中,GPT-4成功识别了一张气球照片并对"如果绳子剪断会怎样"做出来推断----"气球将飞走", 这一事实表明,GPT-4已经掌握了对图像等多模态数据进行读取和综合推理的能力,GPT-4不仅能解读图片信息,还可以理解其深层含义,这种能力使人们深感GPT-4已经逐渐靠近AIGC领域,这也使人们不禁思考,未来人工智能是否会迈入Strong AI领域,甚至超越人类智能
因为GPT-4在训练过程中接触了大量数据,因此在特定任务中,往往难以分辨它是记住了任务内容,还是理解了任务内容,这是评估智能程度的关键因素
评估 GPT-4 的智能水平可以从以下几个方面考虑:
- 1. 语言理解能力:GPT-4 对各种主题的理解程度,包括复杂的概念、语境和语义关系。
- 2. 知识广度:GPT-4 对广泛领域的知识的掌握程度。
- 3. 生成能力:GPT-4 生成连贯、有逻辑和有意义的文本的能力。
- 4. 适应性:GPT-4 在不同任务和领域中的应用能力。
- 5. 与人类的比较:将 GPT-4 的表现与人类在类似任务上的表现进行比较。
然而,要全面评估 GPT-4 的智能水平是具有挑战性的,因为智能是一个复杂且多维度的概念。此外,GPT-4 是一个工具,其智能水平还取决于使用它的方式和环境。
大语言模型的技术演化经历了从符号主义到连接主义的转变。符号主义方法主要关注基于规则和符号的语言处理,而连接主义方法则更侧重于通过神经网络来学习语言的模式和规律。
在符号主义阶段,语言模型通常是基于规则和语法的。这些模型试图通过定义语言的规则和结构来理解和生成自然语言。然而,这种方法在处理复杂和多样的自然语言时面临困难,因为语言的规则和结构往往是非常复杂和模糊的。
随着深度学习技术的发展,连接主义方法逐渐成为主流。连接主义语言模型,如神经网络,通过学习大量的文本数据来自动发现语言的模式和规律。这些模型可以自动学习语言的特征和表示,从而能够处理更加复杂和多样的自然语言任务。
连接主义方法的优势在于它能够从大量的数据中自动学习到语言的特征和模式,而不需要手动定义规则和语法。这使得语言模型能够更好地适应不同的语言和任务,并具有更强的泛化能力。
然而,连接主义方法也面临一些挑战,例如需要大量的训练数据、计算资源和时间。此外,神经网络模型的可解释性相对较低,这使得我们难以理解模型是如何做出决策和生成回答的。
机器学习和深度学习的出现引领了NLP技术数据驱动的转变
在机器学习时代,尽管可以针对特定子任务,基于训练数据在预设的函数空间内寻找最优映射,但这并未完全解决规则设计的问题
特征工程成为影响机器学习效果的重要因素
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
特征工程是将原始数据转换为更有意义和有用的特征的过程,这些特征可以被机器学习算法有效地使用。它在数据预处理阶段起着重要的作用,旨在提高模型的性能和准确性。
以下是特征工程的一些关键步骤和技术:
- 1. 数据理解:首先,需要对数据进行深入的理解和分析,包括数据的分布、特征的类型、缺失值等。
- 2. 特征选择:从原始数据中选择最相关和最有信息量的特征。这可以通过统计方法、过滤法或基于模型的选择方法来完成。
- 3. 特征提取:通过变换或组合原始特征来创建新的特征。例如,通过数学函数、主成分分析(PCA)或自编码器等技术。
- 4. 特征缩放和规范化:将特征的值进行标准化或规范化,使它们在相同的范围内,以便模型能够更好地处理数据。
- 5. 特征构建:根据领域知识和数据的特点,构建新的特征。这可能涉及到对时间序列数据进行差分、计算统计量或创建交互特征等。
- 6. 特征验证:使用交叉验证或其他验证技术来评估不同特征组合的效果,选择最优的特征集。
特征工程的目标是使数据更适合机器学习算法的处理,并提高模型的预测能力。通过精心设计和选择特征,可以减少噪声和冗余信息,增强数据的表达能力,从而提高模型的性能。
在数据探索过程主要考虑两个方面。
数据说明查看看原始数据以及数据说明文件,对数据有一个整体的了解。
数据初步筛查通过人工查看的方式,对数据本身做一个比较直观的了解,然后对数据做初步的整理分类,剔除没有必要的数据。根据数据的特征和目标,确定后续的数据清洗方法。
数据格式内容错误数据来源有多种,有些是传感器采集,然后算法提取的特征数据;有些是采集的控制器的数据;还有一些应用场合,则是用户/访客产生的,数据肯定存在格式和内容上不一致的情况,所以在进行模型构建之前需要先进行数据的格式内容清洗操作。逻辑错误清洗主要是通过简单的逻辑推理发现数据中的问题数据,防止分析结果走偏,主要包含以下几个步骤:
数据相关分析数据相关性分析是为了剔除数据中相关程度高的特征成分,对数据进行初步的降维,为后续的模型训练做准备。
数据不平衡在实际应用中,数据往往分布得非常不均匀,也就是会出现“长尾现象”,即绝大多数的数据在一个范围或属于一个类别,而在另外一个范围或者另外一个类别 中,只有很少的一部分数据。那么这个时候直接使用机器学习可能效果会不太少,所以需要对数据进行重构。
2.3.1无量纲化
无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和区间缩放法。标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。区间缩放法利用了边界值信息,将特征的取值区间缩放到某个特点的范围,例如[0, 1]等。
2.3.1.1标准化
无量纲化的标准化是一种常见的数据预处理技术,用于将数据的各个特征进行尺度变换,使其具有相同的均值和标准差。
标准化的具体步骤如下:
- 1. 计算每个特征的均值()。
- 2. 计算每个特征的标准差()。
- 3. 对于每个特征,将其进行标准化,得到,计算公式为:。
通过标准化,每个特征的均值变为0,标准差变为1。这样做的好处是:
- 1. 消除了不同特征之间的量纲差异,使得不同特征在数值上具有可比性。
- 2. 使得模型对特征的缩放不敏感,因为标准化后所有特征都具有相同的范围。
- 3. 有助于加速模型的训练,特别是在使用基于梯度的优化算法时。
2.3.1.2区间缩放法
区间缩放法是一种常见的数据预处理方法,用于将数据映射到特定的区间范围内。它的目的是将原始数据进行尺度变换,以便更好地适应模型或数据分析的需求。
区间缩放法的一般步骤如下:
- 1. 确定目标区间:确定希望数据映射到的目标区间,例如[0,1]或[-1,1]。
- 2. 计算缩放因子:根据目标区间和原始数据的范围,计算缩放因子。缩放因子可以是简单的线性函数,也可以是更复杂的函数。
- 3. 应用缩放因子:将缩放因子应用于原始数据,得到缩放后的数据。
例如,如果要将数据映射到[0,1]区间,可以使用以下公式进行缩放:
其中,x是原始数据,是缩放后的数据,是原始数据的最小值,是原始数据的最大值。
通过区间缩放法,数据被限制在目标区间内,这样可以使数据具有更好的可比性和可视化效果。它还可以帮助消除数据中的极端值或异常值的影响,使模型更容易学习和处理数据。
2.3.1.3标准化与归一化的区别
标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。规则为l2的归一化公式如下:
2.3.2对定量特征二值化
对定量特征进行二值化是将连续的数值特征转换为布尔值(0 或 1)的过程。这种方法常用于将连续特征离散化,以便于模型的理解和处理。
以下是一些常见的定量特征二值化的方法:
- 1. 阈值分割:根据一个特定的阈值,将定量特征的值划分为两个类别。例如,大于阈值的数值标记为 1,小于等于阈值的数值标记为 0。
- 2. 中位数分割:将定量特征的值与中位数进行比较,大于中位数的标记为 1,小于等于中位数的标记为 0。
- 3. 等频分割:将定量特征的数值范围等分成多个区间,然后根据数值所在的区间进行二值化。
二值化的目的是将连续的特征转换为离散的特征,以便于模型的学习和理解。它可以简化问题,减少特征的维度,并在一些情况下提高模型的性能。
然而,二值化也可能会丢失一些信息,因此在选择二值化方法时需要谨慎考虑。此外,对于某些模型,保留原始的定量特征可能更有意义,因为它们可以捕捉到更细致的信息。
2.3.3对定性特征哑编码
哑编码是一种将定性特征(如类别、标签等)转换为数值特征的方法。它的目的是将非数值的特征转化为模型可以处理的数值形式。
对于一个有n个不同类别定性特征,通常会使用哑编码将其转换为n个二进制特征。哑编码的基本思想是为每个类别创建一个新的特征,并且对于该类别对应的样本,该特征的值为1,其他类别对应的特征值为0。
例如,对于一个有三个类别的定性特征(如颜色:红色、蓝色、绿色),可以使用哑编码将其转换为三个二进制特征:
- - 红色:color_red = 1, color_blue = 0, color_green = 0
- - 蓝色:color_red = 0, color_blue = 1, color_green = 0
- - 绿色:color_red = 0, color_blue = 0, color_green = 1
通过这种方式,模型可以理解和处理定性特征,并将其与其他数值特征一起进行训练和预测。
哑编码的好处是它保留了定性特征的类别信息,并且可以避免将类别直接视为数值所带来的潜在问题(如排序假设)。此外,哑编码还可以方便地进行特征交叉(Feature Crossing),从而捕捉不同类别之间的交互作用。
2.3.4处理缺失值
在数据分析中,处理缺失值的常见方法有以下几种:
- - 均值插补(Mean Imputation):将缺失值用变量的均值来代替。适用于连续型变量,但可能会导致数据集的均值偏移。
- - 中位数插补(Median Imputation):将缺失值用变量的中位数来代替。适用于连续型变量,对于有偏分布的数据较为有效。
- - 众数插补(Mode Imputation):将缺失值用变量的众数来代替。适用于离散型变量。
- - 回归插补(Regression Imputation):通过建立回归模型来预测缺失值。适用于存在相关性的变量。
- - K近邻插补(K-nearest neighbor Imputation):根据与缺失值最接近的K个样本的值来插补。适用于存在相似性的样本。
- - 多重插补(Multiple Imputation):通过多次模拟来生成多个完整的数据集,每个数据集都包含对缺失值的不同估计。
在实际应用中,需要根据数据集的特点和分析需求来选择合适的缺失值处理方法。
2.3.5数据变换
数据变换是数据预处理中常用的技术,它可以帮助改善数据的分布、降低数据的复杂性或增强数据的可解释性。以下是一些常见的数据变换方法:
- 1. 标准化/正则化:将数据映射到特定的范围内,如[0,1]或[-1,1]。这可以消除不同特征的量纲差异,使模型对特征的缩放不敏感。
- 2. 对数变换:对数值较大或呈指数增长的数据进行对数变换,可以使数据更加平稳,并且在一些情况下可以改善模型的性能。
- 3. 平方根变换:对于具有长尾分布的数据,可以使用平方根变换来使数据更加正态分布。
- 4. Box-Cox 变换:Box-Cox 变换是一种广义的幂变换,可以根据数据的特点选择最佳的幂参数,使数据更接近正态分布。
- 5. 离散化/二值化:将连续数据转换为离散的类别或二进制值,适用于一些分类问题或需要简化数据的情况。
- 6. 主成分分析(PCA):通过线性变换将高维数据降维到较低的维度,保留主要的信息。
- 7. 数据扩充:通过对现有数据进行随机变换、旋转、缩放等操作,增加数据的多样性,有助于提高模型的泛化能力。
- 8. 时间序列操作:对于时间序列数据,可以进行差分、移动平均等操作,以去除趋势或季节性因素。
常见的数据变换有基于多项式的、基于指数函数的、基于对数函数的。4个特征,度为2的多项式转换公式如下:
使用preproccessing库的PolynomialFeatures类对数据进行多项式转换的代码如下:
from sklearn.preprocessing import PolynomialFeatures #多项式转换 #参数degree为度,默认值为2 PolynomialFeatures().fit_transform(iris.data)基于单变元函数的数据变换可以使用一个统一的方式完成,使用preproccessing库的FunctionTransformer对数据进行对数函数转换的代码如下:
from numpy import log1p from sklearn.preprocessing import FunctionTransformer #自定义转换函数为对数函数的数据变换 #第一个参数是单变元函数 FunctionTransformer(log1p).fit_transform(iris.data)
特征工程的后期方法根据应用领域不同,使用的方法完全不一样。在互联网领域,主要是应用特征选择的方法。在计算机视觉、语音信号处理,自然语言处理主要是特征提取。
2.4.1特征选择
当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:
根据特征选择的形式又可以将特征选择方法分为3种:
2.4.1.1Filter
方差选择法
方差选择法是一种用于特征选择的方法,常用于机器学习和数据分析中它的基本思想是根据特征的方差来评估其对模型的重要性。
具体来说,方差选择法认为具有较大方差的特征更有可能对模型的预测结果产生较大影响,因此可以选择这些特征来构建模型,相反,方差较小的特征可能对模型的预测能力贡献较小,因此可以考虑忽略它们。
from sklearn.feature_selection import VarianceThreshold #方差选择法,返回值为特征选择后的数据 #参数threshold为方差的阈值 VarianceThreshold(threshold=3).fit_transform(iris.data)
相关系数法
相关系数法是一种统计分析方法,用于衡量两个变量之间的线性关系强度。它通过计算两个变量之间的相关系数来评估它们之间的关联程度。
相关系数的取值范围通常在-1 到 1 之间,其中-1 表示完全负相关,1 表示完全正相关,0 表示无相关性。相关系数的值越接近-1 或 1,说明两个变量之间的关系越强;值越接近 0,则表示关系越弱。
相关系数法在数据分析、统计学和机器学习等领域都有广泛的应用。它可以帮助我们了解变量之间的关系,发现数据中的模式和趋势,以及进行预测和建模。
from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr #选择K个最好的特征,返回选择特征后的数据 #第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数 #参数k为选择的特征个数 SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
卡方检验
相关系数法是一种统计分析方法,用于衡量两个变量之间的线性关系强度。它通过计算两个变量之间的相关系数来评估它们之间的关联程度。
相关系数的取值范围通常在-1 到 1 之间,其中-1 表示完全负相关,1 表示完全正相关,0 表示无相关性。相关系数的值越接近-1 或 1,说明两个变量之间的关系越强;值越接近 0,则表示关系越弱。
相关系数法在数据分析、统计学和机器学习等领域都有广泛的应用。它可以帮助我们了解变量之间的关系,发现数据中的模式和趋势,以及进行预测和建模。
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 #选择K个最好的特征,返回选择特征后的数据 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
互信息法
相关系数法是一种统计分析方法,用于衡量两个变量之间的线性关系强度。它通过计算两个变量之间的相关系数来评估它们之间的关联程度。
相关系数的取值范围通常在-1 到 1 之间,其中-1 表示完全负相关,1 表示完全正相关,0 表示无相关性。相关系数的值越接近-1 或 1,说明两个变量之间的关系越强;值越接近 0,则表示关系越弱。
相关系数法在数据分析、统计学和机器学习等领域都有广泛的应用。它可以帮助我们了解变量之间的关系,发现数据中的模式和趋势,以及进行预测和建模。
from sklearn.feature_selection import SelectKBest from minepy import MINE #由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5 def mic(x, y): m = MINE() m.compute_score(x, y) return (m.mic(), 0.5) #选择K个最好的特征,返回特征选择后的数据 SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
2.4.1.2Wrapper
递归特征消除法(Recursive Feature Elimination,RFE)
是一种特征选择方法,属于包装法,也是向后选择法。它的主要思路是反复建立多种模型,每一次根据系数的不挑出差的特征,并去除挑出来的特征,然后在剩余的特征上重复该过程,直到遍历了所有的特征。
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression #递归特征消除法,返回特征选择后的数据 #参数estimator为基模型 #参数n_features_to_select为选择的特征个数 RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)
2.4.1.3Embedded
基于惩罚项的特征选择法
是一种常见的特征选择方法,通过L1正则项来选择特征。L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性。
使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用feature_selection库的SelectFromModel类结合带L1惩罚项的逻辑回归模型,来选择特征的代码如下:
from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression #带L1惩罚项的逻辑回归作为基模型的特征选择 SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)
基于树模型的特征选择法
是指通过使用决策树或随机森林等基于树的模型,根据特征在树中的重要性进行特征选择。这种方法在机器学习中比较常用,因为树模型具有较强的能力和可解释性。
其中,CART(Classification And Regression Tree)等单树模型是完全可解释的,因为可以很容易地通过观察最终决策树中的分割来遵循它们的预测逻辑。但是,CART是使用每次形成一个分割的树的贪婪启发式方法进行训练模型的,这种方法会产生许多缺点。
而基于树的集成学习器,如随机森林和梯度增强(如XGBoost),通过集成大量单树模型的预测来改进CART的性能。这些模型在计算特征重要性时,可能会存在一定的敏感性,尤其对具有很多潜在分裂点的特征,及特征中包含一些易形成偏倚问题的数据。
此外,SHAP( SHapley Additive exPlanations )是一种最新的方法,它统一了许多早期的方法,旨在解决集成树模型中的偏倚问题,并使用博弈论方法来理解和解释每个特性是如何驱动最终预测的。
from sklearn.feature_selection import SelectFromModel from sklearn.ensemble import GradientBoostingClassifier #GBDT作为基模型的特征选择 SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)
预设函数空间往往在特定子任务的鲁棒性和泛化能力方面表现不佳
3.1鲁棒性
在统计学领域和机器学习领域,对异常值也能保持稳定、可靠的性质,称为鲁棒性。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持某些性能的特性。有一个与鲁棒性很相似的概念叫模型的泛化能力。
鲁棒是Robust的音译,也就是健壮和强壮的意思。它也是在异常和危险情况下系统生存的能力。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。所谓“鲁棒性”,也是指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性。根据对性能的不同定义,可分为稳定鲁棒性和性能鲁棒性。以闭环系统的鲁棒性作为目标设计得到的固定控制器称为鲁棒控制器。
鲁棒性包括稳定鲁棒性和品质鲁棒性。一个控制系统是否具有鲁棒性,是它能否真正实际应用的关键。因此,现代控制系统的设计已将鲁棒性作为一种最重要的设计指标。
3.2泛化能力
是指机器学习算法对新鲜样本的适应能力,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。
根据泛化能力好的网络设计的神经网络控制器的鲁棒性也会有所改善。泛化能力指对未知数据的预测能力。例如小样本。
早期的NLP文本生成主要依赖传统的循环神经网络(RNN),长短时记忆(LSTM)网络或门控循环单元(GRU),这三种模型都基于循环结构
循环神经网络(Recurrent Neural Network,RNN)是一种常见的神经网络结构,它在处理序列数据时非常有用RNN 具有循环连接,允许信息在网络中在不同时间步之间传递。
RNN 可以用于各种任务,如自然语言处理中的文本生成、语音识别、时间序列预测等。通过学习序列中的模式和关系,RNN 可以对下一个时间步的输出进行预测
然而,传统的 RNN 可能会面临梯度消失或梯度爆炸等问题,这会影响其性能和学习能力。为了解决这些问题,研究人员提出了一些改进的 RNN 架构,如长短时记忆网络(Long Short-term Memory,LSTM)和门控循环单元(Gate Recurrent Unit,GRU)等。
长短时记忆网络(Long Short-Term Memory)是循环神经网络(Recurrent Neural Network)的变种结构,主要用于情感分析,机器翻译,语音识别和图像识别等领域。
在传统的循环神经网络中,算法是将序列按时间展开,然后在每一时刻分别输入数据。而长短时记忆网络通过引入一种称为“记忆单元”的结构来克服传统循环神经网络的缺点。这种结构能够在长序列中保持信息的流动,捕捉和理解长序列中的复杂依赖关系。
长短时记忆网络已经被广泛应用于许多序列学习任务,如语音识别、机器翻译和时间序列分析等。
门控循环单元(Gated Recurrent Unit,简称GRU)是一种循环神经网络(RNN)的变体,旨在解决传统RNN中的长期依赖问题,并提供一种更简化的门控机制。GRU是由Cho等人在2014年提出的,类似于长短期记忆网络(LSTM),但减少了LSTM中的门控单元。
GRU的核心是更新门(update gate)和重置门(reset gate),它们控制了信息的流动和存储,以捕捉长期依赖关系。与传统的RNN相比,GRU能够更好地处理长序列数据,并具备较强的记忆能力,适用于需要捕捉长期依赖关系的任务,如自然语言处理、语音识别、机器翻译等。
因RNN存在记忆短暂问题,LSTM和GRU应运而生,但RNN架构仍面临多项挑战
- 并行计算能力不足,RNN需要按序列处理序列数据中的每个时间步,这限制了它在训练过程中充分利用GPU的并行计算能力
- 长程依赖问题(长期依赖问题,长距离依赖问题)
- 模型容量限制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。