001 LLM大模型之Transformer 模型

参考《大规模语言模型--从理论到实践》

目录

一、综述

二、Transformer 模型

三、 嵌入表示层(位置编码代码)


一、综述

语言模型目标是建模自然语言的概率分布,在自然语言处理研究中具有重要的作用,是自然 语言处理基础任务之一。大量的研究从 n 元语言模型(n-gram Language Models)、神经语言模 型(Neural Language Models,NLM)以及预训练语言模型(Pre-trained Language Models,PLM) 等不同角度开展了系列工作。这些研究在不同阶段都对自然语言处理任务有着重要作用。随着基 于 Transformer 各类语言模型的发展以及预训练微调范式在自然语言处理各类任务中取得突破性 进展,从 2020 年 OpenAI 发布 GPT-3 开始,大语言模型研究也逐渐深入。虽然大语言模型的参数 量巨大,通过有监督微调和强化学习能够完成非常多的任务,但是其基础理论也仍然离不开对语 言的建模。
本章将首先介绍 Transformer 结构,并在此基础上介绍生成式预训练语言模型 GPT、大语言模
型网络结构和注意力机制优化以及相关实践。n 元语言模型、神经语言模型以及其它预训练语言
模型可以参考《自然语言处理导论》第 6 章[8],这里就不再赘述。

二、Transformer 模型

Transformer 模型[48] 是由谷歌在 2017 年提出并首先应用于机器翻译的神经网络模型结构。机
器翻译的目标是从源语言(Source Language)转换到目标语言(Target Language)。Transformer 结 构完全通过注意力机制完成对源语言序列和目标语言序列全局依赖的建模。当前几乎全部大语言 模型都是基于 Transformer 结构,本节以应用于机器翻译的基于 Transformer 的编码器和解码器介 绍该模型。 基于 Transformer 结构的编码器和解码器结构如图2.1所示,左侧和右侧分别对应着编码器(Encoder)和解码器(Decoder)结构。它们均由若干个基本的Transformer 块(Block)组成(对应着图 中的灰色框)。这里 表示进行了 N 次堆叠。每个 Transformer 块都接收一个向量序列 {xi}作为输入,并输出一个等长的向量序列作为输出 {yi}。这里的 xi yi 分别对应着文本序列 中的一个单词的表示。而 yi 是当前 Transformer 块对输入 xi 进一步整合其上下文语义后对应的输 出。在从输入 {xi}t到输出 {yi}t的语义抽象过程中,主要涉及到如下几个模块:
  • 注意力层:使用多头注意力(Multi-Head Attention)机制整合上下文语义,它使得序列中任意两个单词之间的依赖关系可以直接被建模而不基于传统的循环结构,从而更好地解决文本 的长程依赖。
  • 位置感知前馈层(Position-wise FFN):通过全连接层对输入文本序列中的每个单词表示进行 更复杂的变换。
  • 残差连接:对应图中的 Add 部分。它是一条分别作用在上述两个子层当中的直连通路,被用 于连接它们的输入与输出。从而使得信息流动更加高效,有利于模型的优化。
  • 层归一化:对应图中的 Norm 部分。作用于上述两个子层的输出表示序列中,对表示序列进 行层归一化操作,同样起到稳定优化的作用。

三、 嵌入表示层(位置编码)

