代码详解:从头开始学习注意力机制

全文共3028字,预计学习时长6分钟

图片来源:unsplash.com/@titouanc

人类感知的一个重要特质在于个体无法同时处理全部信息。相反,人类将注意力集中于局部视觉空间,以便在需要的时间和场合获取信息并对不同时段的信息进行合并,构建内在场景表现,指导日后的注意力分配及决策过程。《视觉注意循环模型》,2014

本文将探讨如何实施注意力,以及在实施过程如何脱离更大的模型。这是因为在现实模型中实施注意力时,很多时的重点在于管理数据与控制不同的向量,而非注意力本身。

我们将在进行注意力评分的同时计算注意文本向量。

左:层次式点积注意力机制 右:以下将计算的多头注意力机制

注意力评分:

首先浏览一下评分功能的输入。假设处于解码阶段的第一步骤。评分功能的首个输入是解码器的隐藏状态(假定一循环神经网络有三个隐藏节点——尽管在实际应用中并不稳定,但便于说明)。

dec_hidden_state = [5,1,20]

将向量视觉化:

%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns

将解码器隐藏状态视觉化:

plt.figure(figsize=(1.5, 4.5))sns.heatmap(np.transpose(np.matrix(dec_hidden_state)), annot=True, cmap=sns.light_palette(“purple”, as_cmap=True), linewidths=1)

结果如下:

评分功能首次运行的结果是单一注释(编码器隐藏状态),如下所示:

annotation = [3,12,45] #e.g. Encoder hidden state

将单一注释视觉化:

plt.figure(figsize=(1.5, 4.5))sns.heatmap(np.transpose(np.matrix(annotation)), annot=True, cmap=sns.light_palette(“orange”, as_cmap=True), linewidths=1)

实施:为单一注释评分

计算单一注释的点积。

NumPy点参与此运算过程:

def single_dot_attention_score(dec_hidden_state, enc_hidden_state):#return the dot product of the two vectors return np.dot(dec_hidden_state, enc_hidden_state) single_dot_attention_score(dec_hidden_state, annotation)

结果:927

注释矩阵

来看一下如何同时对所有注释评分。为实现这一目的,形成注释矩阵如下:

annotations = np.transpose([[3,12,45], [59,2,5], [1,43,5], [4,3,45.3]])

可将其视觉化如下(每一栏都是编码器时间步骤的隐藏状态):

ax = sns.heatmap(annotations, annot=True, cmap=sns.light_palette(“orange”, as_cmap=True), linewidths=1)

实施:同时对所有注释评分

应用矩阵操纵计算所有注释评分。继续使用点积评分方法,但首先需要转置dec_hidden_state状态,而后使用矩阵注释扩充。

def dot_attention_score(dec_hidden_state, annotations): # return the product of dec_hidden_state transpose and enc_hidden_states return np.matmul(np.transpose(dec_hidden_state), annotations)attention_weights_raw = dot_attention_score(dec_hidden_state, annotations)attention_weights_raw

获得评分后,应用柔性最大值传输函数:

def softmax(x): x = np.array(x, dtype=np.float128) e_x = np.exp(x) return e_x / e_x.sum(axis=0)attention_weights = softmax(attention_weights_raw)attention_weights

重新对注释评分

评分后,根据评分对每个注释进行扩充,进而得到一个注意力文本向量。下方为该公式的扩充部分(将解决括号中的部分)。

def apply_attention_scores(attention_weights, annotations): # Multiple the annotations by their weights return attention_weights * annotationsapplied_attention = apply_attention_scores(attention_weights, annotations)applied_attention

已对注意力重新评分,接下来将文本向量视觉化:

# Let’s visualize our annotations after applying attention to themax = sns.heatmap(applied_attention, annot=True, cmap=sns.light_palette(“orange”, as_cmap=True), linewidths=1)

将结果与视觉化的原始注释对比,可发现第二和第三个注释(栏)几乎被擦除。第一个注释保留部分值,而第四个注释的代表性最强。

计算注意力文本向量

所有持续生成注意力文本向量的部分将总结为这四栏,进而生成单一注意力文本向量。

def calculate_attention_vector(applied_attention): return np.sum(applied_attention, axis=1)attention_vector = calculate_attention_vector(applied_attention)attention_vector# Let’s visualize the attention context vectorplt.figure(figsize=(1.5, 4.5))sns.heatmap(np.transpose(np.matrix(attention_vector)), annot=True, cmap=sns.light_palette(“Blue”, as_cmap=True), linewidths=1)

现在我们已有了文本向量,可将其与隐藏状态连接,并穿过一隐藏层提供该解码时间步骤的结果。

代码传送门:Attention Basics:https://github.com/Garima13a/Attention-Mechanism-Basics

(0)

