当前位置: 首页 > news >正文

第八周:机器学习

目录

摘要

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——语音辨识,将学习的理论融入实践中去。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ArcGIS中怎么批量计算多个点到线最近距离,以及这些点到线的纬度差?
  • 大模型企业应用落地系列六》基于大模型的对话式推荐系统》推荐引擎层
  • 最大子段和
  • 高频面试题:SpringMVC的执行流程
  • 金9银10跳槽季,最新自动化测试面试题合集
  • MySQL死锁问题解决方案
  • 一本读懂数据库发展史的书
  • 如何在大三大四阶段,获得GIS开发能力和实习经验?
  • UI设计评审
  • Telegram创始人帕维尔·杜罗夫:从俄罗斯到迪拜的自由之路
  • 安全升级:Docker部署Redis,启用密码验证
  • 短视频流量|基于SprinBoot+vue的短视频流量数据分析系统(源码+数据库+文档)
  • 大模型日报|7 篇必读的大模型论文
  • docker实战演练
  • HarmonyOS 鸿蒙获取微信授权和持续获取位置信息
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 345-反转字符串中的元音字母
  • docker python 配置
  • gcc介绍及安装
  • java概述
  • java小心机(3)| 浅析finalize()
  • js操作时间(持续更新)
  • Rancher如何对接Ceph-RBD块存储
  • spring boot下thymeleaf全局静态变量配置
  • storm drpc实例
  • Vultr 教程目录
  • 第十八天-企业应用架构模式-基本模式
  • 技术胖1-4季视频复习— (看视频笔记)
  • 力扣(LeetCode)21
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ionic异常记录
  • 阿里云重庆大学大数据训练营落地分享
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #### golang中【堆】的使用及底层 ####
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (31)对象的克隆
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (回溯) LeetCode 131. 分割回文串
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转载)Linux网络编程入门
  • .Net 6.0--通用帮助类--FileHelper
  • .Net7 环境安装配置
  • .NET中统一的存储过程调用方法(收藏)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @FeignClient注解,fallback和fallbackFactory
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ C++ ] STL_list 使用及其模拟实现
  • [000-01-011].第2节:持久层方案的对比
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备
  • [C++] 轻熟类和对象