教程简介及目录见: 从零实现BERT、GPT及Difussion类算法:文章简介及目录
(资料图)
本章完整源码见https://github.com/firechecking/CleanTransformer/blob/main/CleanTransformer/transformer.py
这一章将参考《attention is all you need》论文,实现Multi-head Attention、LayerNorm、TransformerBlock,有了这章的基础后,在下一章就可以开始搭建Bert、GPT等模型结构了
Multi-head Attention
参考:https://arxiv.org/abs/1706.03762
Attention介绍(选读)
先简单介绍下一般性的Attention,如果已经了解的同学可以跳过
Attention字面意思是注意力,也就是让模型能够学习到一个权重,来将输入选择性的传入下一层
比较常用的操作如下:
首先假定输入tensor为q, k, v,其中
self-attention是attention的一个特例:q=k=v
以下给出基础attention的伪代码
Multi-head Attention基础原理
由以上论文截图可知,
所以实现步骤如下(可以和上文基础Attention对比着看):
对Q,K,V进行Linear:得到新的Q、K、V的size不变
Multi-Head拆分:
使用Q、K计算Weight(其中第二行是Transformer在attention基础上增加的一个scaling factor)
使用Weight和V,计算新的V
对V进行维度变换
Multi-head Attention实现代码
代码不是太复杂,结合上文和注释,应该能很容易看懂
LayerNorm
参考
https://arxiv.org/abs/1607.06450
https://arxiv.org/abs/1607.06450
https://pytorch.org/docs/stable/generated/torch.nn.LayerNorm.html
https://blog.csdn.net/xinjieyuan/article/details/109587913
BatchNorm与LayerNorm的差异
batch normalization
对每一个输入,先在mini-batch上计算输入的均值、标准差,然后当前层的每个输入值使用均值、标准差进行正则计算
公式如下
先在mini-batch上计算出每个位置的均值、标准差,其中为mini-batch大小
然后对每个值应用变换
提示:这里之所以有下标i,是因为batch normalization是在batch内,对不同样本的相同位置进行归一
layer normalization
batch normalization是在batch内,对不同样本的相同位置进行归一;而layer normalization是在layer内,对同一个样本的不同位置进行归一
batch normalization不在整个mini-batch上计算均值、标准差,而是在当前层的当前样本计算输入的均值、标准差,然后对当前层的当前样本输入值使用均值、标准差进行正则计算(也可以理解为Layer Normalization是和batch无关,而是对每个样本单独处理)
公式如下
先在单个样本上计算出每一层的均值、标准差,其中为当前layer的大小hidden units数量
然后对每个值应用变换
Layer Normalization代码实现
代码如下
eps为一个较小值,是为了防止标准差std为0时,0作为除数
从上文公式看出,标准差是计算的均值后开根号,所以代码中有std = self._mean((x - mean).pow(2) + self.eps).pow(0.5),是复用了self._mean()的计算均值操作
为了和pytorch的LayerNorm保持一致,这里同样可以接受normalized_shape参数,表示Normalization要在哪几个维度上进行计算,可以结合_mean()函数中的代码进行理解
TransformerBlock
参考
https://arxiv.org/abs/1706.03762
Transformer原理
从《Attention Is All You Need》论文中这张图可以看出以下几点信息:
Encoder、Decoder基本相同,最大差别是Decoder上多了一层Multi-Head Attention
每一个TransformerBlock只由Multi-Head Attention、Add、LayerNorm、Linear这4种操作组合而成
在上文已经实现的Multi-Head Attention、LayerNorm基础上,再来实现TransformerBlock就很简单了
为进一步简化,在本章我们先只实现Encoder,并且省略掉mask等额外操作。到之后讲到GPT时再来实现Decoder以及更完善的TransformerBlock
Transformer代码实现
代码主要由attention+Add+Norm,以及FFW+Add+Norm这2个部分组成,其中ffw是两层全连接中间夹一个ReLU激活函数
从以上代码看出TransformerBlock还是非常简洁的,而Bert、GPT等模型就是对TransformerBlock的堆叠,这部分内容将放在下一章讲解
关键词:
-
从零实现BERT、GPT及Difussion类算法-3:Multi-head Attention & Transformer|热资讯
教程简介及目录见:从零实现BERT、GPT及Difussion类算法:文章简介及目录本章完整源码见https: github com
-
祆教 景教_祆
1、袄ǎo基本字义1 有衬里的上衣:夹~。2、棉~。3、皮~。4、详细字义〈名〉1 (形声。5、从衣,夭声。6、
-
下周股市五大看点:年报、季报披露即将收官 天天新资讯
下周,沪深港通交易日历优化正式实施;第四届联合国世界数据论坛等多个数据产业会议将举办;中国汽车动力电池
-
每日速讯:“老人推倒摩托车案”判决后继承人仍拒绝赔付,车主已申请强制执行
扬子晚报网4月23日讯(见习记者徐韶达)广受关注的“老人推倒摩托车案”法院一审判推车老人继承人赔付车主1
-
天天微头条丨读书之美丨阅读的力量
阅读的力量
-
路亚翘嘴用什么假饵最好 路亚翘嘴用什么假饵
今天来聊聊关于路亚翘嘴用什么假饵最好,路亚翘嘴用什么假饵的文章,现在就为大家来简单介绍下路亚翘嘴用什
-
当前热点-陈梦丢冠黑脸!马龙丢冠也不开心!王楚钦能4-0横扫马龙有原因
第四局,王楚钦8-2领先,虽然马龙追至6-9,但王楚钦还是以11-7锁定胜局。第一局是最重要的,因为是在7-10落
-
原银监会处置非法集资办公室主任刘张君被查
新京报讯据中央纪委国家监委驻中国银保监会纪检监察组、河南省监察委员会消息:原中国银行业监督管理委员会
-
炭疽菌的生命周期
炭疽菌是一种生活在植物中的真菌。在一些植物中,它会引起一种叫做炭疽病的疾病。许多不同种类的炭疽菌感染
-
当前讯息:起底萧县立亭合作社 萧县立亭合作社2022年参保人数为0
据萧县发布官微消息,近日,公安机关对萧县立亭合作社涉嫌违法经营行为进行立案查处。相关部门已成立调查处
-
非法处置非法出口固体废物怎么判刑啊?
违反国家规定,将境外的固体废物进境倾倒、堆放、处置的,处五年以下有期徒刑或者拘役,并处罚金;造成重大
-
2023上海徐汇区餐饮消费券领取时间+入口+流程-环球即时
2023上海徐汇区餐饮消费券领取方式一、领取时间2023年4月28日-5月3日(每日10:00-22:00)二、领取平台【i购徐
-
【速看料】行走黄渤海|在山东,遇见海鲜的N种打开方式
行走黄渤海|在山东,遇见海鲜的N种打开方式4月17日-22日,山东省组织的“走文化廊道进经济园区看山东高质
-
17+8+11!哈登持续低迷,76人横扫篮网,三将成晋级最大功臣
这场比赛,篮网确实拼尽全力了,丁威迪、布里奇斯、克拉克斯顿都展现了自身实力,特别是丁威迪与克拉克斯顿
-
当前视讯!山东政商要情(4.17—4.23)
1 山东省委书记林武主持召开座谈会研究经济社会发展工作近日,山东省委书记林武主持召开座谈会,听取教育、
-
财报速递:宁波方正2022年全年净利润1764.70万元,总体财务状况一般-观点
4月24日,A股上市公司宁波方正发布2022年全年业绩报告。其中,净利润1764 70万元,同比下降31 95%。根据同
-
视焦点讯!西南石油大学教务处处长_西南石油大学教务处
1、成都市新都区新都大道8号(成都校区)邮编:610500电话:028-83032308南充市顺庆区油院路
-
国金证券给予顺络电子买入评级 盈利能力环比改善 新业务进展顺利-全球观焦点
国金证券04月23日发布研报称,给予顺络电子(002138 SZ,最新价:22 54元)买入评级。评级理由主要包括:1
-
塑造好体态,6-12岁是关键!-天天时快讯
好体态塑造好气质身体姿态指的是身体的骨骼位置排列是否正确,身体功能是否异常,完成动作时身体各部位姿势
-
cdr是什么格式_这里有具体介绍
cdr是什么格式,这里有具体介绍很多人还不知道,现在让我们一起来看看吧!解答:1、Cdr文件是CorelDRAW矢量绘图