神经网络的基础知识

前馈神经网络

前馈神经网络是最早被提出的神经网络,熟悉的单层感知机,多层感知机,卷积深度网络等都属于前馈神经网络,之所以叫前馈,可能是因为信息向前流:数据从输入–计算–输出步骤。像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 》吴茂贵 王冬 李涛 杨本法 著

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值