前言:本人是自学,如有遗漏或者不规范请及时提出,本次基于学习整理,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(Θ) =
f(x)是预测值,Y是真实数值,1/2m是微分方便计算
求导: 对 f(x)=wx+b 求导:g(x)=Δf(x)(此时是梯度)
学习率:a
迭代梯度下降:θ=θ0-ag(x)
梯度下降公式: j(Θ) =
如图所示,当最凹那个点就是我们需要找的,说明这个点的损失值最小,损失越小说明我们预测的更接近真实的数值,根据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导数:
ct到ft导数: =ct-1
ht到ht-1导数:
ct到it导数:c~t
it到ht-1导数 it(1-it)
ct到c~t导数=it
c~t到ht-1导数 c~(1-c~)
ht到ot的导数:
ot到h-1的导数:
ct到Ct-1的导数
ht到ct的导数:
这里反向传播的公式太多了,简单来说根据链式法则,从后向前推导数分别需要求出f,i,c~,o 的导数作为损失项,向上传递误差,进行权重的梯度计算
(ps:反向传播推导过程和向前的链式法则没有写的很全,可以看下面的连接参考,都是基础的一理论知识,不知道有没有写明白,等过段时间会上传实操补充)
反向传播学习连接:https://blog.csdn.net/yangwohenmai1/article/details/128047225
本文介绍了LSTM中的关键概念,包括使用到的激活函数(Sigmoid和Tanh)、激活函数的作用与优缺点,以及梯度下降的基本原理和在LSTM中的应用。此外,还详细解释了LSTM框架结构,包括遗忘门、输入门和单元状态的运作机制。
9万+

被折叠的 条评论
为什么被折叠?



