LSTM原论文笔记整理
Long Short-Term Memory
传统BPTT
的问题
一个解决办法
-
f j ′ ( n e t j ( t ) ) w j j = 1.0 f'_j(net_j(t))w_{jj}=1.0 fj′(netj(t))wjj=1.0,移项积分, f j ( x ) = x , w j j = 1 f_j(x)=x,w_{jj}=1 fj(x)=x,wjj=1
-
引发的两个问题:
-
输入权重冲突:权重都是一样的,对于一个输入,想尽可能保留原来的信息,也要保留现在输入的信息,这样的权重是反向的
-
输出权重冲突:权重是一样的,想尽可能参与输出状态,也要防止这个状态对其它状态的影响,这也是反向的
-
LSTM模型
-
为什么有门电路:把权重的两个作用分开,用权重控制
-
Memory cell block: 多个记忆单元串联
-
训练过程:为了防止梯度消失,梯度只会在记忆单元之间传播,记忆单元之间的返校传播通过s进行,不会再向之前的隐藏层传播。梯度传到输出门,裁剪,继续再记忆单元内传播,传到输入门,裁剪,更新权重,裁剪,离开这个记忆单元。
-
滥用问题和解决方法:在训练开始的时候,就算没有们单元和记忆细胞,损失也会下降(RNN),这时记忆细胞会被错误使用,仅作为一个bias使用。
两个解决方法:
- 在损失不再下降的时候加入记忆单元和门单元
- 输出门开始时加上一个负的偏差,这样导致细胞的初始训练权重偏向于0,近似于方法1
-
内部飘逸和解决方法:记忆单元的输入大多数为正(或负)时,内部状态会虽时间推移产生漂移(会让 h ′ h' h′很小导致梯度消失)
解决方法:在训练开始时给输入门一个偏向0的偏差
实验
实验概述:
-
在线学习
-
sigmoid作为激活函数
-
实验一,二初始权重范围 [ − 0.2 , 0.2 ] [-0.2,0.2] [−0.2,0.2],其余实验初始权重 [ − 0.1 , 0.1 ] [-0.1,0.1] [−0.1,0.1]
-
实验描述:
-
嵌入式Reber语法基准测试,不是长时间间隔任务。目的:验证输出门;RNN基准测试
-
无噪声和有噪声的序列,涉及大量的输入符号对少数重要符号的干扰
-
长时间间隔
-
- 分布式的、连续值的输入表示,需要学习在很长一段时间内存储精确的真实值
-
复杂输入类型
-
实验一
-
实验内容:Reber grammar 预测产生的字符组成字符串
-
与ELM,RCCM,RTRL进行比较
-
LBTM
的设置- 3个存储块+2个存储单元/4个存储块+1个存储单元
- 输出层唯一连接存储单元
- 存储单元和每个门单元连接所有存储单元和门单元的输入
- 输入和隐藏层所有单元前向连接
- 有输出门
-
体现输出门重要性:存储T或P不应该干扰原始Reber更容易的学习
可以看出LSTM的准确率高,训练量少
实验二:NOISE-FREE AND NOISY SEQUENCES
noise-free sequences with long time lags
使用两个序列, ( y , a 1 , a 2 , . . . , a p − 1 , y ) , ( x , a 1 , a 2 , . . . , a p − 1 , x ) (y,a_1,a_2,...,a_{p-1},y),(x,a_1,a_2,...,a_{p-1},x) (y,a1,a2,...,ap−1,y),(x,a1,a2,...,ap−1,x),考验 p p p 段时间的长时间记忆能力
与RTRL, BPTT进行比较
RTRL(Real-Time Recurrent Learning)
是RNN的一种算法,在每个时间步上计算雅可比矩阵,通过链式递推更新梯度,可以实现实时学习,不需要再时间维度上展开RNN
BPTT (Backpropagation Through Time)
展开RNN,在时间维度上向前传播和反向传播计算梯度。把序列堪称前馈神经网络,通过反向传播算法计算损失函数对于各个时间步的参数梯度,是一种离线学习方法,一般使用整个序列作为输入进行训练。
这次加了输入门,没有输出门
no local regularities
上一个实验中中间的输入都是一样的,可能会被压缩,体现不出长序列,所以这个实验里面把这些相同的输入换成了随机的其它输入。
实验结果说明LSTM在5680个序列之后可以成功预测,说明LSTM不需要序列规律才能很好的工作。
very long time lags | no local regularities
这里是一个没有规律的序列,定义了一种序列的产生方法,含噪音
期望的数据长度是 q + 14 q+14 q+14 ,从 p p p 个inputs里面随机产生输入, q p \frac{q}{p} pq 是给定干扰物符号在序列里面出现的预期次数
这里都是LBTM的结果,因为BPTT, RTRL无法完成这类任务
序列时间间隔变长,学习时间增长缓慢,着是LBTM的特点
实验三:NOISE AND SIGNAL ON SAME CHANNEL
当噪声和信号混合一起输入时,LSTM不会遇到基本问题
2-sequence problem
序列的类别由前N个元素决定,都是1.0为第一类,都是-1.0为第二类,其它的元素满足高斯分布,现要给序列分类
LSTM 架构:3层,1输入,1输出,3个隐藏块;输出仅取决于记忆细胞,记忆细胞和门单元从输入内接收信息。
ST1:256个序列没有一个被错分类
ST2:ST1满足,平均测试集误差小于0.01
在每个输入的前N维加上了噪音(均值为0,方差为0.2的高斯分布)
可以解决问题
改变1和-1的值
将代表类别1的1换成0.2代表类别2的-1换成0.8同时目标带有噪声(均值0,方差0.1的高斯分布),这样做的目的是为了进一步的增加干扰这样的话随机猜测算法就不能很好的表现了。
可以解决问题
实验四:ADDING PROBLEM
LBTM可以解决分布式、连续值表示的长时间序列
规定了一个处理二维向量序列的方法,标记前
T
T
T个里面的一个向量第二位为1,前
T
2
−
1
\frac{T}{2}-1
2T−1中的一个向量第二位为-1,其余未被标记的向量第二位为0。这个任务要求LBTM长时间存储精确值。输出包含X1+X2的一个值。
LSTM能够学习执行涉及连续值的计算,有很好的分布式表示
分布式表示指将一个实体(例如数据点,图像,文本等)映射到一个向量空间中的点的过程。这个向量被称为分布式表示,因为它反映了该实体在向量空间中的分布或位置。 在该向量空间中,每个维度表示具有特定含义的语义属性,更接近的向量表示具有相似的特征。
分布式表示的一个重要特点是,相似的实体在向量空间中具有相似的表示。这就是说,两个有一定相似度的实体在向量空间中的位置也相对接近。这种表示方法的好处是可以将实体用一个固定长度的向量表示,这使得它们在机器学习算法中更容易进行处理。同时,在向量空间中进行计算更加高效。
当一个模型能够生成有很好的分布式表示时,它可以捕捉到多个特征和不同层次上的语义信息,并且可以在分类、聚类、相似度计算等任务上取得更好的效果。
实验五:MULTIPLICATION PROBLEM
把上一问里面的加法换成了乘法,也有较好的结果
实验六:TEMPORAL ORDER
四分类问题,八分类问题,成功率较高
- 8个输入单元、2 (3)个单元块和4 (8)个输出单元。同样,所有的非输入单元都有偏置权值,并且输出层只接收来自存储器单元的连接。存储单元和门单元接收来自输入单元、存储单元和门单元的输入(即,隐藏层是完全连接的|,较少的连接也可以工作)
一些讨论
局限性
- LSTM不能解决“长时间间隔的异或问题”(数据带有噪声会更加难处理),因为它不能被分成子问题逐步优化
- LSTM每个存储单元需要单独的输入输出门,一个传统的RNN单元被3个LSTM细胞代替,权重最多增加9倍。实验中权重几乎是一样的
优点
- 常数反向传播使得其能够很好的处理长时间间隔问题
- 能够处理带噪声的部分问题
- 处理长时间间隔的问题
- 可以不用做参数调优
- 每个时间步权重更新是O(1)的
总结
-
可以保持常数的梯度
-
输入门保证细胞的内部状态不被输入扰动,同样,输出门也会保证输出不干扰其它的细胞
Long Short-Term Memort Recurrent Neural Network Architectures for Large Scale Acoustic Modeling
研究内容:Deep LSTM实现语音识别
DNN(全连接神经网络/深度神经网络)
![]()
输入层->隐含层->输出层+反向传播
缺点:
- 图像展开为向量会丢失空间信息
- 参数过多,效率低,训练困难
- 大量参数导致过拟合
Deep LSTM
RNN可以再不同时间尺度上学习输入,deepLSTM可以再空间上更好的利用参数
-
参数个数 N = n c ∗ n c ∗ 4 + n i ∗ n c ∗ 4 + n c ∗ n o + n c ∗ 3 N=n_c*n_c*4+n_i*n_c*4+n_c*n_o+n_c*3 N=nc∗nc∗4+ni∗nc∗4+nc∗no+nc∗3,其中 n c ∗ n c n_c*n_c nc∗nc是循环体之间的, n i ∗ n c n_i*n_c ni∗nc是输入门、遗忘门、候选单元状态、输出门里面的, n c ∗ n o n_c*n_o nc∗no是隐藏状态和输出的线性变换, n c n_c nc是各门里面的偏置项
近似成 n c ∗ ( 4 ∗ n c + n o ) n_c*(4*n_c+n_o) nc∗(4∗nc+no)
-
定义了一个递归投影层,对LSTM的输出进行加工,包括一个线性变换和一个激活函数
r t = W r m m t , y t = ϕ ( W y r r t + b y ) r_t=W_{rm}m_t, y_t=\phi(W_{yr}r_t+b_y) rt=Wrmmt,yt=ϕ(Wyrrt+by),其中 m t m_t mt 是原来LSTM的输出
分布式训练
- BPTT反向传播计算短子序列上的参数梯度
- 计算子序列交叉熵梯度,反向传播到起点
- 每个线程对四个子序列进行操作
- 一部随机梯度下降
Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks
树LSTM
Tree-Structured LSTMs(Dependency Tree-LSTMs)
-
传统LSTM是线性的
-
不同的是gating vectors,比如遗忘门变成 f j k f_{jk} fjk,是从每个child k k k 得到的
-
输入仍然是向量 x j x_j xj,但是根据不同的树向量的来源不同,如果是一个 d e p e n d e n c y t r e e dependency\ tree dependency tree,会用头词的词向量,但是对于 c o n s t i t u e n c y t r e e constituency\ tree constituency tree(选区树),叶节点会是每个单词的词向量
N-ary Tree-LSTMs(Constituency Tree-LSTMs)
分支因子至多为N,及可以被1-N索引
- 和上面的Tree-LSTMs不一样的是每个子节点的权重都是不一样的,上面是先求和然后×同一个权重。每个子节点引入单独的参数矩阵,更细。
模型们
Tree-LSTMs完成分类任务
m m m 是训练集里面的节点, k k k 是编号
句子对的语义相关性
句子对里面生成
h
L
,
h
R
h_L,h_R
hL,hR
想让y尽可能是个[1,K]的整数,所以定义
y
=
r
T
p
y=r^Tp
y=rTp
实验
情感分类(未分类问题)
依赖Tree-LSTMs更优,因为训练数据较少
语义关联性
优于现有的系统