Press "Enter" to skip to content

从零开始学习注意力模型

介绍

注意力模型,也称为注意机制,是神经网络中使用的输入处理技术。它们使网络能够分别关注复杂输入的不同方面,直到整个数据集被分类。其目的是将复杂任务分解为小的关注区域,逐步处理。这种方法类似于人类思维如何通过将问题分解为简单任务并逐步解决它们来解决新问题的方式。注意力模型能够更好地适应特定任务,优化其性能,并提高其关注相关信息的能力。

从零开始学习注意力模型 四海 第1张

NLP中的注意机制是深度学习在过去十年中最有价值的发展之一。Transformer架构和自然语言处理(NLP)(例如Google的BERT)已经导致了最近的进展。

学习目标

  • 了解深度学习中注意机制的必要性、工作原理及其如何提高模型性能。
  • 了解注意机制的类型和使用示例。
  • 探索应用程序以及使用注意机制的优缺点。
  • 通过按照注意力实现示例来获得实践经验。

本文是Data Science Blogathon的一部分。

何时使用注意力框架?

注意力框架最初是用于增强编码器-解码器型神经机器翻译系统和计算机视觉性能的。传统机器翻译系统依赖于大型数据集和复杂的功能来处理翻译,而注意力机制简化了这一过程。注意力机制不是逐个单词翻译,而是分配固定长度的向量来捕捉输入的总体含义和情感,从而实现更准确的翻译。注意力框架在处理编码器-解码器翻译模型的限制时特别有用。它能够精确对齐和翻译输入短语和句子。

与将整个输入序列编码为单个固定内容向量不同,注意力机制为每个输出生成一个上下文向量,从而实现更高效的翻译。需要注意的是,虽然注意力机制提高了翻译的准确性,但它们可能并不总能达到语言完美。然而,它们能够有效地捕捉原始输入的意图和一般情感。总之,注意力框架是克服传统机器翻译模型的限制,实现更准确和具有上下文感知的翻译的有价值工具。

注意力模型如何运作?

从广义上讲,注意力模型利用一个函数将查询和一组键值对映射为生成输出。这些元素,包括查询、键、值和最终输出,都表示为向量。通过加权求和值来计算输出,权重由一个兼容性函数确定,该函数评估查询和相应键之间的相似性。

在实际应用中,注意力模型使神经网络能够近似于人类使用的视觉注意机制。类似于人类如何处理新场景,该模型强烈关注图像中的特定点,提供“高分辨率”理解,同时以较少的细节感知周围区域,类似于“低分辨率”。随着网络对场景的理解越来越好,它会相应地调整焦点。

使用NumPy和SciPy实现通用注意力机制

在本节中,我们将研究利用Python库NumPy和SciPy实现通用注意力机制的实现。

首先,我们定义一个四个单词序列的单词嵌入。为了简单起见,我们将手动定义单词嵌入,尽管在实践中,它们将由编码器生成。

import numpy as np

# 编码器表示四个不同单词
word_1 = np.array([1, 0, 0])
word_2 = np.array([0, 1, 0])
word_3 = np.array([1, 1, 0])
word_4 = np.array([0, 0, 1])

接下来,我们生成将与单词嵌入相乘以获得查询、键和值的权重矩阵。对于这个例子,我们随机生成这些权重矩阵,但在实际情况下,它们将在训练期间学习。

np.random.seed(42) 
W_Q = np.random.randint(3, size=(3, 3))
W_K = np.random.randint(3, size=(3, 3))
W_V = np.random.randint(3, size=(3, 3))

我们通过在单词嵌入和相应的权重矩阵之间进行矩阵乘法来计算每个单词的查询、键和值向量。

query_1 = np.dot(word_1, W_Q)
key_1 = np.dot(word_1, W_K)
value_1 = np.dot(word_1, W_V)

query_2 = np.dot(word_2, W_Q)
key_2 = np.dot(word_2, W_K)
value_2 = np.dot(word_2, W_V)

query_3 = np.dot(word_3, W_Q)
key_3 = np.dot(word_3, W_K)
value_3 = np.dot(word_3, W_V)

