转载自:https://zhuanlan.zhihu.com/p/132554155

Transformer在哪里做了权重共享,为什么可以做权重共享?

Transformer在两个地方进行了权重共享:

(1)Encoder和Decoder间的Embedding层权重共享;
(2)Decoder中Embedding层和FC层权重共享。

对于(1),《Attention is all you need》中Transformer被应用在机器翻译任务中,源语言和目标语言是不一样的,但它们可以共用一张大词表,对于两种语言中共同出现的词(比如:数字,标点等等)可以得到更好的表示,而且对于Encoder和Decoder,嵌入时都只有对应语言的embedding会被激活,因此是可以共用一张词表做权重共享的。

论文中,Transformer词表用了bpe来处理,所以最小的单元是subword。英语和德语同属日耳曼语族,有很多相同的subword,可以共享类似的语义。而像中英这样相差较大的语系,语义共享作用可能不会很大。

但是,共用词表会使得词表数量增大,增加softmax的计算时间,因此实际使用中是否共享可能要根据情况权衡。

该点参考:https://www.zhihu.com/question/333419099/answer/743341017

对于(2),Embedding层可以说是通过onehot去取到对应的embedding向量,FC层可以说是相反的,通过向量(定义为 x)去得到它可能是某个词的softmax概率,取概率最大(贪婪情况下)的作为预测值。

那哪一个会是概率最大的呢?在FC层的每一行量级相同的前提下,理论上和 x 相同的那一行对应的点积和softmax概率会是最大的(可类比本文问题1)。

因此,Embedding层和FC层权重共享,Embedding层中和向量 x 最接近的那一行对应的词,会获得更大的预测概率。实际上,Decoder中的Embedding层和FC层有点像互为逆过程。

通过这样的权重共享可以减少参数的数量,加快收敛。

但开始我有一个困惑是:Embedding层参数维度是:(v,d),FC层参数维度是:(d,v),可以直接共享嘛,还是要转置?其中v是词表大小,d是embedding维度。

查看 pytorch 源码发现真的可以直接共享:

fc = nn.Linear(d, v, bias=False) # Decoder FC层定义

weight = Parameter(torch.Tensor(out_features, in_features)) # Linear层权重定义
Linear 层的权重定义中,是按照 (out_features, in_features) 顺序来的,实际计算会先将 weight 转置在乘以输入矩阵。所以 FC层 对应的 Linear 权重维度也是 (v,d),可以直接共享。

Transformer 权重共享相关推荐

  1. 浅谈模型压缩之量化、剪枝、权重共享

    之前陆陆续续看了许多模型压缩相关的文章,自己业务中也接触过一些相关的客户,今天周末没事做,把模型压缩相关的内容整理一下做个分享.可能更多地从科普的角度去介绍,因为我也不是专业做这方面技术的研究. 首先 ...

  2. MixPath:基于权重共享的神经网络搜索统一方法

    ©PaperWeekly 原创 · 作者|陆顺 学校|中科院计算所硕士 研究方向|神经网络架构搜索 论文标题:MixPath: A Unified Approach for One-Shot Neur ...

  3. 关于CNN的权重共享,CNN到底学到了什么?

    CNN的fliter里的每个值都是学习出来的不是事先设定好的. 经过fliter处理后得到是特征图(feature map) 卷积减少权重参数的本质: 权重共享,不同的fliter会在某些神经元上权重 ...

  4. pytorch动态网络以及权重共享

    pytorch 动态网络+权值共享 pytorch以动态图著称,下面以一个栗子来实现动态网络和权值共享技术: # -*- coding: utf-8 -*- import random import ...

  5. Transformer代码详解: attention-is-all-you-need-pytorch

    Transformer代码详解: attention-is-all-you-need-pytorch 前言 Transformer代码详解-pytorch版 Transformer模型结构 各模块结构 ...

  6. 卷积神经网络及图像处理中共享权重、特征映射等理解

    一,前言 卷积神经网络(Constitutional Neural Networks, CNN)是在多层神经网络的基础上发展起来的针对图像分类和识别而特别设计的一种深度学习方法.先回顾一下多层神经网络 ...

  7. Transformer不比CNN强!Local Attention和动态Depth-wise卷积的前世今生

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Qi Han@知乎(已授权) 来源丨https://zhuan ...

  8. 正面刚CNN,Transformer居然连犯错都像人类

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 梦晨 水木番 发自 凹非寺 量子位 报道 | 公众号 QbitAI ...

  9. Transformer也能生成图像

    选自arXiv 作者:Zhuowen Tu.Ce Liu等 机器之心编译 编辑:Panda Transformer 已经为多种自然语言任务带来了突飞猛进的进步,并且最近也已经开始向计算机视觉领域渗透, ...

  10. 高效Transformer层出不穷,谷歌团队综述文章一网打尽

    选自arXiv 作者:Yi Tay 等 机器之心编译 编辑:魔王 自 2017 年诞生以来,Transformer 模型在自然语言处理.计算机视觉等多个领域得到广泛应用,并出现了大量变体.近期涌现的大 ...

最新文章

  1. 关于VB中没有VSS菜单问题
  2. STM32 进阶教程 20 - 串口+DMA实现OneWire总线
  3. 华为主题包hwt下载_华为主题 | 星黛露
  4. 2.1.6 编码与调制(2)
  5. 笔记28 接受请求的输入 ——处理表单
  6. 通过调用API函数实现的无边框窗体的拖拽,比判断坐标更快捷
  7. 文件服务器serv-u,Serv-U文件服务器.PDF
  8. 【干货】基于内容理解的新闻推荐.pdf(附下载链接)
  9. 使用Java实现简单串口通信
  10. Skype for Business Server 2015-01-基础环境-准备
  11. adc0808模数转换实验报告_adc0808模数转换电路图及程序
  12. A Feature Descriptor: Shape Context
  13. 现在应该继续投资公链?还是投资应用级协议?
  14. linux 系统级性能分析工具 perf 的介绍与使用
  15. Python自动化运行合成大西瓜|附小游戏地址
  16. 第一次git拉取代码到本地及身份验证失败踩坑
  17. mac备忘录 英文引号自动转中文引号
  18. 重学数据结构与算法系列:这玩意叫跳表?
  19. linux下使用 sb设备的方法,Linux虚拟文件系统概述(2)get_sb
  20. PB编辑器里怎么查看代码行数

热门文章

  1. oracle update命令未正确结束,ORA-00933: SQL 命令未正确结束处理办法
  2. U盘做启动盘后无法格式化使用
  3. Axure RP7.0学习记录
  4. python最优投资组合_4计算投资组合最优比例
  5. 关联规则增量更新算法——FUP算法
  6. matlab 求特征值的命令,matlab怎么求特征值
  7. web前端知识——常见布局方案、文章排版、图片排版、某宝列表
  8. 《黑马》——C++核心编程
  9. 三四五线城市商机无限,但创业更适合在一线城市
  10. hive:函数:sort_array函数解决collet_list列表排序混乱问题