RNN系列学习笔记

王树森RNN系列学习笔记

  • 数据处理
  • Simple Recurrent Neural Networks
    • Stacker RNN
    • Bidirectional RNN
  • LSTM
    • 变体1
    • 变体2
    • 变体3 GRU
  • Attention
  • Self-Attention
  • Transformer
    • Attention层
    • Self-Attention层
    • Muti-Head
    • Transformer
    • Bert
    • Vision Transformer

视频地址https://www.youtube.com/watch?v=NWcShtqr8kc&list=PLvOO0btloRnuTUGN4XqO85eKPeFSZsEqK
主讲人王树森。

数据处理

这里主要为文本数据处理过程。
文本数据包含数值化描述(Numeric Features),和类别化描述(Categorical Features)。
数值化描述如年龄,数值之间是有大小关系的,比如50岁比30岁大。
类别化描述如性别、国籍,需要转化为数值化描述,才能被计算机处理。

  1. 简单的编码方式,如序列编码1、2、3、4,会存在大小之分,但是实际对应的类别,却不应该有大小之分,所以不能用标量表示类别化描述。同时,0作为保留编码,用于表示缺失的或者未知的数据。
  2. 那么使用one-hot编码方式,可以避免大小之分,0作为保留编码,用于表示缺失的或者未知的数据。但是one-hot向量的长度由类别数量决定,且one-hot编码形成的输入矩阵非常稀疏,存储和计算效率低。

文本处理的步骤:

  1. Tokenization(Text to Words)
    词分割,将文本分割成单独的序列词汇
    要注意:大写是否要转为小写;移除断句符,the、a、of等;错误拼写修正。
    在这里插入图片描述

  2. Build Dictionary
    计算每个单词出现的频率。
    然后按照词频由高到低进行排序。
    排序后,每个单词的索引,可以用于表示该单词。
    文本中单词的集合,被称为词汇表,vocabulary。保留词汇表中的高频词,删除低频词,因为低频词有可能是名字、错误拼写。另一方面,去掉低频词,可以有效降低词汇表one-hot编码的维度。
    由于去掉了低频词,文本词分割后,进行one-hot编码时,会出现词汇表中没有的词,可以忽略或者用0编码。

  3. One-Hot Encoding
    将文本,转为用词汇表索引表示的sequence,如有表要,将索引进一步转为one-hot编码。

  4. Align Sequences
    由于文本有长有短,转为sequence后,也有长有短。为了把所有的文本存储在tensor中,要求所有文本都一样长。
    设置一个固定长度,长于这个长度的文本,截取开头或者末尾,短于这个长度的文本,用0补齐。

  5. word to vector
    由于one-hot的编码方式,具有稀疏、效率低的特点,所以进一步进行转化word embedding。
    d为用户设置的词向量维度,v为词汇表的长度。
    在这里插入图片描述

Simple Recurrent Neural Networks

在这里插入图片描述
将状态信息存储在h中。某个节点的h,会包含这个节点以及之前节点的信息。
在这里插入图片描述
由于梯度消失的问题,SimpleRNN擅长短期之内的预测,长期的记忆会被遗忘。
在这里插入图片描述
SimpleRNN只有一个参数矩阵。
在这里插入图片描述

计算过程:

  1. 文本one-hot编码,转为embedding编码。参数量为:shape(x)×shape(vocabulary)
    [ d i m e m b e d d i n g , n u m b e r w o r d ] = [ d i m e m b e d d i n g , l e n g t h v o c a b u l a r y ] ∗ [ n u m b e r w o r d , l e n g t h v o c a b u l a r y ] T [dim_{embedding},number_{word}]=[dim_{embedding},length_{vocabulary}]*[number_{word},length_{vocabulary}]^T [dimembedding,numberword]=[dimembedding,lengthvocabulary][numberword,lengthvocabulary]T
    2.embedding编码,输入简单RNN,参数量为:shape(h)×[shape(h)+shape(x)]
    逐个计算embedding对应的状态向量h,不能并行计算。
    [ d i m h , 1 ] = [ d i m h , d i m h + d i m e m b e d d i n g ] ∗ [ 1 , d i m h + d i m e m b e d d i n g ] T [dim_{h},1]=[dim_{h},dim_{h}+dim_{embedding}]*[1,dim_{h}+dim_{embedding}]^T [dimh1]=[dimh,dimh+dimembedding][1,dimh+dimembedding]T

Stacker RNN

堆叠RNN,上一层的输入为下一层的输出。
在这里插入图片描述

Bidirectional RNN

双向RNN,以从前到后、从后到前两种顺序阅读文本。可以记忆靠近输入和输出的信息。
在这里插入图片描述

LSTM

