【LLM_04】自然语言处理基础_2

news2024/10/6 6:41:27

  • 一、神经网络
    • 1、循环神经网络(RNN)
    • 2、门控循环单元(GRU)
    • 3、长短期记忆网络(LSTM)
    • 4、双向RNN
    • 5、卷积神经网络(CNN)
  • 二、注意力机制
    • 1、注意力机制原理介绍
    • 2、注意力机制的各种变式
    • 3、注意力机制的特点

一、神经网络

1、循环神经网络(RNN)

  • RNN的一个关键点在于它在处理序列数据的期间会进行一个顺序记忆。
  • 序列数据:一段话或者一个音频都可以理解为序列数据。
  • 顺序记忆是一种会使大脑更容易识别这个序列模式的数据的一个机制。而RNN可以很好的利用这个机制,来递归地进行更新我们这个生命记忆,以此来对我们这些序列数据进行一个很好的建模。

在这里插入图片描述
在这里插入图片描述

  • RNN是顺序记忆的原因:因为其每一个时间步下的隐藏状态变量计算都包含了我们过去的一个时间,是一个一个计算,按照顺序来的。

在这里插入图片描述

  • 最终会经过softmax,然后输出词表上每个词的概率,我们选择概率最大的词来做我们的最终预测词。
  • 整个RNN的结构就是每一个RNN单元的不断复制,因此每个RNN单元的功能都是一样的。所以 W i , W h W_i,W_h Wi,Wh都是相同的,代表输入的矩阵。这里面的权重
  • RNN的优点:(1)可以处理变量的数据(2)模型的大小不会随着输入的增加而增大,因为这里的权重基本是共享的,有很好的参数共享。
  • RNN的缺点:(1)由于我们是顺序的计算,因此我们需要计算前一个单元的学习结果,才能得到后面的这个结果,因此时间上较慢。(2)实际应用当中,随着时间步不停地往后进行推移,后面信息单元的计算就较难获取到之前信息单元的计算。
  • 下面介绍两种RNN的变体:GRU和LSTM

2、门控循环单元(GRU)

在这里插入图片描述

  • 门控机制:对当前的信息进行筛选,像阀门一样。GRU有两个门控:(1)更新门:update gate。(2)重置门:reset gate。它们的作用在于权衡我们过去的信息和当前的输入信息之间的比重问题。

3、长短期记忆网络(LSTM)

在这里插入图片描述

  • 黄色方块:神经网络层。
  • 粉色圈圈:元素之间的操作。
  • 箭头:向量的传递。向量的合并与复制。

在这里插入图片描述

  • LSTM关键在于加了一个新的值,cell state。用它来学习长期的依赖关系。

在这里插入图片描述

  • 第一个门称之为:遗忘门。它的作用主要来决定我们当前上一个状态,有哪些信息可以从cell状态中进行移除。
  • 如果 f t = 0 f_t=0 ft=0,即遗忘门的最终计算结果为0,则表示过去的某些信息我们可以直接进行丢弃。

在这里插入图片描述

  • 输入门是决定有哪些信息可以存入cell状态里面去的,其计算方法与遗忘门叫类似。

在这里插入图片描述

在这里插入图片描述

  • 最后是输出门,决定了哪些信息可以输出。
  • 综上,LSTM很强大,因为我们每个隐藏层都是已经有一个内部的神经单元网络已经计算好了,所以在我们做堆叠或者我们做的很深的时候,LSTM会表现的性能很好。并且,由于我们引入了门控机制,它会对神经网络的输入和输出进行一个动态的控制,会增强我们对信息的利用能力。最后,LSTM可以有效的缓解梯度的问题。

4、双向RNN

  • 前面提到的RNN都有一个特点,就是每一个时间步下的状态里面的隐藏状态变量都是从我们过去序列,以及当前输入来捕获信息的。或者允许过去的值来影响我们当前的状态。
  • 但是在有些时候,我们计算当前的时候,不仅是依赖过去,还会依赖未来的输入,相当于我们会依赖整个输入序列。
    在这里插入图片描述
  • 例如:我们对手写体进行识别的时候,不仅会取决于过去,还会取决于未来的几个字,还有语音识别。
    在这里插入图片描述

