首页 > 编程语言 >算法金 | Transformer,一个神奇的算法模型!!

算法金 | Transformer,一个神奇的算法模型!!

时间:2024-07-01 22:53:45浏览次数:19  
标签:dim Transformer self 单词 算法 归一化 注意力 向量 神奇


大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」

抱个拳,送个礼

在现代自然语言处理(NLP)领域,Transformer 模型的出现带来了革命性的变化。它极大地提升了语言模型的性能和效率,而自注意力机制是其中的核心组件。

今个儿我们将通过五个阶段,逐步深入讲解自注意力机制,帮助大侠一窥其原理和应用,成功实现变身(装 X )

第一阶段:自注意力机制基础

在处理语言和文字时,我们经常需要理解一个句子中的单词是如何相互关联的。例如,在句子“猫追着老鼠跑”中,我们需要知道“猫”是追的主体,“老鼠”是被追的对象。传统的方法在理解这些关系时有一些困难,特别是当句子变得很长时。自注意力机制是一种新的方法,可以更好地理解句子中单词之间的关系,无论句子有多长。

自注意力机制的核心思想是:每个单词都能“注意到”句子中的其他单词,并根据这些单词来调整自己。这有点像我们在读一篇文章时,会注意到一些关键的词句来帮助我们理解文章的整体意思。

第二阶段:自注意力机制的工作原理

在自注意力机制中,每个单词会看向句子中的其他单词,并计算一个注意力得分。这些得分表示每个单词对其他单词的关注程度。这个过程可以理解为每个单词都在问自己:“我应该关注哪些单词?”

计算注意力得分

以句子“我喜欢吃苹果”为例:

  • “我”计算它对“喜欢”、“吃”和“苹果”的注意力得分。
  • 每个单词的得分会被转换成一个概率,表示它在句子中有多重要。

注意力得分会被一种叫做 softmax 的方法转换成概率。这种方法确保所有的得分加起来等于 1,这样我们就可以知道每个单词的重要性。例如:

  • “我”可能对“喜欢”的关注度是 0.4,对“吃”的关注度是 0.3,对“苹果”的关注度是 0.3。
  • 这些得分表示“我”最关注的是“喜欢”,其次是“吃”和“苹果”。

生成新表示

每个单词会根据这些概率得分,重新组合句子中的信息,生成新的表示。这就像我们在阅读一篇文章时,会根据每句话的重要性来总结文章的核心内容。

防失联,进免费知识星球,直达算法金 AI 实验室 https://t.zsxq.com/ckSu3

第三阶段:查询、键和值

在自注意力机制中,每个单词都被表示为三个向量:查询(Query)、键(Key)和值(Value)。这些向量帮助我们计算注意力得分,并生成新的单词表示。

查询(Query)

查询向量表示我们希望了解的单词。每个单词都有一个查询向量,用于计算它与其他单词的关系。

键(Key)

键向量表示句子中每个单词的特征。查询向量会与键向量进行对比,计算出注意力得分。

值(Value)

值向量表示句子中每个单词的具体内容。注意力得分会作用于值向量,以生成新的单词表示。

示例

以句子“我喜欢吃苹果”为例:

  • “我”的查询向量会与“喜欢”、“吃”和“苹果”的键向量进行对比,计算出它们的注意力得分。
  • 这些得分会用于加权“喜欢”、“吃”和“苹果”的值向量,生成“我”的新表示。

多头注意力机制

为了更好地捕捉句子中不同方面的信息,Transformer 引入了多头注意力机制。这个机制允许我们并行地计算多组查询、键和值向量,捕捉不同的关系。

多头注意力机制的步骤

  1. 分组:将查询、键和值向量分成多组,每组称为一个“头”。
  2. 独立计算:每个头独立计算注意力得分,并生成新的表示。
  3. 拼接与变换:将所有头的结果拼接起来,并通过一个线性变换生成最终的输出。

例子

假设我们有两个头:

  • 第一头可能主要关注“我”和“喜欢”的关系。
  • 第二头可能主要关注“吃”和“苹果”的关系。通过这种方式,多头注意力机制可以更全面地理解句子中的不同关系。

