循环神经网络LSTM做预测

本文介绍了LSTM中的关键概念,包括使用到的激活函数(Sigmoid和Tanh)、激活函数的作用与优缺点,以及梯度下降的基本原理和在LSTM中的应用。此外,还详细解释了LSTM框架结构,包括遗忘门、输入门和单元状态的运作机制。
摘要由CSDN通过智能技术生成

前言:本人是自学,如有遗漏或者不规范请及时提出,本次基于学习整理,lstm是改良版的RNN算法模型,解决了梯度爆炸和梯度消失(内容有点多因此本章不整理rnn知识点,用到的会粗略写一下)

一:使用到的激活函数

               Singmoid型函数

                                singmoid函数是指一类S型曲线函数,为两端饱和的函数,常用的函数有Logistic函数Tanh函数 

                  Logistic函数

 

                         公式:F(x)=1/1+e^-x

                         导数公式:F(x)= F(x)(1-F(x))

                        性质特征:   1:输出可以直接看成概率分布,使得神经网络可以更好的统计和学习模型进行结合。 2:用来控制其他神经元输出的信息的数量

                               作用:对数据做归一化处理,将数据压缩到【0,1】之间,在传播算法使用梯度下降来学习神经网络的权重。要推导出该算法,也需要激活函数的导数。(在lstm中控制单元的状态)

                       优点:平滑、容易求导

                       缺点: 当曲线接近负无穷的时候趋近与0,这会导致梯度消失 ,非零中心化    

             Tanh函数

                        公式:F(x)=e^x-e^-x/e^x+e^-x

                        导数公式:F(x)= F(x)(1-F(x))

                        作用:Logistic恒大于0是非零中心化,而tanh是零中心化,解决零神经网络输入发送的位置便宜,并且解决下一步的梯度下降的收敛性🈵️的问题

                        优点:解决了Sigmoid的输出不关于零点对称的问题

                        缺点:幂函数,成本高,梯度消失

二:为什么需要使用激活函数 

         激活函数在神经元中是非常重要的存在,是为了增强网络的表示能力和学习能力,需要具备以下的特征

        性质特征:

        1:连续并且可导(允许少数点的不可导),可导的激活函数可以直接利用数值优化的方法来学习网络的参数 。

        2:激活函数和导数要尽可能的简单有利于提高网络的计算效率。

        3:要在一个合适的区间,不能太大也不能太小 

三:梯度下降 

        什么是梯度 

                梯度和导数是密切相关的概念,实际上是导数对多元函数的推广,是多远函数对各个自变量求偏导形成的向量,指的是函数在一个点的导数方向最大值,就是函数在这个点的方向最大,最快

        梯度下降: 

                  原理

                当导数方向最大值叫梯度上升,反正,当导数方向是负的最大值就叫梯度下降

                梯度下降是求解凸函数极值的方法,它以损失函数作为纽带,然而损失函数是模型的预测值和真实值的差距,是模型中(w,b)的函数  ,w是斜率也可以叫方向

                  目标函数  

                     一元方程 : f(x)=wx+b  

                      j(Θ) =1/2m\sum (f(x)-Y)^2  

                      f(x)是预测值,Y是真实数值,1/2m是微分方便计算

                      求导: 对 f(x)=wx+b  求导:g(x)=Δf(x)(此时是梯度)

                      学习率:a

                      迭代梯度下降:θ=θ0-ag(x)

                       梯度下降公式: j(Θ) =1/2m\sum ((wx+b)-Y)^2   

               如图所示,当最凹那个点就是我们需要找的,说明这个点的损失值最小,损失越小说明我们预测的更接近真实的数值,根据A箭头所示,开始我随选再上方选择了一个站点,也可以选择别的位置,那时我们的初始值,根据选择的初始参数,我们需要找到向哪个方向走更接近  凹下去的哪个点,需要对一元方程求导,方向找到了不能一步走到位,虽然这里是箭头一步到位,其实可以想成走几个网格,这就是步长,影响它的因素是学习率,这个可以由我们开始设置一个初始值,一般设置的是0.01,当学习率比较大,就像A一样,一次可能走了三四个网格,控制不住脚步迈的太大,B箭头学习率相对较低,一次走一两个网格接近我们需要的最低点。

        方向和步子已经知道了,那么需要迭代梯度下降,就像刚刚说的,一步走不到,所以需要当前的位置减去下一个要走的方向用到的公式是θ=θ0-ag(x)

        这是相对简单的描述了梯度下降可需要用到的公式,还有批量梯度下降,还有随机梯度下降,有兴趣的可以额外找一下

           

                           

四:LSTM框架结构 

这是网上找的一个图像,根据这个图片来介绍一下lstm模型

简介 

        长短期记忆网络(LST)是一种特殊的循环神经网络(RNN),适合处理和预测时间序列的数据,主要由四个基本组件组成(遗忘门,输入门,细胞状态更新,输出门),和RNN的区别在于处理数据的时候要是时间序列边长RNN会出现梯度消失或者梯度爆照的问题,但是LSTM确解决了这个问题

        xt:输入 

       ct-1:上一层的隐藏层(也可以叫单元状态)

        ht-1:上一层的预测结果

        ct:本次单元状态

        f(t):遗忘门

        i(t):当前单元状态

        c~t:当前输入+上一层的输入

        o(t):输出层

        简单的描述每个英文存在的意义,用一个通俗的例子打个比方:

                当明天就要靠高等数据,对于临时抱佛脚的我们该怎么去复习,  ht-1室友猜到是高等数学,根据这个消息,对以前学到的全部知识点做整理,只记住高等数学相关的变成了f(t),就到了下一个阶段,高等数学要学的很多,根据老师平时讲到的知识点着重学一些会考到的知识点,这些新的知识点是xt(输入值),我们看的不一定全部都有用,夜壶i过滤一些没用的知识点就变成了i(t),现在就得到了当天晚上新输入的知识和历史高等数学的知识点,把两个知识点合并记到大脑里,最后就是我们认为考到的知识点范围

