ChatGPT基础组件Transformer的代码实现(纯净版Transformer实现)

        最近ChatGPT大火,其实去年11月份就备受关注了,最近火出圈了,还是这家伙太恐怖了,未来重复性的工作很危险。回归主题,ChatGPT就是由无数个(具体也不知道多少个,哈哈哈哈)Transformer语言模型组成,Transformer最开始在2017年提出,目的是解决序列数据的训练,大多数应用到了语言相关,最近在图像领域也很有作为,属于是多点开花了。今天来简单看看他的实现吧。

目录

一、Transformer原理

二、代码实现

三、通俗解释如何使用Transformer 

四、总结


一、Transformer原理

        说实话,介绍这个东西优点太伤神了,我想把有限的时间浪费在有意义的事情上,不对其数学原理发表什么了(主要是不会),简单介绍他的组成结构吧。

        上图是组成transformer的一部分,他可以被分为编码层和解码层,对于语言这样的序列来讲,必须对其进行编码才能使用其数据信息。最简单的编码便是一个字符对应一个数字,这个大家心中有数就好,真实的Transformer编码原理肯定比这个复杂,不过现在的torch里你可以不需要知道内部的细节,可以直接调用。为了更直观的理解,你可以预习RNN的编码解码。总之,这个过程是一种信息转化、提取的过程,将计算机不懂的字符变为它能计算的数字。RNN图如下:

RNN示意图

        具体原理实现可以看下面的链接:

【NLP】Transformer模型原理详解 - 知乎

详解transformer_one-莫烦的博客-CSDN博客_transformer介绍

二、代码实现

        代码:

import torch
import torch.nn as nn
import torch.nn.functional as Fclass TransformerEncoder(nn.Module):def __init__(self, d_model, nhead, num_layers, dim_feedforward, dropout=0.1):super(TransformerEncoder, self).__init__()self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)self.feed_forward = nn.Sequential(nn.Linear(d_model, dim_feedforward),nn.ReLU(),nn.Linear(dim_feedforward, d_model))self.norm1 = nn.LayerNorm(d_model)self.norm2 = nn.LayerNorm(d_model)self.dropout = nn.Dropout(dropout)self.num_layers = num_layersdef forward(self, x, mask=None):attn_output, _ = self.self_attn(x, x, x, attn_mask=mask)x = x + self.dropout(attn_output)x = self.norm1(x)ff = self.feed_forward(x)x = x + self.dropout(ff)x = self.norm2(x)return xclass TransformerDecoder(nn.Module):def __init__(self, d_model, nhead, num_layers, dim_feedforward, dropout=0.1):super(TransformerDecoder, self).__init__()self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)self.src_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)self.feed_forward = nn.Sequential(nn.Linear(d_model, dim_feedforward),nn.ReLU(),nn.Linear(dim_feedforward, d_model))self.norm1 = nn.LayerNorm(d_model)self.norm2 = nn.LayerNorm(d_model)self.norm3 = nn.LayerNorm(d_model)self.dropout = nn.Dropout(dropout)self.num_layers = num_layersdef forward(self, x, src, mask=None, src_mask=None):attn_output, _ = self.self_attn(x, x, x, attn_mask=mask)x = x + self.dropout(attn_output)x = self.norm1(x)attn_output, _ = self.src_attn(x, src, src, attn_mask=src_mask)x = x + self.dropout(attn_output)x = self.norm2(x)ff = self.feed_forward(x)x = x + self.dropout(ff)x = self.norm3(x)return xclass Transformer(nn.Module):def __init__(self, d_model, nhead, num_layers, dim_feedforward, dropout=0.1):super(Transformer, self).__init__()self.encoder = TransformerEncoder(d_model, nhead, num_layers, dim_feedforward, dropout)self.decoder = TransformerDecoder(d_model, nhead, num_layers, dim_feedforward, dropout)self.d_model = d_modeldef forward(self, src, tgt, src_mask=None, tgt_mask=None):memory = self.encoder(src, src_mask)output = self.decoder(tgt, memory, tgt_mask, src_mask)return outputif __name__ == "__main__":d_model = 512nhead = 8num_layers = 6dim_feedforward = 2048dropout = 0.1transformer = Transformer(d_model, nhead, num_layers, dim_feedforward, dropout)src = torch.randn(10, 32, d_model)tgt = torch.randn(20, 32, d_model)output = transformer(src, tgt)print(src)print("########################")print(output)
  • srctgt 分别是输入的源数据和目标数据,大小为 batch_size x sequence_length x d_model
  • src_masktgt_mask 分别是对于 srctgt 的有效位置的掩码,大小为 batch_size x sequence_length x sequence_length,为了实现对填充位置的忽略。
  • d_model 是模型中间语义空间的维数。
  • nhead 是多头注意力机制中每个头的数量。
  • num_layers 是编码器和解码器的层数。
  • dim_feedforward 是前馈网络的隐藏层大小。
  • dropout 是 dropout 的比率。

