闲话少说,就问一件事情,大家在搞科研的时候有没有遇到这种情况,就是当前输入维度为N训练一个网络,但后期N的大小可能就变了,这时候普通的MLP或者CNN都会傻眼,但Transformer可以非常完美地解决这个问题,并且效果极佳。这里给大家分享我整理的87篇Transformer及相关变体的论文仓库、世界上唯一一本全面涵盖Transformer架构的系统书籍!相信对你学习和使用Transformer一定非常有帮助!
在介绍Transformer之前,首先要了解其中的一个非常重要的模块,那就是Attention。
Attention
先说要解决的问题,目前很多模型的输入都是一个向量,输出是一个分布或者一个类别:
然而存在以下情况,即输入是多个向量,而且有可能是改变的:
输出的话存在这么几种情况:
1、比如输入是_N_,输出还是_N_,例如一个句子中所有的词对应词性的判断;
2、输入是_N_,输出是1,例如对一段话来判断好坏;
3、输入输出维度不定,例如翻译任务:
例如“This is a cat”和“This is not a cat”两句话,一个4个词一个5个词,都想输入这个模型怎么办呢?这就是Attention想要解决的问题。这里只讨论第一种输出情况,即_N_个输入_N_个输出的情况。
在引入Attention之前我们能想到的便是FC全连接的操作,即1个词输入到一个FC中,但由于句子中可能存在同义词的问题(例如“I saw a saw”,前一个saw是动词,后一个是名词),所以需要引入上下文机制:
虽然能用这种window的思想做,但存在很多bug,例如window给多长?给定的window内的信息能不能学到我想要的上下文信息?变长的输入到底怎么解决?…
这时候Self Attention就要来了!**言简意赅地总结,Self Attention就是输入几个向量,输出就是几个向量。**并且输出的每个向量中,都包含了其余输入向量的信息。如下图:
了解了Self-Attention的实现结果,那么Self-Attention到底是怎么运作的呢?简单来说,可以表示成下面的隐含层的样子:
即每一个都包含了其他的α的输入信息。当然,具体的实现肯定不是这样的。这里要提到一种Dot-product的方式,可以计算两个向量之间的相关性,如下图:
两个向量经过两个矩阵参数运算后,得到两个向量q和k,经过点乘可以得到二者的联合信息。那么在Self-Attention中,具体的实现方式就是应用的Dot-Product,如下图:
第1个向量与q(query)计算得到的值,分别与其余的向量的k(key)做点积,再经过一个softmax得到最终的权重。
上述的权重可以理解为,其余每个向量的信息对于该向量的权重比例,接下来要利用这个权重对每个向量的信息进行提取,如下图:
以上,的计算就结束了,是不是很简单?其余的
也是通过这种方式并行计算统一得到的,这里就不再用这种方式展示了。
有了上面的介绍理解起来会很轻松,接下来从矩阵乘法角度再介绍一遍Self-Attention。
上面的方法是一个一个计算出来得到的,但实际计算过程中会用矩阵相乘,其中可以拼凑起来,如下图所示:
以上我们可以轻易地得到Q,K,V矩阵。
那么对于权重α的计算,可以清晰地用下面的图表示出来(在此不得不提李宏毅老师讲的是真的细,线代的内容都讲):
我们可以发现最终的α矩阵_A_可以用表示出来。
至此我们得到了相应的α矩阵,那么最终的_b_矩阵怎么得到呢?
按照先前所讲的,得到_b_就是把α的值与v相乘,矩阵表示的话如下图所示:
把刚刚的矩阵乘法概括一下,从Q,K,V得到到最终的b矩阵_O_,如下图:
这里面只有是需要学习的参数,其余的都是能计算得到的。**这时候发现,**即使I的维度发生变化,也只是会导致Q,K,V发生变化,但参数的值并不会发生改变。
对Self-Attention的进阶,是Multi-head-Attention,其实很简单,就是把Self-Attention的query变成多个头,然后自己的头去算自己的值,最后再通过一些方式处理一下,(例如再加入个矩阵相乘,或者拼接,这里就是玄学了),得到最终的
这时候有个非常有趣的问题,那就是输入的所有向量,它们好像并没有位置的关系,也就是输入的向量,没有先输入或者后输入的影响。
最简单的方式,就是在前面加上一个专属的位置信息
,就可以解决啦:
当然,Self-Attention也存在很多的问题,比较经典的一个就是在做语音处理的时候,由于信息很长,最终会导致_A_矩阵非常大,这时候就可以人为的限制输入长短影响:
Transformer
提到Transformer,不得不说的一大经典任务就是Seq2Seq的任务,虽然当下ChatGPT等众多模型已经把这种任务玩烂了,但目前值得去学习和优化的依旧没有减少。而Seq2Seq任务不得不提的一个模块,就是Encoder编码和Decoder解码模块。
首先说Encoder部分,其目的就是输入一排向量,再输出一排向量,其实这么一想,不光Self-Attention,RNN等都可以实现。
对于Transformer的Encoder来说,其架构可以转化成下面的样子(非常好理解):
也就是输入一坨子向量,经过一个Block,输出中间向量,再经历_n_个Block之后,得到最终的输出向量。而每个Block中,应用的便是Self-Attention与FC的结合。
而真正的Block在操作过程中,并不是简单的经过了Self-Attention与FC,而是有一个类似于Resnet残差的操作,还有一个针对特征Norm的操作,如下:
在经过Self-Attention之后会加上之前的向量数据,并经过一个norm,同理FC也是类似的操作。
对比原论文中的操作,我们可以看一下,整个Encoder网络是长这个样子的,其中输入也有Self-Attention中所介绍的位置信息:
下面介绍下Decoder的网络结构,首先是Autoregressive(AT)网络。
首先要将Encoder的输入放到Decoder的网络中,每次输入也都会用到Encoder输出的信息。这里具体怎么放进去的稍后说,Decoder的流程如下:
1、在最开始的时候,Decoder要单独输入一个Start的token(告诉机器,这是这句话最开始的一个表示),然后经过Decoder之后,输出得到一个向量(黄色),这个黄色向量经过Softmax之后,可以得到一个具体的概率值,从而选择相应的字符,比如这里是“机”;
2、把Start tocken和“机”一起输入,这种时候会输出一个“器”;
3、循环往复,直到生成完一整句话。
综上来看,Decoder的输入是有先后顺序的,后一个向量的输出会由前面的向量所决定。
我们这里对比看一下Encoder和Decoder的区别:
其实遮住中间一部分看,Encoder和Decoder的网络基本是类似的,都是经过Attention和FC之后,再加上一点小操作输出。注意这里有一个Mask-Attention的操作,具体方式是这样实现的:
例如计算第二个的时候,只拿前两个的q去操作,而不用后面的输入了,说白了就是Decoder的过程并不能“看着答案写作业”了,要一个一个往后输入才能得到。
这时候又有一个问题了,那就是Decoder输出到底什么时候结束呢?(输出最终有多长?)简单啊,在输出的向量的softmax里面多加一个值,用来决定是否是End不就完了么:
接下来说另一个Decoder的技术,叫Non-Autoregressive(NAT)。
前面说了,AT解码是一个一个往外输出的,所以会比较耗时,NAT的想法就是一口气输入多个Start,然后一口气输出多个向量,接着再看具体哪个是End,然后找End前面的部分就好,这样做非常的省时。但是,NAT效果往往不如AT。
下面开始详细说,Encoder和Decoder具体是怎么结合的。细心的朋友可以发现,之前中间遮住的部分,其实是有两个输入的:
也就是Encoder的输入要输入到Decoder中两次,为什么呢?下面这幅图说明了这个Cross Attention的原理:
可以发现,Decoder在经过mask版的Attention之后,还会再有一个Attention结构(Cross-Attention)。Decoder 的单个的输出,去生成q,而Encoder中生成的向量,去生成相应的k和v,然后再按照Self-Attention那一套去加权计算,得到一个值,就是当前Decoder单个输入所对应的值。
当然,产生第二个字符之后,操作也是一样的。(生成一个新的q,随后继续操作)
接下来就是玄学时刻:如何训练。首先,我们需要有很多label的数据,比如一组语音,对应着“机器学习”这四个字理论的输出。这时候其实就可以转化成一个分类问题了:
值得注意的是,在Decoder的输入环节,也是输入的真实值,毕竟如果一套试卷给了答案,做完后效果肯定会更好的啊。
针对Transformer来说,还有很多小Trick可以操作。首先就是Copy Mechanism,对于常用的数据,可以直接通过copy的方式生成,从而减小错误率。
再有就是局部最优和全局最优的情况。可能最开始选择最好的,但越往后生成的效果越差,但如果最开始选差一点,后面的效果就会很好,这里可以用Beam Search的操作。
以上基本就是Attention和Transformer相关的最基础的知识了,当然利用Transformer后期操作的方法还有很多,比如经典的GPT、Bert都有用过,有机会再去讲解啦。
在大模型时代,我们如何有效的去学习大模型?
现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
掌握大模型技术你还能拥有更多可能性:
• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;
• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;
• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;
• 更优质的项目可以为未来创新创业提供基石。
可能大家都想学习AI大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把都打包整理好,希望能够真正帮助到大家_。
一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF书籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型各大场景实战案例
结语
【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