当前位置:首页 > 培训职业 > 正文

序列模型LSTM、GRU

数学符号(输出y也是类似)

[公式] :表示第i个样本

[公式] :第i个样本第t个输入

[公式] :表示第i个样本的序列长度

循环神经网络为什么不用标准的神经网络:对于每个时间步,输入一个[公式] ,输出一个 [公式] ,[公式] 表示的是0向量,每个时间步的输出既取决于该时间步的输入,还取决于上一个时间步中隐藏层的输出,这样可以充分利用前面所有步的信息,但缺点就是不能够利用后面步数的信息。

不同类型的循环神经网络:1、many to many:命名实体标记(输入序列和输出序列的长度相等);2、one to many:音乐序列的生成;3、many to many:机器翻译,这种的是用encode进行输入,用decode进行输出,后面会利用attention机制来进行;4、one to one;5、many to one:情感分类(五星评价)。

语言模型和序列生成:很通俗地将,就是一句话更像是人话,那么这句话就是我们需要的句子序列。语言模型的任务就是预测每个句子在语言中出现的概率。对于语言中常见的句子,应该给与比较高的概率;而对于不合语法的句子,计算出的概率则应该接近于0.把句子看成单词的序列,语言模型可以表示为一个计算[公式] 的模型。语言仅仅对句子出现的概率进行建模,并不尝试去“理解”句子的内容含义。

基于语言模型的序列生成:训练集:一个很大语料库;训练集处理:未出现在字典库中的词使用“UNK”来表示;Tokenize:将句子使用字典库标记化;模型:通过RNN循环计算当前对于当前时间步,给定前一个单词,预测该时间步的输出单词;模型训练:损失函数使用交叉熵函数,对于每一个时间步,其输入是,输出是,对应的标签是,叠加每一个时间步关于输出和真实值的误差大小来进行参数的更新。

对新样本进行采样:目的:在训练好一个序列模型后,我们要想了解整个模型学习到了什么,一个方法就是对这个模型进行采样;过程:首先我们输入[公式] ,在经过softmax层后会输出每一个词的概率,这个时候我们利用np.random.choice()进行随机采样,随机选择一个词作为t=1的输出 [公式] ,然后将上一个时间步的输出 [公式] 作为 [公式] 的输入,我们就可以得到基于第一个词的条件下第二个词的条件概率分布,然后也可以进行随机选择。

梯度消失和梯度下降:梯度消失指的是在反向传播的过程中,后面的输入的梯度很难通过反向传播传递到前面的单元,也即前面的单词很难影响后面的单词,RNN模型不擅长于捕捉这种长期的依赖关系,但在序列模型中我们要经常性地利用到这种长期的依赖关系;梯度爆炸一般容易发现,程序一般会返回NAN,提示数值溢出,我们可以通过梯度裁剪的方法,给定一个阈值,使得梯度不会超过这个阈值。所以相对而言,梯度消失更难以发现并难以解决。

门控循环单元:重置门和更新门的输入均为当前时间步输入 [公式] 与上一时间步隐藏状态 [公式] ,输出由激活函数为 [公式] 函数的全连接层计算得到。假设隐藏单元个数为 h,给定时间步 t 的小批量输入[公式] (样本数为 n,输入个数为 d)和上一时间步隐藏状态 [公式] 。重置门 [公式] 和更新门 [公式] 的计算如下:

候选隐藏状态:门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态计算。如图所示我们将当前时间步重置门的输出与上一时间步隐藏状态做按元素乘法(符号为 ⊙)。如果重置门中元素值接近 0,那么意味着重置对应隐藏状态元素为 0,即丢弃上一时间步的隐藏状态。如果元素值接近 1,那么表明保留上次时间步的隐藏状态。然后,将按元素乘法的结果与当前时间步的输入连结,再通过含激活函数 [公式] 的全连接层计算出候选隐藏状态,其所有元素的值域为 [−1, 1]。

隐藏状态:最后,时间步 t 的隐藏状态[公式] 的计算使用当前时间步的更新 [公式] 来对上一时间步的隐藏状态 [公式] 和当前时间步的候选隐藏状态 [公式] 做组合:

长短期记忆(LSTM):LSTM 中引入了三个门:输入门(input gate)、遗忘门(forget gate)和输出门(output gate),以及与隐藏状态形状相同的记忆细胞(某些文献把记忆细胞当成一种特殊隐藏状态),从而记录额外的信息。

深度循环神经网络:到目前为止介绍的循环神经网络只有一个单向的隐藏层,在深度学习应用,我们通常会到含用有多个隐藏层的循环神经网络,也称作深度循环神经网络。图演示了一个有L 个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的下一时间步和当前时间步的下一层。

多重随机标签

猜你喜欢文章