Transformer encoder层的使用

今天,由于实验需要,所以要尝试encoder层的使用,但是呢,发现两个问题:

1.许多人的实现都是不一致的,有的人qkv是直接用x赋值,有的人是全连接层,有的人是矩阵乘积,后面两个应该是一个意思,但是第一个我是看不懂的。

2.正常的tansformer-encoder是三维数据输入(batchsize,seq,feature)或者是位置不同,而我的是(batchsize,feature)这需要想一想改如何转换。

首先看,vit_pytorch这个不错的开源库中的实现

解析:

首先大的架构是,根据depth调整encoder个数,先进行layernorm,再输入到attention层,然后再与输入前的x相加,得到结果后进行layernorm,输入到feedforward,再加上之前的x。

或许print出来layers更加清晰

其中,我的问题是layernorm为什么是在输入前实现呢,跟原版bert编码器的并不是很一样,不过其实也不是很影响,然后多头的矩阵实现是挺有意思的,可以之后多研究研究。

最终我采用的方案是:将feature,reshape成一个二维的矩阵输入。其实还有fackbook的fairseq框架和pytorch官方实现的encoder,但其实都大差不差,因为已经解决了,我就不继续深入,后续有时间可以继续研究。

相关资料:

pytorch:TransformerEncoder — PyTorch 1.13 documentation

Vit-pytorch:lucidrains/vit-pytorch: Implementation of Vision Transformer, a simple way to achieve SOTA in vision classification with only a single transformer encoder, in Pytorch (github.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值