机器学习课程学习周报七

news2024/9/22 9:57:48

机器学习课程学习周报七

文章目录

  • 机器学习课程学习周报七
    • 摘要
    • Abstract
    • 一、机器学习部分
      • 1.1 Transformer模型概述
      • 1.2 Transformer编码器
      • 1.3 Transformer解码器
        • 1.3.1 自回归解码器
        • 1.3.2 非自回归解码器
      • 1.4 编码器-解码器注意力
      • 1.5 Transformer的训练过程
    • 总结

摘要

本周的学习重点是Transformer模型,涵盖了其编码器和解码器的结构与功能。我详细探讨了自注意力机制、多头自注意力、残差连接、层归一化等核心概念。此外,还比较了自回归和非自回归解码器的优缺点,以及编码器-解码器注意力在信息传递中的作用。通过这些学习,我对Transformer在序列到序列任务中的应用有了更深入的理解。

Abstract

This week’s study focuses on the Transformer model, exploring the structure and functionality of its encoder and decoder. I delved into essential concepts such as self-attention mechanism, multi-head self-attention, residual connections, and layer normalization. Additionally, I compared the advantages and disadvantages of autoregressive and non-autoregressive decoders, and examined the role of encoder-decoder attention in information transfer. Through this study, I gained a deeper understanding of the Transformer’s application in sequence-to-sequence tasks.

一、机器学习部分

1.1 Transformer模型概述

在这里插入图片描述

一般的序列到序列模型会分成编码器Encoder)和解码器Decoder),编码器负责处理输入的序列,再把处理好的结果“丢”给解码器,由解码器决定要输出的序列。

1.2 Transformer编码器

在这里插入图片描述

如上图,编码器输入一排向量,输出另外一排向量。自注意力、循环神经网络、卷积神经网络都能输入一排向量,输出一排向量。Transformer的编码器使用的是自注意力,输入一排向量,输出另外一个同样长度的向量。下图左侧所示,编码器里面会分成很多的block),每一个块都是输入一排向量,输出一排向量。输入一排向量到第一个块,第一个块输出另外一排向量,以此类推,最后一个块会输出最终的向量序列。

在这里插入图片描述

Transformer编码器中的每个块并不是神经网络的一层,如上图右侧所示,在每个块里面,输入一排向量后做自注意力,考虑整个序列的信息,输出另外一排向量。接下来这排向量会“丢”到全连接网络网络里面,输出另外一排向量,这一排向量就是块的输出。

实际上在块中,操作更复杂。Transformer里面加入了残差连接residual connection)的设计,如下图所示,

在这里插入图片描述

最左边的向量 b b b 输入到自注意力层后得到向量 a a a,输出向量 a a a加上其输入向量 b b b 得到新的输出。然后将得到的结果,做层归一化layer normalization),层归一化会计算输入向量的平均值和标准差,具体归一化的计算公式如下:

x i ′ = x i − m σ {x'_i} = \frac{{{x_i} - m}}{\sigma } xi=σxim

层归一化是对同一个特征、同一个样本里面不同的维度去计算均值跟标准差,接着做个归一化。而批量归一化batch normalization)是对不同样本、不同特征的同一个维度去计算均值跟标准差。

现在回看Transformer的编码器结构,其中 N × N \times N×表示重复 N N N次。首先,在输入的地方需要加上位置编码。如果只用自注意力,没有未知的信息,所以需要加上位置信息。多头自注意力就是自注意力的块。经过自注意力后,还要加上残差连接和层归一化。接下来还要经过全连接的前馈神经网络,接着再做一次残差连接和层归一化,这才是一个块的输出,这个块会重复 N N N次。原始的Transformer架构其实并不是一个最优的设计,可以有优化的空间。

1.3 Transformer解码器

解码器比较常见的称为自回归的(autoregressive)解码器,也有非自回归non-autoregressive)解码器。

1.3.1 自回归解码器

以语音识别为例,把一段声音(“机器学习”)输入给编码器,输出会变成一排向量。接下来解码器产生语音识别的结果,解码器把编码器的输出先“读”进去。要让解码器产生输出,首先要先给它一个代表开始的特殊符号 < B O S > <BOS> <BOS>, 即 Begin Of Sequence,这是一个特殊的词元token),每一个词元都可以用一个独热向量来表示,其中一维是1,其他都是0。接下来解码器会将输出做一个softmax操作,得到的向量里面的分数是一个分布,该向量里面的值全部加起 来,总和是 1。这个向量会给每一个中文字一个分,分数最高的中文字就是最终的输出。“机” 的分数最高,所以“机”就当做是解码器的第一个输出。

