神经网络与深度学习(四)

一、循环神经网络
循环神经网络(RNN)是一类人工神经网络,特别适用于处理序列数据,例如时间序列数据或自然语言文本。RNN的独特之处在于其内部循环结构,允许信息持续传递到后续时间步。这使得RNN能够在处理序列数据时考虑上下文信息,并在此基础上做出预测或生成输出。RNN在自然语言处理(NLP)领域广泛应用,包括语言建模、机器翻译、文本生成等任务。它们也被用于时间序列预测、音频处理等领域。然而,传统的RNN存在梯度消失或梯度爆炸的问题,导致难以捕捉长期依赖关系。为了解决这个问题,出现了许多改进的RNN架构,如长短期记忆网络(LSTM)和门控循环单元(GRU),它们通过引入门控机制来更好地捕获长期依赖性。RNN的一个重要应用是在序列到序列(seq2seq)模型中,例如用于机器翻译的编码器-解码器结构。编码器RNN将输入序列编码成固定长度的向量表示,然后解码器RNN将这个向量解码成输出序列。

1.1 门控循环单元(GRU)

门控循环单元(Gated Recurrent Unit,简称 GRU)是一种用于处理序列数据的循环神经网络(RNN)变体。与标准的循环神经网络相比,GRU 在设计上更加简单,并且具有一些优势,例如减少了梯度消失的问题。

GRU 由一个更新门(Update Gate)和一个重置门(Reset Gate)组成,这两个门的作用是控制信息的流动。更新门决定了过去的记忆信息是否应该传递到当前时间步,而重置门则决定了是否忽略过去的记忆并重新计算。这种门控机制使得 GRU 能够更好地捕捉长期依赖关系,并且相对于传统的 LSTM(长短期记忆网络)结构而言,参数更少,计算量更小。

GRU 在自然语言处理等序列数据任务中被广泛使用,例如机器翻译、语言建模、文本生成等。由于其简单而有效的设计,它通常是研究人员和工程师们首选的循环神经网络模型之一。

更新门(Update Gate):决定了过去时间步的记忆是否要被保留,更新到当前时间步的记忆中。它的值在0到1之间,0表示完全忽略过去的记忆,1表示完全保留过去的记忆。

重置门(Reset Gate):决定了如何结合当前输入和过去记忆来计算候选值。重置门的作用是帮助模型忘记一些过去的信息,以便更好地适应当前输入。

GRU的结构相对简单,参数量较少,因此在一些场景下训练速度可能会更快。它在许多序列建模任务中表现良好,尤其是当数据量较小或计算资源有限时。


1.2 长短期记忆网络(LSTM)

长短期记忆网络(Long Short-Term Memory,LSTM)是一种特殊的循环神经网络(RNN)结构,主要用于处理具有长期依赖关系的时间序列数据。传统的RNN在处理长序列数据时,由于梯度消失或梯度爆炸的问题,往往难以捕捉到远距离的信息。而LSTM通过引入门控机制,有效缓解了这一问题,使得网络能够学习到序列中的长期依赖关系。

LSTM的基本结构包括一个细胞状态(cell state)和三个门(输入门、遗忘门和输出门)。细胞状态负责在序列中传递信息,而三个门则通过控制信息的流入、流出和遗忘,来维护细胞状态。具体来说:

  1. 遗忘门:决定从细胞状态中丢弃哪些信息。它读取上一时刻的输出和当前时刻的输入,然后通过一个sigmoid函数输出一个0到1之间的值,表示保留或遗忘的比例。
  2. 输入门:决定哪些新信息将被存储在细胞状态中。它同样读取上一时刻的输出和当前时刻的输入,然后通过sigmoid函数和tanh函数产生两个输出,分别表示新信息的重要性和具体内容。
  3. 细胞状态更新:根据遗忘门和输入门的输出,更新细胞状态。遗忘门决定了旧信息的保留程度,而输入门决定了新信息的添加程度。
  4. 输出门:决定细胞状态的哪些部分将被输出。它首先读取当前时刻的输入和上一时刻的输出,然后通过sigmoid函数产生一个输出向量。接着,细胞状态通过tanh函数进行变换,并与输出门的输出向量相乘,得到最终的输出。

