Loading [MathJax]/jax/output/HTML-CSS/jax.js

【深度学习基础】第四十课:循环神经网络

循环神经网络

139 Views | 1270 Words

Posted by x-jeff on November 22, 2020

【深度学习基础】系列博客为学习Coursera上吴恩达深度学习课程所做的课程笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.循环神经网络

依旧使用【深度学习基础】第三十九课:序列模型中第2部分的例子。假设我们用一个标准的神经网络结构来解决这个问题:

其中,x<n>为输入句子中的第n个单词;y<n>为第n个单词是否为人名的标识(0或1)。但是这种方法主要会存在两个问题:

  1. 在不同的样本中,输入x和输出y可能有不同的长度。即使我们规定了x,y的最大长度,对于不满足最大长度的样本进行填充(pad),例如用0填充,使其满足最大长度,但这样依然不是一个好的解决办法。
  2. 这种传统的标准神经网络结构并不能共享特征之间的信息,即忽视了序列信息,例如句子中前后单词之间的关联。并且模型的参数也会较多。

为了解决这两个问题,我们引入循环神经网络(Recurrent Neural Network,缩写为RNN)。RNN的结构如下图所示:

  • Ot=g(VSt+bO)
  • St=f(UXt+WSt1+bS)

其中,f,g为不同的激活函数。上述结构也可以简化为:

f通常为tanh函数(偶尔也用ReLU函数)。

使用RNN模型解决我们之前提到的句子中人名识别的问题:

a<0>通常被初始化为零向量(或者随机初始化也可以)。比如在预测ˆy<3>时,模型会用到x<1>,x<2>,x<3>的信息。

但是这样也有一个弊端:只用到了x<3>及其以前的信息。后续博客我们会介绍双向循环神经网络(BRNN)来解决这个问题。

loss function可定义为交叉熵损失函数

L<t>(ˆy<t>,y<t>)=y<t>logˆy<t>(1y<t>)log(1ˆy<t>) L(ˆy,y)=Txt=1L<t>(ˆy<t>,y<t>)

2.更多的RNN框架

第1部分介绍了输入和输出长度一致的RNN框架(Many-to-Many,Tx=Ty),本节我们将介绍更多的RNN框架。

  1. Many-to-One:比如情感分类问题。输入为一段文本,输出为评价等级(例如1星到5星)。
  2. One-to-Many:比如音乐生成。输入为一种音乐风格,输出为一段音乐。
  3. Many-to-Many,TxTy:比如机器翻译。

3.参考资料

  1. 一文搞懂RNN(循环神经网络)基础篇

0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!