在这里插入图片描述

接下来把“机”当成解码器新的输入。根据两个输入:特殊符号 < B O S > <BOS> <BOS>和“机”,输出一个向量,假设“器” 的分数最高,“器”就是输出。解码器接下来会拿“器”当作输入,其看到了 < B O S > <BOS> <BOS>、“机”、“器”, 可能就输出“学”。解码器看到 < B O S > <BOS> <BOS>、“机”、“器”、“学”,它会输出一个向量。这个向量里面“习” 的分数最高的,所以它就输出“习”。这个过程就反复地持续下去。

在这里插入图片描述

解码器的输入是它在前一个时间点的输出,其会把自己的输出当做接下来的输入,因此当解码器在产生一个句子的时候,它有可能看到错误的东西。如果解码器有语音识别的错误,它把机器的“器”识别错成天气的“气”,接下来解码器会根据错误的识别结果 产生它想要产生的期待是正确的输出,这会造成误差传播error propagation)的问题,一步错导致步步错,接下来可能无法再产生正确的词汇。

在这里插入图片描述

比较编码器和解码器的结构,我们可以发现其结构非常相似,在第1部分中,解码器使用了掩蔽自注意力masked self-attention),掩蔽自注意力可以通过一个掩码mask)来阻止每个位置选择其后面的输入信息。下图是原来的自注意力机制,输出要考虑完整的输入才能计算出结果,根据 a 1 {a^1} a1 a 4 {a^4} a4所有的信息去输出 b 1 {b^1} b1

在这里插入图片描述

如下图所示,掩蔽自注意力的不同点是不能再看右边的部分,产生 b 1 {b^1} b1时,只能考虑 a 1 {a^1} a1的信息;产生 b 2 {b^2} b2时,只能考虑 a 1 {a^1} a1 a 2 {a^2} a2的信息;产生 b 3 {b^3} b3时,不能考虑 a 4 {a^4} a4的信息;产生 b 4 {b^4} b4的时候,可以用整个输入序列的信息。

为什么需要在注意力中加掩码?

一开始解码器的输出是一个一个产生的,所以是先有 a 1 {a^1} a1再有 a 2 {a^2} a2,再有 a 3 {a^3} a3,再有 a 4 {a^4} a4。这跟原来的自注意力不一样,原来的自注意力 a 1 {a^1} a1 a 4 {a^4} a4是一次整个输进去模型里面的。编码器是一次把 a 1 {a^1} a1 a 4 {a^4} a4都整个都读进去。但是对解码器而言,先有 a 1 {a^1} a1才有 a 2 {a^2} a2,然后才有 a 3 {a^3} a3 a 4 {a^4} a4

在这里插入图片描述

实际应用中输入跟输出长度的关系是非常复杂的,我们无法从输入序列的长度知道输出序列的长度,因此解码器必须决定输出的序列的长度。给定一个输入序列,机器可以自己学到输出序列的长度。所以需要特别准备一个特别的符号 < E O S > <EOS> <EOS>。产生完 “习”以后,再把“习”当作解码器的输入以后,解码器就要能够输出 < E O S > <EOS> <EOS>,解码器看到编码器输出的嵌入、 < E O S > <EOS> <EOS>、“机”、“器”、“学”、“习”以后,其产生出来的向量里面 < E O S > <EOS> <EOS>的概率必须是最大的,于是输出 < E O S > <EOS> <EOS>,整个解码器产生序列的过程就结束了。

1.3.2 非自回归解码器

在这里插入图片描述

自回归的模型是先输入 < B O S > <BOS> <BOS>,输出 w 1 {w_1} w1,再把 w 1 {w_1} w1当做输入,再输出 w 2 {w_2} w2,直到输出 < E O S > <EOS> <EOS>为止。非自回归的解码器输入的是一整排的词元,一次产生产生一排词元。比如输入4 个 < B O S > <BOS> <BOS>的词元到非自回归的解码器,它就产生4个中文的字。因为输出的长度是未知的,所以当做非自回归解码器输入的 < B O S > <BOS> <BOS>的数量也是未知的,一般有两种做法解决这个问题。

  • 用分类器来解决这个问题。用分类器“吃”编码器的输入,输出是一个数字,该数字代表解码器应该要输出的长度。比如分类器输出4,非自回归的解码器就会“吃”4 个 < B O S > <BOS> <BOS>的词元,产生 4 个中文的字。

  • 给编码器一堆 < B O S > <BOS> <BOS>的词元。假设输出的句子的长度有上限,绝对不会超过 300 个 字。给编码器 300 个 < B O S > <BOS> <BOS>,就会输出 300 个字,输出 < E O S > <EOS> <EOS>右边的的输出就当它没有输出。

