神经网络模型底层原理与实现7-transformer

为啥叫transformer:这个模型的作用是解决比如文本分类,但每个文本适合被分到的类别数不定,可以让模型来决定要分到几类中(像变形金刚一样)

基本架构:输入-encoder-decoder-输出,整体架构为n个block

a155629907c84e45979bce71a3b102e4.png

具体细节架构是

f0bccf0c849d4df9820622355dc04db8.png

输入-位置编码-多头注意力机制-残差网络+层正则化-feedforward层( 通过线性变换,先将数据映射到高纬度的空间再映射到低纬度的空间,提取了更深层次的特征)

当然,transformer一层不一定要这样设计

 

decoder:介绍常见的autoregressive形式的decoder

dff554e4e50148cf91530622ffc482a2.png

整体结构:把encoder输出读到decoder里面,然后根据一个特殊字符的输入开始,以此输出中文字,每个输出选择概率最大的那个

c0153fb5053d47ce914b4912b6b5cd3b.png

 decoder的细节结构:

a70b77ebbd4441419ae570ee3166472a.png

比encoder层多了mask层,具体如下:

 e6eea0c8016c4d7a8c46e3b5e80e4fd8.png

 和一般的self attention不同的是,在输出b2时只考虑a1、a2(为了符合decoder的工作原理)

 

如何决定输出的长度:

在autoregressive中,在可以被输出的中文字符组中加入end,如果某此输出end概率最大,就终止

模型结构讲完再来讲下

auto和not auto的对比:

0d8e8649f6334d0cbe2d4b5cf50bb531.png

NAT:同时输入多个begin,并行输出

如何决定长度:两种办法:用另外一个模型训练出输出长度/直接根据输入,输出一个同样长度的输出,然后根据end位置做截断

 

最后讲下如何训练:

26185f13f0de43f1929ff956f077f368.png 

把正确结果的每个字表示为一个one hot编码,和每一位输出单独做交叉熵,目标函数就是每个字的总交叉熵最小(注意把end也算进去)

 

两个tips:

1.训练时采用的是单个字的cross entropy 求和,测试时是算blue score,可能会有偏差,但不能在训练时直接用blue score,因为不能微分(可以用强化学习解决)

f4cc75ec8f724c9ead8fcfb42dbfd510.png

 2.在训练的时候,每次都是由正确的输入得出输出,但在测试时不是这样,可能导致一步错步步错的情况,解决方法是在训练中就加入一些错误输入

 

 

 

 

 

 

 

 

 

  • 28
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值