码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 预训练模型相对位置编码和绝对位置编码的通俗理解


    1 transformer最经典的理解:

    http://jalammar.github.io/illustrated-transformer/

    2 位置编码

    相对位置编码(relative position representation):https://zhuanlan.zhihu.com/p/397269153
    Transformer中的相对位置编码(Relative Position Embedding):https://blog.csdn.net/chenf1995/article/details/122971023?spm=1001.2014.3001.5502

    Swin Transformer之相对位置编码详解:https://zhuanlan.zhihu.com/p/577855860

    https://kazemnejad.com/blog/transformer_architecture_positional_encoding/

    3 理解,计算哪个词的注意力结果,就是以哪个词为位置中心进行计算,得到其他词的相对位置,相对位置也是直接查表,其他的词相对于中心词的位置不同,在加上词向量本身,就能得到不同的结果

    如果我们以其中一个单词为中心,那么其有左边也有右边的单词,假设我们一个句子的长度为5,那么将有9个embedding向量可学习,一个embedding向量表示当前词,其中4个embedding向量用来表示其左边的单词,另外4个embedding向量来表示其左边的单词。为什么是9个embedding向量呢?因为我们在实际计算时候,5个单词都有可能作为中心词。上图中以第5个位置(索引为4)的单词为中心,那么其左边的单词的编号为:-1,-2,-3,-4,右边的单词的编号为:+1,+2,+3,+4 。
    在这里插入图片描述
    对于第一个位置的单词“I”,当transformer计算“I”跟“therefore”的attention信息时候,"therefore"会采用第6个位置编码,因为我们是以第4个索引为中心,“therefore”是位于“I”的右边相对于“I”的相对距离为2,所以其采用的是第6个embedding向量。
    在这里插入图片描述
    跟之前一样,当计算到第二个“I”和其他单词的attention信息时,如计算其跟左边“therefore”的attention信息,那么“therefore”采用的位置编码为第3个embedding向量,因为它在“I”的左边相对于“I”偏离1个距离,索引应该采用第3个embedding向量。

    在这里插入图片描述
    注意,有两个位置编码向量需要学习,一个是为了计算zi,一个是为了计算eij。最大的长度也会被考虑在内,如果我们中间索引为k,那么会有2k+1个相对位置编码向量需要学习,其中k个是其左边的,k个是其右边的,还有一个属于自己。如果长度超过2k+1,那么其右边超过k的全部置为k,左边超过k的全部置为0。下面是个长度为10的句子的例子,其中k=3,那么它到相对位置编码表中拿向量的索引为:

    这么做的原因有:

    1.作者认为超出范围的位置还采用精准的位置编码时没必要的

    2.clip最大长度是的模型可以学到训练集中没见过的长度

    3.1 对比,在计算过程融入相对位置信息即可

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    对比两种计算方式,比较容易看出来,其实是在计算zi的时候,计算完j跟权重w后加上i相对于j的相对位置编码。而在计算eij时候同理,计算完j跟权重w后加上ij的相对位置编码。注意这里两种权重矩阵是不同的,理解transformer中的q,k,v 这三个向量分别对应过去。

  • 相关阅读:
    Windows安装VMware(Broadcom)
    Windows编程dll基本知识点
    本地缓存Caffeine的缓存过期淘汰策略
    【密码学补充知识】
    写一个函数del,用来删除动态链表中指定的节点
    2022-08-24 AndroidR 实现长按按键打开一个app或者打开app的某个界面
    秋染田野稻菽飘香 国稻种芯·中国水稻节:河北各地农业丰收
    深度学习:多模态与跨模态
    Python中的matplotlib与Pygal的安装、使用与实例
    二叉树基本操作实现 && 树和二叉树&& 二叉树进阶oj && 堆的基本概念 && 优先级队列的使用_
  • 原文地址:https://blog.csdn.net/qq_15821487/article/details/127990217
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号