非自回归的解码器有很多优点。第一个优点是平行化。自回归的解码器输出句子的时候是一个一个字产生的,假设要输出长度一百个字的句子,就需要做一百次的解码。但是非自回归的解码器不管句子的长度如何,都是一个步骤就产生出完整的句子。所以非自回归的解码器会跑得比自回归的解码器要快。

另外一个优点是非自回归的解码器比较能够控制它输出的长度。在语音合成里面,非自回归解码器算是非常常用的。非自回归的解码器可以控制输出的长度,可以用一个分类器决 定非自回归的解码器应该输出的长度。在做语音合成的时候,如果想要让系统讲快一点,就把分类器的输出除以 2,系统讲话速度就变 2 倍快。如果想要讲话放慢速度,就把分类器输出的长度乘 2 倍,解码器说话的速度就变 2 倍慢。

平行化是非自回归解码器最大的优势,但非自回归的解码器的性能往往都不如自回归的解码器。所以很多研究试图让非自回归的解码器的性能越来越好,去逼近自回归的解码器。要让非自回归的解码器跟自回归的解码器性能一样好,必须要使用非常多的技巧。

1.4 编码器-解码器注意力

编码器和解码器通过编码器-解码器注意力encoder-decoder attention)传递信息,编码器-解码器注意力是连接编码器跟解码器之间的桥梁。

在这里插入图片描述

