入门篇——解析Python神经网络基本原理及编程

目录

一、神经网络基本原理

 1.生物神经网络的简单原理

2.人工神经网络的基本原理

3.神经网络正向计算输出

4.神经网络反向传播误差

 5.神经网络更新连接权重

 二、Python神经网络编程

1.三层神经网络的代码框架

2.利用手写数字的数据集MNIST训练神经网络

3.利用手写数字测试神经网络


一、神经网络基本原理

 1.生物神经网络的简单原理


 在生物神经网络中,每个神经元的树突接受来自之前多个神经元输出的电信号,将其组合成更强的信号。如果组合后的信号足够强,超过阀值,这个神经元就会被激活并且也会发射信号,信号则会沿着轴突到达这个神经元的终端,再传递给接下来更多的神经元的树突,如图1所示。

                                                                                                            图1 生物神经网络的简单原理

2.人工神经网络的基本原理

仿照生物神经网络,构建多层人工神经网络,每一层的人工神经元都与其前后层的神经元相互连接,如图2所示。在每个连接上显示了相关的连接权重,较小的权重将弱化信号,而较大的权重将放大信号。


                                                                                                                        图2 人工神经网络的基本原理


       对于神经网络中的单个神经元而言, 人工神经元的前半端(图3中红色虚线框)相当于生物神经元的树突,是输入端,用来接受多个神经元输出的信号并进行组合;人工神经元的后半端(图3中绿色虚线框)相当于生物神经元的轴突,是输出端,用来输出信号给接下来更多的神经元;前后端中间的分界线是激活函数,相当于生物神经元的阀值函数,用来对输入的组合信号判断是否达到阀值,如果达到阀值则该神经元激活,向输出端输出信号,否则抑制信号,不进行输出。

                                                                                                             图3 人工神经元的基本原理


       因此,神经网络的基本原理是将神经网络的输出值y与训练样本中标定的真实输出值进行比较,计算出输出误差,之后再使用这个误差值来指导前后两层中每两个神经元之间连接权重的调整,进而逐步改善神经网络的输出值,直至与训练样本的真实输出值之间的误差达到很小,在设定的可容忍范围内为止。可以看出,前后两层中每两个神经元之间的连接权重就是神经网络需要进行学习的内容,对这些连接权重持续进行优化,才能使神经网络的输出越来越好,达到我们满意的结果。


3.神经网络正向计算输出


        如上图2所示,输入信号从第一层(也就是输入层)进入神经网络后,不管自输入层以后到底有多少层,都可以使用以下两步来计算经过各层后的输出信号:一是利用连接权重来调节从前一层中各神经元输入的信号并进行组合;二是对组合之后的信号应用激活函数,生成该层的输出信号。而对于第一层的输入层而言,仅仅表示输入层中每个神经元的输入而已,对输入层中每个神经元不使用激活函数。因此,用强大的矩阵运算来表示以上所描述的自输入层以后每一层神经网络的正向输出值的话,则为:

                                                        $$ \vec{X}=\vec{W}\cdot\vec{I} \tag{1} $$              (1)
                                                       $$ \vec{O}=Sigmoid(\vec{X}) \tag{2} $$    (2)

其中,公式(1)就是利用连接权重来调节从前一层中各神经元输入的信号并进行组合,\vec{X}是组合后的信号矢量,\vec{W}是该层的各神经元与前一层的各神经元之间的连接权重矩阵,\vec{I}是前一层的输入信号矢量;公式(2)是对组合之后的信号应用激活函数并生成该层的输出信号,\vec{O}是该层的输出信号矢量,sigmoid是所采用的激活函数(也就是S阀值函数)。


4.神经网络反向传播误差


       如上图2所示,在神经网络中,我们将信号从输入层正向传播到输出层时用到了连接权重。此外,将输出层得到的误差反向传播到中间每一层时,我们也需要使用连接权重,与输入信号正向传播一样,我们同样会为具有较大连接权重的连接分配较大的误差。因此,在误差反向传播过程中,中间层(也称为隐藏层)节点的误差的计算思路是,中间层中每一个节点的误差是与该节点正向连接中所有连接权重分割的误差之和。例如,在图4所示的神经网络中,中间层第一个神经元(也称为节点)的误差既得到了在权重w_{1,1}的连接上第一个输出节点的输出误差e_{1}的一部分,同时也得到了在权重w_{1,2}的连接上第二个输出节点的输出误差e_{2}的一部分,其误差为这两部分误差之和;同理,中间层第二个节点的误差也是通过连接权重分割的误差之和得到。因此,通过反向传播误差的过程计算出中间层节点的误差,写成矩阵形式为:
                                                                                                                

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值