相关推荐

  • 【NLP】图解 Attention完整版

    译者:张贤,哈尔滨工程大学,Datawhale原创作者 本文约4000字,建议阅读11分钟审稿人:Jepson,Datawhale成员,毕业于中国科学院,目前在腾讯从事推荐算法工作. 序列到序列(se ...

  • Python-相关性分析

    数据之间,数据和结局指标之间的相关性用python可以直观展示. 加载数据和模块 import pandas as pdimport numpy as npimport warnings%matplo ...

  • 解析Transformer模型

    ❝ GiantPandaCV导语:这篇文章为大家介绍了一下Transformer模型,Transformer模型原本是NLP中的一个Idea,后来也被引入到计算机视觉中,例如前面介绍过的DETR就是将 ...

  • 孩子的注意力到底能持续多长时间?

    2013年有人做了一个人-鱼PK的实验,结果人类的Attention span竟然比金鱼还少了1秒.这里的Attention span指的是能够集中注意力在某个特定活动的时间长度,也就是我们常说的专注 ...

  • Python-EEG工具库MNE中文教程(12)-注释连续数据

    更多技术,第一时间送达 注释连续数据(Annotating continuous data) 本案例主要介绍如何向原始(Raw)对象添加注释,以及在数据处理的后期阶段如何使用注释. Raw:原始对象 ...

  • 如何利用Seaborn绘制热力图?

    如何利用Seaborn绘制热力图? 这是本学期在大数据哲学与社会科学实验室做的第八次分享了. 第一次分享的是: 如何利用"wordcloud+jieba"制作中文词云? 第二次分享 ...

  • 来自kaggle最佳数据分析实践

    翻译: 大邓 作者: Bex T 标题: Weekly Awesome Tricks And Best Practices From Kaggle 链接: https://towardsdev.com ...

  • Python数据可视化

    Seaborn是一个很好用的python数据可视化包.汇总一下之前做数据可视化时的一些注意事项和技巧. Seaborn为什么有的数据可视化给人感觉起来很好看很舒服,其实涉及到Seaborn的一些细节操 ...

  • Python 实现注意力机制

    引言 随着信息技术的发展,海量繁杂的信息向人们不断袭来,信息无时无刻充斥在四周.然而人类所能接收的信息则是有限的,科研人员发现人类视觉系统在有限的视野之下却有着庞大的视觉信息处理能力.在处理视觉数据的 ...

  • 中医详解从头到脚的健康密码(经典好文)

    心脏有问题时--左边手臂会酸.麻.痛. 肝脏有问题时--小腿晚上睡觉时容易抽筋. 肾脏出现问题时--声音就会出不来,就会沙哑. 脾胃出现问题时--偏头痛. 任何试图更改生物钟的行为,都将给身体留下莫名 ...

  • 行书的27种笔法详解,值得学习与收藏!

    行书的27种笔法详解,值得学习与收藏!

  • 详解Qt中的状态机机制(一)

    状态机,简写为FSM(Finite State Machine),状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定操作的控制中心. 在 ...

  • 汉字的基本笔画 偏旁部首详解,孩子学习一定有用!

    孩子学习偏旁部首的意义何在? 1.对于孩子不知道读音的.不认识的字,需要用部首查字法: 2.对于认识字的笔顺和间架结构,有很大意义: 3.帮助识字.语文中常见的一个题:换偏旁,组新字,再组词.

  • 大清铜币中心粤十文“版别”详解,捡漏 学习,新手藏友请进!

    本文将为各位藏友盘点一下"大清铜币-中心粤十文"的版别,欢迎阅读.本文同步视频<清朝铜元基础知识之四>和<清朝铜元基础知识之五>,可在"视频&qu ...

  • 史上最全艾灸的各种制作方法详解,想学习的看过来!

    艾灸疗法的主要材料为艾绒,艾绒是由艾叶加工而成.选用野生向阳处5月份长成的艾叶,风干后在室内放置1年后使用,此称为陈年熟艾.取陈年熟艾去掉杂质粗梗,碾轧碎后过筛,去掉尖屑,取白纤丝再行碾轧成绒.也可取 ...

  • 代码详解:Python正则表达式的终极使用指南

    全文共8032字,预计学习时长16分钟 处理文本数据的一个主要任务就是创建许多以文本为基础的特性. 人们可能想要在文本中找出特定格式的内容,比如找出存在于文本中的电子邮件,或者大型文本中的电话号码. ...

  • 中医详解从头到脚的健康密码

    心脏有问题时--左边手臂会酸.麻.痛. 肝脏有问题时--小腿晚上睡觉时容易抽筋. 肾脏出现问题时--声音就会出不来,就会沙哑. 脾胃出现问题时--偏头痛. 任何试图更改生物钟的行为,都将给身体留下莫名 ...

  • 【干货分享】电厂汽轮机本体各TSI监视探头详解(图文并茂学习)

    [振动知识]振动的三要素及各类传感器的用途 [监视标准]汽轮机轴承振动标准 [基础知识]汽轮机安全监视TSI系统介绍 测量探头,即TSI在线监视参数,只有准确测量和有效监控,提前以防,才能保证机组安全 ...