24.9.26学习笔记

注意力机制是深度学习领域中的一项重要技术,它最初灵感来源于人类视觉处理系统中的选择性注意现象。在深度学习模型中,注意力机制允许模型在处理信息时,更加关注输入数据的某些部分而忽略其他部分,这可以提高模型对关键信息的捕捉能力,从而提升模型的性能。

注意力机制的基本概念

  1. 查询(Query):表示当前需要处理的信息或上下文。
  2. 键(Key):每个输入元素的标识符,用于确定与查询的相关性。
  3. 值(Value):每个输入元素的实际内容,当该元素被认为与查询相关时,其值将被用来构建输出。

注意力机制的工作原理

  • 计算查询与所有键之间的相似度得分(通常使用点积或加权和等方式)。
  • 使用softmax函数将这些得分转换为概率分布(即注意力权重),表示每个输入元素的重要性。
  • 将这些权重应用于对应的值向量上,得到加权求和的结果作为最终的输出。

注意力机制的计算过程

  1. 查询(Query)、键(Key)、值(Value)的生成:首先,模型会使用线性层从输入数据中生成查询、键和值的表示。
  2. 计算注意力得分:然后,模型通过计算查询和所有键之间的相似度来得到注意力得分。
  3. 归一化:使用softmax函数对注意力得分进行归一化,使得所有得分的和为1。
  4. 加权求和:最后,模型根据归一化后的注意力得分对值(Value)进行加权求和,得到最终的注意力输出。

注意力机制的类型

  1. 单头注意力(Single-Head Attention):最简单的形式,每个查询只生成一个注意力权重。
  2. 多头注意力(Multi-Head Attention):将输入分割成多个头,每个头学习输入的不同部分,最终将所有头的输出拼接起来。
  3. 自注意力(Self-Attention):查询、键和值来自同一输入序列。
  4. 互注意力(Cross-Attention):查询来自一个序列,而键和值来自另一个序列。 

单头注意力(Single-Head Attention)

假设你在阅读关于“暹罗猫”的文章时,只关注一个特定的特征,比如“聪明”。你只会在文章中搜索和“聪明”相关的信息,忽略其他所有特征。这就是单头注意力,你一次只关注一个特征。

例子

  • 你只关注句子:“暹罗猫非常聪明。”
  • 其他特征如外貌、社交需求等,你都暂时忽略。

多头注意力(Multi-Head Attention)

现在,你不仅想知道“暹罗猫”是否聪明,还想知道它们的外貌特征和社交习性。你同时从三个角度评估信息:智力、外观和社交性。这就是多头注意力,你同时关注多个特征。

例子

  • 你同时关注三个句子:
    • “暹罗猫原产于泰国,非常聪明。”
    • “它们有大耳朵和瘦长的身体。”
    • “暹罗猫喜欢社交,需要主人的陪伴。”

自注意力(Self-Attention)

你在阅读文章时,注意到句子之间相互关联的信息。比如,你读到“暹罗猫非常聪明”,然后又读到“暹罗猫喜欢社交”,你意识到聪明可能和它们社交习性有关。这就是自注意力,文章中的每个句子(元素)都可能与其他句子相关联。

例子

  • 句子1:“暹罗猫原产于泰国,非常聪明。”
  • 句子2:“它们有大耳朵和瘦长的身体。”
  • 句子3:“暹罗猫喜欢社交,需要主人的陪伴。”
  • 你注意到“聪明”可能与“喜欢社交”有关联。

互注意力(Cross-Attention)

假设你现在在读两篇文章,一篇是关于“暹罗猫”的,另一篇是关于“波斯猫”的。你想比较这两种猫的不同之处。你将两篇文章的信息结合起来,关注它们之间的差异。这就是互注意力,你将两个不同序列的信息结合起来。

