课程学习总结2

Class13-循环神经网络进阶

1.1 引入

1.1.1 Recurrent Neural Network, RNN

用于处理带有‘时序性’的数据,数据中一个unit与其前后unit有关.
RNN网络结构:
在这里插入图片描述
从上式可以看到: H t 1 H_{t-1} t 1 t-1 时刻的隐藏层输入, X t X_t 为t时刻的输入。
比较神经网络(NN)的公式:$HW+b , , 我们可以看到之前时刻 H_{t-1}$增加的影响。

1.1.2 GRU(Gate Recurrent Unit的简称)

GRU为循环神经网络的一种,增加门控制:
在这里插入图片描述
分析上式可发现:
重置门/更新门 R t R_{t} Z t Z_{t} 均为 X t X_{t} H t 1 H_{t-1} 的加权组合分并通过非线性激活层,数值范围 [ 0 , 1 ] [0,1]
候选隐藏状态 H ~ t \widetilde{H}_{t} 由重置门 R t R_{t} 再次与 H t 1 H_{t-1} X t X_{t} 加权组合并通过非线性激活层,数值范围 [ 1 , 1 ] [-1,1]
最终的隐藏状态 H t H_{t} 为以更新门 Z t Z_{t} 做权重的 H t 1 H_{t-1} H ~ t \widetilde{H}_{t} 组合。

我们综合考虑,其实 R t R_{t} Z t Z_{t} 称为控制重置的门控(reset gate)、控制更新的门控(update gate),根据 X t X_{t} H t 1 H_{t-1} 的状态值计算 R t R_{t} Z t Z_{t} 的门控值,该过程中激活函数将门控范围变为 [ 0 , 1 ] [0,1] 0 0 代表完全遗忘, 1 1 代表完全记住。

得到两个门控信号后,重置门 R t R_{t} 控制之前隐藏层 H t 1 H_{t-1} 的保留程度,之后与当前输入状态 X t X_{t} 合并,激活函数将数值范围变为 [ 1 , 1 ] [-1,1] ,得到 H ~ t \widetilde{H}_{t} (候选隐藏层状态)。此时 H ~ t \widetilde{H}_{t} 主要包含了当前输入数据 X t X_{t} ,有针对性地将 X t X_{t} 添加到当前的隐藏状态,相当于“记忆了”当前时刻状态。
最后,便是更新门表达形式,通过 Z t Z_{t} 控制 H t H_{t} H ~ t \widetilde{H}_{t} 的组合,这里 Z t Z_{t} ( 1 Z t ) (1-Z_{t}) 是相互联动的:对于传递进来的历史信息 H t 1 H_{t-1} ,我们会进行选择性遗忘,遗忘了 Z t Z_{t} 权重,便使用 ( 1 Z t ) (1-Z_{t}) 加入’当前信息‘ H ~ t \widetilde{H}_{t} 进行弥补,以保持一种”恒定“状态。

1.1.3 长短期记忆long short-term memory

在这里插入图片描述
相较于GRU,LSTM更加复杂,GRU有2个输入( H t 1 H_{t-1} , X t X_{t} ),1个输出( H t H_{t} );LSTM有3个输入(增加记忆细胞 C t 1 C_{t-1} ),2个输出(增加 C t C_{t} )。
有了GRU的经验,我们从最后两个式子开始看,输出记忆细胞 C t C_{t} 由上一时刻记忆细胞 C t 1 C_{t-1} 、包含当前时刻信息的 C ~ t \widetilde{C}_{t} 加权组成,当前时刻隐层输出 H t H_{t} 由输出记忆细胞 C t C_{t} 与权重值 O t O_{t} 组合而得,上述权重值分别为门控信号 F t F_{t} I t I_{t} O t O_{t} ,所有门控信号由上时刻隐层输出 H t 1 H_{t-1} 、当前时刻 X t X_{t} 组成。

1.2.4 比较与总结

LSTM通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;对很多需要“长期记忆”的任务来说,尤其好用。缺点是模型复杂,训练难度大。
虽然GRU与LSTM同属于RNN的一种,且LSTM历史更为悠久,但由于GRU有更轻量的计算量可以达到与LSTM同样的效果,相比之下更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。