由于LSTM具有强大的长期依赖关系捕捉能力,它在自然语言处理、语音识别、时间序列预测等领域得到了广泛应用。例如,在机器翻译任务中,LSTM可以有效地捕捉源语言和目标语言之间的长距离依赖关系,从而提高翻译质量。此外,LSTM还可以与其他深度学习技术结合使用,以构建更复杂的模型来处理更复杂的任务。

1.3 深度循环神经网络
深度循环神经网络(Deep Recurrent Neural Networks,Deep RNNs) 是指在循环神经网络(RNN)结构中引入多个循环层的网络模型。与传统的RNN相比,深度循环神经网络具有更深的网络结构,能够更好地捕获数据中的抽象特征和高级表示。

在深度循环神经网络中,每个时间步的输入都会经过多个循环层进行处理,每个循环层都可以视为一个抽象层次,负责学习不同级别的表示。这样的结构使得网络能够学习到更复杂的时间依赖关系和序列特征,从而提高模型的性能和泛化能力。

深度循环神经网络可以使用各种类型的循环层,包括:传统的RNN、长短期记忆网络(LSTM)、门控循环单元(GRU)
深度循环神经网络在许多序列建模任务中表现出色,例如语言建模、机器翻译、文本生成、语音识别等。它们能够处理复杂的时间序列数据,并且在一些情况下比单层RNN具有更好的性能。

1.4 双向循环神经网络
双向循环神经网络(Bidirectional Recurrent Neural Networks,Bi-RNNs) 是一种循环神经网络(RNN)结构,能够同时考虑序列数据的过去和未来信息。它通过在每个时间步上同时运行两个独立的RNN,一个按照正序处理序列,另一个按照逆序处理序列,然后将它们的输出进行拼接或合并,以获得更全面的序列信息。

双向循环神经网络包括两个方向的循环层 :正向循环层和逆向循环层。

在正向循环层中,序列数据按照时间顺序依次输入;
而在逆向循环层中,序列数据按照时间的逆序输入。
每个方向的循环层都可以是传统的RNN、LSTM或GRU等结构。


双向循环神经网络的优势:
在于它能够同时利用序列中的历史和未来信息,从而更全面地捕获序列中的特征和依赖关系。
例如,在自然语言处理任务中,双向循环神经网络可以更好地理解一个单词在句子中的含义,因为它可以同时考虑该单词之前和之后的上下文信息。

双向循环神经网络广泛应用:各种序列建模任务中、语言建模、命名实体识别、情感分析、机器翻译
它们能够提高模型的性能和泛化能力,尤其在处理需要考虑上下文信息的任务中表现出色。


二、NLP


NLP(自然语言处理) 是一门人工智能领域,旨在使计算机能够理解、解释、操纵和生成人类语言。

NLP利用机器学习和深度学习等技术,如循环神经网络(RNN)、卷积神经网络(CNN)、注意力机制(Attention)、预训练模型(如BERT、GPT等)等来解决这些问题。随着深度学习技术的不断发展和自然语言处理任务的不断拓展,NLP在各个领域都得到了广泛应用,包括搜索引擎、社交媒体分析、智能客服、智能翻译等。
应用场景:
文本分类:将文本分成不同的类别,如情感分析、主题分类等。
命名实体识别:识别文本中提及的实体,如人名、地名、组织机构等。
信息抽取:从非结构化文本中提取结构化信息,如从新闻文章中提取事件、日期、地点等。
语言生成:生成自然语言文本,如机器翻译、摘要生成、对话系统等。
语言理解:理解自然语言文本的含义,包括语义分析、句法分析、语义角色标注等。
问答系统:基于自然语言文本回答用户提出的问题,如基于知识库的问答、基于文本的问答等。
文本生成:生成自然语言文本,如文章写作、诗歌生成、对话系统等。


