用于处理带有‘时序性’的数据,数据中一个unit与其前后unit有关.
RNN网络结构:
从上式可以看到: H t − 1 H_{t-1} Ht−1为 t − 1 t-1 t−1时刻的隐藏层输入, X t X_t Xt为t时刻的输入。
比较神经网络(NN)的公式:$HW+b , 我 们 可 以 看 到 之 前 时 刻 , 我们可以看到之前时刻 ,我们可以看到之前时刻H_{t-1}$增加的影响。
GRU为循环神经网络的一种,增加门控制:
分析上式可发现:
重置门/更新门 R t R_{t} Rt和 Z t Z_{t} Zt均为 X t X_{t} Xt和 H t − 1 H_{t-1} Ht−1的加权组合分并通过非线性激活层,数值范围 [ 0 , 1 ] [0,1] [0,1];
候选隐藏状态 H ~ t \widetilde{H}_{t} H t由重置门 R t R_{t} Rt再次与 H t − 1 H_{t-1} Ht−1、 X t X_{t} Xt加权组合并通过非线性激活层,数值范围 [ − 1 , 1 ] [-1,1] [−1,1];
最终的隐藏状态 H t H_{t} Ht为以更新门 Z t Z_{t} Zt做权重的 H t − 1 H_{t-1} Ht−1和 H ~ t \widetilde{H}_{t} H t组合。
我们综合考虑,其实 R t R_{t} Rt和 Z t Z_{t} Zt称为控制重置的门控(reset gate)、控制更新的门控(update gate),根据 X t X_{t} Xt和 H t − 1 H_{t-1} Ht−1的状态值计算 R t R_{t} Rt和 Z t Z_{t} Zt的门控值,该过程中激活函数将门控范围变为 [ 0 , 1 ] [0,1] [0,1], 0 0 0代表完全遗忘, 1 1 1代表完全记住。
得到两个门控信号后,重置门 R t R_{t} Rt控制之前隐藏层 H t − 1 H_{t-1} Ht−1的保留程度,之后与当前输入状态 X t X_{t} Xt合并,激活函数将数值范围变为 [ − 1 , 1 ] [-1,1] [−1,1],得到 H ~ t \widetilde{H}_{t} H t(候选隐藏层状态)。此时 H ~ t \widetilde{H}_{t} H t主要包含了当前输入数据 X t X_{t} Xt,有针对性地将 X t X_{t} Xt添加到当前的隐藏状态,相当于“记忆了”当前时刻状态。
最后,便是更新门表达形式,通过 Z t Z_{t} Zt控制 H t H_{t} Ht和 H ~ t \widetilde{H}_{t} H t的组合,这里 Z t Z_{t} Zt和 ( 1 − Z t ) (1-Z_{t}) (1−Zt)是相互联动的:对于传递进来的历史信息 H t − 1 H_{t-1} Ht−1,我们会进行选择性遗忘,遗忘了 Z t Z_{t} Zt权重,便使用 ( 1 − Z t ) (1-Z_{t}) (1−Zt)加入’当前信息‘ H ~ t \widetilde{H}_{t} H t进行弥补,以保持一种”恒定“状态。
相较于GRU,LSTM更加复杂,GRU有2个输入( H t − 1 H_{t-1} Ht−1, X t X_{t} Xt),1个输出( H t H_{t} Ht);LSTM有3个输入(增加记忆细胞 C t − 1 C_{t-1} Ct−1),2个输出(增加 C t C_{t} Ct)。
有了GRU的经验,我们从最后两个式子开始看,输出记忆细胞 C t C_{t} Ct由上一时刻记忆细胞 C t − 1 C_{t-1} Ct−1、包含当前时刻信息的 C ~ t \widetilde{C}_{t} C t加权组成,当前时刻隐层输出 H t H_{t} Ht由输出记忆细胞 C t C_{t} Ct与权重值 O t O_{t} Ot组合而得,上述权重值分别为门控信号 F t F_{t} Ft, I t I_{t} It, O t O_{t} Ot,所有门控信号由上时刻隐层输出 H t − 1 H_{t-1} Ht−1、当前时刻 X t X_{t} Xt组成。
LSTM通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;对很多需要“长期记忆”的任务来说,尤其好用。缺点是模型复杂,训练难度大。
虽然GRU与LSTM同属于RNN的一种,且LSTM历史更为悠久,但由于GRU有更轻量的计算量可以达到与LSTM同样的效果,相比之下更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。
基于循环神经网络的结构,若我们将上一层的隐层做下一层的输入,便组合得到了深度循环神经网络
若信息流不是单向传播 t − 1 → t t-1\rightarrow t t−1→t,而是增加反向信息流 t ← t + 1 t\leftarrow t+1 t←t+1,则有了双向循环神经网络。
名词术语:机器翻译(MT),神经机器翻译(NMT)
特点:
输出是单词序列,而不是单个单词
输出序列的长度可能与源序列的长度不同
使用Encoder-Decoder结构原因:1. 高效处理变长序列问题;2. 降维。
对于RNN网络中的,由于长度过长存在梯度消失的问题,所以对于较长的输入,此类模型效果会显著下降。
同时,我们注意到解码的目标词语可能只与原输入的部分词语有关,而并不是与所有的输入有关。
因此attention机制问世:
Attention 是一种通用的带权池化方法。
输入:
询问(query, q ∈ R d q q \in R^{d_{q}} q∈Rdq);
键值对(key-value pairs, k i ∈ R d k k_{i} \in R^{d_{k}} ki∈Rdk, v i ∈ R d v v_{i} \in R^{d_{v}} vi∈Rdv,注意 d k d_{k} dk与 d v d_{v} dv不一定相等)。
计算过程:一个query,attention layer 会与每一个key计算注意力score并进行归一化,输出的向量 o o o则是value的加权求和,而每个key计算的权重与value一一对应。上述过程公式表达为:
q q q与key k i k_{i} ki计算attention acore: a i = α ( q , k i ) a_{i}=\alpha(q,k_{i}) ai=α(q,ki)
归一化:
b 1 , . . . , b n = s o f t m a x ( a 1 , . . . , a n ) b_{1},...,b_{n}=softmax(a_{1} ,...,a_{n}) b1,...,bn=softmax(a1,...,an)
q q q与value v i v_{i} vi加权求和:
o = ∑ i = 1 n b i v i o=\sum_{i=1}^n b_{i}v_{i} o=∑i=1nbivi
上述即为所说的带权池化,权重来自attention score,带权累加为键值对应的value
示意图如下:
不同的attention layer的区别在于求score的函数选择( α \alpha α)
点积要求query和keys具有相同的维度:
α ( q , k ) = < q , k > / d \alpha(q,k)=/ \sqrt{d}
α(q,k)=<q,k>/d
α ( Q , K ) = Q K T / d \alpha(Q,K)=QK^{T}/\sqrt{d} α(Q,K)=QKT/d
α ( 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) α(q,k)=vTtanh(Wkk+Wqq)
超出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 Z[i,:,:]=dot(X[i,:,:],Y[i,:,:]),i=1,...,n
本节中将注意机制添加到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)的输入包括:
解码器(decode)的最后一个RNN输出作为attention layer的query。attention layer的输出结果与输入嵌入向量连接起来,输入到RNN层,形成输出到输入的循环
代码实现中,由于训练数据集中的序列相对较短,额外的注意层并没有带来显著的改进。由于编码器和解码器的注意层的计算开销,该模型比没有注意的seq2seq模型慢得多。
主流神经网络架构: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 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内部的维度索引。我们可以通过以下等式计算位置编码:
卷积运算:核上下翻转、左右翻转,之后与输入数组做互相关运算。
卷积层输出的是在卷积核空间上的之前级表征,也叫特征图(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}] [(nh+ph−kh+sh)/sh]∗[(nw+pw−kw+sw)/sw]
卷积层块的基本单位:卷积层+平均池化层。
其中,卷积层用来识别图像里的空间模式,如线条和物体局部;平均池化层则用来降低卷积层对位置的敏感性。
卷积层块由两个这样的基本单位重复堆叠构成。
在卷积层块中,每个卷积层都使用 5×5 的窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。
全连接层块含3个全连接层。它们的输出个数分别是120、84和10,其中10为输出的类别个数。
LeNet: 在大的真实数据集上的表现并不尽如⼈意。
1.神经网络计算复杂。
2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域。
机器学习的特征提取:手工定义的特征提取函数
神经网络的特征提取:通过学习得到数据的多级表征,并逐级表⽰越来越抽象的概念或模式。
神经网络发展的限制:数据、硬件
首次证明了学习到的特征可以超越⼿⼯设计的特征,从而⼀举打破计算机视觉研究的前状。
特点:
VGG:通过重复使⽤简单的基础块来构建深度模型。
Block:数个相同的填充为1、窗口形状为 3×3 的卷积层,接上一个步幅为2、窗口形状为 2×2 的最大池化层。
卷积层保持输入的高和宽不变,而池化层则对其减半。
LeNet、AlexNet和VGG:先以由卷积层构成的模块充分抽取 空间特征,再以由全连接层构成的模块来输出分类结果。
NiN:串联多个由卷积层和“全连接”层构成的小⽹络来构建⼀个深层⽹络。
⽤了输出通道数等于标签类别数的NiN块,然后使⽤全局平均池化层对每个通道中所有元素求平均并直接⽤于分类。
由Inception基础块组成。
Inception块相当于⼀个有4条线路的⼦⽹络。它通过不同窗口形状的卷积层和最⼤池化层来并⾏抽取信息,并使⽤1×1卷积层减少通道数从而降低模型复杂度。
可以⾃定义的超参数是每个层的输出通道数,我们以此来控制模型复杂度。
见课程学习总结1
深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。
当神经网络的层数较多时,模型的数值稳定性容易变差。
针对该问题,我们一般有以下解决方法:
正态分布的随机初始化方式;
Xavier随机初始化;
协变量偏移
标签偏移
概念偏移