多种循环神经网络介绍

基本的循环神经网络单元结构如下所示:
在这里插入图片描述

2.1 深度循环神经网络

在这里插入图片描述
基于循环神经网络的结构,若我们将上一层的隐层做下一层的输入,便组合得到了深度循环神经网络

2.2 双向循环神经网络

在这里插入图片描述
若信息流不是单向传播 t 1 t t-1\rightarrow t ,而是增加反向信息流 t t + 1 t\leftarrow t+1 ,则有了双向循环神经网络。

Class14-机器翻译及相关技术

名词术语:机器翻译(MT),神经机器翻译(NMT)
特点:
输出是单词序列,而不是单个单词
输出序列的长度可能与源序列的长度不同

步骤

  1. 数据预处理:将数据集清洗、转化为神经网络的输入minbatch(编码方式统一、转换为小写,标点符号前加空格)
  2. 分词:字符串—单词组成的列表(按照空格、tab、分行符进行单词划分)
  3. 建立词典:单词组成的列表—单词id组成的列表(min_freq代表词典中的单词词频>min_freq)
  4. 载入数据集

网络结构介绍

Encoder-Decoder

在这里插入图片描述
使用Encoder-Decoder结构原因:1. 高效处理变长序列问题;2. 降维。

Sequence to Sequence模型在这里插入图片描述在这里插入图片描述

Beam Search

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

class15-注意力机制与Seq2seq模型

对于RNN网络中的,由于长度过长存在梯度消失的问题,所以对于较长的输入,此类模型效果会显著下降。
同时,我们注意到解码的目标词语可能只与原输入的部分词语有关,而并不是与所有的输入有关。
因此attention机制问世:
在这里插入图片描述

模型简介

Attention 是一种通用的带权池化方法。
输入:
询问(query, q R d q q \in R^{d_{q}} );
键值对(key-value pairs, k i R d k k_{i} \in R^{d_{k}} , v i R d v v_{i} \in R^{d_{v}} ,注意 d k d_{k} d v d_{v} 不一定相等)。
计算过程:一个query,attention layer 会与每一个key计算注意力score并进行归一化,输出的向量 o o 则是value的加权求和,而每个key计算的权重与value一一对应。上述过程公式表达为:
q q 与key k i k_{i} 计算attention acore: a i = α ( q , k i ) a_{i}=\alpha(q,k_{i})
归一化:
b 1 , . . . , b n = s o f t m a x ( a 1 , . . . , a n ) b_{1},...,b_{n}=softmax(a_{1} ,...,a_{n})
q q 与value v i v_{i} 加权求和:
o = i = 1 n b i v i o=\sum_{i=1}^n b_{i}v_{i}
上述即为所说的带权池化,权重来自attention score,带权累加为键值对应的value
示意图如下:
在这里插入图片描述

多种attention layer区分

