吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(RNN)(一)

RNN

首先思考这样一个问题:在处理序列学习问题时,为什么不使用标准的神经网络(建立多个隐藏层得到最终的输出)解决,而是提出了RNN这一新概念?
标准神经网络如下图所示:
1223117-20180217001329890-2142320730.png

标准神经网络在解决序列问题时,存在两个问题:

  • 难以解决每个训练样例子输入输出长度不同的情况,因为序列的长度代表着输入层、输出层的维度,不可能每训练一个样例就改变一次网络结构。
  • 标准的神经网络不能共享从文本不同位置上学到的特征。举例说明:如果Harry作为人名位于一个训练例子中的第一个位置,而当Harry出现在其他例子的不同位置时,我们希望模型依然能识别其为人名,而不是只能识别位于第一个位置的Harry。

前向传播

1223117-20180217141739265-1415552457.png

以NLP中“命名实体识别“任务为例,序列中每一个输入字符对应一个输出,即\(T_y=T_x\)

  • \(a^{<0>}\)是初始的隐状态,一般置为零向量。
  • \(a^{<i>}\)代表输入序列中第\(i\)个输入所隐含的信息,即时间步\(i\)的激活值。
  • \(x^{<i>}\)代表输入序列中第i个字符,输入序列的长度为\(T_x\)
  • \(\hat{y}^{<i>}\)代表与\(x^{<i>}\)相对应的输出值。

RNN在进行前向传播时,不光考虑当前时刻的输入\(x^{<i>}​\),也会考虑包含上一时刻的信息(激活值\(a^{<i-1>}​\))。计算公式如下:

\[a^{<t>}=g(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a)\]
\[\hat{y}^{<t>}=g(W_{ya}a^{<t>}+b_y)\]

为了方便记忆,可以将公式进行简化,其中\(W_{aa}\)\(W_{ax}\)合并为\(W_a\)\(a^{<t-1>}\)\(x^{<t>}\)合并为新的矩阵\([a^{<t-1>},x^{<t>}]\)。举例说明:假定激活值\(a^{<t-1>}\)(也可以成为隐状态)为\(100\)维,输入值\(x^{<t>}\)\(10000\)维。那么权重矩阵\(W_{aa}\)\(100\times 100\)维,\(W_{ax}\)\(100\times 10000\)维。合并后的新权重矩阵为\(W_a\)\(100\times (100+10000)\)维,合并后的新输入\([a^{<t-1>},x^{<t>}]\)\((100+10000)\)维向量,即将\(a^{<t-1>}\)堆叠(stack)在\(x^{<t>}\)上方。

  • 简化的原理为:
    \[\begin{bmatrix}W_{aa}&W_{ax}\end{bmatrix}\begin{bmatrix}a^{<t-1>}\\ x^{<t>}\end{bmatrix}=W_{aa}a^{<t-1>}+W_{ax}x^{<t>}\]

  • 简化后的计算公式为:
    \[a^{<t>}=g(W_{a}[a^{<t-1>},x^{<t>}]+b_a)\]
    \[\hat{y}^{<t>}=g(W_{y}a^{<t>}+b_y)\]

RNN类型总结

1223117-20180217161643624-609896445.png

  1. One to one
  2. One to many
  3. Many to one
  4. Many to many(\(T_x == T_y\)
  5. Many to many(\(T_x != T_y\)

转载于:https://www.cnblogs.com/szxspark/p/8451915.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值