LLM在Transformer上的改动

news2024/11/14 7:57:09

LLM在Transformer上的改动

  • 1.multi-head共享
    • 1.1BERT的逻辑
    • 1.2multi-head共享
  • 2.attention的前后网络
    • 2.1传统Transformer:
    • 2.2GPTJ结构:
  • 3.归一化层的位置(LayerNorm)
  • 4.归一化层函数的选择
    • 4.1LayerNorm
    • 4.2RMSNorm
  • 3.激活函数
  • 4.LLama2结构
  • 5.MoE架构
  • 6.位置编码
    • 6.1位置编码的用处
    • 6.2长度外推性
    • 6.3主流位置编码
    • 6.4正余弦位置编码
      • 6.4.1编码的逻辑
      • 6.4.2正余弦编码值计算
    • 6.5可学习位置编码
    • 6.6ROPE相对位置编码
    • 6.7Alibi位置编码

1.multi-head共享

简介: 即在计算时,共享一些注意力权重,即用同一份。现在普遍使用的是Grouped-query模式。

1.1BERT的逻辑

在Self-Attention时如下:

  1. 输入分布经过三个线性层,变为Q、K、V,其形状为:h_d* h_d,即768 * 768
  2. BERT的注意力头(n_h)是12,隐含层(h_d)为768
    3.此时的进入注意力头后,Q、K都转换成:n_h个:L * h_d;这里的h_d就是64,因为总数是768,拆分了12个头得到的。
  3. 通过K转置后与Q相乘,注意力计算成为: L * L

1.2multi-head共享

示意图:(下面只是示意图,实际数量以具体为准)
在这里插入图片描述
原理: 用Bert举例,在进行注意力计算时,是有12个注意力头;现在呢:Q保持不变;K、V,比如:只采用6个头;那么计算的时候,每两个Q和同一个K计算、与同一个V计算。这样就共享了K、V权重参数。

Grouped-query计算逻辑如下:

  1. 进行线性层计算,得到Q、K、V时,输入是L * h_d; Q的线性矩阵为h_d * h_d; K、V由于注意力头只有原来的一半;而在与Q的矩阵计算注意力时,h_d=64,没有变。所以这里的K、V线性矩阵会变为:h_d * h_d/2;即768 * 384
  2. 进入注意力计算后,每两个Q和相同的一个K相乘,结果还是12份,注意力矩阵还是:L * L,接着每两个再与相同的V相乘,输出的结果矩阵形成不变:
    好处: 减少线性层W的大小,并且结果表示,减少一些参数,效果没有太明显的损失。

Multi-query计算逻辑如下:

**释义:**在Grouped-query时,是多份Q,与同一份K、V计算;Multi-query就是极端情况,每一层,所有的Q在计算注意力时,都与同一份K、V计算。

计算逻辑简介

1.以Bert为例:则线性层的K、V矩阵就变成h_d* h_d/12;即真实结果就是768 * 64.
好处: 降低了较大的权重参数量,模型计算速度也加快了。

2.attention的前后网络

简介: 这种网络结构的调整,称为GPTJ结构,即平行放置attention layer和feed forward layer层。

使用的模型: moss, palm(谷歌)用的这种结构,目前不算太主流。

2.1传统Transformer:

示意图:
在这里插入图片描述
计算的公式: 在这里插入图片描述

2.2GPTJ结构:

