吴恩达course5-序列模型学习笔记-很棒
https://www.jianshu.com/p/d67e01618dde
-
RNN结构
对于第一个单词的预测就是将x<1>送进网络,然后输出预测值ŷ<1>;对于第二个单词的预测,不仅接收x<2>,还接收来自第一个时间步长(time step,前面提到语言都是逐个生成的,包含时间的概念,所以会引入time step这个概念,也可以理解成:为逐个生成的单词都盖上专属的时间戳)的**函数值a<1>或者称为隐藏信息,后面以此类推。这样做能够避免SNN中参数不能共享的缺点,从而对于处理一整句话这种前后关联性很强的数据样本有很强的优势。
整个模型的结构如下图左边所示,通常会在结构的最前面加上第0个时间步长的**函数值a<0>,作为一个假数据,初始化为全0的向量。在其他一些论文或课程中也有出现右边所示的单个时间步长的结构,这样的结构称为“折叠模型”(Folded model)。所以左边的模型称为“展开模型”(unfolded model)
网络中的一些参数:- Wax:表示在每个时间步长中从输入层到隐藏层之间的权重参数
- Waa:表示在每个时间步长中从前往后共享信息之间的权重参数
- Wya:表示在每个时间步长中从隐藏层到输出层之间的权重参数
对于这个结构的缺点就是:
共享的参数是单向传递的(图中所示是从左往右),这样就只能利用句子中前面的信息往后来进行预测而不能利用后面的信息往前作出预测。例如,Teddy不仅可以作为人名,还有泰迪熊的意思,如果不利用后面的信息往前进行预测(获取该序列完整的信息),就无法判断Teddy是人还是玩具。对于这个缺点,提出了双向RNN(BRNN)的结构,在后面的课程中会讲解。 -
RNN中的前向传播
在前面提到过a<0>是个假参数,表示第0个时间步长的**值,初始化为全0的向量。
对于第一个元素的预测有:
a<1> = g1(waaa<0> + waxx<1> + ba)
ŷ<1> = g2(wyaa<1> + by)
推广至t个元素:
a<t> = g(waaa<t -1> + waxx<t> + ba)
ŷ<t> = g(wyaa<t> + by)
再简化一点可以表示为:
a<t> = g(wa [a<t -1> ,x<t> ] + ba),wa为:[waa | wax]
ŷ<t> = g(wy a<t > + ba)
-
RNN中的反向传播
虽然现在的框架提供了很多方便,能够自动计算反向传播,但了解背后的实现原理还是很有必要的。
在计算反向传播之前需要定义损失函数:- 单样本上的损失函数:
L<t>(ŷ<t> , y<t>) = -y<t>log(ŷ<t>) - (1-y<t>)log(1-ŷ<t>)
运用这个公式,就可以在每个时间步长上计算单个样本上的损失。 - 全样本上的成本函数:
L(ŷ,y) = ∑(L<t>(ŷ<t> , y<t>))
计算完单个样本上的损失,再相加得到全样本上的损失总和。
- 单样本上的损失函数:
下面是反向传播时权重梯度求解的细节,其中损失函数采用的是均方差MSE:
1.4 不同类型的RNN
-
many-to-many 模型
之前提到的名字主体识别的应用就是 many-to-many 模型的一个例子,它的输入输出长度是一样的。
但还有输入和输出长度不一致的情况,比如在机器翻译领域中,将中文翻译成英文,这时候因为语言的差异,输入输出的序列长度就会不一致。
-
many-to-one 模型
情感分类系统就是many-to-one模型,在网上完成一句或者一段话的评论,该系统就会根据输入的内容进行分类,输出一个0-5之间的整数评分。 -
one-to-many 模型
音乐生成采用的就是one-to-many模型,比如输入一个整数,模型会根据这个整数输出一段音乐,但前一个输出的预测值也会被用于下一个预测中。 -
汇总
作者:caoqi95
链接:https://www.jianshu.com/p/d67e01618dde
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。