5、卷积神经网络(CNN)

在这里插入图片描述

  • CNN刚出现的时候,是运用在计算机视觉领域。但是由于其结构的特殊性,也可以运用在NLP领域。例如:情感分类、心态分类当中都有较好的运用。【这是归功于CNN比较擅长提取局部和位置不变的模式。】

在这里插入图片描述

  • CNN提取局部模式的步骤主要是用来计算一个句子当中所有可能的N元组短语的一个表示。
  • N元组:表示我们选取几个相邻的词作为短语。
  • CNN的运用领域:目标检测、语音识别、文本分类、视频分类等。

在这里插入图片描述

在这里插入图片描述

  • CNN比较擅长提取局部的特征。RNN可以很好的处理变长的文本。来对变长的文本依赖进行很好的建模。
  • 模型机制不同导致RNN参数更多一些。
  • CNN主要是使用卷积核,卷积核在计算的时候是没有相互依赖的,因此可以很好的并行计算。RNN则依赖于过去的数据。

二、注意力机制

1、注意力机制原理介绍

  • Encoder将可变长度的输入序列编码成一个固定长度的向量;
  • Decoder将固定长度的向量解码成一个可变长度的输出序列;
  • Encoder-Decoder阶段的编码与解码的方式可以是CNN、RNN、LSTM、GRU等;

首先,以RNN模型为例,这个模型当中存在一个信息瓶颈的问题。

decoder端需要输出一个完整的句子,这要求encoder端得到的最后一个向量表示需要包含它输入句子的所有信息。但是这样的向量无法表达所有句子的多种多样的信息。
研究人员也发现这样的向量容量会限制模型encoder端的表示。因为在encoder端的每一个位置的隐向量都包含有丰富的信息,而其实最后的向量是整个encoder和decoder模型之间的一个信息瓶颈。
在这里插入图片描述
注:上图当中写的Seq2Seq其实是一个抽象的理论,只要满足输入序列生成输出序列的模式,都可以归类为Seq2Seq的模型。

而注意力机制就是为了解决信息瓶颈的问题提出的。

在这里插入图片描述

  • encoder端得到的每一个隐藏向量用h1到h7来表示,在decoder端得到的第一个隐向量用s1来表示。
  • 与之前RNN模型不同的是,我们不用s1直接来计算这一步生成单词的概率,而是利用s1来选择关注输入句子中的哪些部分,并计算得到一个新的隐向量,来得到生成单词的一个概率。

那么这样一个decoder端如何根据s1来对encoder端的向量进行选择呢?

  • 首先需要计算注意力分数,将s1与h1进行点积得到标量,称其为 e 1 1 e_{1}^{1} e11 ,之后将s1与h1进行点积得到 e 2 1 e_{2}^{1} e21 ,将这个过程一直重复直到这个句子的末尾。

在这里插入图片描述
最后我们就可以得到一个长度为7的向量,其中每个元素都是s1和对应位置的隐向量点积得到的。
我们将这样一个长度为7的向量,称为encoder端隐向量的一个注意力分数。

而这分数其实就表示s1与每一个encoder端隐向量hi的一个相似程度。值越高,表示s1与对应的隐向量相似程度越高。

在这里插入图片描述
之后,使用softmax函数将其变成概率分布。概率越接近于1,则decoder端就会越关注这些位置的向量。

  • 如上图所示,前两个位置的概率分布值较高,说明会更加关注前两个位置的隐向量。

在第三步,我们利用之前得到的注意力分布,对encoder端的隐向量进行加权求和,然后可以得到一个与隐向量维度相同的输出向量o1。

在这里插入图片描述

o1向量也就包含了decoder端当前所需要的encoder端的所有信息。