示意图:
在这里插入图片描述
公式如下:
在这里插入图片描述
对比释义:

  1. GPTJ将原来的Transformer的attention layer和feed forward layer层并行放置,少了一个残差计算、一个LayerNorm(归一化层
  2. 这种结构的调整,会导致前馈网络的计算结果和原来的有区别,原来的输入是过了self-attention的参数;但是现在是直接hidden输入的。
  3. 公式中的MLP指的是FeedForward
    结果: 在某些模型上表现还可以,但是主流还是传统的transformer结构。

3.归一化层的位置(LayerNorm)

在这里插入图片描述

  1. Post-LN:layer norm位于残差链接之后
    a. 使用post-LN的深层transformer容易出现训练不稳定的问题
  2. Pre-LN(前归一化):layer norm位于残差链接之中
    a. 相比于Post-LN,使用Pre-LN的深层transformer训练更稳定,可以缓解训练不稳定问题
    b.相比于Post-LN,Pre-LN的模型效果略差
  3. Sandwich LN(三明治归一化):在pre-LN的基础上额外插入了一个layer norm
    a. Cogview用来避免梯度爆炸的问题
    b. 缺点:训练不稳定,可能导致训练崩溃

目前是Pre-LN方式,模型用的多一些。

4.归一化层函数的选择

4.1LayerNorm

公式如下:
一
释义: 先计算张量的均值,再计算方差
在这里插入图片描述
释义: 通过原始张量减去均值,除以方差,再乘可以训练的参数gi;一般还会加上bi。这两个g、b都是可以训练的参数。

4.2RMSNorm

公式如下:
在这里插入图片描述
释义: 先对张量的值求平方,求和,求平均开根号得到的值,作为分母,每一个值做分子相除,最后除以一个可以训练的参数gi。目前主流是使用RMSNorm。

3.激活函数

示意图:
在这里插入图片描述
释义:

  1. 在初始的Transformer中,FeedFoward层使用的激活函数是relu
  2. 在BERT中,做了一定的改进,FeedFoward层使用的是gelu
  3. 现在的大语言模型中,在FeedFoward主要使用的是swish
  4. 在swish公式中,可以简略的看成是一个x与Sigmoid的相乘,其中beta是一个常数,常取1。这是一种gate机制,门控。
  5. 在这里使用swish会增大计算量,在前面的线性层现在的模型会降低参数,比如在Bert会映射到4倍的线性层上,现在大概会映射到1-2倍之间。

4.LLama2结构

示意图
在这里插入图片描述
释义:

  1. Transformer Block的改动,在前面的内容中有提到;在LLama2中一个叠加32层。
  2. 调整1:归一化层使用RMSNorm
  3. 调整2: self-attention采用了Grouped-query的形式
  4. 调整3: 位置编码有调整,RoPE
  5. 调整4:残差的方式连接有调整,为Pre-LN
  6. 调整5:FeedFoward的有调整,两个线性层和激活函数SiLU整体看做swish机制其中的激活函数采用SiLU,可以理解为Sigmoid,只是多了-beta

5.MoE架构

简介: MoE架构,又称为混合专家模型,即在一层transformer中,多个FeedFoward并行,通过一个线性网络层,去判断使用那个、或者那几个的FeedFoward层。

原理: 在FeedFoward中,考虑一个有可能并不能适用不同的任务或者是数据,所以用多个FeedFoward以图去适配不同的数据或者任务,即专家的概念。

示意图:
在这里插入图片描述
释义:

  1. 通过图中可以看到,FeedFoward由多个组成,通过一个线性层router去判断使用那些FeedFoward;可以是1个,也可以是多个。
  2. Mixtral是该架构,据传GPT4也是
  3. FeedFoward可以是传统的结构,也可以是LLama2的结构。
  4. router是一个分类的线性层,是在模型训练时,学习到的;
  5. 训练时,走某一个FeedFoward,反向传播时,也会训练走的FeedFoward。

6.位置编码

6.1位置编码的用处

简介: 由于transformer中除了激活层和归一化层外,使用的都是线性层,编码过程中没有明显的位置信息;字词位置的交换,仅相当于矩阵中行位置的交换;这带来并行计算的优势,但是也弱化了语序信息;因此需要引入位置编码来弥补。

示意图:
在这里插入图片描述
释义:

  1. 上面的两个张量相乘,交换张量中的向量位置后,计算得到的结果数值并没有变化,只是顺序改变了,这样的变化不够明显,或者说经过pooling后,位置信息可能就遗失了。
  2. Bert当中就设计了位置编码的向量,使得位置的信息能够保存在向量中,不同的顺序结果差距较大。Bert的位置编码是固定的512位,这也导致输入的内容有限。

6.2长度外推性

简介: 预测时序列长度比训练时候长,模型依然有好的表现,称为有较好的长度外推性。

举例:

  1. 训练样本最大长度512
  2. 预测过程输入样本长度1024

长度外推性是一种理想的性质,并非是必要的。没有,模型也能用,只是有场景限制。

6.3主流位置编码

在这里插入图片描述

6.4正余弦位置编码

6.4.1编码的逻辑

编码逻辑: 位置编码向量 + token向量 -->得到编码后的embedding ;即:Positional Encoding

示意图如下:
在这里插入图片描述
**释义:**其中红色圈住部分就是正余弦编码值。

6.4.2正余弦编码值计算

公式如下:
在这里插入图片描述
计算示意图:
在这里插入图片描述
详细释义:

  1. pos表示输入的文本的字符位置
  2. i代表一个字符的token维度的序号,由于是正弦余弦交替编码的,所以序号是两个为一组的。一组先后进行sin计算和cos计算。,这样2i;或者2i+1才能准确定位到具体的token维度位置。
  3. 正弦余弦在同一个文本字符位置、和token维度位置时,其位置编码是值是固定的。
    优点: 不管输入多长的内容,都能得到位置编码。
    缺点: 由于位置的编码值是固定的,效果相对会没有能够根据语料学习的好。

6.5可学习位置编码

简介: 一般称为position embedding,以Bert为代表;如同token embedding一样,随机初始化之后,靠梯度反传学习调整;缺点在于无法外推,需要预设最大长度.

举例: 比如在Bert中,位置编码长度为512,超过这个长度就无法输入数据了。
示意图:
在这里插入图片描述

6.6ROPE相对位置编码

简介: 希望语料中词的相对位置作为位置编码,记录语序的信息;比如:“我今天要去爬山!” 中“今”与“天”的相对位置就是1;这样的,预计就会有较好的外退性。根据这个逻辑,那位置编码是个矩形,因为每一个字都与其他所有字有个相对位置,加在注意力矩阵,岂不完美。相对位置编码这里介绍的两种都是不用训练的。

示意图
在这里插入图片描述
思想释义: 上述矩阵是一个传统的self-attention计算的结果,在位置信息上,只需要在每一个格子中,加入到相对位置信息即可,比如”错“和“不”即在值为0.11的格子中,加入位置相对为1的信息即可。

计算公式如下:
在这里插入图片描述
释义:

  1. 传统的Transformer中,Q、K是与对应矩阵W相乘;上面公式中,加入了e的指数;其中指数值中,包含位置m、n
  2. 通过三角函数变化得到最后的公式,即Q、K相乘的结果与Xm、Xn、还与它们相对位置m-n有关。即加入了相对位置信息。
  3. 会造成远距离的相关性下降,即m-n之间的差距太远。

6.7Alibi位置编码

简单来说,也是相对位置编码,示意图如下
在这里插入图片描述

释义:

  1. 这种方法简单粗暴,即在原来的Q*K的矩阵上,加上相对位置信息矩阵。
  2. 相对位置信息矩阵,每个格子的值,直接就是位置序号的差,再乘于一个系数。

系数: 系数与注意力的多头数量有关,是相体现位置信息有些句子、有些情况下不重要的意思。情况如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决SpringBoot3的Validated依赖实现自定义注解失效问题

我们引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> Validated实现自定义注解 我们首先看看自定义注解里面&#xff0c;用到的注解的包 我们…

当微软windows的记事本被AI加持

1985年&#xff0c;微软发布了Windows 1.0&#xff0c;推出了一款革命性的产品&#xff1a;记事本&#xff08;Notepad&#xff09;。这款软件旨在鼓励使用一种未来主义的新设备——鼠标&#xff0c;并让人们可以不依赖VI等键盘工具就能书写文本和编写代码。记事本因其简洁和高…

前端常用布局模板39套,纯CSS实现布局

前端常用布局模板39套&#xff0c;纯CSS实现布局 说明 写博客、官网、管理后台都可以参考以下布局模板&#xff0c;实现模板布局的方式包含&#xff1a;flex、CSS、HTML5、Layout。 不需要下载积分&#xff0c;没有特殊库引用&#xff0c;不用安装任何插件&#xff0c;打开资源…

微服务day07

Elasticsearch 需要安装elasticsearch和Kibana&#xff0c;应为Kibana中有一套控制台可以方便的进行操作。 安装elasticsearch 使用docker命令安装&#xff1a; docker run -d \ --name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \ //设置他的运行内存空间&#x…

java常用工具介绍

1. 集成开发环境&#xff08;IDE&#xff09;&#xff1a; • Eclipse&#xff1a;一个开放源代码的、基于Java的可扩展开发平台。它提供了一个框架和一组服务&#xff0c;用于通过插件组件构建开发环境。Eclipse 还包括用于Java开发的工具&#xff08;Java Development Tools,…

C++入门基础知识148—【关于C++ 二元运算符重载】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 二元运算符重载的相关内容&#xff01…

黑马智数Day7

获取行车管理计费规则列表 封装接口 export function getRuleListAPI(params) {return request({url: parking/rule/list,params}) } 获取并渲染数据 import { getRuleListAPI } from /apis/carmounted() {this.getRuleList() }methods: {// 获取规则列表async getRuleList(…

NodeJS的安装 npm 配置和使用 Vue-cli安装 Vue项目介绍

一.前端工程化 前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本 1. NodeJS的安装 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环 境&#xff0c;可以使 JavaScript 运行在服务…

Anolis8.2系统中搭建python环境

文章目录 安装依赖项依赖项介绍 下载python源码包安装python源码包 安装依赖项 [rootPython ~]# dnf install -y gcc make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel xz-devel libffi-devel uuid-devel libnsl2-d…

51c自动驾驶~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/11638131 #端到端任务 说起端到端&#xff0c;每个从业者可能都觉得会是下一代自动驾驶量产方案绕不开的点&#xff01;特斯拉率先吹响了方案更新的号角&#xff0c;无论是完全端到端&#xff0c;还是专注于planner的模型&a…

基于Python+Django+Vue3+MySQL实现的前后端分类的商场车辆管理系统

项目名称&#xff1a;基于PythonDjangoVue3MySQL实现的前后端分离商场车辆管理系统 技术栈 开发工具&#xff1a;PyCharm、Visual Studio Code (VSCode)运行环境&#xff1a;Python 3.10、MySQL 8.0、Node.js 18技术框架&#xff1a;Django 5、Vue 3.4、Ant-Design-Vue 4.12 …

JAVA后端生成图片滑块验证码 springboot+js完整案例

前言 现在大部分网部都是图片滑块验证码&#xff0c;这个得要与后端联动起来才是确保接口安全性 通过我们系统在发送手机短息时都会选进行滑块验证&#xff0c;但是我们要保证发送短息接口的全安&#xff0c;具体路思如下 那么这个滑块的必须是与后端交互才能保证安全性&…

人工智能大比拼(3)

已知x-,y-6&#xff0c;且下述表达式的值与x的取值无关&#xff0c;求y -10x2y7xy 上述这个很简单的数学题&#xff0c;可是在各家AI之间出现了争议&#xff0c;本期我使用了四个AI&#xff1a;kimi&#xff0c;商量&#xff0c;文心一言&#xff0c;chatyy 先来看一下kimi的表…

SQLI LABS | Less-45 POST-Error Based-String-Stacked-Bilnd

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-45/ 本关是堆…

sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?

什么是Pump 扫链机器人&#xff0c;它的盈利逻辑优化策略是什么&#xff1f; Pump 扫链机器人&#xff0c;通过智能化、自动化的买卖操作帮助投资者实现快速盈利。在此基础上&#xff0c;我们对该机器人的盈利逻辑进行了深度优化&#xff0c;涵盖了买入策略和止盈策略的各个方面…

MYSQL SQL优化总结【快速理解】

1、优化insert操作 批量插入&#xff0c;防止大量与数据库进行访问 手动控制事务&#xff0c;减少事务的频繁开启和提交。 主键顺序插入 2、优化主键 主键优化的点就是避免主键过长&#xff0c;因为如果有二级索引&#xff0c;叶子节点存储的数据时间上是主键&#xff0c;如果主…

深入计算机语言之C++:String的模拟实现

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;从C语言到C语言的渐深学习 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 一、模拟实现 string 库 1.1 string 的成员变量…

植物大战僵尸杂交版v2.6.1最新版本(附下载链接)

B站游戏作者潜艇伟伟迷于11月3日更新了植物大战僵尸杂交版2.6.1版本&#xff01;&#xff01;&#xff01;&#xff0c;有b站账户的记得要给作者三连关注一下呀&#xff01; 不多废话下载链接放上&#xff1a; 夸克网盘链接&#xff1a;https://pan.quark.cn/s/279e7ed9f878 新…

【Pikachu】目录遍历实战

既然已经决定做一件事&#xff0c;那么除了当初决定做这件事的我之外&#xff0c;没人可以叫我傻瓜。 1.目录遍历漏洞概述 目录遍历漏洞概述 在Web功能的设计过程中&#xff0c;开发者经常会将需要访问的文件作为变量进行定义&#xff0c;以实现前端功能的灵活性。当用户发起…

[ 网络安全介绍 5 ] 为什么要学习网络安全?

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…