手撕LLM 从0开始讲解AI大模型底层技术原理
机器学习(Machine Learning,ML)是实现人工智能的核心方法,是从有限的观测数据中“学习”(or“猜测”)出一个具有一般性的规律,并利用这些规律对未知数据进行预测的方法。
传统的机器学习主要关注如何学习一个预测模型,一般需要首先将数据表示为一组特征(Feature),特征的表示形式可以是连续的数值/离散的符号等形式。
而后将这些特征输入到预测模型,并输出预测结果。这类机器学习可以看作是浅层学习(Shallow Learning),其重要特点是不涉及特征学习,其特征主要靠人工经验或者特征转换方法来提取。
有监督学习(Supervised Learning):很像人通过刷题的学习过程?用带了标准答案的习题集去刷题,如果做错了就根据错误的原因反思改进。当新的题目到来时,便可根据过去刷题的经验来去写新的题目。
例子: 训练一个模型用于识别一个公司的财务报表是否有财务舞弊: 有1000份财务报表,每份报表上体现了资产负债率、现金流量等关键数据,我们用X指代。报表有500份舞弊的和500份没有舞弊的。
那么,我们就有一个1000个样本的训练数据集;X是每个训练样本的输入或者特征;该样本是否0舞弊则是由人工标注的输出或者目标。
对于每一份输入的训练数据,都是有一个确定的预期输出结果的,因此称为“有监督”。我们可以称这样的训练样本为“带标签的输入、输出对”。
利用这个训练数据集,我们对算法进行训练。整体而言,训练出了一个函数f(X),他“学习”了训练集中f(X1)=舞弊,f(X2)=正常,f(X3)=正常,f(X4)=舞弊,……,f(X1000)=舞弊的信息。
1.分类(Classification): 预测输入样本属于哪个类别或者类别的概率分布。典型的例子包括垃圾邮件分类、图像分类等。
2.回归(Regression): 预测输入样本的数值输出,通常是连续的实数值。典型的例子包括房价预测、股票价格预测等。
3.目标检测(Obiect Detection): 在图像或者视频中检测出目标物体的位置和类别。例如自动驾驶中识别出道路上的车辆、行人、交通标志等;或者人脸识别中判断出哪一部分是人脸。
4.序列生成(Sequence Generation): 根据输入的序列生成输出的序列,如机器翻译、音乐生成等。
5.序列标注(Sequence Labeling): 序列标注是一种常见的机器学习任务,其中输入数据通常是序列数据,例如文本、语音、生物信息学等。
有监督学习可以对输入的序列中的每个元素进行标签预测,如命名实体识别(Named Entity Recognition,NER,指自然语言处理中,能从文本中提取如人名、地名、组织名、日期、时间、金额等具有特定意义的实体或实体类别)、语音识别(Speech Recognition)等
无监督学习(Unsupervised Learning)是机器学习中一种常见的学习范式,其目标是从未标记的数据中自动地发现数据中的结构、模式、关联或者表示,而无需使用人工标签或者先验知识的指导。
无监督学习面临的挑战在于缺乏带有标签的训练样本来指导学习过程,因此需要自动地从数据中发现模式和结构。
无监督学习的例子: 根据购物习惯,对客户进行分类。假设有一大组顾客的购物数据,包括他们的购买金额、购买时间、购买商品等信息。这些数据并没有被事先标记或分类。
通过应用无监督学习算法,如k-means聚类算法或层次聚类算法,我们可以自动识别出具有相似购物行为的顾客群体,并将他们分为不同的簇。
这些簇可以对应于不同的消费习惯、购买偏好或市场细分,从而可以帮助企业了解顾客行为并作出相应的业务决策。
图像压缩的目标是通过减少图像中的冗余信息,从而减小图像的存储空间或传输带宽,同时尽量保持图像的质量。数据降维是图像压缩的一种方式,通过减少图像数据的维度来达到压缩的目的。
自编码器则可以通过学习图像的低维表示和重构图像来实现数据的降维和压缩。图片压缩不是非得机器学习,但无监督学习确实可以实现图片压缩!>
这里是一个降维问题。
1.聚类(Clustering): 将数据集中的样本根据相似性进行自动分类,形成不同的簇。典型的例子包括顾客分群、社交网络用户聚类等。
2.异常检测(Anomaly Detection): 识别数据中的异常样本,这些样本与正常样本不同,可能是潜在的异常事件或异常行为。典型的例子包括反洗钱、信用卡欺诈检测等。
3.降维(Dimensionality Reduction): 将高维数据映射到低维空间,保留数据的主要信息,去除冗余和噪音。典型的例子包括图像压缩等。
4.关联规则挖掘(Association Rule Mining): 从大规模数据集中发现频繁出现的关联规则,用于发现数据中的潜在关联关系。典型的例子包括购物篮分析、推荐系统等。
TikTok等产品中使用的推荐算法通常是基于机器学习技术,包括了一系列的无监督学习和监督学习方法。
在推荐系统中,无监督学习方法可以用于从大量的未标记数据中学习用户行为模式、内容特征等信息,从而为用户提供个性化的推荐。
例如,TikTok的推荐算法可能通过无监督学习方法,如聚类(Clustering)、降维(Dimensionality Reduction)等,对用户上传的大量视频数据进行分析和处理,从中提取出视频的特征。
如视频的内容、情感、时长等,并根据用户的观看历史、行为偏好等信息,将相似的视频聚类在一起,从而实现相似内容的推荐。
监督学习方法也常常用于推荐算法中,通过使用标记的样本数据,如用户的历史行为数据(如点击、点赞、评论等)和用户的反馈(如用户的喜好、兴趣等),来训练模型进行推荐预测。
自监督学习本身是无监督学习的一种范式,因为它也不需要人工去打标签;但在体现出来的能力上,自监督学习和无监督学习非常不一样,因此在这里做单独介绍。
自监督学习主要是利用辅助任务(Pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。
左图展示了自监督学习和有监督学习的区别: 例如,一段文字: “白银说的话就像是一位癌症晚期患者说的话。
一个有监督任务就是判断这句话是否有害。这句话当然有害,但机器不可能自动学习出它有害,我们需要人工给他打上“有害”的标签。
但如果是无监督学习任务,例如完形填空,机器就可以这么做: 把上面这段文字先变成“白银说的话就像是一位癌症晚期患者说的话。
他都【Masked】经这样了,你为什么【Masked】顺从他,你总得给人留一段美好的回忆吧,最后的时光里。”输入给模型,要求模型去预测两个被遮掩的词是什么。
而被遮住的这两个词是一个Ground Truth,它不需要任何人做判断,根据输入给机器的原文我们就知道这两个Masked标识对应的得是“已”和“不”。
这样一来,机器就可以根据一个预训练任务,对输入的样本自动产生新的输入x,自动产生标注x,并且用于学习了。
在强化学习中,Agent通过与环境的相互作用,观察环境的状态(State),执行不同的动作(Action),接收环境的反馈(奖励信号,奖励Reward)。
并根据反馈来调整其行为策略(Policy),从而逐渐学习如何在不同的环境中做出最优的决策。强化学习的关键特点包括以下几点:
(eg.我们开车的时候与我们所看到的路况进行交互,根据路上的行人、其他汽车、指示牌等的状态,选择怎么去打方向盘。那么整个汽车所在的公路就是Environment,公路上具体的路况就是State)
Agent是基于一定的策略Policy来选择要执行的Action的,而这个Policy往往是一个以当前State为自变量,要执行的Action为输出的一个函数。
(eg.我们在路上怎么打方向盘,就是Action。在什么样的路况下我们会怎么去打方向盘,就是Policy。我们打方向盘这件事情会影响环境的状态;而环境的状态改变又会返回来决定我们该怎么打方向盘。)
3.Reward和Goal: 环境向Agent提供奖励信号,用于反馈Agent的行为质量。Agent的目标是通过最大化预期的累积奖励,以此来学习如何做出最佳决策。
(eg.路边的其他车会向你打鸣告诉你你开的不好,违规了的话交警会对你处罚,这就是一个负的Reward。
你的Goal可能是以最快的速度最安全、不违规的到达目的地,你通过不断的与环境交互,学习出一个最佳的开车Policy,从而实现这个目标。)
4.试错学习和优化: 强化学习中的Agent通过与环境的交互来不断学习和优化其策略,这是一个不断试错的过程。
State和Action之间的往复交互是强化学习的主体部分,所以是Trial and Error Learning。强化学习的最终目标是一个好的策略。
强化学习不要求预先给定任何数据,而是通过接收环境对动作的奖励(反馈)获得学习信息并更新模型参数。
其关注点在于寻找探索(对未知领域的,Exploration)和利用(对已有知识的,Exploitation)的平衡
1.*自动驾驶车辆*: 强化学习在自动驾驶领域中也得到了广泛应用,例如通过训练智能车辆在不同道路条件下学习驾驶策略,包括避免碰撞、减少能耗等。
(自动驾驶中既要用有监督学习的图像识别技术去理解当前的State,又要用RL的技术去不断优化驾驶策略)
2.*游戏与游戏玩家*: 强化学习被广泛用于电子游戏中,例如通过训练智能代理在复杂的游戏环境中进行游戏策略决策,如围棋、国际象棋等。
同时,强化学习还可以用于训练游戏中的虚拟角色,使其能够自主学习和优化其行为策略。(eg.AlphaGo)
3.机器人控制: 强化学习在机器人领域中有广泛的应用,包括自主导航、机器人手臂控制、无人机控制等。
浅层学习通常指的是使用较少层次、较简单结构的机器学习模型,例如传统的线性回归、逻辑回归决策树、支持向量机等。
浅层学习(Shallow Learning),也称为表面学习或者传统学习,是一种机器学习方法其主要通过构建浅层的、较简单的模型来进行模式识别、分类、回归等任务。
以及一些非线性模型,如K近邻(K-NearestNeighbors)和随机森林(Random Forests)等。这些方法通常基于人工设计的特征(即特征工程),通过对特征进行处理和选择来构建模型,并利用这些模型进行预测和分类。
相对于深度学习(Deep Learning)而言,浅层学习通常采用较简单的模型架构和较少的层次结构,不涉及复杂的深层神经网络结构。
特征(Feature),是指从原始数据中提取出的、用于表示样本的属性或信息。(eg.想起有监督学习任务里我们提到的财务舞弊识别的例子了吗?一份财务报表有一堆信息,机器是看不懂的。
我们可能会利用财务报表,计算出资产负债率、流动比率指标,作为浮点数输入给机器。那么资产负债率和流动比率就是我们选出来的财务报表的特征!)
在机器学习模型中,特征被用作模型的输入,用于表示样本的不同属性,从而帮助模型进行学习和预测。因此,首先要将数据表现为一组特征,而后才能将其输入,进行机器学习。
#前面讲了那么多,终于我们开始学习一些和我们所能接触到的大语言模型更加接近的内容了!!读这一章前最好先弄明白什么是RNN噢。
细讲seq2seq对了解大语言模型有重大的意义: 它启发了序列自编码器,这对于后来出现的NLP的自监督学习很有意义。而且Encoder-Decoder的架构也在Transformer里出现。
#Attention在一开始是一个对基于RNN的seq2seq模型的改进技巧。当然,后面出现了放弃了RNN,只保留了Attention的剧情,大家应该都提前知道了。
seq2seq是一个很强大的模型,不但可以用来做机器翻译,还可以用来做很多NLP任务,比如自动摘要、对话系统等。
神经机器翻译(NMT)用了seq2seg的结构,它的另一个常见的名字是编码-解码器(EncoderDecoder)结构。
编码器 Encoder: 读取输入文本,将输入的文本(词序列)整体编码成一个表示向量,而后交给Decoder进行解码。
在编码器中,输入的词会变成一个one-hot向量,而后经过Embedding层投射到一个(512维的)向量空间,随后输入到RNN的结构里面去
(这个RNN一般是LSTM,而且可以是双向等结构,而且可以有很多层,即把神经网络搞的很深,从而可以去提取更高级的特征)。
Context Vector: 经过了编码器中的RNN的一系列计算,输出来的对源文本整体的一个表示向量。
解码器Decoder: 接受编码器编码出的输入(以及标准答案的词序列),自行生成文字。在NMT中,Decoder的输出是预测出的词的序列,但输入在训练和预测时有所不同。
“其实,free running的模式真的不能在训练时使用吗?--当然是可以的!从理论上没有任何的问题,又不是不能跑。但是,在实践中人们发现,这样训练太难了。
因为没有任何的引导,一开始会完全是瞎预测,正所谓“一步错,步步错”,而且越错越离谱,这样会导致训练时的累积损失太大(「误差爆炸」问题,exposurebias),训练起来就很费劲。
这个时候,如果我们能够在每一步的预测时,让老师来指导一下,即提示一下上一个词的正确答案,decoder就可以快速步入正轨,训练过程也可以更快收敛。
因此大家把这种方法称为teacher forcing。所以,这种操作的目的就是为了使得训练过程更容易。”
Decoder一上来就瞎预测自己来跑,就像是我们高中盲目刷题,在完全没有老师指导的情况下不断积累自己瞎ib写题产生的经验,可能越走越偏。
一直按照标准答案来训练,就像高中刷题时一直看着正确答案来写,如果真上了高考考场,没了标准答案,那就忽然蒙圈了。。
计划采样: 我们设置一个概率p,每一步,以概率p靠自己上一步的输入来预测,以概率1-p根据标准答案来预测。
如果我们每一步都预测出概率最大的那个词,而后输入给下一步,那么这种方式我们就称之为GreedyDecoding.
比如,你用你的手机输入法去打字的时候,它也是会猜你的下一个词,并且按概率排序的!那如果我们一直点击输入法给你推荐的第一个词……
eg.我用iPhone打了“不要”两个字,而后一直只点击苹果系统自带输入法推荐的第一个词。就有了下面这段文字:
不要再来了,我们的生活方式是什么时候回来呢,我们的生活方式是什么时候回来呢,我们的生活方式是什么时候回来呢,我们的生活方式是什么时候回来呢,我们的生活方式
这其实体现了贪心算法的一个问题:Greedy只能保证每一步是最优的,但却无法保证预测出来的句子整体是最优的。
特别是如果在t时刻贪心选择的词不是全局最优,会导致t时刻往后的所有预测词都是错误的,这样便就没有回头路了。
Beam Search的思想是每一步都多选几个可能的序列作为候选,最后综合考虑,选出最优组合。具体方案如下:
在beam search的过程中,不同路径预测输出结束标志符的时间点可能不一样,有些路径可能提前结束了,称为完全路径。
Beam search的停止条件有很多种,可以设置一个最大的搜索时间步数,也可以设置收集到的最多的完全路径数。
Beam search作为一种剪枝策略,并不能保证得到全局最优解,但它能以较大的概率得到全局最优解,同时相比于穷举搜索极大的提高了搜索效率。
朴素的seq2seq神经机器翻译模型中,我们用EncoderRNN的最后一个神经元的隐状态作为DecoderRNN的初始隐状态。
这里存在一个问题: Encoder的最后一个隐状态(Context Vector)承载了源句子的所有信息,成为整个模型的“信息”瓶颈。
注意力机制就是希望打破这个信息瓶颈。宏观来看,Attention直接把Decoder中的每一个隐层,和Encoder中的每一个隐层,都连接起来了!
前面提到了,“Attention直接把Decoder中的每一个隐层,和Encoder中的每一个隐层,都连接起来了”这样的话,EncoderRNN的最后一个隐状态就不再是“信息”瓶颈了。
对于每一个词,它不仅可以接受ContextVector作为辅助信息,也可以通过“直连”线路去获取EncoderRNN中的其他的隐状态的信息,从而Decoder的解码进行辅助。
参考右图中的Decoder的第二个时间步,我们以he为输入,并且综合考虑了il、a、m、entarte的隐状态。
可见,he时刻的注意力主要分布在Encoder的第2和第4个词上,解码器最终做出了输出hit的决定。
点积(Dot product)是线性代数中的一种运算,它是同维两个向量之间的一种运算方式,通常用符号“·”表示。
也就是说,点积将两个向量中对应位置的元素相乘后再求和。因此,点积的结果是一个标量(Scalar),表示两个向量的相似程度或者两个向量在同一方向上的投影长度。
总之,我们需要知道两件事: 1、点积的结果是一个标量 2、点积的结果反映了两个同维向量的相似程度
it指的是谁呢?是street,还是animal?根据下图,我们可以看到,解码器处理it这个词的时候,注意力机制能够让it和“The animal”关联起来,并将其融入到it的编码中。
1.解决了信息瓶颈问题: 在传统的seq2seq模型中,编码器将整个源序列编码为一个固定长度的向量。
而Attention机制可以让解码器在每个时间步上,根据源序列中不同位置的信息进行不同程度的“聚焦”,充分利用源序列中的信息,提高型的表现。
2.提高处理长序列的能力,提升模型的泛化性能: Attention机制可以使模型对输入序列的长度更加鲁棒,不会因为输入序列长度的变化而影响模型的性能。
这是因为Attention机制会根据不同的输入序列长度自适应地调整“聚焦”的程度,使得型可以有效地处理不同长度的输入序列。
3.增加模型的可解释性: Attention机制可以让我们更加直观地理解模型在生成每个输出时“关注”了源序列中的哪些部分。
并且可以通过可视化Attention权重来直观地观察模型的注意力分配情况,从而更好地调试和优化模型。例子可以参考上面的可视化图。
5.有助于缓解梯度消失问题,因为Decoder的每一时间步都和所有Encoder的隐状态相连了。
从前的机器翻译的至高点--SMT(统计机器翻译)都是极其复杂的,涉及到大量的特征工程,海量的专家知识,无数的资源积累,繁多的功能模块,还需要庞大的人力去维护。
1.领域不匹配。很多时候,我们在Wikipedia、论文、新闻稿等这种比较正式的语料库中训练,那么用来翻译Twitter,甚至在游戏国际服里和外国人的交流这种口语或者非正式语料时,就会有问题。
2.长文本的翻译,目前介绍的都只是翻译一个句子,句子相对来说还是比较短的,如果要翻译一篇论文或一本书,那么怎样考虑非常长距离的上下文依赖关系?
3.对一些惯用语、俚语等翻译容易闹笑话(说曹操,曹操到;笑死我了;等等)讲这些的目的其实还是想要铺垫后面的预训练大语言模型。
现在,Attention已经变成了DL的一个的通用技术,并不局限于seq2seq和机器翻译。其一般的定义是:
我们在seq2seq里首次提到了注意力机制,我们知道了在Attention机制中,点积操作用于计算输入序列和输出序列中每个位置的相关性得分。
在seg2seq里参与点积的分别是Encoder中每个时间步的隐状态和Decoder中每个时间步的隐状态。
- 
		    上一篇 办公礼仪/办公礼仪有哪些
- 
		    下一篇 【样板房广告,样板房广告语大全】

 
                         
                         
                        