为什么会出现梯度消失

               很大的原因,再神经网络的层次越来越深的时候,再反向传播的过程中多次使用到链式法则修改权重信息,就等于昨天的信息内容会包含十几天前的内容信息,并且不断地优化权重,但是经过多次梯度处理,就像上述描述到的梯度下降,数值越变越小,根据上面sigmoid函数的曲线可以看出,当数值越来越小就越接近0,这就导致梯度消失

 单元状态Ct

        也可以称为隐藏层,是现在新输入的新增加的信息和上一层传下来过滤的旧的状态,是再Ct-1的基础上面可以直接迭代,整合了所有的历史信息,并且将这些不断的传递下去

 前向传播

                这里用到了门的歹念,实际上是全连接层,输入的是一个向量,输出的是0-1之间,w是权重,b是偏置项门可以表示未g(x)= sigmod(wx+b)

         遗忘门

                  决定了上一层时刻的单元状态Ct-1保留多少到Ct,可以看作过滤历史不需要的数据,使用激活函数sigmod,范围再【0,1】之间,当为0的时候剔除,保留为1的数据

                ft= sigmod(Wf*[ht-1,xt]+bf)

         输入门

                决定现在新输入的网络xt也同样的经过sigmoid激活函数过滤不需要的信息保留为1 的数据,使用tanh提取有效信息,将这些数据保存到当前状态Ct中(上一次的状态单元加上当前的状态单元)

                i= sigmod(Wf*[ht-1,xt]+bf)

                c~t=tanh(Wf*[ht-1,xt]+bf) 

                ct=ft*ct-1+it*c~t

                 ct(上一曾筛选的单元状态*遗忘门+当前单元状态*输入信息)

         输出们 

                将当前记忆ct和长期记忆ct-1组合形成了新的单元ct,犹豫遗忘门的控制,可以保留很久以前的信息,由于输入们的控制,可以避免很多无关的内容进入。根据上述图片,状态单元和输出h是两条不同的存在,输出门控制了记忆对当前的影响

                ot= sigmod(Wf*[ht-1,xt]+bf) 

                 最终由输出门和单元状态确定ht=ot*tanh(ct)

反向传播

         反向传播

                反向传播是为了更新权重和偏置项,使得模型更加成熟

                1:向前计算对于LSTM中就是,ft,it,ct,ot,ht

                2:反向传播是计算每个神经远的误差项的值,与神经网络一样,LSTM误差项的反向传播由两个方向:(沿着时间的反向创博,当前的t开始,计算每个时刻的误差项;一个是将误差项上一层传播)

                3:根据相应的误差项,计算每个权重的梯度

        符号的意义说明

                一种传播的误差来源包含ht一条比如控制门o;另一种包含了ct和ht两条,比如控制门f,i,c~以及ct-1,反向传播举例子

        误差项

         ct-1的误差来自于ct和ht两条        

                e->ct->ct-1

                e->ht->ct->ct-1

          ht-1的误差项来自于四条,风别对应f,i,c~,ct-1

          o的误差是ht传来的:e->ht->o->ht-1

          f的误差由ht和ct传来:

                        e->ht->ct->f->ht-1

                        e->ct->f->ht-1

          i的误差由ht和ct传来:

                        e->ht->ct->i->ht-1

                        e->ct->i->ht-1

           c~t的误差由ht和ct传来:

                        e->ht->ct->c~t>ht-1

                        e->ct->c~t->ht-1

           计算求偏导

                     ht到ct导数:\frac{\Delta ht}{\Delta ct}=ot*(1-tan^{2}Ct))

                     ct到ft导数: \frac{\Delta ct}{\Delta ft}=ct-1

                     ht到ht-1导数:\frac{\Delta ht}{\Delta ct}=ot*(1-tan^{2}Ct))

                     ct到it导数:\frac{\Delta ct}{\Delta it}=c~t

                     it到ht-1导数 \frac{\Delta it}{\Delta ht-1}=it(1-it)

                     ct到c~t导数\frac{\Delta ct}{\Delta c~t}=it 

                    c~t到ht-1导数 \frac{\Delta c^{~}}{\Delta ht-1}=c~(1-c~)

                    ht到ot的导数:\frac{\Delta ht}{\Delta ot}=tan(ct))

                  ot到h-1的导数:\frac{\Delta ot }{\Delta ht-1}=ot(1-ot))

                     ct到Ct-1的导数\frac{\Delta ct}{\Delta ct-1}=ft 

                 ht到ct的导数:\frac{\Delta ht}{\Delta ct}=ot(1-tan^{2}(ct))

 这里反向传播的公式太多了,简单来说根据链式法则,从后向前推导数分别需要求出f,i,c~,o 的导数作为损失项,向上传递误差,进行权重的梯度计算

(ps:反向传播推导过程和向前的链式法则没有写的很全,可以看下面的连接参考,都是基础的一理论知识,不知道有没有写明白,等过段时间会上传实操补充)

反向传播学习连接:https://blog.csdn.net/yangwohenmai1/article/details/128047225

 lstm基础入门:https://zybuluo.com/hanbingtao/note/581764

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值