query_4 = np.dot(word_4, W_Q)
key_4 = np.dot(word_4, W_K)
value_4 = np.dot(word_4, W_V)

接下来,我们使用点积运算将第一个单词的查询向量与所有键向量进行比较,得出分数。

scores = np.array([np.dot(query_1,key_1),
np.dot(query_1,key_2),np.dot(query_1,key_3),np.dot(query_1,key_4)])

为了生成权重,我们对分数应用 softmax 运算。

weights = np.softmax(scores / np.sqrt(key_1.shape[0]))

最后,我们通过加权求和所有值向量来计算注意力输出。

attention=(weights[0]*value_1)+(weights[1]*value_2)+(weights[2]*value_3)+(weights[3]*value_4)

print(attention)

为了更快地计算,这些计算可以以矩阵形式执行,从而同时获取所有四个单词的注意力输出。以下是一个例子:

import numpy as np
from scipy.special import softmax

# 表示四个不同单词的编码器表示
word_1 = np.array([1, 0, 0])
word_2 = np.array([0, 1, 0])
word_3 = np.array([1, 1, 0])
word_4 = np.array([0, 0, 1])

# 单词嵌入
words = np.array([word_1, word_2, word_3, word_4])

# 生成权重矩阵
np. random.seed(42)
W_Q = np. random.randint(3, size=(3, 3))
W_K = np. random.randint(3, size=(3, 3))
W_V = np. random.randint(3, size=(3, 3))

# 生成查询、键和值
Q = np.dot(words, W_Q)
K = np.dot(words, W_K)
V = np.dot(words, W_V)

# 计算分数向量查询
scores = np.dot(Q, K.T)

# 通过应用 softmax 运算计算权重
weights = softmax(scores / np.sqrt(K.shape[1]), axis=1)

# 通过计算所有值向量的加权和来计算注意力
attention = np.dot(weights, V)

print(attention)

注意力模型的类型

  1. 全局和局部注意力(local-m,local-p)
  2. 硬注意力和软注意力
  3. 自注意力

全局注意力模型

全局注意力模型考虑到当前状态之前的每个源状态(编码器)和解码器状态以计算输出。它考虑到源序列和目标序列之间的关系。下面是说明全局注意力模型的图示。

从零开始学习注意力模型 四海 第2张

在全局注意力模型中,通过使用每个编码器步骤和解码器的前一个步骤(h<t>)计算对齐权重或注意权重(a<t>)。然后通过使用对齐权重对编码器输出进行加权求和来计算上下文向量(c<t>)。将该参考向量馈送到 RNN 单元以确定解码器输出。

局部注意力模型

局部注意力模型与全局注意力模型不同之处在于,在计算对齐权重(a<t>)时,它仅考虑源(编码器)的一部分位置。下面是说明局部注意力模型的图示。

从零开始学习注意力模型 四海 第3张

局部注意模型可以从提供的图表中了解。它涉及查找单个对齐位置(p),然后使用源(编码器)层的一窗词汇以及(h)来计算对齐权重和上下文向量。

有两种类型的局部注意:单调对齐和预测对齐。在单调对齐中,位置(p)简单地设置为“t”,而在预测对齐中,位置(p)由预测模型预测,而不是假设为“t”。

硬性和软性注意

软性注意和全局注意模型在其功能上具有相似之处。但是,硬性注意和局部注意模型之间存在明显的差异。主要区别在于可微分属性。局部注意模型在每个点都是可微分的,而硬性注意缺乏可微分性。这意味着局部注意模型可以在整个模型中进行基于梯度的优化,而硬性注意由于非可微分操作而对优化提出挑战。

自我注意模型

自我注意模型涉及在同一输入序列中建立不同位置之间的关系。原则上,自我注意可以使用任何先前提到的评分函数,但目标序列被替换为相同的输入序列。

变压器网络

变压器网络完全基于自我注意机制构建,不使用循环网络架构。变压器利用了多头自我注意模型。

从零开始学习注意力模型 四海 第4张

注意机制的优缺点

