对LSTM中每个batch都初始化隐含层的理解

不知道有没有人和我有一样疑惑

在LSTM相关的代码中,为什么每个batch都会将隐藏层重新初始化,

这样不会把以前训练出来的参数丢掉吗??

比如

代码来自GitHub 

看了一些解释是h与c是状态,不是参数,每个batch中都需要初始化为0,LSTM 中的参数是W,b。

网络中训练的是参数,不是状态。

说真的。。。当时我没怎么看懂。。。

咨询了实验室的师兄后,我有了自己的理解

 

产生误解的主要原因是我对RNN和LSTM的结构理解不深入,我们通常看到RNN结构图基本都是这样的

 

 

说实话,这个图对我这种初学者并不友好

RNN实际上应该是这样的

举个例子,解释一下RNN是如何训练的

比如这里有一句话,而这句话,就是一个batch

sentence=“我爱我的国”

进行句字的分词后是:

我 爱 我的 国

可以表示为4个n维的词向量,这里n我用8表示

这里有四个时间步(time_steps),每个时间步分别喂入我 爱 我的 国 四个词向量

参考RNN和LSTM数据是如何喂入的

 

下一句话是另一个batch,比如 “我 要 漂亮 小姐姐”

在这两个batch之间,并没有啥逻辑关系,如果我们不重新初始化

在测试的时候,batch之间的顺序会去影响 测试的结果。。。

换句话说,如果不重新初始化,两个没有什么逻辑的batch之间,会被我们人为的加上逻辑,上一句的“国”,和下一句的“我”就被联系起来了

而对于下一句的batch而言应该是一个新的开始,所以当然要初始化h和c了

 

也许有小伙伴要问了,这样初始化,在做文本识别的时候,句与句之间的联系,不也被初始化掉了吗?

师兄给的解释是:“一般不会这么做,一般不考虑句与句之间的联系,如果必须要考虑,那么这一段落都是一个batch中的sampler,这两句话不会分到两个batch中”

 

在这里偷偷挂上我的大佬级师兄Kenn7,如果他的解释不对。。。请偷偷告诉我,让我去打脸,哈哈哈

 

今天就分享到这里,祝大家变得更强

  • 21
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值