对于输入文本序列,首先通过输入嵌入层(Input Embedding)将每个单词转换为其相对应的 向量表示。通常直接对每个单词创建一个向量表示。由于 Transfomer 模型不再使用基于循环的方 式建模文本输入,序列中不再有任何信息能够提示模型单词之间的相对位置关系。在送入编码器 端建模其上下文语义之前,一个非常重要的操作是在词嵌入中加入位置编码(Positional Encoding) 这一特征。具体来说,序列中每一个单词所在的位置都对应一个向量。这一向量会与单词表示对 应相加并送入到后续模块中做进一步处理。在训练的过程当中,模型会自动地学习到如何利用这 部分位置信息。 为了得到不同位置对应的编码,Transformer 模型使用不同频率的正余弦函数如下所示:
PE(pos, 2i) = sin( pos 100002i/d )                            (1)
PE(pos, 2i + 1) = cos( pos 100002i/d )                     (2)
其中,pos 表示单词所在的位置,2i 和 2i+ 1 表示位置编码向量中的对应维度,d 则对应位置编码的 总维度。通过上面这种方式计算位置编码有这样几个好处: 首先,正余弦函数的范围是在 [-1,+1], 导出的位置编码与原词嵌入相加不会使得结果偏离过远而破坏原有单词的语义信息。其次,依据 三角函数的基本性质,可以得知第 pos + k 个位置的编码是第 pos 个位置的编码的线性组合,这就 意味着位置编码中蕴含着单词之间的距离信息
使用 Pytorch 实现的位置编码参考代码如下:
import torch.nn as nn
import torch
import math
from torch.autograd import Variableclass PositionalEncoder(nn.Module):def __init__(self, d_model, max_seq_len = 80):super().__init__()self.d_model = d_model# 根据 pos 和 i 创建一个常量 PE 矩阵pe = torch.zeros(max_seq_len, d_model)for pos in range(max_seq_len):for i in range(0, d_model, 2):pe[pos, i] = math.sin(pos / (10000 ** ((2 * i)/d_model)))pe[pos, i + 1] = math.cos(pos / (10000 ** ((2 * (i + 1))/d_model)))pe = pe.unsqueeze(0)self.register_buffer('pe', pe)def forward(self, x):# 使得单词嵌入表示相对大一些x = x * math.sqrt(self.d_model)# 增加位置常量到单词嵌入表示中seq_len = x.size(1) x = x + Variable(self.pe[:,:seq_len], requires_grad=False).cuda()return xpos_en = PositionalEncoder(d_model=64)
x = torch.randn(100, 1, dtype=torch.float32).cuda() # 100 x 1
print(pos_en(x).shape) # 100 x 64
print('')

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

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

相关文章

第 119 场 LeetCode 双周赛题解

