葫芦书笔记----循环神经网络(RNN)

循环神经网络

循环神经网络(RNN)是用来建模序列化数据的一种主流深度学习模型。

##循环神经网络和卷积神经网络

速记:循环圣经网络可以很好地处理文本数据变长并且有序的输入序列

详细:RNN可以将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。

RNN的前向传播公式
n e t t = U x t + W h t − 1 net_t=Ux_t+Wh_{t-1} nett=Uxt+Wht1

h t = f ( n e t t ) h_t=f(net_t) ht=f(nett)

y = g ( V h T ) y=g(Vh_T) y=g(VhT)

其中,f和g为激活函数,U为输入层到隐藏层的权重矩阵,W为隐含层从上一时刻到下一时刻状态转移的权重矩阵。

循环神经网络的梯度消失问题

循环神经网络为什么会出现梯度消失或梯度爆炸?有哪些改进方案?

速记:使用BPTT(基于时间的反向传播)来求解时,纯铜的循环神经网络梯度可以表示成连城的形式,原因和普通神经网络相似。改进方法为LSTM,GRU等变种模型。

在循环神经网络中能否使用ReLU作为激活函数?

速记:可以,但是需要对矩阵的初值做一定限制,否则容易引发数值问题。

详细:为解释这个问题,先给出RNN的前向传播公式
n e t t = U x t + W h t − 1 net_t=Ux_t+Wh_{t-1} nett=Uxt+Wht1

h t = f ( n e t t ) h_t=f(net_t) ht=f(nett)

根据前向传播公式向前传递一层,可以得到
n e t t = U x t + W h t − 1 = U x t + W f ( U x t − 1 + W h t − 2 ) net_t=Ux_t+Wh_{t-1}=Ux_t+Wf(Ux_{t-1}+Wh_{t-2}) nett=Uxt+Wht1=Uxt+Wf(Uxt1+Wht2)
如果采用ReLU替代公式中的激活函数 f f f,并且假设ReLU函数一直处于激活区域(即输入大于0),则有 f ( x ) = x , n e t t = U x t + W ( U x t − 1 + W h t − 2 ) f(x)=x,net_t=Ux_t+W(Ux_{t-1}+Wh_{t-2}) f(x)=x,nett=Uxt+W(Uxt1+Wht2),继续将其展开, n e t t net_t nett的表达式中最终会包含t个W连乘。如果W不是单位矩阵,最终结果将会居于0或者无穷,依法严重的数值问题。即使采用了ReLU激活函数,只要W不是单位矩阵梯度还是会消失或者爆炸。

综上所述,当采用ReLU作为循环神经网络中隐含层的激活函数时,只有当W 的取值在单位矩阵附近时才能取得比较好的效果,因此需要将W初始化为单位矩 阵。实验证明,初始化W为单位矩阵并使用ReLU激活函数在一些应用中取得了与 长短期记忆模型相似的结果,并且学习速度比长短期记忆模型更快,是一个值得 尝试的小技巧。

##长短时记忆网络(LSTM)

LSTM是如何实现长短期记忆功能的?

速记:加入一个遗忘门和输入门以及输出门。输入门控制当前计算的新状态以多大程度更新到记忆单元中;以往门控制前一步记忆单元的信息有多大程度被遗忘掉;输出门控制当前的输出有多大程度上取决于当前的记忆单元。

LSTM里各模块分别使用什么激活函数,可以使用别的激活函数吗?

速记:在LSTM中,遗忘门、输入门和输出门都是用Sigmoid函数作为激活函数;在生成候选记忆时,使用双曲正切函数Tanh作为激活函数. 可以使用别的激活函数,最开始的时候用的就是sigmoid的变种。

##Seq2Seq 模型

在后面的文章里再具体写下去。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值