SNN、RNN、CNN

SNN、RNN、CNN_第1张图片

单层神经网络(感知器) 

SNN、RNN、CNN_第2张图片

在“感知器”中,有两个层次。分别是输入层和输出层。输入层里的“输入单元”只负责传输数据,不做计算。输出层里的“输出单元”则需要对前面一层的输入进行计算。

  我们把需要计算的层次称之为“计算层”,并把拥有一个计算层的网络称之为“单层神经网络”。

感知器的训练法则

       对于单个感知器的权值,已经有几个常用算法,这里给出两种:感知器法则、delta法则。这两种算法可以保证收敛到可接受的假设,只是在不同的条件下收敛到的假设略有不同。

感知器法则

        为了得到可接受的权向量,感知器法则是从随机的权值开始,然后反复地对每一个训练样例应用这个感知器,在当前感知器误分类样例时修改感知器的权值。重复这个过程,直到感知器正确分类所有的训练样例。修改权值的法则如下:

        其中:

        这里,wi为每次迭代时xi对应的权值,△wi为每次wi的修正值,t是当前训练样本的目标输出,o是感知器的输出,η是学习速率。学习速率的作用是缓和每一步调整权的程度,它通常被设为一个小的数值(例如0.1),而且有时会使其随着权调整次数的增加而衰减。

       事实证明,在经过有限次地使用感知器训练法则后,上面的训练过程会收敛到一个正确分类所有训练样例的权向量,前提是训练样例线性可分,并且使用了充分小的η。如果数据不是线性可分的,那么不能保证训练过程收敛。

delta法则

当训练样本是非线性可分时,感知器训练法则就束手无策了,为了解决这个问题,提出了delta法则。delta法则的关键思想是使用梯度下降来搜索可能的权向量假设空间,以找到最佳拟合训练样本的权向量。delta训练法可以理解成一个无阈值的感知器,即一个线性单元,其输出o可表示为:

       为了推导线性单元的权值学习法则,先指定一个度量标准来衡量假设(权向量)相对于训练样例的训练误差,其中最常用的度量标准为:

       其中,D是训练样例的集合,td是样例d的目标输出,od是线性单元对样例d的输出。

       接下来,我们的目的就是确定一个权向量使得E达到最小。梯度下降法从任意的初始向量开始,然后以很小的步伐反复修改这个向量。每一步都沿误差曲面产生最陡峭下降的方向修改权向量,继续这个过程直到得到全局的最小误差点

那么怎么计算最陡峭下降的方向呢?答案是通过计算E关于向量w的偏导数来确定,实际上这个下降最快的方向就是使E上升最快的方向的反方向。既然梯度确定了E最陡峭上升的方向,那么梯度下降的训练法则为:

      其中:

      这里η是一个正数的学习速率,它决定梯度下降搜索中的步长。公式的负号是因为我们想让权向量向E下降的方向移动。这个训练法则也可以写成它的分量形式:

      其中:

这里η是一个正数的学习速率,它决定梯度下降搜索中的步长。公式的负号是因为我们想让权向量向E下降的方向移动。这个训练法则也可以写成它的分量形式:

     

 其中:

 这样,公式变得很清楚,最陡峭的下降可以按照∂E/∂wi改变w中的每一个分量wi来实现。现推导每个梯度分量的公式,如下:

     最终,梯度下降权值更新公式为:

      梯度下降是一种重要的通用学习范型,在实践中会遇到这样两个问题:(1)有时收敛过程可能非常慢(它可能需要数千步的梯度下降);(2)如果在误差曲面上有多个局部极小值,那么不能保证这个过程会找到全局最小值。为了缓解这些问题,提出一种随机梯度下降。随机梯度下降的思想是根据每一个单独样例的误差增量计算权值更新,修改后的公式为:

      标准的梯度下降与随机梯度下降的区别:

      a. 标准的梯度下降是在权值更新前对所有样例汇总误差,而随机梯度下降的权值是通过考查每个训练实例来更新的;

      b. 在标准梯度下降中,权值更新的每一步对多个样例求和,这需要大量的计算,另一方面由于使用的是真正的梯度,标准的梯度下降对于每一次权值的更新经常使用比随机梯度下降较大的步长

      c. 由于随机梯度下降使用不同的▽Ed(w)而不是▽E(w)来引导搜索,所以随机梯度下降可能避免陷入这些局部极小值中。
 

BP神经网络

https://blog.csdn.net/weixin_42555080/article/details/94293064

