第八周:机器学习

目录

摘要

Abstract

一、注意力机制V.S.自注意力机制

1、引入 

2、注意力机制

3、自注意力机制

二、自注意力机制

1、输入

2、输出

3、序列标注

4、Multi-head Self-attention

5、比较

总结 


摘要

前两周学习了CNN的基本架构,针对全局信息的考虑问题,提出了注意力机制。本周围绕注意力机制和自注意力机制的概念和计算流程进行理解和推导。当前深度学习比较常用的是自注意力机制, 可以解决”神经网络建立多个输入之间的相关性“问题,所以本周还对自注意力机制的具体计算步骤进行详细推导。最后,根据实际需要提出了多头自注意力机制,并且比较了卷积神经网络和 自注意力机制的优缺点。

Abstract

In the previous two weeks, we learned the basic architecture of CNN, and the attention mechanism was proposed for the problem of considering global information. This week, we will understand and derive the concepts and computational flow of the attention mechanism and the self-attention mechanism. Currently, the self-attention mechanism is more commonly used in deep learning, which can solve the problem of “neural network establishes the correlation between multiple inputs”, so this week, we also derive the specific computational steps of the self-attention mechanism in detail. Finally, we propose a multi-head self-attention mechanism according to practical needs, and compare the advantages and disadvantages of convolutional neural networks and the self-attention mechanism.

一、注意力机制V.S.自注意力机制

1、引入 

如下的热成像图所示:

类热成像图中的高温(红色)处代表重要程度较高。比如机器学习中,机器识别不同人需要观察“人脸”、学习一篇文章需要关注“标题”、每一段文字需要重点看“段落开头”等。

2、注意力机制

注意力机制attention:当机器观察一个物体时,应该将关注点聚焦到更重要的事物上去。但是对于一个模型来说,很难决定某处是否重要,所以引入了注意力机制。

 

上图可以看出,注意力机制的由三大部分和一系列计算变换完成。其中Q(query)是查询对象 、K(key)是被查询对象、V(value)是被查询对象的所包含模块。简单来说,Q就是指观察者、K就是指被观察的一张或多张图片、V就是每张图片里一处或多处模块。

总结attention的步骤如下:
step1 Q和K进行点乘,为了计算其相关性

step2 对Q和K的点乘结果进行量化和softmax,得到a

step3 a和V进行点乘,进而计算二者相关性,得到新的V

step4 最终将新得到的V替换原来的旧V 

注:原先的V只是一个字面意思的值,新得到 的V则包含了较重要的信息。一般来说,K和V是相等的,或者说是K与V之间有一定的联系,这样才能使得Q\cdot K来指导V哪些重要和哪些不重要。

3、自注意力机制

自注意力机制self-attention:实际上是attention的一种特殊形式。不是输入语句和输出语句之间的Attention机制,而是输入语句内部元素之间或者输出语句内部元素之间发生的Attention机制。 

可以把自注意力机制看作是注意力机制的子集,它拥有更加严格的条件,它要求Q、K、V必须是同源的(三者相等或者至少相似有关联)。如何得到Q、K、V,如下图所示:

与attention最大的区别,就是self-attention需要根据w^Q 、w^Kw^V和初始词向量x_1x_2来计算出q_ik_iv_i的值。简答来说,就是在attention的基础步骤上,增加一个最初的步骤:

step0 计算Q、K、V

step1-step3 同上

参考视频:10 Transformer 之 Self-Attention(自注意力机制)_哔哩哔哩_bilibili

二、自注意力机制

1、输入

一个向量v.s.一组向量(文字处理、声音讯号、关系图)

 

如果说,输入只是一个向量,那么经过model完成回归或分类任务,输出为一个标量或一种类别;但是如果输入更加复杂,有多个向量,并且向量大小不同、向量之间存在某种关联,此时需要引入自注意力机制来解决“多个相关输入建立相关性”的问题。

问题:如何表示一组向量

解决:以下两种方法:

左边是独热码 ,但是看不出输入之间的关联,理解不了“语义”;右边是词嵌入,能够明显的的看出输入的大致分类(原理next lecture) 

2、输出

如果输入一组向量,那么输出有以下三种形式: 

(1)每个向量输出一个label,比如词性标注、语音辨识、社交关系图

(2)整个句子只输出一个label,比如情感分析、语者辨认、化学式特性分析

(3)机器自己决定输出的label数量,比如机器翻译(next lecture)

3、序列标注

