RNN_一只小白的观察记录

人工智能大火的当下,随便搜一搜RNN,文章就一堆,很多讲理论的,也有很多附上代码的。不过咱看了理论后自己写不出代码,看人家的代码也总是掌握不到要点。自己真正用到的时候还是懵。
那么,本文就记录一下我这个小白的学习思路吧。

什么是rnn?

你以为我要列出公式推导或者原理图了吗?不不不,我只会放链接:
原理性介绍https://blog.csdn.net/zhaojc1995/article/details/80572098

其实关于理论和代码网上可以找到很多很多了。因此就引用一下大佬的文章。接下来我就谈谈自己对RNN的理解:(个人理解,如有不同见解欢迎讨论!)
1)本质上来讲,
RNN是一种计算方法,
是一个值到另一个值的映射,
是一个复杂的函数。
2)RNN的所谓“记忆”,其实可以理解为前面的输入信息会影响到下一次的计算
3)RNN的介绍中很多“长期记忆”“短期记忆”“遗忘”等词汇的使用只是数学计算公式效果的一种形象化表示。不要因此觉得RNN有多么的智能和类人。

下面这张图是从这个博客里截的

其实呢,从数学角度上看,就是一个向量x经过线性变换得到了h然后h经过非线性变换得到了o,然后o和y比较得到了L。
1)x经过线性变换得到了h h=Ux + Wh‘(用到线性代数知识,U,W是矩阵,是可以反向更新的参数;h’是上一时刻的h值)
2)非线性变换有很多种啦,关键在于“非线性”。如,tanh()函数
3)o就是预测值,y是实际值
4)L 即loss反映了预测值和实际值的差距,也是有很多数学公式可以实现,如,Cross-entropy loss,softmax-cross-entropy-loss 等,(其实你用 L = o-y 得到L也算是一种方法,就是这种方法太直接,不太好用罢了。在具体运用时也要根据不同情况来选择不同的损失函数。)

那么RNN“引以为傲”的“记忆”体现在哪里呢?
就是图中的那个红圈圈住的循环。

简单来说就是:在计算h时要用到前一时刻的h值和当前的x输入。这不就是考虑到了原来的输入了吗,考虑到了原来的输入,上一时刻的输入对本次输入有影响,这不就是“记忆”的体现吗。所以,还是说,形象化的表达在提升了科学技术亲民性的同时,也为科技蒙上了一层玄幻的面纱。其实放平心态慢慢探索就好。
在这里插入图片描述

RNN代码实例

简单的代码实现(MNIST数据集识别):https://luanshiyinyang.github.io/pytorch/2019/04/21/RNN/

在运行过程中如果遇到错误:
在这里插入图片描述就把num_workers=4改成num_workers=0就好,涉及到’进程‘的知识,我想以后慢慢研究,要是有了解具体原因的小伙伴期待告知~

其实要是想从头实现RNN是挺困难的,因为涉及到很多公式的推导,把这些公式,更新过程改成代码也不容易不是。现在又很多神经网络的构架,如pytorch,tensorflow,kares等等。就是已经把函数写好了,只需要调用,配置参数就可以实现RNN。

我们要了解rnn的原理,以及常见的网络结构,对参数的配置就会很清楚了。
下面的代码是pytorch下的结构设置

class RNN(nn.Module):
    def __init__(self):
        super(RNN, self).__init__()

        self.rnn = nn.LSTM(  # 这里使用LSTM(长短时记忆单元)
            input_size=28,  # 图片的行数据
            hidden_size=64,  # 隐层单元数目
            num_layers=1,  # 这样的层数目
            batch_first=True,  # batch_size是否为第一个维度如(batch_size, time_step, input_size)
        )
        self.output = nn.Linear(64, 10)  # 这里使用全连接输出
        #原文链接:https://luanshiyinyang.github.io/pytorch/2019/04/21/RNN/

这里输入和输出这两个参数都明白是怎么回事了,batch_first也可以查到

关于num_layer我的困惑比较大,什么是RNN的层数呢?
是这样的,在上面的图中,x经过线性变换得到了h,h非线性变换得到了o,这样的只是一层的结构,如果我得到o之后再把o当成输入,输入到同样的构架中呢?这就多了一层了。这就是RNN的层数概念。(详情参见下面两篇文章)
https://www.cnblogs.com/curtisxiao/p/10830369.html
http://www.pianshen.com/article/4068257457/
下面的图片引用自:[http://www.pianshen.com/article/4068257457/]这篇文章就说明了RNN层数的问题。(http://www.pianshen.com/article/4068257457/)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值