三、通俗解释如何使用Transformer 

        在语言领域,Transformer有很强大的序列特征提取能力,具体多强我并没有感受,因为没用过,没法对比。不过ChatGPT的大量使用Transformer足可以证明它正值年壮,没道理我们不用它。

        在图像领域同样很强,不过需要大量数据来训练,否则它不如CNN,这个也都是大量先人的经验,踩过坑自然知道。缺点还有就是模型太大,需要很大的算力。

        你可以把它当成黑盒来用,这个是Transformer用于翻译:

        用于图像领域,如果是图像像素点判断(图像分割),那么需要将FC去掉,根据自己需要修改吧:

import torch
import torch.nn as nn
import torch.nn.functional as Fclass TransformerEncoder(nn.Module):def __init__(self, d_model, nhead, num_layers, dim_feedforward, dropout=0.1):super(TransformerEncoder, self).__init__()self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)self.feed_forward = nn.Sequential(nn.Linear(d_model, dim_feedforward),nn.ReLU(),nn.Linear(dim_feedforward, d_model))self.norm1 = nn.LayerNorm(d_model)self.norm2 = nn.LayerNorm(d_model)self.dropout = nn.Dropout(dropout)self.num_layers = num_layersdef forward(self, x, mask=None):attn_output, _ = self.self_attn(x, x, x, attn_mask=mask)x = x + self.dropout(attn_output)x = self.norm1(x)ff = self.feed_forward(x)x = x + self.dropout(ff)x = self.norm2(x)return xclass ImageTransformer(nn.Module):def __init__(self, d_model, nhead, num_layers, dim_feedforward, dropout=0.1):super(ImageTransformer, self).__init__()self.encoder = TransformerEncoder(d_model, nhead, num_layers, dim_feedforward, dropout)self.fc = nn.Linear(d_model, 1024)def forward(self, x):x = self.encoder(x)x = self.fc(x)x = F.relu(x)return xif __name__ == "__main__":# 实例化ImageTransformer模型model = ImageTransformer(d_model=16, nhead=8, num_layers=6, dim_feedforward=2048, dropout=0.1)# 使用图像数据输入模型image = torch.randn(3, 16, 16)features = model(image)print(features)

四、总结

        Transformer用来训练语言模型一点问题没有,人家本来就是为序列而生。但是训练图像需要甄别自己的实际情况。随着ChatGPT的爆火,你不了解它,但是它在了解你。

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

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

相关文章

比特币将成为人工智能的首选货币

在这篇文章中,Arthur Hayes将阐述为什么中本聪的创造将成为人工智能的首选货币。我将把我的论点作为一系列逻辑结论来提出,这些结论相互基础,以「证明」人工智能将选择比特币作为其经济行为的计价货币。 原文作者:Arthur Hayes 原…

马斯克 xAI 誓师大会,2029实现AGI!12 人创始天团揭秘 xAI 终极目标

今天马斯克和 xAI12 人创始团队开了一个誓师大会,详述了公司的远景目标和运营方向,希望在 2029 年实现 AGI。 今天马院士「开源」了 xAI 的第一次重要会议! 擅长在公司使命上「画大饼」的马院士,在这次会议上和创始团队讨论了很多…

为什么越来越多的网工运维_测试转行网络安全?

最近越来越多的网工运维小伙伴都在吐槽:干网工、运维多年,薪资还是5.6K,技术也遇瓶颈上不去,考虑转岗或者转行。其中大部分的网工运维小伙伴们纷纷瞄准了高薪高前景的网络安全工程师岗位 网络安全是怎样的岗位? 人才…

博泰应宜伦:把Vision Pro放大二十倍,就是未来汽车的终极形态

作者 | Amy 编辑 | 德新 新能源是上半场,智能化是下半场。 而随着智能汽车发展,智能座舱也不断革新,过去智能座舱的各项功能全面开花,竞争愈演愈烈,未来的座舱将如何被定义? 6月15日,博泰车联…

python爬虫入门

基础回顾 使用函数, 先导入, 直接点方法名使用 import math m math.log10(100) print(m)python 交互模式 input输入示例 age int(input("请输入年龄")) age 1 print(age)if else 的使用 和java一样, 只是不加括号, else if 阉割成了 elif 与或非 java : &am…

AI落地:儿童节贺卡

昨天有个朋友Lisa找到我,她是幼儿园的老师,看到我最近搞了个爱落地星球,在研究各行各业AI落地的事情,问我能不能用AI帮她写一百多张贺卡。 说起来写贺卡,我只会写“节日快乐”。现在有了ChatGPT,那就大不一…

Web3 的大规模普及和飞轮效应

点击上方“小强的进阶之路”,选择“星标”公众号 优质文章,及时送达 预计阅读时间: 5分钟 “iPhone 时刻”是指具有颠覆性意义的技术或产品在推出后所引发的一系列重大变革。像苹果公司的iPhone一样,Web3也可能在某个时刻产生显著的变革和重大…

