前馈神经网络

前馈神经网络是最早被提出的神经网络,熟悉的单层感知机,多层感知机,卷积深度网络等都属于前馈神经网络,之所以叫前馈,可能是因为信息向前流:数据从输入–计算–输出步骤。像RNN有反馈连接的叫反馈神经网络。

神经元

科学家参考了生物神经元的结构,抽象了神经元模型MP,一个神经元模型包含:输入,计算,输出
如图:一个典型的神经元模型:包含n个输入,1个输出,计算功能(先求和,再将结果送入f**函数中) 图中箭头代表连接,每个箭头都会包含一个权值w。一个神经网络的训练算法就是让权重的值调整到最佳,使得整个网络的训练效果最好。
神经网络的基础知识

  • **函数:在MP模型里,函数f称为**函数,**函数将数据压缩到一定范围,其值大小将决定该神经元是否处于活跃状态。对于**函数的要求是:非线性(如果线性,再多层都相当于两层),可微性,单调性。

单层感知机

感知机仅有两层:输入层和输出层。如图:输入层有4个输入单元,输出层有2个神经单元,其中y1的值是4个输入单元与权重相乘再求和,然后再用f**函数**后的值,同理f2也是。虽然输入相同不过对应的权重不同,
神经网络的基础知识

多层神经网络

由于单层感知机对线性可分或近似可分的数据处理效果很好,但是对线性不可分的数据的效果不理想,即使人们想到了增加输出层的神经元数,调正**函数,都还是不好,后来人们想到增加层数,这就引入了多层神经网络。

如图:包含n个输入单元,p个隐藏单元,q个输出神经元 共两层神经网络。
神经网络的基础知识

增加了层数随之而来的计算复杂度也增加了。此刻人们面临的问题大致如下:

  • 如何来缩小计算误差?
  • 如何求最优解?
    传统机器学习可以通过梯度下降或最小二乘法来解决。而神经网络该如何解决???

面对这些问题,直到1986年Hinton和Rumelhar等人提出了**反向传播(BP)**算法,解决了两层神经网络所需要的计算量问题。

反向传播(BP)

多层神经网络采用反向传播的主要思想步骤如下:

  • ① 利用输入数据和其对应权重,从输入层到隐藏层,最后到达输出层,求出预测结果。
  • ②利用预测结果和真实值构造损失函数求出损失值。
  • ③利用损失函数,将损失值从输出层向隐藏层反向传播,直至传播到输入层,利用梯度下降算法求解参数梯度并优化。
  • ④在反向传播过程中,根据误差调整各种参数的值,不断迭代上述过程直至收敛。

①②就是前向传播过程,③④就是反向传播过程。

如图(为了简单介绍,省略偏差b):C是损失函数,z是**函数,
神经网络的基础知识
前向传播: z = ∑ i = 1 2 ( w i x i ) z = \sum_{i=1}^2(w_ix_i) z=i=12(wixi), a = g ( z ) = 1 / ( 1 + e − z ) a= g(z) = 1/(1+e^{-z}) a=g(z)=1/(1+ez)
C = 1 / 2 ( ∣ ∣ a − y ∣ ∣ 2 ) C = 1/2(||a-y||^2) C=1/2(ay2)

反向传播:
δ ( a ) = ∂ C / ∂ a = − ( y − a ) \delta^{(a)} = \partial C/\partial a = -(y-a) δ(a)=C/a=(ya)
δ ( z ) = ∂ C / ∂ z = ( ∂ C / ∂ a ) ∗ ( ∂ a / ∂ z ) = δ ( a ) a ( 1 − a ) \delta^{(z)} = \partial C/\partial z =(\partial C/\partial a ) * ( \partial a/\partial z) = \delta^{(a)} a(1-a) δ(z)=C/z=(C/a)(a/z)=δ(a)a(1a)

再根据链式求导法则求C关于权重w和偏差b的梯度。
∇ w C = ( ∂ C / ∂ z ) ∗ ( ∂ z / ∂ w ) = δ ( z ) x T \nabla_wC =(\partial C/\partial z)* ( \partial z/\partial w) =\delta^{(z)} x^T wC=(C/z)(z/w)=δ(z)xT

深度学习的其他策略

随着神经网络的层数的增加,计算的复杂度增加,因微积分的链式规则导致的梯度不稳定,因深度导致的BP算法困难,信息丢失,对超参数敏感,对初始数据敏感,以及因此而导致的欠拟合或过拟合等,面对这些问题,目前也有策略,虽然不是完美,但也不错。如下:

  • ①欠拟合我们采用正则化
  • ②梯度不稳定采用ReLU
  • ③难训练利用Batch Normalization,GPU,深度残差网络,
  • ④超敏感问题采用自适应优化算法。

如何选择**函数?常见的有:sigmoid,tanh,relu,softmax
图中分别是:sigmoid , tanh, relu**函数
神经网络的基础知识
其对应的导数图如下:
神经网络的基础知识

答:当神经网络层数不多时,选择这四个都可以,当搭建的神经网络层数较多时,需要适当选举,不当将导致梯度消失,不宜选择sigmoid,tanh因为它们导数都小于1,将导致梯度消失。当然导数也不能大于1,大于1将导致梯度爆炸。

致谢

《python深度学习基于TensorFlow 》吴茂贵 王冬 李涛 杨本法 著

相关文章:

  • 2021-12-19
  • 2021-11-01
  • 2021-12-01
  • 2021-08-24
  • 2021-06-18
  • 2022-02-08
猜你喜欢
  • 2021-12-08
  • 2021-05-30
  • 2021-03-28
  • 2021-05-15
  • 2021-09-04
相关资源
相似解决方案