学习路线
首先配置python虚拟环境,安装框架和包
『开发技巧』MacbookM1芯片深度学习环境配置最全教程:简明安装开发TensorFlow与PyTorch_小宋是呢的博客-CSDN博客_m1芯片深度学习
查了一下lstm后,从最基本的神经网络入手,发现需要一点一点从前往后补
首先是优化算法,梯度下降法,包括批量梯度和随机梯度,后来又了解到一种叫Adam
深入浅出--梯度下降法及其实现 - 简书
优化算法是为了实现反向传播,这个大致懂了后,就开始看最简单的神经网络
零基础入门深度学习(3) - 神经网络和反向传播算法 - 作业部落 Cmd Markdown 编辑阅读器
LTSM是一种RNN,所以接着了解RNN
如何从RNN起步,一步一步通俗理解LSTM_v_JULY_v的博客-CSDN博客_从rnn到lstm
最后理解LTSM
理解 LSTM 网络 - 简书
找了一个实例,在上面学习过程中找了很多源码,都是不利用框架来实现算法,都很厉害,这样有助于深层的理解,下面这个用了pytorch
[干货]深入浅出LSTM及其Python代码实现 - 知乎
可以说,我的学习路线是顺着过来的,现在也是似懂非懂那种,我想把我的经验反过来写,这样可能看起来更好理解
神经网络
首先什么是神经网络?
人的所有系统,由无数的神经链接起来,才能让我们理解各种各样的事物
如果我们把理解事物抽象为给一个函数一个输入,得到一个输出
这就是神经网络算法的内涵
就像是回归问题一样,我们拟合数据,总结出一个函数
最简单的神经网络,针对的只是一帧
当我们处理视频的时候,不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列
所以就需要RNN
但是RNN在处理长队列的时候,会出现梯度消失或者梯度爆炸的问题
所以我们学习LTSM
RNN有了记忆性
LTSM有了更加针对的记忆性,他可以分辨什么该留下,什么该扔掉,并且对于不同的帧该保留怎样的输出
这种更加符合现实,也就是更聪明
这样说很抽象,我们从一个例子出发,我们把sin函数当作输入,cos函数当作输出
我们知道他们之间的关系是导数,但是机器并不知道,我们把sin和cos的值一一对应起来,当机器从当中学习,总结规律,生成结论
如果是传统的神经网络,它仅仅基于当前的输入来预测输出,对于这种同一个输入可能对应多个输出的情况不再适用。
我们主要分析RNN和LTSM
对于RNN来说,因为它并不会去选择遗忘信息,所以之前的输入会一直对后面有所影响,但是我们知道对于三角函数来说是有周期性的,对于两个不同的x来说,sinx可以相等,但是cosx并不相等
RNN利用了神经网络的“内部循环”来保留时间序列的上下文信息,可以使用过去的信号数据来推测对当前信号的理解
那么三角函数的周期性,会导致一个比较大的时间间隔,RNN是没有办法记住间隔太久的信息,可以理解为他只会考虑第二个点的值,忘记第一个,也就忽略了周期性,那么这样拟合出来的结果肯定是不正确的
也就是梯度爆炸或者梯度消失(学习到一定程度无法再学习)
但是LTSM的原生机制,可以让他记住很久之前的信息(其实是选择遗忘一些,保留一些,这样就可以涉及到间隔较久的信息),那么他就可以完美解决RNN的问题
我就是通过这个例子
理解了LTSM的记忆到底是怎么在现实体现的