AIGC第一波裁员已至

转自:51CTO技术栈 作者 | 徐杰承 审校 | 云昭 让所有人都没想到的是,正值人工智能之火烧遍全球之时,一家估值15亿美元,曾一度被多家媒体评价为2022年成长最快的AI独角兽的企业却突然公开宣布裁员。 7月12日早上,美国AI…

OAuth 2.0(四):手把手带你写代码接入 OAuth 2.0 授权服务

今天我们开始落地写代码,基于橘长之前接入过农业银行的授权,今天首先作为第三方服务来和大家分享「 手把手接入 OAuth 2.0 授权服务 」。 一、业务背景 近期团队帮银行做了一个互动营销活动,活动入口在行方的 App 上,当用户在行…

当推荐和搜索遇上大模型,会碰撞出什么样的火花

推荐和搜索是近年来信息分发的重要方式,小红书UGC社区让人印象深刻,其推荐系统有何特别之处?学界对搜推系统召回阶段有哪些主要进展和主流方法?面对大语言模型的兴起,推荐和搜索的发展有哪些机遇和挑战? 为…

今天,ChatGPT「代码解释器」正式解禁!30秒图片变视频,动嘴做表 | 十大惊人魔法全集...

【导读】坐等3个多月,ChatGPT「代码解释器」终于全面开放了,一大波魔法来袭。 家人们,终于来了! 刚刚,ChatGPT「代码解释器」测试版正式向所有Plus用户开放。 Karpathy 在他的博客文章中介绍了 OpenAI 的代码解释器测试…

贾跃亭“杀回”FF核心管理层;近四成程序员只爱远程工作;小米回应被华为起诉专利侵权 | EA周报...

EA周报 2023年3月3日 每个星期1分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事、掌握IT核心技术。 周报看点 1、复旦 Moss 团队:Moss 参数规模约是 ChatGPT 的 1/10 2、贾跃亭“杀回”FF核心管理层,重掌大权且权力范围扩大 3、科大…

2023CSDI算力+智能:数字时代的进化升级

引言 :在未来的产业布局中,云网融合、软硬一体化,硬件智能化、软件的泛化以及数据无处不在,基本是未来的趋势。新一轮的信息科技基本都长在云上,未来大部分的科技也都在信息技术之上,这也是互联网平台最大的…

用AI把自己画进动漫里,3天揽获150万+播放量,职业动画师:有被吓到

萧箫 发自 凹非寺量子位 | 公众号 QbitAI 只需随手录制一段视频,AI就能把你完美放进动漫中! 无论是线条、色彩还是光影呈现,都与美漫中的写实风格如出一辙,动画也是细腻流畅,帧数显然不低: 制作这样一部包含…

干货 | 如何用ChatGPT30秒内读完2小时课程视频,提升100倍学习力

Hi! 大家好,我是专注于AI项目实战的赤辰,本期继续给大家带来解放100倍生产力的工具教程! 目前信息量爆炸,我们每天都面临着海量的在线视频。不论是教育、新闻还是娱乐,视频内容无处不在,由于时间有限和信息…

GPT-4炸圈--多模态大模型

前言 在chatGPT如火如荼的时候,OpenAI又上演了王者归来的戏码,重磅发布了GPT-4。GPT-4是作为“帮你写代码”和你“肆意聊天”的chatGPT的基础模型GPT-3的升级版,是一个新的里程碑。 GPT-4 是一个大型多模态模型,虽然很多能力还不…

新bing可以在你指出它给出的代码的错误后马上改正

我在新bing中问了一个问题: dart中怎么用正则表达式寻找字符串中第一个数值的位置。 在运行bing给出的代码后,发现是错误的,经过检查,我找出了bing错误的代码行。我把改正后的内容告诉bing后,bing马上明白自己错哪儿了…

ChatGPT | Bing | Google Bard | 讯飞星火 | 到底哪家强?实测

最近AIGC战场依然热闹,微软的new bing、Google的Bard、国内的讯飞星火认知大模型,都接连上阵,我们对比ChatGPT一起来看看,我把实际使用测试结果发出,供大家参考。有些测试结果可能会出乎大家的预料哦… 今天我们暂时主…

new bing 对比 chatgpt

使用CombineFileInputFormat将多个小文件合并为一个输入分片 -

ChatGPT 和 Bing Chat两者之间的比较,看完你就懂了

目录 一、ChatGPT 1.1 介绍 1.2 特点 1.3 使用场景 二、 Bing Chat 2.1 介绍 2.2 功能特点 2.3 使用场景 三、对比 一、ChatGPT 1.1 介绍 ChatGPT是一款基于人工智能技术的语言模型应用,由美国人工智能研究实验室OpenAI在2022年11月30日推出。该模型是一种…