序列标注sequence labeling 是NLP问题中的基本问题。在序列标注中,我们想对一个序列的每一个元素标注一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。也就是“二、2、(1)”中的情况

 

图A 一个元素对应一个标签的情况,可以使用“全连接”的方式,使得每一个输入对应一个输出的词意。

        问题1:该方法不能结合上下文进行考虑,从而无法判断词性。

图B 为了能够结合前后的输入信息,我们可以利用“窗口”来将输入相互联系起来

        问题2:“窗口”太小则考虑的信息量不全;“窗口”太大则fully connected参数较多,导致计算量过大甚至是出现过拟合现象。

图C 掌握不好“窗口”的大小,所以引入self-attention,找到关键的信息

图D 一种改进形式,可以叠加多层self-attention,逐层筛选出重要的信息.fully connected专注于处理某个位置的信息,self-attention处理整条序列的信息,二者可以交替使用。

self-attention的计算过程:

假设输入a^1a^2a^3a^4之间有千丝万缕的联系,经过一系列运算以后输出b^1、 b^2b^3b^4,如下:

 

其中的输出b^1、 b^2b^3b^4是由4个输入同时影响得到的。上图中的蓝色框是输入后进行的运算,具体运算方式如下图(以b^1为例):

 计算流程如上图“由下至上”所示。首先,需要根据w^Q 、w^Kw^V计算出q_ik_iv_i;其次,计算{\alpha }'_{1,i},也就是q_ik_i二者的内积;最后,再乘上v_i相加即可得到输出。

若用矩阵的方式表示,如下图:

4、Multi-head Self-attention

事实上,多头自注意力机制是自注意力机制的子集。当输入有多种不同形式的相关性时,我们就设定多个q、k、v。其余的计算步骤同上

5、比较

self-attentionV.S.CNN 

简单来说,CNN就是self-attention的 一种特例,self-attention就是CNN的一种普通情况。其关系如下图:

在CNN的一系列操作中,可以看出是需要人为设定好receptive field,只需要考虑receptive  field离的全部信息即可;self-attention则需要考虑全局的信息。如果进行多次卷积,那么CNN就会包含越来越多的信息,从而无限接近self-attention。

 

经过实验数据的验证,CNN在较少数据前表现更好,说明其弹性较小,若是训练数据过多则不会提高表现;self-attention则需要更多的数据,说明其弹性较大,但是在训练数据较少时容易出现“过拟合”。

参考文章:https://www.zhihu.com/question/448924025/answer/1791134786

总结 

本周主要围绕注意力机制和自注意力机制进行学习,下周将学习 RNN,并且将其与自注意力机制进行对比分析。接着,我将完成作业2——语音辨识,将学习的理论融入实践中去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413590.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行为识别实战第二天——Yolov5+SlowFast+deepsort: Action Detection(PytorchVideo)

Yolov5SlowFastdeepsort 一、简介 YoloV5SlowFastDeepSort 是一个结合了目标检测、动作识别和目标跟踪技术的视频处理框架。这一集成系统利用了各自领域中的先进技术,为视频监控、体育分析、人机交互等应用提供了一种强大的解决方案。 1. 组件说明: Y…

如何通过住宅代理进行高效SSL检查

引言 什么是SSL检查?有哪些内容? 为什么要使用SSL检查? SSL检查是如何进行的? 总结 引言 在现代互联网环境中,SSL/TLS协议已成为确保网络通信安全的基石。随着网络攻击手段的不断演进,仅仅依赖于基础的…

数据中心和算力中心的区别