不同的attention layer的区别在于求score的函数选择( α \alpha

Dot-product Attention (点积注意力)

点积要求query和keys具有相同的维度:
α ( q , k ) = < q , k > / d \alpha(q,k)=<q,k>/ \sqrt{d}
α ( Q , K ) = Q K T / d \alpha(Q,K)=QK^{T}/\sqrt{d}

Multilayer Perceptron Attention(多层感知机注意力)

α ( q , k ) = v T t a n h ( W k k + W q q ) \alpha(q,k)=v^{T}tanh(W_{k}k+W_{q}q)

Softmax屏蔽(todo#)

超出2维矩阵的乘法:三维张量X和Y分别为(b,n,m) 和(b,m,k)的张量,进行b次二维矩阵乘法后得到Z, 维度为(b,n,k)
Z [ i , : , : ] = d o t ( X [ i , : , : ] , Y [ i , : , : ] ) , i = 1 , . . . , n Z[i,:,:]=dot(X[i,:,:], Y[i,:,:]), i=1,...,n

引入注意力机制的Seq2seq模型

本节中将注意机制添加到sequence to sequence 模型中,以显式地使用权重聚合states。
下图展示encoding 和decoding的模型结构,在时间步为t的时候,此刻attention layer保存着encoding看到的所有信息——即encoding的每一步输出。
在decoding阶段之前,解码器的 t 时刻的隐藏状态被当作query,encoder的每个时间步的hidden states作为key和value进行attention聚合.
Attetion model的输出当作成上下文信息context vector,并与解码器输入 Dt 拼接起来一起送到解码器:
在这里插入图片描述
在这里插入图片描述

解码器

增加attention layer后,网络的编码器(encode)没有变化,解码器(decode)对于attention layer的输出进行变化处理。解码器(decode)的输入包括:

  1. encoder输出的所有状态(all t t state)
  2. 最后一个时间步的隐层状态,被用于初始化decoder的hidden state
  3. 编码器的有效长度(attention layer不会考虑编码器输出中的填充标记-paddings)

解码器(decode)的最后一个RNN输出作为attention layer的query。attention layer的输出结果与输入嵌入向量连接起来,输入到RNN层,形成输出到输入的循环

代码实现中,由于训练数据集中的序列相对较短,额外的注意层并没有带来显著的改进。由于编码器和解码器的注意层的计算开销,该模型比没有注意的seq2seq模型慢得多。

Class16-Transformer

主流神经网络架构:CNN(卷积神经网络),RNN(循环神经网络)
CNN: 易于并行化,没有针对序列信息的捕捉能力
RNN:可以处理序列信息,难以实现并行化处理序列数据
为了整合CNN和RNN的优势,[ref1] 创新性地使用attention机制设计了Transformer模型。
该模型利用attention机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,上述优势使得Transformer模型在性能优异的同时大大减少了训练时间

网络结构

transform基于编码器-解码器(encode-decode)结构,其最重要的区别是完全抛弃了CNN\RNN的结构,单纯使用attention(Self attention)+feed forward NN(FFN)结构组建了整个网络:

Transform抽象结构示意图:在这里插入图片描述
Transform具体结构示意图在这里插入图片描述
Transformer blocks:将seq2seq模型重的循环网络替换为了Transformer Blocks,该模块包含一个多头注意力层(Multi-head Attention Layers)以及两个position-wise feed-forward networks(FFN)。对于解码器来说,另一个多头注意力层被用于接受编码器的隐藏状态。
Add and norm:多头注意力层和前馈网络的输出被送到两个“add and norm”层进行处理,该层包含残差结构以及层归一化。
Position encoding:由于自注意力层并没有区分元素的顺序,所以一个位置编码层被用于向序列元素里添加位置信息。

[ref1].Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems (pp. 5998–6008).

关键结束介绍

多头注意力层

self-attention: self-attention 的query与key-value均来自输入变量,由于不需要依赖之前时刻的state,因此整个网络可以变为并行处理。
多头注意力层包含 h h 个并行的self-attention层,每个层被称为一个head。

基于位置的前馈网络

Transformer 模块另一个非常重要的部分就是基于位置的前馈网络(FFN),它接受一个形状为(batch_size,seq_length, feature_size)的三维张量。Position-wise FFN由两个全连接层组成,他们作用在最后一维上。因为序列的每个位置的状态都会被单独地更新,所以我们称他为position-wise,这等效于一个1x1的卷积。

位置编码

与循环神经网络不同,无论是多头注意力网络还是前馈神经网络都是独立地对每个位置的元素进行更新,这种特性帮助我们实现了高效的并行,却丢失了重要的序列顺序的信息。为了更好的捕捉序列信息,Transformer模型引入了位置编码去保持输入序列元素的位置。

假设输入序列的嵌入表示 X∈Rl×d , 序列长度为 l 嵌入向量维度为 d ,则其位置编码为 P∈Rl×d ,输出的向量就是二者相加 X+P 。

位置编码是一个二维的矩阵,i对应着序列中的顺序,j对应其embedding vector内部的维度索引。我们可以通过以下等式计算位置编码:
在这里插入图片描述

Classx-卷积神经网络基础

卷积层

卷积运算:核上下翻转、左右翻转,之后与输入数组做互相关运算。

特征图、感受野

卷积层输出的是在卷积核空间上的之前级表征,也叫特征图(feature map)。
影响元素 x 的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做 x 的感受野(receptive field)。

池化层

池化层主要用于缓解卷积层对位置的过度敏感性。同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出,池化层直接计算池化窗口内元素的最大值或者平均值,该运算也分别叫做最大池化或平均池化。

填充、步幅、输入通道、输出通道

卷积层有两个超参数,填充和步幅。
填充(padding):是指在输入高和宽的两侧填充元素(通常是0元素)
步幅(stride):卷积运算做滑窗操作时跳过的像素个数
不考虑通道数的卷积层输出维度为:
[ ( n h + p h k h + s h ) / s h ] [ ( n w + p w k w + s w ) / s w ] [(n_{h}+p_{h}-k_{h}+s_{h})/s_{h}]*[(n_{w}+p_{w}-k_{w}+s_{w})/s_{w}]

Classx-leNet

模型介绍

在这里插入图片描述
卷积层块的基本单位:卷积层+平均池化层。
其中,卷积层用来识别图像里的空间模式,如线条和物体局部;平均池化层则用来降低卷积层对位置的敏感性。

卷积层块由两个这样的基本单位重复堆叠构成。
在卷积层块中,每个卷积层都使用 5×5 的窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。

全连接层块含3个全连接层。它们的输出个数分别是120、84和10,其中10为输出的类别个数。

Classx-卷积神经网络进阶

LeNet: 在大的真实数据集上的表现并不尽如⼈意。
1.神经网络计算复杂。
2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域。

机器学习的特征提取:手工定义的特征提取函数
神经网络的特征提取:通过学习得到数据的多级表征,并逐级表⽰越来越抽象的概念或模式。

神经网络发展的限制:数据、硬件

AlexNet

首次证明了学习到的特征可以超越⼿⼯设计的特征,从而⼀举打破计算机视觉研究的前状。
特点:

  1. 8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。
  2. 将sigmoid激活函数改成了更加简单的ReLU激活函数。
  3. 用Dropout来控制全连接层的模型复杂度。
  4. 引入数据增强,如翻转、裁剪和颜色变化,从而进一步扩大数据集来缓解过拟合。
    在这里插入图片描述

VGG(使用重复元素的网络)

VGG:通过重复使⽤简单的基础块来构建深度模型。
Block:数个相同的填充为1、窗口形状为 3×3 的卷积层,接上一个步幅为2、窗口形状为 2×2 的最大池化层。
卷积层保持输入的高和宽不变,而池化层则对其减半。
在这里插入图片描述

NiN(网络嵌套网络)

LeNet、AlexNet和VGG:先以由卷积层构成的模块充分抽取 空间特征,再以由全连接层构成的模块来输出分类结果。
NiN:串联多个由卷积层和“全连接”层构成的小⽹络来构建⼀个深层⽹络。
⽤了输出通道数等于标签类别数的NiN块,然后使⽤全局平均池化层对每个通道中所有元素求平均并直接⽤于分类。
在这里插入图片描述

GoogLeNet

由Inception基础块组成。
Inception块相当于⼀个有4条线路的⼦⽹络。它通过不同窗口形状的卷积层和最⼤池化层来并⾏抽取信息,并使⽤1×1卷积层减少通道数从而降低模型复杂度。
可以⾃定义的超参数是每个层的输出通道数,我们以此来控制模型复杂度。
在这里插入图片描述
在这里插入图片描述

Classx-过拟合、欠拟合及其解决方案

见课程学习总结1

Classx-梯度消失、梯度爆炸

深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。
当神经网络的层数较多时,模型的数值稳定性容易变差。
针对该问题,我们一般有以下解决方法:

随机初始化模型参数

正态分布的随机初始化方式;
Xavier随机初始化;

考虑环境因素

协变量偏移
标签偏移
概念偏移

发布了5 篇原创文章 · 获赞 6 · 访问量 6080

猜你喜欢

转载自blog.csdn.net/mmLxfz/article/details/104372844