zoukankan      html  css  js  c++  java
  • 动手学深度学习 | 循环神经网络RNN的实现 | 55

    RNN从零开始实现


    简洁实现

    QA

    1. num_step是做什么用的?

    就是那个T,那个时间维度。

    比如下面"你好,世界!",输入这个句子有6个字符,那么这里的num_step/T=6。反过来可以认为这是一个6个样本的分类问题,就是每一个词都是要进行下一个词的预测。这是一个多分类问题,T=6,所以要做到6次分类。所以可以等价于一个6个样本的MLP。

    1. H是一个batch更新一次吗?看刚刚的diamanteH好像是每个batch会覆盖一次,但是H难道不是应该每个step都在变化吗?

    应该说一个句子,时间长度为T,那么H会被更新T次。

    只是说根据当前采样的不一样,当前这个batch的H要不要丢给下一个batch,如果是接在一起的,那么久可以进行传递。

    1. batch_size=1是指一个文本吗?

    是的,就是输出的时候只输入了一个句子。

    1. batch_size和time的区别是什么?

    time:句子的长度

    batch_size:一个batch有几个句子(可以认为是优化算法的东西)

    1. 预测这段代码里对于prefix的处理好像是直接放到output里,没有把他拿过来再做训练。是不是可以把prefit也用起来,训练一下会比较好?

    一般为什么不这么做呢?预测的时候都不会说要进行模型的更新。

    当年微软的小冰会说脏话,也是因为使用了用户数据来训练模型。模型上线了,是不可以随意再修改的。

    1. num_step可以理解为隐藏的层数吗?

    不是的,从模型角度,num_step就是T。但是反向传播的时候,可以这么认为,因为后一个词的预测是依赖于前面的所有“积累”。

    1. 关于num_step的取值?

    RNN并不能处理很长的序列,35一般都算不错了。

    后面会将LSTM如果处理更长的序列,还有transformer可以处理更加长的序列。

    1. 批量随不随机取,应该要看批量之间有没有时间关联吧?要有关联就不能随机取吧?

    不是的,RNN一般都是随机取的,如果太有关联的话,就容易overfitting。随机性可以让模型不那么容易overfitting。

    还有一个就是,其实batch之间有关联是好事,但是RNN是不足以去记住全部的隐变量。

    1. 为什么是预测字符而不是预测单词呢?

    因为简单。用字符预测的话,vocab大小只有28,但是如果用单词的话,那么大小至少都是上千的。

    我们这个文本就几千个词,文本太小了。几千个词要做几千个分类是做不了的。

    1. RNN处理不了长序列的原因是?

    RNN的序列信息是通过隐变量来进行存储的,隐变量的长度就那么多(参数太多,数据太多,脑容量不够)是很难将全部时序信息给记住的。

  • 相关阅读:
    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值。
    PowerDesigner 连接数据库,更新数据库;
    Spark Worker启动Driver和Executor工作流程
    获取spark-submit --files的文件内容
    JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别(转)
    在Java应用中通过SparkLauncher启动Spark任务
    通过thriftserver的beeline/jdbc等方式连接到SparkSQL
    Spark:java.net.BindException: Address already in use: Service 'SparkUI' failed after 16 retries!
    Spark Sql之ThriftServer和Beeline的使用
    Spark SQL读取Oracle的number类型的数据时精度丢失问题
  • 原文地址:https://www.cnblogs.com/Rowry/p/15352729.html
Copyright © 2011-2022 走看看