A 找到两个数组中的公共元素 模拟 class Solution { public:vector<int> findIntersectionValues(vector<int> &nums1, vector<int> &nums2) {unordered_set<int> s1(nums1.begin(), nums1.end()), s2(nums2.begin(), nums2.end());vector<…

【基于大数据的人肥胖程度预测分析与可控策略】

基于大数据的人肥胖程度预测分析与可控策略 前言数据获取与清洗数据挖掘与分类建模1. K-means聚类2. 层次聚类3. DBSCAN4. 分类建模 数据可视化模型肥胖程度预测分析与可控策略结语 前言 随着现代生活方式的改变&#xff0c;肥胖问题逐渐成为全球性的健康挑战。为了更好地理解…

实用篇 | 3D建模中Blender软件的下载及使用[图文详情]

本文基于数字人系列的3D建模工具Blender软件的安装及使用&#xff0c;还介绍了图片生成3D模型的AI工具~ 目录 1.Blender的下载 2.Blender的使用 3.安装插件(通过压缩包安装) 4.实例 4.1.Blender使用MB-Lab插件快速人体模型建构 4.1.1.点击官网&#xff0c;进行下载 4.1.…

Java TCP(一对一)聊天简易版

客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…

C语言 题目

1.写一个函数算一个数的二进制(补码)表示中有几个1 #include<stdio.h>//统计二进制数中有几个1 //如13:1101 //需要考虑负数情况 如-1 结果应该是32// n 1101 //n-1 1100 //n 1100 //n-1 1011 //n 1000 //n-1 0111 //n 0000 //看n的变化 int funca(int c){int co…

css:flex布局中子元素高度height没有达到100%

目录 问题flex布局示例解决办法方式一方式二 参考 问题 css中使用flex布局中子元素高度height没有达到100% flex布局示例 希望实现两个盒子左右分布&#xff0c;内容垂直居中对齐 <style>.box {display: flex;align-items: center;border: 1px solid #eeeeee;}.box-l…

react新旧生命周期钩子

以下的内容根据尚硅谷整理。 旧生命钩子 辅助理解&#xff1a; 红色框&#xff1a;挂载时生命钩子蓝色框&#xff1a;更新时生命钩子绿色框&#xff1a;卸载时生命钩子 挂载时 如图所示&#xff0c;我们可以看到&#xff0c;在组件第一次挂载时会经历&#xff1a; 构造器&a…

stateflow——如何查看状态机中参数变化及状态机断点调试

法一&#xff1a;使用Data Inspector 点击“符号图窗”和“属性”&#xff0c;如图&#xff1b;在选择变量n并右键点击inspector&#xff0c;最后在logging&#xff0c;如图 法二&#xff1a;log active state 和法一类似使用data inspector查看&#xff0c;类似的查看方法和…

【每周一测】Java阶段四第三周学习

目录 1、关于分布式锁的说法&#xff0c;错误的是&#xff08; &#xff09; 2、JDK动态代理产生的代理类和委托类的关系是 3、下列关于ElasticSearch中基本概念描述错误的是 4、Spring Cloud 中&#xff0c;Feign 是什么&#xff1f; 5、在JavaScript中&#xff0c;可以使…

玩转大数据13: 数据伦理与合规性探讨

1. 引言 随着科技的飞速发展&#xff0c;数据已经成为了现代社会的宝贵资产。然而&#xff0c;数据的收集、处理和利用也带来了一系列的伦理和合规性问题。数据伦理和合规性不仅关乎个人隐私和权益的保护&#xff0c;还涉及到企业的商业利益和社会责任。因此&#xff0c;数据…

韵达快递单号查询,以表格的形式导出单号的每一条物流信息

批量查询韵达快递单号的物流信息&#xff0c;并以表格的形式导出单号的每一条物流信息。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的伙伴记得先注册…

SOP(标准作业程序)和WI(操作指导书)的联系和区别

目录 1.SOP&#xff08;标准作业程序&#xff09;&#xff1a;2.WI&#xff08;操作指导书&#xff09;&#xff1a;3.SOP和WI的区别&#xff1a; 1.SOP&#xff08;标准作业程序&#xff09;&#xff1a; SOP: 所谓SOP&#xff0c;是 Standard Operation Procedure三个单词中…

【计算机网络实验】实验三 IP网络规划与路由设计(头歌)

目录 一、知识点 二、实验任务 三、头歌测试 一、知识点 IP子网掩码的两种表示方法 32位IP子网掩码&#xff0c;特点是从高位开始连续都是1&#xff0c;后面是连续的0&#xff0c;它有以下两种表示方法&#xff1a; 传统表示法&#xff0c;如&#xff1a;255.255.255.0IP前…

【WebSocket】使用ws搭建一个简单的在线聊天室

前言 什么是WebSockets&#xff1f; WebSockets 是一种先进的技术。它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此 API&#xff0c;你可以向服务器发送消息并接收事件驱动的响应&#xff0c;而无需通过轮询服务器的方式以获得响应。 webscokets 包括webscoket…

中科院分区和JCR分区有什么区别

文章目录 名词解释学科划分不同参考的影响因子不同期刊分区不同期刊分区阈值不同 名词解释 中科院分区&#xff1a;又称“中科院JCR分区”&#xff0c;是中国科学院文献情报中心世界科学前沿分析中心的科学研究成果&#xff0c;期刊分区表数据每年底&#xff08;每年12月中下旬…

Python爬虫-实现批量抓取王者荣耀皮肤图片并保存到本地

前言 本文是该专栏的第12篇,后面会持续分享python爬虫案例干货,记得关注。 本文以王者荣耀的英雄皮肤为例,用python实现批量抓取“全部英雄”的皮肤图片,并将图片“批量保存”到本地。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。注意,这里抓取的图片…

数据结构和算法-单链表

数据结构和算法-单链表 1. 链表介绍 链表是有序的列表&#xff0c;但是它在内存中是存储如下 图1 单链表示意图 小结: 链表是以节点的方式存储每个节点包含data域&#xff0c;next域&#xff0c;指向下一个节点。如图&#xff1a;发现链表的各个节点不一定是连续存储。比如地…

滑动窗口练习(三)— 加油站问题

题目 测试链接 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组…

浮点数在计算机中如何存储

举例&#xff1a; 结果&#xff1a; 文字描述&#xff1a; 先将浮点数转化为二进制的表示形式&#xff0c; 接着将其二进制的形式按照科学计数法来表示&#xff0c; 符号位的确定&#xff1a;正数0&#xff0c; 负数1 指数的确定&#xff1a;将其二进制表示成为科学计数法…

Fall in love with English

Fall in love with English 爱上英语 Hiding behind the loose dusty curtain, a teenager packed up his overcoat into the suitcase. 躲藏在布满尘土的松软的窗帘后边&#xff0c;一个年轻人打包他的外套到行李箱中。 He planned to leave home at dusk though there was th…