注意机制是提高深度学习模型性能的强大工具,具有几个关键优点。注意机制的一些主要优点包括:

  1. 增强的准确性:注意机制通过使模型集中于最相关的信息,有助于提高预测准确性。
  2. 提高效率:通过仅处理最重要的数据,注意机制提高了模型的效率。这减少了所需的计算资源,提高了模型的可扩展性。
  3. 改进的可解释性:模型学习的注意权重提供有价值的洞察力,帮助提高模型的可解释性,并有助于理解其决策过程。

然而,注意机制也具有必须考虑的缺点。主要缺点是:

  1. 训练难度:训练注意机制可能具有挑战性,特别是对于大型和复杂的任务。从数据中学习注意权重通常需要大量的数据和计算资源。
  2. 过拟合:注意机制容易过拟合。虽然模型在训练数据上表现良好,但可能难以有效地推广到新数据。使用正则化技术可以缓解此问题,但对于大型和复杂的任务仍然具有挑战性。
  3. 曝光偏差:注意机制在训练过程中可能会出现曝光偏差问题。当模型被训练以逐步生成输出序列,但被评估为一次性产生整个序列时,就会出现这种差异。这种差异可能导致测试数据的性能较差,因为模型可能难以准确地重现完整的输出序列。

了解注意机制的优缺点,有助于在深度学习模型中使用时做出明智的决策。

使用注意框架的技巧

在实现注意框架时,请考虑以下技巧以提高其有效性:

  1. 了解不同的模型:熟悉各种可用的注意框架模型。每个模型都有独特的特点和优点,因此评估它们将帮助您选择最适合实现准确结果的框架。
  2. 提供一致的训练:神经网络的一致训练至关重要。利用反向传播和强化学习等技术来提高注意框架的效果和准确性。这使得可以识别模型中的潜在错误,并有助于优化和提高其性能。
  3. 将注意机制应用于翻译项目:它们特别适用于语言翻译。通过将注意机制纳入翻译任务中,可以提高翻译的准确性。注意机制分配适当的权重给不同的单词,捕捉其相关性,并提高整体的翻译质量。

注意力机制的应用

注意力机制的一些主要用途包括:

  1. 在自然语言处理(NLP)任务中采用注意力机制,包括机器翻译、文本摘要和问答。这些机制在帮助模型理解给定文本中单词的含义和强调最相关信息方面发挥着至关重要的作用。
  2. 计算机视觉任务,如图像分类和对象识别,也受益于注意力机制。通过使用注意力,模型可以识别图像的部分并将分析重点集中在特定对象上。
  3. 语音识别任务涉及转录记录的声音并识别语音命令。注意力机制在任务中证明非常有价值,因为它使模型能够集中精力在音频信号的片段上并准确地识别口语单词。
  4. 注意力机制在音乐制作任务中也很有用,例如旋律生成和和弦进行。通过利用注意力,模型可以强调重要的音乐元素并生成连贯而富有表现力的作品。

结论

注意力机制已经在不同领域广泛应用,包括计算机视觉。然而,大多数关于注意力机制的研究和开发都集中在神经机器翻译(NMT)方面。传统的自动化翻译系统严重依赖于具有复杂特征的广泛标记数据集,这些特征映射每个单词的统计属性。

相比之下,注意力机制为NMT提供了更简单的方法。在这种方法中,我们将一个句子的含义编码为一个固定长度的向量,并利用它来生成翻译。注意力机制不是逐字逐句地翻译,而是关注捕捉句子的整体情感或高层信息。通过采用这种学习驱动的方法,NMT系统不仅可以实现显著的准确性改进,而且可以从更容易的构建和更快的训练过程中受益。

要点

  • 注意力机制是一个集成到深度学习模型中的神经网络层。
  • 它使模型能够根据与任务相关性分配权重,集中精力于输入的特定部分。
  • 注意力机制已被证明在各种任务中非常有效,包括机器翻译、图像描述和语音识别。
  • 它在处理长输入序列时特别有优势,因为它允许模型有选择地关注最相关的部分。
  • 注意力机制可以通过视觉方式表示模型所关注的输入部分,提高模型可解释性。

常见问题

本文中展示的媒体不属于Analytics Vidhya所有,由作者自行决定使用。

Leave a Reply

Your email address will not be published. Required fields are marked *