2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019
这里有别人总结的教程资源:https://blog.csdn.net/jizhidexiaoming/article/details/80930287
一:理解LSTM
- 理解LSTM英文:http://colah.github.io/posts/2015-08-Understanding-LSTMs/
- 理解LSTM中文:http://www.dataguru.cn/article-11339-1.html
- 理解LSTM:https://blog.csdn.net/menc15/article/details/71271566
- RNN的神奇效果:http://karpathy.github.io/2015/05/21/rnn-effectiveness/
- LSTM用于文本字符识别:https://github.com/karpathy/char-rnn
- RNN的神奇效果:http://karpathy.github.io/2015/05/21/rnn-effectiveness/
摘要:
- 传统的网络不能基于上一帧的理解,来解释当前帧。RNN解决了这个问题
- LSTM是十分特别的RNN,能起到非常好的效果
- RNN能解决间隙小的前后联系,LSTM能加长间隙
- LSTM记住长时间的信息实际上是他们的默认行为,而不是他们要学习的东西!
- 所有递归神经网络都具有神经网络重复模块链的形式。在标准的rnns中,这个重复模块将有一个非常简单的结构,例如一个tanh层。
LSTM的核心思想:
- LSTM增减数据由“门”控制,门由sigmoid(输出0和1)以及点乘运算构成;一个LSTM单元由三个门组成,来控制LSTM核心
- 第一步是决定从核心中丢弃什么信息(forget gate layer.)gate尤其是forget gate的作用与residual类似,给较早时刻的单词加了一条通路,可以更好的把较早时刻的单词信息传到当前时刻,也有利于梯度的传播~当forget gate越接近0时,意味着对历史信息(t-1时刻)信息的丢失;而forget gate越接近于1,意味着对历史信息的更多保留。
- 第二步时决定往核心中添加新信息(input gate layer),包括sigmoid更新信息以及tanh添加新信息,
- 第三步,输出
二:LSTM教程
LSTM教程,源码,论文,学习思路:https://blog.csdn.net/vbskj/article/details/71713204
三:cnn与rnn的区别与联系
RNN变体调研:https://blog.csdn.net/zhaojc1995/article/details/80572098
https://www.cnblogs.com/softzrp/p/6434282.html
- CNN对于输入数据的维度约束是比较严重的,比如用CNN训练一个图像识别的model,训练的图片像素是48*48的,那么在预测的时候,也需要把所有的预测图片转成48*48。这个约束在图像识别方面可能表现的并不是那么明显,人们可以说:大不了预测的时候我做个图片大小转换不就得了?我们再思考另一个场景,比如用CNN去做一个智能问答系统,CNN会需要所有的问答数据都是固定的长度,这就很可怕了,这种模型会让问答变成对对子,必须每句话长短固定。而RNN没有这种约束。
- RNN更多的考虑了神经元之间的联系,比如我们训练一个翻译系统,那么对于一个短语的翻译一定要考虑前因后果,这就需要模型对于数据输入的前后因素都要考虑,CNN并不具备这样的特点。
- RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度。正如我们上面所说,“梯度消失”现象又要出现了,只不过这次发生在时间轴上。对于t时刻来说,它产生的梯度在时间轴上向历史传播几层之后就消失了,根本就无法影响太遥远的过去。因此,之前说“所有历史”共同作用只是理想的情况,在实际中,这种影响也就只能维持若干个时间戳。为了解决时间上的梯度消失,机器学习领域发展出了长短时记忆单元。
- RNN每一刻的输出都是带着之前输出值加权之后的结果。
公式表示t时刻的输出:(https://blog.csdn.net/weixin_35227692/article/details/79223536)
st为当前时刻的输出,xt为当前时刻的输入,U为当前时刻输入值的加权计算,st-1为上一时刻的输出,W为上一时刻输出的权重。
通过这样的计算方式,我们可以认为,当前的结果包含之前的结果,或者说受到之前结果的影响。
-
one to one:表示的是CNN网络的场景,从固定的输入到固定的输出(参考)
-
one to many:RNN的场景,序列输出,有点像看图说话,例如固定了输入的图片,然后输出一段序列描述这个图的意义
-
many to one:RNN的场景,序列输入,比如我们做语义情感分析,输入一串不定长度的话,返回情绪
-
many to many:RNN的场景,常见的sequence to sequence,比如之前的一个文章到的,通过周杰伦的歌词数据,模仿写出一首周杰伦风格的歌词,这种场景的输入和输出的长度都是不定的。
四:前馈神经网络与RNN之间的区别
https://baijiahao.baidu.com/s?id=1593640393562919434&wfr=spider&for=pc
- RNN可以被看作是神经网络的一个序列。
- LSTM的单元被用作一个RNN层的构建单元,该RNN层通常被称为LSTM网络。
- LSTM使RNN能够长时间记住他们的输入。这是因为LSTM将他们的信息包含在内存中,这很像计算机的内存,因为LSTM可以从内存读取、写入和删除信息。
- LSTM中的门是模拟的,采用S形的形式,意思是它们的范围从0到1,它们是模拟的,这使得它们可以反向传播。消失梯度的问题可以通过LSTM来解决,因为它可以保持梯度足够陡峭,因此训练相对较短,准确度较高。
- 当时间间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。
五:用python的keras框架实现LSTM字符序列的预测
https://blog.csdn.net/zwqjoy/article/details/80493341
六:[深入浅出] LSTM神经网络(向前,向后都给出了):https://blog.csdn.net/m0epnwstyk4/article/details/79124800
-
原始 RNN 的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。再增加一个状态,即c,让它来保存长期的状态,称为单元状态(cell state)。
-
展开时间序列
-
怎样控制长期状态 c ?方法是:使用三个控制开关,遗忘门、输入门、输出门
-
-
门gate 实际上就是一层全连接层,输入是一个向量,输出是一个 0到1 之间的实数向量。
-
方法:用门的输出向量按元素乘以我们需要控制的那个向量
原理:门的输出是 0到1 之间的实数向量,
当门输出为 0 时,任何向量与之相乘都会得到 0 向量,这就相当于什么都不能通过;
输出为 1 时,任何向量与之相乘都不会有任何改变,这就相当于什么都可以通过。 -
LSTM 的前向计算:门控制h和c
-
反向计算:https://blog.csdn.net/m0epnwstyk4/article/details/79124800
-
文本生成实验:https://github.com/keras-team/keras/blob/master/examples/lstm_text_generation.py
六:循环神经网络
- 全连接神经网络和卷积神经网络,以及它们的训练和使用。他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。
- 来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。
- 循环层可以看作:
- 隐藏层要保存值
-
循环神经网络的训练算法:BPTT:
BPTT算法是针对循环层的训练算法,它的基本原理和BP算法是一样的,也包含同样的三个步骤:前向计算每个神经元的输出值;反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数;最后再用随机梯度下降算法更新权重。计算每个权重的梯度。
-
- 训练的公式介绍。最终的梯度是各个时刻的梯度之和。
-
RNN的梯度爆炸和消失问题:对应的误差项的值增长或缩小的非常快。梯度爆炸更容易处理一些。因为梯度爆炸的时候,我们的程序会收到NaN错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。梯度消失更难检测,而且也更难处理一些
-
数字,词语的计算机表示:向量化:建立一个包含所有词的词典,每个词在词典里面有一个唯一的编号;任意一个词都可以用一个N维的one-hot向量来表示。其中,N是词典中包含的词的个数。假设一个词在词典中的编号是i,v是表示这个词的向量,是向量的第j个元素,则:
-
,向量稀疏,要降维
七:LSTM网络:https://zybuluo.com/hanbingtao/note/581764
-
- LSTM的关键,就是怎样控制长期状态c