在这里插入图片描述
最后,将o1与RNN得到的隐向量s1进行拼接,可以得到一个新的表示,来表示decoder端这一步的一个状态。用这样一个向量来预测下一步需要生成的单词。

  • 在这个例子当中,我们输出的是many这个词,对应的就是汉语当中的多个,这也可以从注意力分布的高低看出对应关系。

在这里插入图片描述

  • s1输出的是many,而many就作为下一轮的输入。

接下来就是不断重复,之后我们对于decoder端的每一步,都可以自主的关注到encoder不同位置的隐向量。并且预测出一个新的单词。最后得到整个的输出句子。

在这里插入图片描述

2、注意力机制的各种变式

变体一:加上权重矩阵

如果两个向量的维度不一样,我们就需要在中间加上一个权重矩阵,来实现两者的相乘,最后得到一个标量。
在这里插入图片描述

变体二:additive attention

additive attention使用了一层的前馈神经网络,来将两个向量变成一个标量,从而得到注意力分数。

在这里插入图片描述

在这里插入图片描述

3、注意力机制的特点

  • 注意力机制的出发点是解决信息瓶颈的问题存在的。
  • 注意力机制可以缓解RNN当中梯度消失的问题。通过在encoder和decoder之间提供了一种直接连接的方式,防止梯度在RNN当中会传播过长,进而导致梯度消失。

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

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

相关文章

十大排序之堆排序(详解)

文章目录 🐒个人主页🏅算法思维框架📖前言: 🎀堆排序 时间复杂度O(n*logn)🎇1. 算法步骤思想🎇2、动画演示🎇3.代码实现 🐒个人主页 🏅算法思维框架 &#x1…

Redis集群(新)

1.什么是集群 Redis集群实现了对Redis的水平扩容,可实现并发写操作,启动n个redis节点,将数据分别存储在不同的节点中,每块节点负责不同区域的插槽,所以Redis集群通过分区来提供一定程度的可用性。 Redis集群现采用的是…

mac测试远程端口是否可连接

打开命令行工具,使用命令nc -z ip port即可 ,如果成功,则会返回如下信息: 。

算法基础之表达式求值

算法基础之表达式求值 中序表达式求值 用栈 将字符和数字分别用栈存储 由下往上计算 左子树算完再算右子树 判断方法&#xff1a;当前符号优先级<前一个符号优先级 则左右子树已遍历完 #include<iostream>#include<cstring>#include<stack>#include&l…

单文件组件MVVM

单文件组件&MVVM 所谓组件化开发&#xff0c;就是创建一个个组件。 Vue是一个大类&#xff0c;渲染一切从new Vue开始。 指定视图&#xff1a;el template render:jsx语法 $mount[数学公式] 编译App.vue&#xff0c;作为视图入口 单个组件&#xff1a;结构 样式 data compu…

彩纸屋在线少儿编程源码/scratch在线编程系统/培训管理系统源码/在线培训系统源码PHP

源码简介&#xff1a; 彩纸屋在线少儿编程源码&#xff0c;它是scratch在线编程系统&#xff0c;作为培训管理系统源码/在线培训系统源码&#xff0c;采用PHP源码。 彩纸屋是全国首家提供scratch开源定制和少儿编程培训管理系统源代码的服务商&#xff0c;彩纸屋提供的scratc…

MIT6.824-Raft笔记:Raft初探、副本间log时序

从宏观角度说明raft在程序中的作用&#xff0c;和客户端的关系&#xff0c;以及多个副本之间的关系&#xff1b;从微观角度说明多个副本之间raft对日志处理的流程。 1. Raft 初探 宏观角度说明raft在程序中的作用&#xff0c;和客户端的关系&#xff0c;以及多个副本之间的关…

激活函数与非线性化:探索神经网络中的关键元素

随着人工智能领域的迅猛发展&#xff0c;神经网络成为实现各种复杂任务的有力工具。其中&#xff0c;激活函数及其非线性化特性扮演着至关重要的角色。本文将深入探讨激活函数的基本概念、作用原理以及常见的几种激活函数&#xff0c;并介绍它们在神经网络中发挥的重要作用。 …