数据中心(Data Center)和算力中心(Computing Power Center 或 HPC Center)虽然都涉及数据处理和存储,但它们的重点和用途有所不同。下面将详细介绍两者之间的区别: 数据中心(Data Center&#x…

torch、torchvision、torchtext版本兼容问题

1、torch与torchtext版本兼容 参考torchtext PyPI 2、 torch与torchvision版本兼容 参考torchvision PyPI

【最新华为OD机试E卷】最长连续方波信号(200分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

从跟跑到领跑:AIGC时代国产游戏的崛起与展望

引言 在人工智能技术快速发展的背景下,AIGC(人工智能生成内容)时代的到来正在重新定义游戏产业的未来。人工智能技术,尤其是生成对抗网络(GAN)、自然语言处理(NLP)、深度学习等领域的突破,正在为游戏开发带来前所未有的机会和挑战。这些技术不仅改变了游戏内容的创作…

51单片机-定时器介绍

时间:2024.8.31 作者:Whappy 目的:手撕51 代码: 现象:

UnrealEngine学习(01):安装虚幻引擎

1. 下载安装 Epic Games 目前下载UE引擎需要先下载Epic Games,官网为我们提供了下载路径: https://www.unrealengine.com/zh-CN/downloadhttps://www.unrealengine.com/zh-CN/download 我们点击图中步骤一即可进行下载。 注释:Unreal Engi…

揭秘扩散模型:DDPM的数学基础与代码实现全攻略!

(DDPM) denoising diffusion probabilistic models 理论学习 本文价值 本文是 Diffusion 这一类模型的开山之作,首次证明 diffusion 模型能够生成高质量的图片,且奠定了所有后续模型的基本原理:加噪 --> 去噪。DDPM 模型的效果如下&#x…

驾驭高效编程:一探C++ STL的奥秘

1.什么是STL 2.:STL的版本 2.1:原始版本 2.2:P.J版本 2.3:RW版本 2.4:SGI版本 3:STL的六大组件 4:如何学习STL 5:STL的缺陷 1.什么是STL STL(standdard template library-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构与算法软…

海康二次开发学习笔记9-通讯触发及模块列表获取

通讯触发及模块列表获取 模块列表获取 获取流程中所有模块的模块名,添加下拉框用于显示模块名 1. 处理Combox2的DropDown事件 /// <summary>/// 模块列表获取/// </summary>/// <param name"sender"></param>/// <param name"e&q…

OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 裁剪线段与图像矩形相交的部分。 cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外&#xff0c;则返回 false。…

【Python报错】AttributeError`:`‘NoneType‘ object has no attribute ‘XXXX‘`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在Python编程中&#xff0c;AttributeError是一个常见的错误类型&#xff0c;它表示尝试访问的对象没有该属性。本文将探讨…

Stable Diffusion绘画 | 插件-宽高比调整助手:让计算器毕业

在调整图片宽高时&#xff0c;如果每次都需要用计算器根据比例算好&#xff0c;再手工输入&#xff0c;非常影响效率。 推荐使用以下的插件&#xff0c;来实现高效准确地调整图片宽高比例。 Aspect Ratio Helper 安装地址&#xff1a;https://github.com/thomasasfk/sd-webui…

Spring 是什么

首先我们先看一个例子。以下是代码的结构。 public interface UserDAO {/*** 根据id删除用户*/void deleteById(); } public class UserDAOImplForMySQL implements UserDAO {Overridepublic void deleteById() {System.out.println("使用MySQL数据库删除信息....")…

DexclassLoader读取dex在Android14上遇到问题

报错如下&#xff1a; 在Android 14&#xff08;API 级别 34&#xff09;及以后版本中&#xff0c;DexClassLoader 被进一步限制&#xff0c;只能用于加载只读文件中的代码。这意味着你不能再使用 DexClassLoader 来加载从应用的内部存储空间中读取的文件。 我想通过JNI来修改…

新160个crackme - 043-riijj_cm_20041121

运行分析 除了主程序还有一个dll文件&#xff0c;应该是要加载pf1.dll这个动态链接库运行主程序&#xff0c;需破解Name和Serial&#xff0c;点击注册无反应 PE分析 C程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 尝试ida动调加载动态链接库pf1.dll&#xff0c…

【SAM】Segment Anything网络结构详解

Segment Anything网络结构详解 论文链接&#xff1a;http://arxiv.org/abs/2304.02643 代码链接&#xff1a;https://github.com/facebookresearch/segment-anything 一、整体框架 二、图像编码器image encoder 使用一个MAE预训练好的ViT模型&#xff08;ViT-H/16 使用了 14…

如何在JPG文件中隐写数据

概述 最近在做资源管理器背景的一个功能时&#xff0c;需要将信息传递到DLL中去&#xff0c; 主要就是传递一些比较简单的参数&#xff0c;包括图片的契合度&#xff0c;透明度之类的。通信方式有多种&#xff0c;毕竟是练手的功能&#xff0c;就想找一些以前没用过的方式。 …

基于STM32校车安全监控系统的设计(论文+源码+实物)

1 方案设计 根据设计要求&#xff0c;本设计校车安全监控系统的设计以STM32F103单片机作为主控制器&#xff0c;通过MQ传感器实现异常气体的检测&#xff0c;当异常气体浓度异常时会通过继电器打开车窗进行通风&#xff0c;以保证舒适的环境&#xff0c;通过红外传感器用于监…