一款简洁但全功能的变压器,齐全的一套来自各种论文的Xperation特征。
从X_Transformers导入Xtransformer Model = XTransformer(DIM = 512,enc_num_tokens = 256,enc_depth = 6,enc_max_seq_len = 1024,dec_num_tokens = 256,dec_depth = 6,dec_heads = 8,dec_max_seq_len = 1024,tie_token_emb = true#编码器和解码器的系列嵌入式)SRC =火炬。 Randint(0,256,(1,1024))SRC_MASK =火炬。 Oner_like(SRC)。 BOOL()TGT =火炬。 Randint(0,256,(1,1024))TGT_MASK =火炬。 Oner_like(TGT)。 BOOL()丢失=模型(SRC,TGT,SRC_MASK = SRC_MASK,TGT_MASK = TGT_MASK)#(1,1024,512)丢失。落后()
从X_Transformers导入变换器Wrapper,解码器模型= TransformerWrapper(num_tokens = 20000,max_seq_len = 1024,attn_layers =解码器(dim = 512,深度= 12,heads = 8))。 cuda()x =火炬。 Randint(0,256,(1,1024))。 CUDA()模型(x)#(1,1024,20000)
GPT3将大致如下(但是您将无论如何都会运行它)
GPT3 = TransformerWrapper(num_tokens = 50000,max_seq_len = 2048,attn_layers =解码器(Dim = 12288,深度= 96,heads = 96,Attn_dim_head = 128))。 CUDA()
从X_Transformers导入变换器Wrapper,编码器模型= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_Layers =编码器(DIM = 512,深度= 12,HEADS = 8)))。 cuda()x =火炬。 Randint(0,256,(1,1024))。 CUDA()面膜=火炬。 Oner_like(x)。 BOOL()模型(x,mask = mask)#(1,1024,20000)
从X_Transformers导入vitransformerwrapper,编码器模型= vitransformerwrapper(image_size = 256,patch_size = 32,num_classes = 1000,attn_layers =编码器(Dim = 512,深度= 6,heads = 8,))img =火炬。 Randn(1,3,256,256)模型(IMG)#(1,1000)
从X_Transformers导入vitransformerwrapper,transformerwrapper,解码器eNcoder = vitransformerwrapper(patch_size = 256,attn_layers =编码器(dim = 512,深度= 6,heads = 8))解码器= transformerwrapper(num_tokens = 20000,max_seq_len = 1024,attn_layers =解码器(DIM = 512,深度= 6,heads = 8,cross_attend = true))img =火炬。 Randn(1,3,256,256)标题=火炬。 Randint(0,20000,(1,1024))编码=编码器(IMG,Return_embedDings = True)解码器(标题,上下文=编码)#(1,1024,20000)
从X_Transformers导入变换器,解码器,编码器模型= TransformerWrapper(num_tokens = 20000,max_seq_len = 1024,#emb_dropout = 0.1,#empedding attn_layers =解码器(dim = 512,深度= 6,heads = 8,Attn_Dropout = 0.1, #后注意事项FF_DROPOUT = 0.1#馈电丢弃))X =火炬。 Randint(0,20000,(1,1024))模型(x)
提出在关注之前添加学习的内存密钥/值。它们能够完全删除进料,并对原始变压器达到类似的性能。我发现,保持馈线和添加内存密钥/值会导致更好的性能。
来自X_Transformers导入解码器,编码器ENC =编码器(DIM = 512,深度= 6,HEADS = 8,ATTN_NUM_MEM_KV = 16#16存储键/值)
提出添加学习令牌,类似于CLS令牌,命名为Memory令牌,它通过INPUT令牌旁边通过注意图层传递。
从X_Transformers导入变换器,解码器,编码器模型= TransformerWrapper(num_tokens = 20000,max_seq_len = 1024,num_memory_tokens = 20,#20 Memory令牌attn_layers =编码器(Dim = 512,深度= 6,heads = 8))
他们试验替代层标准化,发现一个有效和更简单的替代品。研究人员与我共享,这导致更快的融合。
从X_Transformers导入变换器,解码器,编码器模型= TransformerWrapper(num_tokens = 20000,max_seq_len = 1024,attn_layers =解码器(dim = 512,dim = 512,depth = 6,heads = 8,dement_scalenorm = true#设置为true以for true用于所有图层)))
诺姆Shazeer文件探讨了馈电在馈线中,发现与Gelu的简单门控导致显着的改进。此变体也显示在最新的MT5架构中。您应该始终打开它(我最终默认打开它)。
从X_Transformers导入变换器,解码器,编码器模型= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_Layers =解码器(DIM = 512,DIM = 512,HEADS = 8,FF_GLU = TRUE#设置为TRUE用于所有进料)))
本文建议完全消除归一化,而是使用单个学习的标量键入每个分支的输出,初始化为零。他们展示了非常深网络,卷积或关注的融合,无规则化。
我在常规数据集中获得了良好的结果,但在大型数据集(GPT3大小的数据集)上遇到了麻烦。然而,足够的研究人员告诉我,他们有积极的经历,这决定包括它。如果您遇到麻烦,请使用scaleNorm。
从X_Transformers导入变换器,解码器,编码器型号= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_LAYERS =解码器(DIM = 512,DIM = 512,DIMP = 6,HEADS = 8,DERME_REZERO = TRUE#设置为TRUE用于所有图层)))
本文提出了一种有效的方法来通过归零在顶部K值内的所有点产品查询/键值来缩小关注。该廉价方法与Sparsemax或Entmax15这样更昂贵的操作和其他更昂贵的操作有效。该技术具有额外的额外封面计的成本(要保留的顶部K值)。本文建议值k = 8
从X_Transformers导入变换器,解码器,编码器模型= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_LAYERS =解码器(DIM = 512,DIM = 512,DIME = 6,HEADS = 8,ATTN_SPARSSE_TOPK = 8#只关注前8个值(Softmax)))
或者,如果您想使用Entmax15,您也可以使用一个设置如下图所示。
从X_Transformers导入变换器,解码器,编码器模型= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_Layers =解码器(DIM = 512,深度= 6,HEAD = 8,ATTN_USE_ENTMAX15 = TRUE#使用ENTMAX15为注意步骤)))
一个NOAM Shazeer文件,提出了头部预先和注意力(Softmax)之间的信息混合信息。这是额外的内存成本和计算的。
从X_Transformers导入变换器,解码器,编码器模型= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_Layers =解码器(DIM = 512,DIM = 512,DIMID = 6,HEADS = 8,ATTN_Talking_heads = TRUE#TRUE#TRUE#TRUE#TRUE ON CORNICE OREPTING HEAD之间的信息交换) )
本文建议在注意层的末尾添加Gated线性单元,由原始查询进一步门控。虽然这不广泛使用在视觉问题/应答之外,但我怀疑它应该在看到前馈GLU变体的成功后导致改进。
更新:经过一些实验后,我发现此变体实际上表现差,但如果要修改以在门控之前不连接查询,它会更好地表现更好。这就是我们将在此存储库中使用的。
从X_Transformers导入变换器,解码器,编码器型号= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_LAYERS =编码器(DIM = 512,DIM = 512,HEAD = 8,ATTN_ON_ATTN = TRUE#GATE层的注意层,由查询)))
本文提出从正常的重新定义和进给的模式中断,但是在开始时只有只注意到的块,然后在末端延伸。通过NVIDIA的纸张进一步证实了纸张,其减少了注意层数为1/3的进给速度而不会损失性能。
交织量由A&#34控制;三明治系数"它们发现它们以6的值最佳。
从X_Transformers导入变换器,解码器,编码器型号= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_Layers =编码器(DIM = 512,深度= 6,HEADS = 8,Sandwich_Coef = 6#交错和进给与三明治系数6))
作者提出从动态系统角度查看变压器的成功,然后提出基于该POV的数学的改进。具体地,它们建议将注意层放置在两个前馈层之间。这是通过使用变压器进行语音识别的纸张采用这一点。
从X_Transformers导入变换器,解码器,编码器型号= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_Layers =编码器(DIM = 512,DIM = 512,HEADS = 8,Macaron = True#使用Macaron配置))
T5是迄今为止培训的最成功的编码器/解码器变压器架构之一。它们根据学习的偏差值发明了一种新的简化相对位置编码,该偏置值被添加到注意矩阵预软MAX。此偏置是共享并注入每个关注层。我决定包括这一点,因为它提供了具有相对位置编码的便宜方法(优于绝对位置),并且我已经读取了建议在每个层添加位置编码的论文(仅在第一之前的VS)是有益的。
从X_Transformers导入变换racker,解码器模型= transformerwrapper(num_tokens = 20000,max_seq_len = 1024,attn_layers =解码器(Dim = 512,深度= 6,heads = 8,Rel_pos_bias = true#为所有注意图层添加相对位置偏差la t5)))
在这两篇论文中,作者独立地设计了一种新的技术,其中固定正弦位置嵌入在所有层的查询和键投影之前注入到输入中,导致"位置被注入"注意,但留下由位置嵌入不可集中的实际令牌(价值观)。短fffformer纸张使用此属性来缓存令牌,以便为简化的反复类型的变压器进行,该变压器是指互换-XL。
我已经测试过这一点,发现它比普通绝对位置编码产生了更好的结果,即使在没有复发的情况下也是如此。然而,我发现T5相对位置偏压(也注射到所有层中并且具有与PIA相同的属性)更好地执行。所以给出了选项,你应该只使用上面的T5' s Rel_pos_bias。
从X_Transformers导入变换reformerWrapper,解码器型号= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_LAYERS =解码器(DIM = 512,深度= 6,HEADS = 8,POSITION_INFUSED_ATTN = TRUE#on POSION IND DUDION PRIETSEND的位置
谷歌的本文建议将所有层次的引人注目的分数留下来。在没有额外参数的成本,他们表现出常规注意网络顶部的改进。如果您打开此设置,请注意,纸张中使用的最佳结果,在这种情况下,将需要学习预热。作者还报告说,他们可以使用更高的学习率并以相同的步骤获得更好的收益。 (在本文中,他们使用2E-4 VS 1E-4用于Vanilla变压器)
从X_Transformers导入变换器Wrapper,编码器模型= TransformerWrapper(Num_Tokens = 20000,MAX_SEQ_LEN = 1024,ATTN_LAYERS =编码器(DIM = 512,深度= 6,HEADS = 8,PRE_NOMOR = FALSE,#在纸质中,剩余注意力有最佳结果使用后丢失residual_attn = true#添加残差))
我还试图越过跨关注,可能注意到收敛性的提高。您可以通过将cross_residual_attn关键字设置为true来尝试
从X_Transformers导入Xtransformer Model = Xtransformer(DIM = 512,enc_num_tokens = 256,enc_depth = 6,enc_max_seq_len = 1024,dec_num_tokens = 256,dec_depth = 6,dec_heads = 8,dec_max_seq_len = 1024,dec_cross_residual_attn = true#跨关注横传)
您也可以通过简单地传递在TransformerWrapper类中的MAX_MEM_LEN中进行变换器-XL再次发生,然后确保您的解码器将Rel_POS_BIAS设置为TRUE。
然后,您可以使用return_mems关键字在每个步骤中检索存储器并将其传递给下一次迭代。
从X_Transformers导入变换器Wrapper,解码器Model_XL = TransformerWrapper(num_tokens = 20000,max_seq_len = 512,max_mem_len = 2048,attn_layers =解码器(dim = 512,深度= 6,heads = 8,Rel_pos_bias = true))seg1 =火炬。 Randint(0,20000,(1,512))SEG2 =火炬。 Randint(0,20000,(1,512))SEG3 =火炬。 RANDINT(0,2,20000,(1,512))LogiS1,MEMS1 = MODEM_XL(SEG1,RETURN_MEMS = TRUE)LOGIS2,MEMS2 = MODE_XL(SEG2,MEMS = MEMS1,RETURN_MEMS = TRUE)LOGIS3,MEMS3 = MODEM_XL(SEG3,MEMS = MEMS2,return_mems = true)
作者提出了在变压器网络中的剩余连接,并在各种强化学习任务中展示了变压器-XL的稳定性和性能。
从X_Transformers导入转换变换器Wrapper,解码器模型= TransformerWrapper(num_tokens = 20000,max_seq_len = 1024,max_mem_len = 2048,attn_layers =解码器(dim = 512,深度= 6,heads = 16,gate_residual = true))
这项新技术在北京开发,迅速在NLP圈中迅速获得了兴趣。简而言之,它允许您以没有学习参数的成本为具有相对位置嵌入的变压器。您在注意到,在注意其点产品之前对查询和键施加旋转操作。它是非常有效的,建议您在输入中有隐含的顺序时拥有这一点。
从X_Transformers导入变换器Wrapper导入retch,解码器模型= transformerwrapper(num_tokens = 20000,max_seq_len = 1024,attn_layers =解码器(dim = 512,深度= 6,heads = 8,rotary_pos_emb = true#旋转位置嵌入时)))))
从X_Transformers导入编码器,CrossItender Enc =编码器(DIM = 512,深度= 6)模型= Crossiter(DIM = 512,深度= 6)节点=火炬。 Randn(1,1,512)node_masks =火炬。那些(1,1)。 bool()邻居=火炬。 Randn(1,5,512)邻居_masks =火炬。 (1,5)。 bool()encoded_neighbors = enc(邻居,mask = neibers_masks)模型(节点,context = encoded_neighbors,mask = node_masks,context_mask = neigherd_masks)#(1,1,512)
从X_Transformers导入retuouransformerwrapper,解码器模型= pincuoustransformerwrapper(dim_in = 32,dim_out = 100,max_seq_len = 1024,attn_layers =解码器(dim = 512,深度= 12,heads = 8))x =火炬。 Randn((1,1024,32))面罩=火炬。 (1,1024)。 BOOL()模型(x,mask = mask)#(1,1024,100)
@misc {vaswani2017注意,标题= {注意是您所需要的},作者= {ashish vaswani和noam shazeer和niki parmar和jakob uszkoreit和llion jones和idan n. gomez和lukasz kaiser和illia polosukhin},年= {2017} ,ePrint = {1706.03762},ArchivePrefix = {Arxiv},primaryClass = {Cs.Cl}}
@inproceings {kitaev2020reformer,title = {reformer:高效的变换器},作者= {nikita kitaev和lukasz kaiser和anselm levskaya},booktitle = {学习陈述国际会议},年= {2020},URL = {https:/ / apenreview.net/forum?id=rkgnkkhtvb}}}
@Article {DBLP:Journals / Corr / Abs-Abs-Ab-Abs-Abs-1907-01470,作者= {Sainbayar Sukhbaatar和Edouard Grave和Guillaume Lample和Herv {\' {e}} j {\' {e}} gou和Armand Joulin},标题= {增强了持久存储器的自我关注},journal = {corr},volume = {abs / 1907.01470},年= {2019},url = {http:// http:// http://arxiv.org/abs/ 1907.01470}}
@Article {1910.05895,作者= {toan q. nguyen和julian salazar},标题= {变形金刚没有眼泪:提高自我关注的正常化},年= {2019},eprint = {arxiv:1910.05895},doi = { 10.5281 / zenodo.3525484},}
@misc {shazeer2020glu,title = {glu变体改进变换器},作者= {noam shazeer},年= {2020},url = {https://arxiv.org/abs/2002.05202}}
@misc {bachlechner202020200rezero,title = {rezero是你所需要的:大深度的快速融合},作者= {Thomas Bachlechner和Bodhisattwa Prasad Majumder和Huanru Henry Mao和Garrison W.Cottrell和Julian Mcauley},年= {2020}, URL = {https://arxiv.org/abs/2003.04887}}
@misc {bhojanapalli20202020202020lowrank,title = {multi-hegure pendern modice中的低级瓶颈},作者= {srinadh bhojanapalli和chulhee yun和ankit singh rawat和sashank J. reddi和Sanjiv Kumar},年= {2020},eprint = {2002.07028}}
@misc {burtsev2020memory,title = {memory orcyormer},作者= {mikhail s. burtsev和grigory v. sapunov},年= {2020},eprintive = {2006.11527},ArchivePrefix = {Arxiv},primaryClass = {CS.CL }}
@misc {zhao2019 explic,title = {明确稀疏变压器:通过明确选择集中注意力},作者= {广西赵和俊阳林和志远张和徐孙和徐太阳},年= {2019},ePrint = { 1912.11637},ArchivePrefix = {ARXIV},PrimaryClass = {CS.CL}}
@misc {correia2019a1aption,title = {适自稀疏的变换器},作者= {gonçalom.correia和vlad niculae和andréftmartins},年= {2019},eprintive = {1909.00015},ArchivePrefix = {Arxiv},primaryClass = { cs.cl}}
@misc {shazeer2020talkingheads,title = {talken-heading lengigs},作者= {noam shazeer和zhenzhong lan和youlong cheng和nan ding和le hou},年= {2020},eprintive = {2003.02436},ArchivePrefix = {Arxiv} ,primaryclass = {cs.lg}}
@misc {按2020improving,title = {通过重新排序他们的子层},作者= {Ofir Press和Noah A. Smith和Omer Levy},年= {2020},ePrintive = {1911.03864},ArchivePrefix = {Arxiv}, PrimaryClass = {CS.CL}} @misc {lu2019Unterstanding,title = {从多粒子动态系统的观点来{理解和改进变压器},作者= {eiping lu和zhuohan li和di He和zhiqing sun和bin dong和tao qin和李伟王和li Yan Liu},年= {2019},ePrint = {1906.02762},ArchivePrefix = {Arxiv},primaryClass = {CS.LG}} @misc {ke2020反思,标题= {语言预训练中的重新思考位置编码},作者= {guolinke和di he he he he和tie-yan liu},年= {2020},eprintive = {2006.15595},ArchivePrefix = {Arxiv} ,primaryClass = {CS.CL}} @misc {dosovitskiy2020image,标题= {图像值16 ......