火遍全球的ChatGPT技术简介与主干网络代码
创始人
2024-05-25 16:28:15
0

如果说当下最火的AI技术和话题是什么,恐怕很难绕开ChatGPT。各大厂商都在表示未来要跟进ChatGPT技术,开发在自然语言处理智能系统,可见其影响力。本篇博客追个热度,来简单的介绍下ChatGPT到底是一项什么技术,究竟如何完成复杂的语言处理任务的。

ChatGPT到底是一项什么技术

如果想要了解ChatGPT是一项什么技术,不如直接问问他:

可以看到ChatGPT是一项基于Transformer模型实现的NLP软件。关于Transformer模型,我们已经在之前文章《注意力机制原理概述》介绍过。这里提到的LM技术,其实就是Transformer。

ChatGPT背后的Transformer架构

那么,ChatGPT的Transformer架构是什么样?我让chatgpt打印了他自己的主干网络代码,如下:

完整的代码分为四个模块:GPT框架,GPT层,多头注意力模块代码和位置编码。

GPT框架:

import torch
import torch.nn as nn
import torch.nn.functional as Fclass GPT(nn.Module):def init(self, vocab_size, embed_dim, n_layers, n_heads, dropout):super(GPT, self).init()self.vocab_size = vocab_sizeself.embed_dim = embed_dimself.n_layers = n_layersself.n_heads = n_headsself.dropout = dropout    self.embedding = nn.Embedding(vocab_size, embed_dim)self.pos_encoding = nn.Embedding(vocab_size, embed_dim)self.layers = nn.ModuleList([GPTLayer(embed_dim, n_heads, dropout) for _ in range(n_layers)])self.fc = nn.Linear(embed_dim, vocab_size)def forward(self, x):# Embeddingx = self.embedding(x)# Position Encodingx = self.pos_encoding(x)# GPT Layersfor layer in self.layers:x = layer(x)# Outputx = self.fc(x)return x

GPT层代码:

class GPTLayer(nn.Module):
def init(self, embed_dim, n_heads, dropout):super(GPTLayer, self).init()self.embed_dim = embed_dimself.n_heads = n_headsself.dropout = dropoutself.attention = MultiHeadAttention(embed_dim, n_heads, dropout)self.feed_forward = PositionwiseFeedForward(embed_dim, dropout)def forward(self, x):# Attentionx = self.attention(x)# Feed Forwardx = self.feed_forward(x)return x

多头注意力模块代码:

class MultiHeadAttention(nn.Module):
def init(self, embed_dim, n_heads, dropout):super(MultiHeadAttention, self).init()self.embed_dim = embed_dimself.n_heads = n_headsself.dropout = dropoutself.query_linear = nn.Linear(embed_dim, embed_dim)self.key_linear = nn.Linear(embed_dim, embed_dim)self.value_linear = nn.Linear(embed_dim, embed_dim)self.output_linear = nn.Linear(embed_dim, embed_dim)def forward(self, x):# Query, Key, Valuequery = self.query_linear(x)key = self.key_linear(x)value = self.value_linear(x)# Attentionscores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(query.size(-1))scores = F.softmax(scores, dim=-1)scores = self.dropout(scores)# Outputoutput = torch.matmul(scores, value)output = self.output_linear(output)return output

位置编码:

class PositionwiseFeedForward(nn.Module):
def init(self, embed_dim, dropout):super(PositionwiseFeedForward, self).init()self.embed_dim = embed_dimself.dropout = dropoutself.fc1 = nn.Linear(embed_dim, embed_dim)self.fc2 = nn.Linear(embed_dim, embed_dim)def forward(self, x):# Feed Forwardx = self.fc1(x)x = F.relu(x)x = self.dropout(x)x = self.fc2(x)x = self.dropout(x)return x

GPT主体框架主要由GPT层叠加构成。GPT层也比较容易理解,基本就是由多头注意力处理模块构建的。按照注意力机制原理,多头注意力处理首先将输入按照查询、键、值做对应的线性变换,之后输入一个多分枝的注意力结构,建立一个具有关联关系的评分结果。按照评分结果,实现对查询的值预测,实现NLP任务。这个模型基本就是2017年Vaswani工作 [1] 的复现。这让我们真正理解了多头注意力的强大之处。

总结

chatgpt是一个有趣且有用的AI工具,对于泛NLP任务,具有目前最优秀的处理分析能力。我认为其在客户问答,信息查询,文字编辑等任务中,将产生深远的影响。其背后基于多头注意力机制的Transformer模型,已被验证在逻辑关系学习领域,具有惊人的技术优势。相信在该技术路线上,未来还会有更加优秀的工作被不断提出。

Reference

[1] A. Vaswani, N. Shazeer, N. Parmar, et al. Attention is all you need. Advances in neural information processing systems, 2017,5998‒6008.

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...