LSTM通过引入传送带,将历史信息直接传动到当前节点之后的状态向量中,而不是依靠状态向量本身去传递。LSTM缓解了梯度消失的问题,延长了对历时信息的记忆时间。
在这里插入图片描述
计算过程:
逐个计算embedding对应的向量,不能并行计算。

  1. forget gate:
    f t = σ ( W f ∗ [ h t − 1 , x t ] + b f ) f_t=\sigma(W_f*[h_{t-1},x_t]+b_f) ft=σ(Wf[ht1,xt]+bf)
  2. input gate:
    i t = σ ( W i ∗ [ h t − 1 , x t ] + b i ) C t n = t a n h ( W C ∗ [ h t − 1 , x t ] + b C ) i_t=\sigma(W_i*[h_{t-1},x_t]+b_i) \\ C^{n}_t=tanh(W_C*[h_{t-1},x_t]+b_C) it=σ(Wi[ht1,xt]+bi)Ctn=tanh(WC[ht1,xt]+bC)
  3. 计算新的C
    C t = f t ∗ C t − 1 + i t ∗ C t n C_t=f_t*C_{t-1}+i_t*C^n_t Ct=ftCt1+itCtn
  4. output gate:
    o t = σ ( W o ∗ [ h t − 1 , x t ] + b o ) ) o_t=\sigma(W_o*[h_{t-1},x_t]+b_o)) ot=σ(Wo[ht1,xt]+bo))
  5. 计算新的h
    h t = o t ∗ t a n h ( C t ) h_t=o_t*tanh(C_t) ht=ottanh(Ct)

参数量为: 4×shape(h)×[shape(h)+shape(x)+1]

变体1

添加peephole connection,使所有gate可以查看C的状态。
在这里插入图片描述

变体2

耦合forget gate和input gate,由两个门共同决定忘记什么、添加什么。
在这里插入图片描述

变体3 GRU

将forget gate和input gate组合为update gate。
在这里插入图片描述

Attention

sequence to sequence模型,主要由编码器Encoder和解码器Decoder组成,encoder将输入embedding向量转换到编码空间,decoder将输出embedding向量转换到解码空间。解码器的初始状态由编码器的最终状态决定。由于RNN的遗忘性质,编码器的最终状态并不能完全概括输入的所有信息,尤其在输入长度较长的时候,这个缺点更为明显。
在这里插入图片描述
Attention机制,在于解码器的每个状态,由编码器的所有状态、当前输出序列信息、历史输出序列信息共同决定。有效的避免了输入信息的丢失。
以下是计算编码器每个状态对解码器每个状态的影响系数计算方法,方法二较为流行。
在这里插入图片描述
在这里插入图片描述
以下为Attention机制更新参数方式。

  1. 计算解码器状态向量S,与编码器所有状态向量 hi 的相关系数;
  2. 利用相关系数,对编码器所有状态向量加权平均,得到 语境向量c
  3. 利用输出序列、解码器状态向量S、向量c,更新输出序列的状态向量。

在这里插入图片描述

Self-Attention

计算当前状态与历史状态的相关性,用于更新状态。
在这里插入图片描述

Transformer

计算过程:

  1. 计算解码器状态向量的查询向量,Q;
  2. 计算编码器状态向量的关键词向量,K;
  3. 计算Q与K的相关系数;
  4. 计算编码器状态向量的值向量,V;
  5. 利用Q与K的相关系数,对V进行加权平均,得到语境向量C。
    在这里插入图片描述

抛开RNN的架构,直接使用Attention机制。

  1. 计算输出序列的查询向量,Q;
  2. 计算输入序列的关键词向量,K;
  3. 计算Q与K的相关系数;
  4. 计算输入序列的值向量,V;
  5. 利用Q与K的相关系数,对V进行加权平均,得到语境向量C。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Attention层

Attention层的输入为:输入序列、输出序列,输出为语境向量C。
在这里插入图片描述

Self-Attention层

Self-Attention层的输入为:输入序列,输出为语境向量C。
在这里插入图片描述

Muti-Head

由多个Attention或者Self Attention的输出,进行堆叠,即可得到多头Attention或多头Self Attention。
在这里插入图片描述

Transformer

Transformer的Encoder由6个相同结构的block组成,每个block由multi-head self-attention和dense组成。
Transformer的Decoder由6个相同结构的block组成,每个block由multi-head self-attention、multi-head attention和dense组成。

Bert

使用两类任务预训练transformer。

  1. 判断两个句子是否相邻;
  2. 预测句子中随机被遮挡的单词。

在这里插入图片描述
BERT训练无需标注信息,可以使用海量数据。
在这里插入图片描述

Vision Transformer

算法流程:

  1. 将图像划分为不同的patch;
  2. 将patch打平为一个向量;
  3. 将向量经过全连接层输出,并在输出中加入patch的位置编码信息;
  4. 在全连接层输出向量后,加入多个Multi-head Self-Attentino层和Dense层;
  5. 最后输出的向量c0,经过softmax分类器,得到分类结果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
论文使用的数据集有三个,在数据集小于1亿张图片时, ResNet的预训练更好些:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值