RNN的通俗讲解(初级篇)

    导师前阵子提到要写技术博客。想想可以记录自己的学习历程,还能认识同行大神一起讨论什么的,就决定开始写了。很遗憾大学没有写技术博客,不过大学的信息安全专业相关的知识我也不会丢下(希望是这样=_=),会慢慢边学边写。现在应该会以语音和机器学习的方向为主了。
    作为CSDN的处女作,就先把我的本科毕业设计和大家分享吧。
    其实当时我学习RNN的时候,只读一篇Mikolov的介绍RNN的博士毕业论文的时候是比较晕的,因为他的公式都只给了最后的结论公式。但是概念什么的讲的非常清楚了,所以我就按照我所记得的当时理解上的难点,简单强调一下吧。

     假设我的读者已经理解了什么是语言模型,以及什么是RNN的基础上面。
     RNN是最近很火的语言模型,因为有一个循环的隐藏层,因此可以比n-gram算法记录更多的历史信息,从而效果更好。
优点:PPL低,模型鲁棒性更强,最终模型体积小,可以作为本地模型使用
缺点:速度慢!速度慢!速度慢!

    关于训练方式:RNN是一个一个单词训练的,每一次把当前训练单词的单词输入到RNN中去。
关于输入:RNN的输入是一个1 of n的n维向量表示,n等于词表大小,其中有一个1,表示当前单词位词表中的某一个,其它位置都是0。

    关于输出:RNN的输出层表示概率发射。 举个例子,假设当前要训练的句子是【我 想  吃  糖】,当前训练的单词是吃,词表大小为100,那么当吃这个字训练完毕之后,【我 想 吃】都变成了历史, 输出层的含义是在历史为【我 想 吃】的情况下,词表中100个单词各自出现在后面的概率是多少。  这就是概率发射概率, 和当前训练的单词其实是没什么关系的啦,因为它已训练完后就已经变成历史了哦~ 

     关于语言模型:很多人看了论文之后还不知道,RNN中我们要训练的语言模型到底是啥呀,是隐藏层么? 当然不是啦,我们要训练的其实是那三个权值矩阵。(如图,盗了mikolov大神论文里的图:输入层到隐藏层也就是vocab_vector,隐藏层到隐藏层,隐藏层到输出层)。隐藏层和输出层其实可以理解成计算单元,分别是sigmoid函数和softmax函数。  另外s(t-1)表示的是上一时刻隐藏层的【输出】

关于BPTT(back propagation/反向传播):
	这个地方有两个名词:梯度,和梯度误差特别容易晕(+_+),根据我的理解,梯度误差是一个vector,从输出层反向传到隐层s(t)->s(t-1)->s(t-2)酱一直往前传bptt+1次。 而梯度呢,是由梯度误差和前一层的输出vector进行矩阵相乘得到的matrix。 梯度乘以学习率alpha就可以用来更新权值矩阵辣(也就是我们的语言模型要学习的东西)

    然后梯度是输出层通过求导得到的,求导过程有点麻烦就像酱:
    但是碰巧得到了很简单很整齐的结果就像酱 : 

    所以最后输出层的error就是用当前单词的one_of_k向量减去概率发射函数啦, ps我当时傻乎乎的觉得这么减好对好对啊,完全不知道是数学推导得出的,因为当时mikolov的论文也并没有讲这个e0求得的过程。
然后呢就向前传,一边传一边求梯度。 由y的error和s(t)的输出这两个vector相乘得到的梯度就用来更新v,error传到s(t),s(t)的error和s(t-1)的输出相乘得到了w的梯度用来更新w,依次类推
)
    梯度怎么向前传呢?

    公式太多打起来好累我就直接截图贴论文辣 ><      总之呢error的传递也是用数学求导求得的。  数学不太好的我也是推的累累的QAQ。
     然后我觉得RNN中比较困惑比较难的就是上面这么多啦 ,  我感觉这些都是对那些已有的大牛的论文的补充,单独看我的可能比较模糊,如果读了论文之后还有疑惑看这些就比较清楚。   (直接看论文就能看很懂的大神们就54我的话吧)

     总之还是希望能帮到大家,顺便记录下来当时自己学习的心路历程。
     当然我的毕设是在这基础上做了其他信息加入的融合训练,并不是直接的RNN 。  以后再开一篇写吧。
     现在在做RNN多GPU并行加速,完成之后再和大家分享^_^。
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值