递归神经网络

2018 年 8 月 2 日 Datartisan数据工匠

点击上方

Datartisan数据工匠

可以订阅哦!

前言

BP神经网络,训练的时候,给定一组输入和输出,不断的对权值进行训练,使得输出达到稳定。但BP神经网络并不是适合所有的场景,并不真正的体现出某些场景的真正特点。回到经典的概率论问题,抛硬币问题,假设你已经抛了100次的,90次是正面的,10次是反面的,问现在继续在抛一次,出现正面的概率是多少?如果没有前面几次的经验,很正常的会认为再次出现正面的概率是50%,但由于我们之前有对这个进行了实验,即有了经验了,按照贝叶斯定律,出现正面的概率肯定会大于50%。BP神经网络也少了对前面结果的一种反馈。


常见,易懂的受到前位影响的算法,加法算法。十位的结果,所到个位结果的影响,因为可能有进位,同样,百位的结果所到十位的影响。如图

这种受到前位影响的算法非常的常见,而经典BP神经网络并不能很好的反映这种算法的特性,需要就经典的BP神经网络进行优化和改造,也就是引进前位,历史数据对网络的影响,使其具备时序性。通过历史数据的关联来推测后续的事情。

递归神经网络RNN

从前面加法算法的动态图中,对现有的BP神经网络进行改造,也就是加入前位的结果对于后续网络的影响。

这里把BP神经网络设计成上图的形式,很形象的揭示了递归神经网络的特点,前向的结果,作为下一个输入,影响下一个网络的结果。递归神经网络,在很多方向已经取得了很好的成果。而一种特殊的递归神经网络Long Short Term 网络(LSTM),取到的结果最为璀璨,是这个方向的明星。


LSTM结构:

来看看LSTM的实现。关于LSTM可以进一步的参看,http://nicodjimenez.github.io/2014/08/08/lstm.html 和 https://github.com/nicodjimenez/lstm/blob/master/lstm.py,详细的给出了LSTM的求解过程。

算法的迭代过程在:

http://nicodjimenez.github.io/2014/08/08/lstm.html 

https://github.com/nicodjimenez/lstm


算法跟BP神经网络没有太大的不同,但要注意的还是各个变量的增量和迭代问题。


使用RNN实现加法过程

在简化一点的方式如下图:

如果去掉layer_1层,那么就是一个最简单的BP神经网络了。这里引入了layer_1层,使得经典的BP神经网络多了一个输入,layer_1层在加法算法中,表示的是前一个输入就可以反映出加法算法的特性,从结构来看,这个LSTM的变形并不是非常的复杂,但现在就重要的就是如何计算出各个层次的增量,然后进行迭代了。


构建一个二进制的网络,输入为两个节点,一个隐层有16个节点,一个中间层有16个节点用来存放进位。

加数和被加数作为输入,计算隐层和中间层的误差,这是一个加法递归神经网络,可以看成进制放在中间层中,这里要记住这个加法器输入层不是八个节点,而只有两个,也是一种最小加法器。


训练时也是使用误差传播的方式,这里主要需要解决导数问题python的代码实现:

计算中间结果,可以参看LSTM的过程:

变量的更新:

其中 layer_1_delta变量为两个变量的和:

完整的迭代过程在:

https://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/

在递归神经网络中,跟经典的BP神经网络在结构上并没有太多的不同,最关键的点,还是在求解增量,进行迭代。

递归神经网络的应用

递归神经网络跟BP神经网络,最大的不同是引进了时序,可以根据以往的数据来推测未来的事件。这是现在比较热门的一个方向。比较多的应用实在语音和文本的处理上,网上有相当多的关于递归神经网络的应用,比如写出像汪峰一样的歌词,默写唐诗,写冷段子等。但要写出像样的歌词和诗词,还需要做很多的处理,如果把递归神经网络应用在推荐系统里,也会得到不错的效果。

参考

http://blog.csdn.net/zzukun/article/details/49968129 http://www.jianshu.com/p/9dc9f41f0b29 http://nicodjimenez.github.io/2014/08/08/lstm.html https://github.com/nicodjimenez/lstm http://blog.csdn.net/longxinchen_ml/article/details/51253526 https://github.com/karpathy/char-rnn http://blog.csdn.net/v_july_v/article/details/52796239


转载请标明来之:阿猫学编程

更多教程:阿猫学编程-python基础教程


更多课程和文章尽在微信号:

「datartisan数据工匠」

登录查看更多
4

相关内容

递归神经网络(RNN)是神经网络的一种。单纯的RNN因为无法处理随着递归,权重指数级爆炸或梯度消失问题,难以捕捉长期时间关联;而结合不同的LSTM可以很好解决这个问题。 时间递归神经网络可以描述动态时间行为,因为和前馈神经网络(feedforward neural network)接受较特定结构的输入不同,RNN将状态在自身网络中循环传递,因此可以接受更广泛的时间序列结构输入。手写识别是最早成功利用RNN的研究结果。
【ICML2020-华为港科大】RNN和LSTM有长期记忆吗?
专知会员服务
73+阅读 · 2020年6月25日
【斯坦福】凸优化圣经- Convex Optimization (附730pdf下载)
专知会员服务
211+阅读 · 2020年6月5日
3D目标检测进展综述
专知会员服务
186+阅读 · 2020年4月24日
神经网络的拓扑结构,TOPOLOGY OF DEEP NEURAL NETWORKS
专知会员服务
30+阅读 · 2020年4月15日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
76+阅读 · 2020年2月3日
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
116+阅读 · 2019年9月24日
一文搞懂反向传播
机器学习与推荐算法
16+阅读 · 2020年3月12日
深度上下文词向量
微信AI
27+阅读 · 2018年9月13日
决策树
Datartisan数据工匠
4+阅读 · 2018年4月19日
干货|基于双流递归神经网络的人体骨架行为识别!
全球人工智能
13+阅读 · 2017年12月15日
【深度学习】给初学者的深度学习简介
产业智能官
8+阅读 · 2017年10月17日
【推荐】(TensorFlow)RNN入门
机器学习研究会
9+阅读 · 2017年10月10日
【技术分享】基于双流递归神经网络的人体骨架行为识别
机器学习研究会
5+阅读 · 2017年9月1日
【深度学习基础】4. Recurrent Neural Networks
微信AI
16+阅读 · 2017年7月19日
Do RNN and LSTM have Long Memory?
Arxiv
19+阅读 · 2020年6月10日
Arxiv
19+阅读 · 2018年10月25日
Relational recurrent neural networks
Arxiv
8+阅读 · 2018年6月28日
VIP会员
相关资讯
一文搞懂反向传播
机器学习与推荐算法
16+阅读 · 2020年3月12日
深度上下文词向量
微信AI
27+阅读 · 2018年9月13日
决策树
Datartisan数据工匠
4+阅读 · 2018年4月19日
干货|基于双流递归神经网络的人体骨架行为识别!
全球人工智能
13+阅读 · 2017年12月15日
【深度学习】给初学者的深度学习简介
产业智能官
8+阅读 · 2017年10月17日
【推荐】(TensorFlow)RNN入门
机器学习研究会
9+阅读 · 2017年10月10日
【技术分享】基于双流递归神经网络的人体骨架行为识别
机器学习研究会
5+阅读 · 2017年9月1日
【深度学习基础】4. Recurrent Neural Networks
微信AI
16+阅读 · 2017年7月19日
Top
微信扫码咨询专知VIP会员