LSTM理解及梯度消失与爆炸

参数和神经元个数的计算

        A代表LSTM cell,同一个LSTM但是timestep不同,由左图可知一个timestep中有四个前馈神经元(黄色的,3个sigmoid和一个tanh),图中还有一个红色的tanh,这只是对Ct做了一个tanh的转换然后和经过最后的sigmoid的结果做点乘作为输出;

        图中长方形的代表神经元,一个lstm中有四个神经元,一共是timestep * 4个神经元(但这里是同一个lstm不同的timestamp,参数共享,那是否应该就只有4个神经元呢?)

参数计算通用公式:((num_units(也可叫hidden_size) + emb_dim)* emb_dim + num_units) * 4

输入x:[words_len, emb_dim],words_len:词数量,emb_dim:词向量维度或one-hot维度

梯度消失与梯度爆炸

对sigmoid和tanh函数:导数分别在(0, 0.25] 和 (0, 1],都是不大于1 的值,连乘时梯度不断变小

tanh函数相对于sigmoid函数梯度较大,收敛速度更快,引起梯度消失更慢。

Sigmoid函数输出不是零中心对称,sigmoid的输出均大于0,使得输出不是 0 均值,称为偏移现象,这将导致后一层的神经元将上一层输出的非0均值的信号作为输入。关于原点对称的输入和中心对称的输出,网络会收敛地更好。

对于Relu激活函数:左侧导数为0,右侧导数恒为1,避免了“梯度消失“,但容易导致“梯度爆炸“。

timestep 的理解

keras或tensorflow中的LSTM参数一般是(samples, timestep, input_dim),

samples是batch_size,timestep代表一句话中的单词数量,input_dim是一个词的维度。

time_step是神经网络参数,网络建好后不会改变;samples是训练参数,可根据效果调整。

tensorflow 的 RNN 单元中有三个可训练的参数W , U , B 及两个输入变量input 和 h0。

每个样本含 timestep个时刻输入shape [batchsize,timestep,n]或 [timestep,batchsize,n]

基本的LSTM单元中有4个可训练的参数

每个样本timestep个时刻输入shape为[batch_size,timestep,n] 或[timestep,batch_size,n]

以mnist数据为例,每个样本的shape为28 * 28,使用LSTM处理,样本展开后必须有前后序列关系。 可直接展开成784个LSTM单元;也可按行或者按列来分割成28行(列),将这28个部分看成是序列。

如果batch_size 设为 4表示一次输入网络4张图片;

timestep为28指将每一张图片都分割成28个时刻,分别输入每一个LSTM单元 。

Pytorch中的LSTM

torch.nn.LSTM(*args, **kwargs):
input_size:x 的特征维度,数据立方体中的F,NLP中为一个词的向量长度;


hidden_size:隐藏层的特征维度,非双向LSTM的输出维度等于隐藏层的特征维度。num_layers:lstm隐层的层数,默认为1。

bias:False时bias=0,default=True

batch_first:True则输入输出的数据格式为 (batch, seq, feature)

dropout:除最后一层,每一层的输出都进行dropout,默认为: 0

bidirectional:True则为双向lstm,默认为False,双向LSTM的输出维度是隐含层特征数*2,H,C的维度是时间轴长度*2。

参考:

keras中LSTM的units是什么意思 - 简书

(1条消息) 【NLP实践-Task8 循环神经网络】LSTM详解 & Text-RNN文本分类 & RCNN原理_lstm text_y430的博客-CSDN博客

(1条消息) lstm 的timestep_如何理解lstm的输入输出_网易玩家工作室的博客-CSDN博客(timestep)

lstm原理+timesteps理解+实操+时间序列多变量_jiekclek的博客-CSDN博客(timestep)

RNN和LSTM中batchsize和timestep的区别是什么?_lstm的batch_size_空字符(公众号:月来客栈)的博客-CSDN博客(LSTM 输入输出维度,timestep)

对LSTM中间变量形状shape的理解, 附keras中LSTM的各个变量的shape理解_五四三两幺-发射!的博客-CSDN博客(LSTM 输入输出维度,timestep)

LSTM输入结构_lstm的输入-CSDN博客

【Pytorch】nn.LSTM的理解-CSDN博客

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值