如下图,解码器中编码器-解码器注意力的键和值来自编码器的输出,查询来自解码器中前一个层的输出。具体做法为:编码器输入一排向量,输出一排向量 a 1 {a^1} a1 a 2 {a^2} a2 a 3 {a^3} a3。接下来解码器会输入一个 < B O S > <BOS> <BOS>,经过掩蔽自注意力得到一个向量。接下来把这个向量乘上一个矩阵,做一个变换transform),得到一个查询 q q q a 1 {a^1} a1 a 2 {a^2} a2 a 3 {a^3} a3也都产生键: k 1 {k^1} k1 k 2 {k^2} k2 k 3 {k^3} k3。把 q q q k 1 {k^1} k1 k 2 {k^2} k2 k 3 {k^3} k3去计算注意力的分数,得到 α 1 {\alpha _1} α1 α 2 {\alpha _2} α2 α 3 {\alpha _3} α3 ,接下来做softmax,得到了 α ′ 1 {{\alpha '}_1} α1 α ′ 2 {{\alpha '}_2} α2 α ′ 3 {{\alpha '}_3} α3,然后按下式计算加权和 v v v,这个过程也称为Cross attention

v = α ′ 1 × v 1 + α ′ 2 × v 2 + α ′ 3 × v 3 v = {{\alpha '}_1} \times {v^1} + {{\alpha '}_2} \times {v^2} + {{\alpha '}_3} \times {v^3} v=α1×v1+α2×v2+α3×v3

在这里插入图片描述

v v v接下来会“丢”给全连接网络,这个步骤中 q q q来自于解码器, k k k v v v来自于编码器,该步骤就叫做编码器-解码器注意力,所以解码器就是凭借着产生一个 q q q,去编码器这边抽取信息出来,当做接下来的解码器的全连接网络的输入。

1.5 Transformer的训练过程

Transformer 应该要学到听到“机器学习”的声音信号,它的输出就是“机器学习”这四个中文字。把 < B O S > <BOS> <BOS>丢给编码器的时候,其第一个输出应该要跟“机”越接近越好。而解码器的输出是一个概率的分布,这个概率分布跟“机”的独热向量越接近越好。因此我们会去计算标准答案Ground Truth)跟分布之间的交叉熵,希望该交叉熵的值越小越好。

在这里插入图片描述

在训练的时候,每一个输出跟其对应的正确答案都有一个交叉熵,因此希望这些交叉熵的总和越小越好。解码器输出的不是只有“机器学习”这四个中文字还要输出 < E O S > <EOS> <EOS>,所以解器的最终第五个位置输出的向量跟 < E O S > <EOS> <EOS>的独热向量的交叉熵越小越好。

在训练的时候,告诉解码器在已经有 < B O S > <BOS> <BOS>、“机”的情况下,要输出“器”,有 < B O S > <BOS> <BOS>、“机”、“器”的情况下输出“学”,有 < B O S > <BOS> <BOS> 、“机”、“器”、“学”的情况下输出“习”,有 < B O S > <BOS> <BOS>、“机”、“器”、“学”、“习”的情况下,输出 < E O S > <EOS> <EOS>。 在解码器训练的时候,在输入的时候给它正确的答案,这称为教师强制teacher forcing)。

总结

Transformer比较复杂,只学一遍可能无法深刻理解其中的思想,因此在下一周的学习中,我准备扔专注于Transformer模型和自注意力机制的理解,并且做一些相关的实践练习。同时要补齐其中一些细致的知识点,如Transformer中的束搜索和复制机制等等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

How to debug a appliction on local Linux or WSL?

由于K8S权限控制&#xff0c;当部署在上面的应用程式出现问题后&#xff0c;无法还原用户出问题的场景。所以需要把程式部署到本地的Linux或WSL。 1.Upload application publish files to your Linux or WSL. 2.Add a Dockerfile FROM harbor.xxx.com/dotnet/aspnet:6.0 MAIN…

SQL注入之二次,加解密,DNS注入

加解密注入 在注入的时候&#xff0c;对变量做了加密操作&#xff0c;比如说?id1正常显示&#xff0c;但是代码对1进行了加密&#xff0c;这个时候想用?id1 and 11去判断&#xff0c;就得把1 and 11整体按照网站的方式加密&#xff0c;再去注入 二次注入 无法通过手动注入…

idea和jdk的安装教程

1.JDK的安装 下载 进入官网&#xff0c;找到你需要的JDK版本 Java Downloads | Oracle 中国 我这里是windows的jdk17&#xff0c;选择以下 安装 点击下一步&#xff0c;安装完成 配置环境变量 打开查看高级系统设置 在系统变量中添加两个配置 一个变量名是 JAVA_HOME …

人工智能与机器学习原理精解【12】

文章目录 分级聚类理论分级聚类的详细说明1. 定义2. 算法3. 计算4. 例子5. 例题 皮尔逊相关系数 julia实现 参考文献 分级聚类 理论 分级聚类的详细说明 1. 定义 分级聚类&#xff08;Hierarchical Clustering&#xff09;&#xff0c;又称为层次聚类&#xff0c;是一种通过…

Java虚拟机:虚拟机介绍

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 033 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

haproxy 原理+实战

haproxy 1 haproxy简介1.1 定义1.2 原理讲解1.3 HAProxy的优点&#xff1a; 2. haproxy的基本部署2.1 实验环境2.1.2 haproxy主机配置2.1.3 webserver1配置2.1.4 webserver2配置 3. haproxy的全局配置4. haproxy代理参数5. haporxy的热处理6.haproxy的算法6.1 静态算法6.1.1sta…

物联网HMI/网关搭载ARM+CODESYS实现软PLC+HMI一体化

物联网HMI/网关搭载CODESYS实现软PLCHMI一体化 硬件&#xff1a;ARM平台&#xff0c;支持STM32/全志T3/RK3568/树莓派等平台 软件&#xff1a;CODESYS V3.5、JMobile Studio CODESYS是一款功能强大的PLC软件编程工具&#xff0c;它支持IEC61131-3标准IL、ST、FBD、LD、CFC、…

数据结构之《二叉树》(下)

在二叉树(中)了解了堆的相关概念后还实现了堆&#xff0c;并且还实现了堆排序&#xff0c;以及解决了TOP-K问题。接下来在本篇中将继续学习二叉树中的链式结构&#xff0c;会学习二叉树中的前、中、后三种遍历并实现链式结构的二叉树&#xff0c;接下来就开始本篇的学习吧&…

LabVIEW开发多语言程序的实现

在全球化的背景下&#xff0c;软件开发中的多语言支持变得愈发重要。LabVIEW作为一种广泛应用于工程和科学领域的图形化编程语言&#xff0c;同样支持多语言应用的开发。实现一个多语言LabVIEW程序不仅能增强用户体验&#xff0c;还可以扩大应用的覆盖范围。本文将介绍在LabVIE…

算法复习(上)

数组复习 数组复习基本就是熟练使用数组&#xff0c;经常配合指针使用以及思维的使用 443. 压缩字符串 - 力扣&#xff08;LeetCode&#xff09; 使用双指针分别标志我们在字符串中读和写的位置&#xff0c;当读指针 read 位于字符串的末尾&#xff0c;或读指针 read 指向的…

Python3 第八十一课 -- urllib

目录 一. 前言 二. urllib.request 三. urllib.error 四. urllib.parse 五. urllib.robotparser 一. 前言 Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; url…

C# 利用自定义特性,动态拼接sql,查询数据库,动态新增datagridview 列

之前在给一个工厂客户开发一套“售后包装防错系统”的时候&#xff0c;由于业务比较复杂&#xff0c; 每个表的字段基本都保持在10-20个字段区间&#xff0c;如下截图&#xff08;可向右滑动滚动条&#xff09; 正常的做法&#xff0c;肯定是一顿卡卡操作&#xff0c;新建列&…

Java——反射(1/4):认识反射(反射(Reflection)、反射学什么 )、获取类(获取Class对象的三种方式、代码演示)

目录 认识反射 反射&#xff08;Reflection&#xff09; 反射学什么 获取类 获取Class对象的三种方式 代码演示 认识反射 反射&#xff08;Reflection&#xff09; 反射就是&#xff1a;加载类&#xff0c;并允许以编程的方式解剖类中的各种成分&#xff08;成员变量、…

基于BP神经网络的苦瓜生长含水量预测模型matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) T表示温度&#xff0c;v表示风速&#xff0c;h表示模型厚度 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#…

RocketMQ5.0消费者负载均衡实战-顺序消息负载均衡

在看本篇文章之前可以看一下非顺序消息消息负载均衡相关 RocketMQ5.0消费者负载均衡实战-CSDN博客 顺序消息消息粒度负载均衡 顺序消息的负载均衡主要是针对顺序消息特性进行负载&#xff0c;强遵循顺序消息的特性 RocketMQ 非顺序消息粒度负载均衡 RocketMQ 顺序消息粒度负载…

开发笔记:uniapp+vue+微信小程序 picker +后端 省市区三级联动

写在前面 未采用: 前端放置js 或者 json文件进行 省市区三级联动 采用&#xff1a; 前端组件 后端接口实现三级联动 原因&#xff1a;首先微信小程序有大小限制&#xff0c;能省则省&#xff0c;其次&#xff1a;方便后台维护省市区数据&#xff0c;完整省市区每年更新好像…

HR招聘测评,什么样的候选人无法通过面试

当下企业招聘普遍采用在线人才测评的方式&#xff0c;比传统的面试更加深入&#xff0c;也更加全面的掌握候选人的各方面信息&#xff0c;尤其是综合素质方面&#xff0c;是传统面试所无法比拟的。 在线人才测评的环节&#xff0c;往往安排在面试前&#xff0c;或者是在面试后…

Canvas:二次贝塞曲线

目录 1. 含义2. 方法说明3. 绘制对号4. 绘制聊天框 1. 含义 二次贝塞尔曲线是从起始点开始&#xff0c;通过控制点影响&#xff0c;最终到达终点的平滑曲线。 控制点虽然不在曲线上&#xff0c;但它决定了曲线的形状。 通过调整控制点的位置&#xff0c;可以改变曲线的弯曲方向…

苍穹外卖项目DAY02

苍穹外卖项目Day02 1、员工管理 1.1、新增员工 1.1.1、需求分析和设计 产品原型&#xff1a; 接口设计&#xff1a; 数据库设计&#xff08;employee表&#xff09;&#xff1a; 1.1.2、代码开发 根据新增员工接口设计对应的DTO&#xff1a; 注意&#xff1a;当前端提交的…

(javaweb)分层解耦

目录 一.三层架构 二.分层解耦 三.IOC&DI入门 四.IOC详解 五. DI详解 一.三层架构 复用性差&#xff0c;难以维护和管理 前端发起请求&#xff0c;先会到达controller&#xff0c;再调用service进行逻辑处理&#xff0c;逻辑处理的前提是先拿到数据&#xff0c;到dao…