超参数,注意力机制

超参数

分为两大类:

  • 优化器超参数(optimizer hyperparameters):learning rate, minibatch size, epochs;
  • 模型超参数(model hyperparameters):number of layers and hidden units

学习率

  • learning rate decay: decrease learning rate every 10 epochs
  • adaptive learning rate

minibatch size

small minibatch: 会增加噪声,有助于防止在局部最小值停止,但训练过慢
large minibatch: 计算成本过高,会降低准确度,

early stopping

20个epochs之后, val loss没有下降则停止

hidden layers/units

3 layers are much better than 2, but going even deeper rarely helps much more
however, the deeper CNN are, the better they perform
hidden units: 多了容易过拟合,可加入dropout 或者L2正则,一般多一些没关系

注意力机制

即使计算机能像人一样在一段时间内按顺序理解图片(文字等),主要包括图像说明,语音识别,文本摘要

sequence to sequence model

在这里插入图片描述
无论输入向量有多长,encoder只会发送一个向量,如果给这个隐藏向量取合适的长度,在处理超长语句时,模型表现会很差,如果增加隐藏节点,模型容易过拟合,遇到性能瓶颈。

在这里插入图片描述

注意力编码器

在这里插入图片描述

注意力解码器

不具有注意力机制的解码器

在这里插入图片描述
除了最后一个context vector,仅将最后一个语境向量输给RNN decoder ,在每个time step生成输出序列的一个元素

具有注意力机制的解码器

可以查看输入的单词以及解码器自己的隐藏状态,使用一个评分函数对语境矩阵中的每个隐藏状态评分,经过softmax,这些值表示在注意力向量中的表示程度,并且解码器在生成输出之前会查看这些注意力向量,将注意力向量和softmax得分相乘,就得到了注意力语境向量(attention context vector)
在这里插入图片描述
注意力语境向量集中查看的是输入序列的相应位置,输出隐藏状态并生成输出序列的第一个单词,然后将之前的输出作为输入,输出该time step 的语境向量及上个time step的隐藏状态
在这里插入图片描述

注意力评分函数

  • additive attention(bahdanau attention):hj表示编码器的隐藏状态,s(i-1)表示上个时间步的解码器隐藏状态,Ua, Wa, va为要学习的权重矩阵
    在这里插入图片描述
    aij * hj 编码器隐藏状态加权求和得到注意力语境向量

  • multiplicative attention(luong attention):
    有三种评分函数:第一种为编码器和解码器隐藏状态的点乘,第二种再添加一个权重矩阵,第三种将编码器和解码器隐藏状态concat乘以权重矩阵,以tanh激活后乘以另一个权重矩阵
    softmax之后,得到解码器最终输出的ct
    在这里插入图片描述
    注意力评分函数会接受编码器的隐藏状态和解码器的一组隐藏状态。
    在解码器的每个time step 都会执行这一计算,因此仅使用当前time step的隐藏状态或者某些评分函数会使用上一个time step的解码器隐藏状态。给定编码器的隐藏向量和编码器隐藏状态的矩阵,会生成对矩阵每列评分的向量

在这里插入图片描述
在这里插入图片描述
编码器和解码器具有不同的embedding时,需要乘以一个矩阵,用于线性转换
在这里插入图片描述

注意力解码器的第一个time step,首先获得初始隐藏状态和结束符号的嵌入,计算生成该time step的隐藏状态向量(实际还需经过RNN输出),然后获得编码器的隐藏状态矩阵,选择scoring function,softmax之后与编码器的每个相应隐藏状态相乘,求和,得到注意力语境向量,与该time step的隐藏状态concat成一个向量,输入一个全连接网络并用tanh激活,输出序列的第一个单词
在这里插入图片描述

concat

在这里插入图片描述

在CV中的应用

encoder是一个CNN网络,卷积层的最后一层flatten之后接全连接层,生成语境向量,然后和之前一样对每个特征评分,合并结果,生成注意力语境向量;
decoder是一个RNN网络,使用注意力在每个time step侧重于相应的注释

Transformer

不适用RNN的注意力机制模型,与RNN将序列中的元素逐个获得输入不同,transformer 并行的生成所有输入,条件允许的话,每个元素都分配一个GPU,然后逐个生成输出,也不用RNN。编码器和解码器采用前馈神经网络和自注意力机制。transformer包含一组相同的编码器和解码器。每个编码器含有两个子层级,一个multi-headed self-attention layer and a feed-foward layer 。编码器端的注意力组件,侧重于要处理的每个输入元素相关的每个输入序列的其他部分,帮助编码器理解输入;解码器端的注意力组件分两部分,一个侧重于输入的相关部分,另一个仅注意之前的解码器输出
在这里插入图片描述

图像说明

CNN

CNN,除去最后一个全连接层,取卷积层最后的输出,提取空间信息,作为encoder,将图像内容编码为更小的特征向量
在这里插入图片描述
预训练过的CNN末尾添加一个未训练过的线性层级,作为RNN的初始输入
在这里插入图片描述
在这里插入图片描述
具有开始和结束标记,占两个标记

nltk

from nltk.tokenize import word_tokenize,sent_tokenize
words = word_tokenize(text)
sentences = sent_tokenize(text)

RNN训练

每个LSTM单元要求在每个time step都看到相同形状的输入向量,第一个单元与CNN编码器的输出特征向量相连。用一个embedding layer 将每个输入单词变成特定形状的向量,然后再当做输入馈送到RNN中。我们需要对CNN的输出特征向量应用相同的转换。在未来的每个time step,RNN的输入将是训练说明的单个单词。RNN负责记住输入特征向量的空间信息,并预测下个单词
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wezard95/article/details/107641140
今日推荐