例子

  • 文章1(暹罗猫):“暹罗猫原产于泰国,非常聪明。”
  • 文章2(波斯猫):“波斯猫原产于伊朗,以温顺和高贵著称。”
  • 你比较这两篇文章,关注两者的原产地和性格特点的不同。

在实际的机器学习模型中,这些注意力机制可以帮助模型更好地理解和处理数据。单头注意力简化了问题,多头注意力增加了模型的丰富性,自注意力让模型能够捕捉序列内部的关系,而互注意力则让模型能够处理和比较两个不同序列的信息。

什么是注意力分数?

在自注意力机制中,注意力分数(Attention Scores)是衡量查询向量(Query)与键向量(Key)之间相似度的值。这些分数用于确定每个查询向量在处理输入序列时应该关注哪些键向量。具体来说,注意力分数越高,表示查询向量与键向量之间的相似度越大,相应的值向量在最终输出中的权重也就越大。

 

首先,需要将数据转换成pandas的DataFrame格式,代码如下: ```python import pandas as pd data = {'日期/项目(A厂)': ['2021.1.1', '2021.1.2', '2021.1.3', '2021.1.4', '2021.1.5', '2021.1.6', '2021.1.7', '2021.1.8', '2021.1.9', '2021.1.10', '2021.1.11', '2021.1.12', '2021.1.13', '2021.1.14', '2021.1.15', '2021.1.16', '2021.1.17', '2021.1.18', '2021.1.19', '2021.1.20', '2021.1.21', '2021.1.22', '2021.1.23', '2021.1.24', '2021.1.25', '2021.1.26', '2021.1.27', '2021.1.28', '2021.1.29', '2021.1.30', '2021.1.31'], '进水': [149, 164, 86, 164, 146, 136, 93, 96, 90, 134, 141, None, None, None, 138, 138, 161, None, None, None, None, None, None, None, None, None, 114, 107, 121, None, None], 'COD': [20.1, 10.1, 37.1, 16.4, 10.9, 18.7, 17.2, 17.1, 18.5, 23.8, 17.7, 15.6, 11.0, 19.5, 18.5, 15.2, 16.5, 16.3, 17.3, 29.5, 20.7, 19.5, 18.9, 12.0, 23.9, 11.7, 10.6, 11.1, 14.2, 10.6, 12.5], '氨氮': [3.54, 0.65, 1.92, 1.44, 0.84, 1.59, 1.15, 1.61, 1.42, 2.46, 2.50, 1.48, 1.04, 3.55, 1.60, 1.82, 2.60, 2.10, 1.54, 3.54, 2.67, 3.25, 2.12, 2.38, 2.34, 1.51, 1.58, 1.31, 1.66, 1.26, 1.71], '总磷': [30.7, 20.1, 44.1, 21.5, 18.4, 29.7, 23.5, 24.2, 26.9, 31.7, 28.3, None, None, 24.0, 26.9, 27.8, 20.5, 27.9, 31.8, 37.8, 24.9, 29.3, None, 23.4, 23.5, 12.4, 27.9, 19.3, 17.6, 19.5, 15.4]} df = pd.DataFrame(data) ``` 接下来,我们可以使用matplotlib库进行数据可视化,这里我选择绘制折线图。代码如下: ```python import matplotlib.pyplot as plt # 设置图形大小 plt.figure(figsize=(10, 6)) # 绘制折线图 plt.plot(df['日期/项目(A厂)'], df['进水'], label='进水') plt.plot(df['日期/项目(A厂)'], df['COD'], label='COD') plt.plot(df['日期/项目(A厂)'], df['氨氮'], label='氨氮') plt.plot(df['日期/项目(A厂)'], df['总磷'], label='总磷') # 添加标题和标签 plt.title('A厂水质监测', fontsize=16) plt.xlabel('日期', fontsize=12) plt.ylabel('含量', fontsize=12) # 添加图例 plt.legend() # 显示图形 plt.show() ``` 运行上述代码,即可得到一张含有4条曲线的折线图,用于展示A厂水质监测数据的趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值