2.1 序列模型
序列模型是一类机器学习模型,专门用于处理序列数据,即按照顺序排列的数据集合。这些模型可以从序列中学习到数据之间的关系和模式,并用于预测、分类、生成等任务。
图像分类:

当前输入−>当前输出
时间序列预测:
当前+过去输入−>当前输出

自回归模型:
自回归模型是一种时间序列模型,用于预测时间序列数据中下一个时间步的值。在自回归模型中,当前时间步的观测值被假定为过去时间步的观测值的线性组合,加上一个误差项。

在建模时,通常使用已知的历史数据来拟合模型参数,并使用拟合好的模型进行未来时间步的预测。
2.2 数据预处理


特征编码

特征编码是将原始数据转换成机器学习算法可以处理的特征表示形式的过程。在特征编码中,原始数据的各种属性或特征被映射到数值化的形式,以便机器学习算法能够对其进行有效的处理和分析。
常见的特征编码方法:
独热编码(One-Hot Encoding):将分类变量转换为二进制向量的形式,其中每个可能的类别对应一个二进制位,只有属于某个类别的位被设置为1,其余位被设置为0。
标签编码(Label Encoding):将分类变量转换为从0到N-1的整数形式,其中N是类别的数量。这种编码适用于某些机器学习算法,如决策树和随机森林。
数值化(Numerical Encoding):对于具有顺序关系的分类变量,可以使用数值化方法将其映射为有序的数字。
Embedding编码:对于自然语言文本或其他高维度的数据,可以使用Embedding技术将其映射到低维度的连续向量空间中,以便更好地表示语义和相关性。
特征缩放(Feature Scaling):将数值型特征进行归一化或标准化,以确保各个特征在相似的尺度范围内,避免某些特征对模型的影响过大。
特征衍生(Feature Engineering):根据原始特征衍生出新的特征,以提高模型的性能和泛化能力,如多项式特征、交互特征等。


文本处理

文本处理是对文本数据进行预处理、分析、理解和转换的过程。它是自然语言处理(NLP)的一个重要组成部分,涉及到从原始文本中提取信息、进行文本挖掘、文本分类、文本生成等各种任务。
主要步骤:
文本清洗(Text Cleaning):去除文本中的噪声和不必要的信息,如HTML标记、特殊字符、标点符号等。
分词(Tokenization):将文本分割成单词或子词的序列,以便后续处理。
停用词去除(Stopwords Removal):去除常见的停用词,如“and”、“the”、“is”等,这些词对文本分析和模型训练往往没有帮助。
词干提取(Stemming)和词形还原(Lemmatization):将单词转换为它们的基本形式,以减少词汇的变化形式对模型的影响。
词向量化(Word Vectorization):将文本转换为数值化的形式,以便输入到机器学习算法中。常见的方法包括独热编码、词袋模型(Bag of Words)、TF-IDF(Term Frequency-Inverse Document Frequency)和词嵌入(Word Embedding)。
特征选择(Feature Selection):选择最具代表性的特征,以减少数据维度和提高模型性能。
文本分析和挖掘:对文本数据进行分析、探索和发现隐藏在其中的模式和规律,如主题建模、情感分析、实体识别等。
模型训练和评估:利用机器学习和深度学习模型对文本数据进行训练,并评估模型的性能和泛化能力。


2.3 文本预处理
一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 我们将 解析文本的常见预处理步骤。
这些步骤通常包括:
1.将文本作为字符串加载到内存中。
2.将字符串切分为词元(如单词和字符)。
3.建立一个字典,将拆分的词元映射到数字索引。
4.将文本转换为数字索引序列,方便模型操作。

第一步读取数据集

文本预处理的第一步是读取数据集。


第二步词汇切分

词汇切分,也称为分词(Tokenization)。在这一步,文本被切分成单词或者子词的序列,以便进一步处理。


