参数和神经元个数的计算:
解释LSTM两张常用图,如下:
长期困惑于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为[batchsize,timestep,n] 或
[timestep,batchsize,n]
以mnist数据为例,每个样本的shape为28 * 28,使用LSTM处理,样本展开后必须有前后序列关系。 可直接展开成784个LSTM单元;也可按行或者按列来分割成28行(列),将这28个部分看成是序列。
如果batch_size 设为 4表示一次喂入网络的有4张图片;
timestep为28指将每一张图片都分割成28个时刻,分别喂给每一个LSTM单元 。
参考:
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)