李宏毅深度学习

https://www.bilibili.com/video/av9770302/?p=8

在看RNN的时候,你是不是也会觉得有些奇怪,

Train的过程中,

是把训练集中的结果作为下一步的输入

目标函数,是每一步的真实输出和训练集结果的交叉熵

Test的过程中,

是直接把每一步的输出作为下一步的输入

可以看到train和test的时候,每一步的输入是不一样的,这种不一致会带来什么问题?

对上面的树形结构,

表示学习的过程,如果网络完全正确的学习到我们的训练集,那就是左边的分支

但如果网络只在第一步没有学对,选择了B,而不是A

那么在test的时候,面对相同的句子,

那么它第一步会选B,但我们之前大部分的学习到的知识都集中在左边的分支,而右边的分支在学习的时候没有碰到过

所以对于网络后续的选择都只能乱选

从这个例子可以看出来,这种mismatch所带来的问题

那么问题是,为什么train的时候,不也把真实的输出作为下一步的输入?

将真实输出作为下一步的输入,会导致网络很难训练

原因是,真实的输出是会变化的,

如上图,开始第一步的输出是B,那么第二步学到的是,输入是B的时候,我们也应该得到一个B

但是随着train的继续,第一步的输出会变成A,趋向正确的结果,这样,之前在第二步学的知识就没有用了,

所以对于训练过程中,我们需要保持condition的稳定性

那到底应该怎么样做?

Scheduled Sampling的方法就是每次用一个随机sampling来决定是用哪一个作为下一步的输入

那这个方法不是也会有我们上面说的不稳定问题吗?

注意上面的曲线图,这里sampling的概率是不断变化的,图表示的是用reference的概率随着训练次数的变化

可以看出来,刚开始选reference的概率非常大,所以刚开始和普通的RNN训练没有区别

但是随着训练次数的增多,慢慢的用model的概率会越来越大

这样做的好处是啥,

因为刚开始的时候model不稳定,所以用reference,但是随着训练的进行,model的输出越来越稳定,这时就换成用medel的输出来训练

这样做的好处是,在condition相对稳定的情况下,又可以消除train和test的mismatch

RNN Train和Test Mismatch的更多相关文章

  1. RNN入门(二)识别验证码

    介绍   作为RNN的第二个demo,笔者将会介绍RNN模型在识别验证码方面的应用.   我们的验证码及样本数据集来自于博客: CNN大战验证码,在这篇博客中,我们已经准备好了所需的样本数据集,不需要 ...

  2. 自己动手写RNN

    说的再好,也不如实际行动,今天手写了一个RNN,没有使用Numpy库,自己写的矩阵运算方法,由于这也只是个学习用的demo,所以矩阵运算那一部分写的比较丑陋,见笑了. import com.mylea ...

  3. RNN-theano代码解析

    import theano import numpy import os import pdb from theano import tensor as T from collections impo ...

  4. AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(五) RNNs in Darknet 递归神经网络是表示随时间变化的数据的强大模型.为了更好地介绍RNNs,我强烈推荐Andrej K ...

  5. RNN 入门教程 Part 4 – 实现 RNN-LSTM 和 GRU 模型

    转载 - Recurrent Neural Network Tutorial, Part 4 – Implementing a GRU/LSTM RNN with Python and Theano ...

  6. RNN 入门教程 Part 3 – 介绍 BPTT 算法和梯度消失问题

    转载 - Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradien ...

  7. RNN 入门教程 Part 2 – 使用 numpy 和 theano 分别实现RNN模型

    转载 - Recurrent Neural Networks Tutorial, Part 2 – Implementing a RNN with Python, Numpy and Theano 本 ...

  8. RNN神经网络和英中机器翻译的实现

    本文系qitta的文章翻译而成,由renzhe0009实现.转载请注明以上信息,谢谢合作. 本文主要讲解以recurrent neural network为主,以及使用Chainer和自然语言处理其中 ...

  9. RNN and LSTM saliency Predection Scene Label

    http://handong1587.github.io/deep_learning/2015/10/09/rnn-and-lstm.html  //RNN and LSTM http://hando ...

随机推荐

  1. 关于Discuz! X系列远程代码执行漏洞

    一.漏洞起源 突然有同事反馈,无法注册 看到这里不了解的同行估计一年懵逼,这里也是常用的漏洞攻击,可以肯定的是  badwords.php文件被修改了 ,可以查看这个文件内容 <?php $_C ...

  2. 【mysql】GitHub 的 MySQL 高可用性实践分享

    原文出处: shlomi-noach   译文出处:oschina    GitHub 使用 MySQL 作为所有非 git 仓库数据的主要存储, 它的可用性对 GitHub 的访问操作至关重要.Gi ...

  3. Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract)

    很久之前用过一次,后来就忘了...扎心,现在记录一下 PS:这几种函数其实不限于swift内的,在JavaScript.python.DB等其他语言,应该也有类似用法,这里我只简单讲了在swift内的 ...

  4. Python之练习数学运用代码

    1.对数函数 import math import matplotlib.pyplot as plt import numpy as np if __name__ == '__main__': x = ...

  5. Effective Java 第三版——72. 赞成使用标准异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  6. Linux报swap空间占用过高,但物理内存还有空余

    收到报警,swap空间占用过高,登录到系统查看内存使用详情,看到物理内存还有很多未使用 问题分析 Swap配置对性能的影响分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如 ...

  7. oracle 函数 输入值,查询数据,返回相应处理结果

    create or replace function FUN_SEARCH_ORDERBY ( INSTACEID in varchar2,TYE IN varchar2) return varcha ...

  8. 【翻译】Nginx的反向代理

    本文为翻译文,原文地址:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ 本文描述代理服务器的基本配置.你能学到如何 ...

  9. docker的/var/lib/docker/overlay文件夹突然占满了硬盘

    场景描述 事情是这样的,前两天客户的服务器突然断电了,导致用docker部署的服务也挂了.昨天去现场,重启了docker,同时准备更新一下服务.结果发现有一台节点硬盘满了- 还是觉得有些奇怪的,毕竟d ...

  10. MXNET:卷积神经网络

    介绍过去几年中数个在 ImageNet 竞赛(一个著名的计算机视觉竞赛)取得优异成绩的深度卷积神经网络. LeNet LeNet 证明了通过梯度下降训练卷积神经网络可以达到手写数字识别的最先进的结果. ...