第三步构建词索引表
构建词索引表是自然语言处理(NLP)中的一个重要步骤,它通常用于将文本数据转换为计算机可以理解和处理的数字形式。如何构建词索引表:
1. 收集词汇
- 首先,你需要收集所有出现在你的文本数据集中的词汇。这通常意味着你需要遍历你的整个数据集,提取出所有的单词或标记。
2. 去除停用词
- 停用词是那些在文本中频繁出现但对文本意义贡献不大的词,如“的”、“是”、“了”等。为了提高效率和减少存储需求,通常会在构建词索引表之前去除这些停用词。
3. 词汇唯一化
- 确保词汇表中的每个词都是唯一的。这意味着你需要删除重复的词汇。
4. 排序
- 对词汇表中的词汇进行排序,这有助于后续的查找和索引操作。
5. 分配索引
- 给词汇表中的每个词分配一个唯一的索引。这通常是一个整数,从0或1开始递增。索引值用于在后续的文本处理中代替实际的词汇。
6. 创建映射关系
- 创建一个映射关系,将每个词与其对应的索引关联起来。这可以是一个字典、哈希表或其他数据结构,它允许你通过词快速查找其索引,反之亦然。
7. 保存词索引表
- 将构建好的词索引表保存下来,以便在后续的文本处理任务中使用。

2.4 文本嵌入


2.5 RNN模型

RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络。与传统的神经网络(如全连接神经网络或卷积神经网络)不同,RNN具有记忆能力,能够捕捉序列数据中的时间依赖关系。

RNN的基本结构包括输入层、隐藏层和输出层。其中,隐藏层中的神经元不仅接收当前时间步的输入,还接收上一个时间步隐藏层的输出。这种设计使得RNN能够捕捉序列数据中的时间依赖关系,因为它可以“记住”之前的信息并在后续的时间步中使用。

RNN的训练通常使用反向传播算法(Backpropagation Through Time,BPTT)进行。在训练过程中,RNN会学习如何根据序列数据中的模式来更新其内部状态,以便更好地预测未来的输出。

RNN在多个领域都有广泛的应用,如自然语言处理、语音识别、时间序列预测等。在自然语言处理中,RNN可以用于文本分类、情感分析、机器翻译等任务;在语音识别中,RNN可以处理连续的语音信号,将其转换为文本;在时间序列预测中,RNN可以利用历史数据来预测未来的趋势。

三 Transformer
3.1 定义
将Transformer模型看成是一个黑箱操作。在机器翻译中,就是输入一种语言,输出另一种语言。

Transformer由编码组件、解码组件和它们之间的连接组成。

3.2 组件部分
编码器
编码组件部分由6个编码器(encoder)叠在一起构成。解码组件部分也是由相同数量的解码器(decoder)组成的。所有的编码器在结构上都是相同的,但它们没有共享参数。每个解码器都可以分解成两个子层.

解码器
解码器中也有编码器的自注意力层和前馈层。除此之外,这两个层之间还有一个注意力层,用来关注输入句子的相关部分

3.3 编码
词嵌入
在NLP中,将每个输入单词通过词嵌入算法转换为词向量。每个单词都被嵌入为512维的向量,我们使用方框格子来表示这些向量。

编码
编码器接收向量列表作为输入,接着将向量列表中的向量传递到自注意力层进行处理,然后传递到前馈神经网络层中,将输出结果传递到下一个编码器中。

3.4 注意力机制
如何使用向量计算注意力
查询、键与值向量:计算自注意力的第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量。也就是说对于每个单词,我们创造一个查询向量、一个键向量和一个值向量。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的。计算自注意力的第二步是计算得分。为这个例子中的第一个词“Thinking”计算自注意力向量,需要拿输入句子中的每个单词对“Thinking”打分。这些分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分。第五步是将每个值向量乘以softmax分数(为了准备之后求和)。这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词(例如,让它们乘以0.001这样的小数)。

多头注意力机制
增加 “多头”注意力机制,在两方面提高了注意力层性能,扩展了模型专注于不同位置的能力。,给出了注意力层的多个“表示子空间”。需八次不同的权重矩阵运算,我们就会得到八个不同的Z矩阵。

3.5 训练与输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值