Web3 进入“殖民时代”

最近在 AI 和 Web3 领域发生了两件“大”事&#xff0c;两件事都具有指标意义&#xff0c;但在媒体上其意义都被大量的八卦细节给掩埋了。 其实看待任何重大事件&#xff0c;都可以有两种不同的视角。第一是娱乐的视角&#xff0c;在新闻事件中找乐子。如果是本着这个目的&…

STM32-使用固件库新建工程

参考链接: 【入门篇】11-新建工程—固件库版本&#xff08;初学者必须认认真真看&#xff09;_哔哩哔哩_bilibili 使用的MCU是STM32F103ZET6 。 这篇参考的是野火的资料&#xff0c;可以在“野火大学堂”或者它的论坛上下载。&#xff08;我通常是野火和正点原子的资料混着看的…

【DDS】OpenDDS配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍OpenDDS配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更…

能让PDF看起来像是扫描件的Look Scanned

什么是 Look Scanned ? Look Scanned 是一个能够让 PDF 看起来就像是扫描件一样的纯前端网站。你再也不需要麻烦地打印之后扫描了&#xff0c;你所需要的就是鼠标点几下。 这是个挺有意思的软件&#xff0c;但是老苏不确定什么场景下会用到这个软件&#xff0c;如果不想自己搭…

89. 打家劫舍【动态规划】

题目 题解 class Solution:def rob(self, nums: List[int]) -> int:N len(nums)# 定义状态: dp[i]表示从第i间房子开始抢劫&#xff0c;最多能抢到的金额dp [0 for i in range(N)]for i in range(N-1, -1, -1):if i N-1:dp[i] nums[i]elif i N-2:dp[i] max(nums[i], …

C语言—一维数组在内存中的存放

1、先看代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int arr[]{1,2,3,4,5,6,7,8,9,10}; int szsizeof(arr)/sizeof(arr[0]);int i0;for(i0;i<sz;i){printf("&arr[%d] %p\n",i,&arr[i]);}return 0; } 2、定…

【Mybatis】Mybatis操作数据库详解

Mybatis操作数据库 什么是MybatisMybatis入门准备工作创建Springboot工程 建表 创建实体类 配置数据库连接字符串编写持久层代码单元测试 Mybatis的基础操作打印日志参数传递增(insert)返回主键 删(delete)改(update)查(select) Mybatis XML配置文件配置连接字符串和Mybatis写持…

Jenkins CI/CD

1、 Jenkins CI/CD 流程图 说明&#xff1a;这张图稍微更形象一点&#xff0c;上线之前先把代码git到版本仓库&#xff0c;然后通过Jenkins 如Java项目通过maven去构建&#xff0c;这是在非容器之前&#xff0c;典型的自动化的一个版本上线流程。那它有哪些问题呢&#xff1f; …

Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/3)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

基于C#实现外排序

一、N 路归并排序 1.1、概序 我们知道算法中有一种叫做分治思想&#xff0c;一个大问题我们可以采取分而治之&#xff0c;各个突破&#xff0c;当子问题解决了&#xff0c;大问题也就 KO 了&#xff0c;还有一点我们知道内排序的归并排序是采用二路归并的&#xff0c;因为分治…

【Redis基础】Redis安装及管理详细教程

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 1&#xff0c;UBuntu安装Redis 1&#xff0c;使用su命令切换到root用户 su2&#xff0c;使用se…

windows运行Pangolin应用填坑心得——如何在window应用轻量级opengl软件Pangolin库显示3D界面及窗口

目录 0、前言1、最有效的安装打开方式准备工作安装git安装vcpkg&#xff08;1&#xff09;下载&#xff08;2&#xff09;安装&#xff08;3&#xff09;集成至vs 安装cmake 安装pangolin 2、应用实例c工程&#xff08;1&#xff09;vs创建新工程&#xff08;2&#xff09;新工…