梯度下降、反向传播;

RNN

https://blog.csdn.net/zhaojc1995/article/details/80572098

RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。首先我们要明确什么是序列数据,摘取百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系。

基础的神经网络只在层与层之间建立了权连接,RNN最大的不同之处就是在层之间的神经元之间也建立的权连接。

è¿éåå¾çæè¿°

 

在展开结构中我们可以观察到,在标准的RNN结构中,隐层的神经元之间也是带有权值的。也就是说,随着序列的不断推进,前面的隐层将会影响后面的隐层。图中O代表输出,y代表样本给出的确定值,L代表损失函数,我们可以看到,“损失“也是随着序列的推荐而不断积累的。

除上述特点之外,标准RNN的还有以下特点:
1、权值共享,图中的W全是相同的,U和V也一样。
2、每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连接。

用一句话解释RNN,就是一个单元结构重复使用

x是输入,h是隐层单元,o为输出,L为损失函数,y为训练集的标签。这些元素右上角带的t代表t时刻的状态,其中需要注意的是,隐藏单元h在t时刻的表现不仅由此刻的输入决定,还受t时刻之前时刻的影响。V、W、U是权值,同一类型的权连接权值相同。

有了上面的理解,前向传播算法其实非常简单,对于t时刻:

h(t)=ϕ(Ux(t)+Wh(t−1)+b)

其中ϕ()为激活函数,一般来说会选择tanh函数,b为偏置。

t时刻的输出就更为简单:
o(t)=Vh(t)+c

最终模型的预测输出为:
yˆ(t)=σ(o(t))

其中σ为激活函数,通常RNN用于分类,故这里一般用softmax函数。

RNN的训练方法——BPTT

BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。

SNN

深度学习最近非常火热,它归属于人工神经网络(ANNs)的范畴。ANNs是属于第二代神经网络,而我们关注的是下一代神经网络——脉冲神经网络(SNNs)

人工神经网络为什么会有这个名字呢?
"人工"表明了它是我们手动构建的,“神经网络”表明它是受大脑启发的。当我们深入了解ANNs时,你会发现,ANNs的神经元模型就是加权求和然后进行非线性激活。这和我们从生物学中了解的神经元模型差距太大了。同时在ANNs中信息的传递是基于数值。这和生物大脑中采用脉冲传递信息也存在差距。

脉冲神经网络的诞生:
诞生的原因:
1.人工神经网络需要高性能的计算平台。
2.人工神经网络仍不能实现强人工智能,人们认为是因为其与生物大脑仍存在巨大差距。

SNNs的特点:
1.采用了生物神经元模型如IF,LIF等,比之前ANNs的神经元更接近生物。
2.信息的传递是基于脉冲进行。所以网络的输入要进行额外编码,例如频率编码和时间编码等,转现在的数据(例如图片的像素)转换成脉冲,编码技术我们以后再讨论。
3.基于脉冲的脉冲的编码,能蕴含更多的信息
4.SNNs网络的能耗更低,每个神经元单独工作,部分神经元在没接受到输入时,将不会工作。

SNNs的学习算法:
首先一点非常重要,脉冲神经网络不能直接利于ANNs的基于反向传播的方式进行网络训练,因为脉冲神经元模型处理的是信息是离散的脉冲,不能直接求导。

1.将现有的ANNs映射到SNNs中
这种方法是当前比较主流的构建SNNs的方法,因为它能有效的将ANNs与SNNs结合起来,利用了ANNs和SNNs各自的优点,ANNs训练简单,SNNs的能耗低。(最近就是在研究这东西)

2.对生物神经元模型进行处理,换成一个能求导的模型,或者对传递的脉冲信息进行转换。然后就可以将反向传播用于SNNs的训练。(这种算法我没有研究过,所以也不太懂)

3.STDP类的算法,它里面有很多小分支,STDP这东西就类似一种思想,例如两篇文章都用了STDP算法,但他们的数学公式可能是存在差异。从原理上,该种算法就是根据前后神经元的脉冲发放关系然后对他们之间的权重进行调整。该种算法比较接近人脑,现在研究他的人比较多。但这种算法一般是无监督的(也有少部分人将其改成有的监督),收敛比较难。(之前看过相关论文,感觉它是几种算法中最接近生物的学习规则)

其实SNNs的学习算法仍是非常开放,一种统一江湖的算法仍没出现,所以也制约了它的发展。

 

 

你可能感兴趣的:(人工智能)