第四阶段:残差连接和层归一化

残差连接(Residual Connection)

残差连接是一种技术,它通过在网络层之间添加直接的跳跃连接,帮助缓解深度神经网络中的梯度消失问题。

原理

在每一层的输出中,我们会添加上这一层的输入。这可以用公式表示为:

其中,Layer(

标签:dim,Transformer,self,单词,算法,归一化,注意力,向量,神奇
From: https://www.cnblogs.com/suanfajin/p/18278993

相关文章

  • [JLU] 数据结构与算法上机题解思路分享-第二次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)正文A二叉树的创建与遍历分数10作者朱允刚单位吉林大学通过带空指针信息的先根序列(......
  • 代码随想录算法训练营第九天|232.用栈实现队列、225.用队列实现栈、 20.有效的括号、1
    文章目录232.用栈实现队列思路--直接模拟225.用队列实现栈解法一、两个队列模拟解法二、一个队列模拟20.有效的括号栈模拟1047.删除字符串中的所有相邻重复项解法一、栈解法二、双指针232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目描述:请你仅......
  • 7.1 闲话-Erdős–Gallai 定理和哈基米算法(没写完)
    前几天考试有一个建出最大流模型,转为最小割,然后模拟最小割的套路。这一个套路并不是少见的。在Gale-Ryser定理和Erdős–Gallai定理的证明都体现了这个想法。Gale-Ryser定理:我先阅读了博文的ycx060617的评论的对Gale-Ryser定理的证明,略去。Erdős–Gallai定理:非增序......
  • educoder 机器学习 --- kNN算法
    第一关:#encoding=utf8importnumpyasnpfromcollectionsimportCounterclasskNNClassifier(object):def__init__(self,k):'''初始化函数:paramk:kNN算法中的k'''self.k=k#用来......
  • 基于javaweb jsp ssm基于分类算法的学业警示预测毕业设计实战项目分享
    前言......
  • Open3D Ransac点云配准算法(粗配准)
    目录一、概述1.1简介1.2RANSAC在点云粗配准中的应用步骤二、代码实现2.1关键函数2.2完整代码2.3代码解析2.3.1计算FPFH1.法线估计2.计算FPFH特征2.3.2全局配准1.函数:execute_global_registration2.距离阈值3.registration_ransac_based_on_feature_matching函......
  • C/C++ Dijkstra(迪杰斯特拉)算法详解及源码
    Dijkstra(迪杰斯特拉)算法是一种用于寻找带权重图中的最短路径的算法。它由荷兰计算机科学家EdsgerDijkstra于1956年提出,被广泛应用于网络路由算法和地图路线规划等领域。算法思想:初始化一个距离数组,用于保存起点到每个顶点的当前最短距离(初始时将起点距离设置为0,其他顶......
  • 代码随想录算法训练营Day9 | 字符串 151.翻转字符串单词 28.实现strStr() KMP算法介绍
    python中常用:        s[::-1]: 反转整个字符        s.strip():删除开头或结尾处的空白字符     s.split():字符拆分成单词 →list    “”.join(s):list→字符串   (持续更新…) 151.翻转字符串里的单词 题目: Leetcod......
  • Open3D 点云快速全局配准FGR算法(粗配准)
    目录一、概述1.1原理和步骤1.2关键技术和优势1.3应用场景二、代码实现2.1关键代码2.1.1.函数:execute_fast_global_registration2.1.2调用registration_fgr_based_on_feature_matching函数2.2完整代码三、实现效果3.1原始点云3.2粗配准后点云一、概述    ......
  • 研0 冲刺算法竞赛 day8 P1303 A*B Problem
    思路:用char[]存储输入,后用int[]逐位计算,根据乘法计算规则错位相加,用数组存储,然后考虑进位,最后倒序输出代码:#include<iostream>#include<cstring>usingnamespacestd;chara1[10001],b1[10001];inta[10001],b[10001],c[10001];intmain(){ cin>>a1>>b1; for......