区块链技术博客
www.b2bchain.cn

入门篇——解析Python神经网络基本原理及编程求职学习资料

本文介绍了入门篇——解析Python神经网络基本原理及编程求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

一、神经网络基本原理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$$
vec{X}=vec{W}cdotvec{I} tag{1}
$$
$$
vec{O}=Sigmoid(vec{X}) tag{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}$的一部分,其误差为这两部分误差之和;同理,中间层第二个节点的误差也是通过连接权重分割的误差之和得到。因此,通过反向传播误差的过程计算出中间层节点的误差,写成矩阵形式为:

$$
left[
begin{matrix}
e_{hidden,1} \
e_{hidden,2}
end{matrix}
right]
=
left[
begin{matrix}
frac{w_{1,1}}{w_{1,1}+w_{2,1}} &frac{w_{1,2}}{w_{1,2}+w_{2,2}} \
frac{w_{2,1}}{w_{1,1}+w_{2,1}} &frac{w_{2,2}}{w_{1,2}+w_{2,2}}
end{matrix}
right]
left[
begin{matrix}
e_{1} \
e_{2}
end{matrix}
right]
$$

再观察上式,中间层节点的误差可以看成是由权重矩阵和输出层误差通过矩阵的乘法运算得到。其中,这个公式的权重矩阵中每个元素都是一个分数,其分母是一种归一化因子,如果我们忽略每一个分数的这些归一化因子,仅仅影响的是计算出的中间层节点误差的大小,而仍然符合我们前面所提出的较大的连接权重就意味着要携带较大的输出误差给中间层的原则。此时,上式就简化为:

$$
left[
begin{matrix}
e_{hidden,1} \
e_{hidden,2}
end{matrix}
right]
=
left[
begin{matrix}
w_{1,1} & w_{1,2} \
w_{2,1} & w_{2,2}
end{matrix}
right]
left[
begin{matrix}

一、神经网络基本原理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$$
vec{X}=vec{W}cdotvec{I} tag{1}
$$
$$
vec{O}=Sigmoid(vec{X}) tag{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}$的一部分,其误差为这两部分误差之和;同理,中间层第二个节点的误差也是通过连接权重分割的误差之和得到。因此,通过反向传播误差的过程计算出中间层节点的误差,写成矩阵形式为:

$$
left[
begin{matrix}
e_{hidden,1} \
e_{hidden,2}
end{matrix}
right]
=
left[
begin{matrix}
frac{w_{1,1}}{w_{1,1}+w_{2,1}} &frac{w_{1,2}}{w_{1,2}+w_{2,2}} \
frac{w_{2,1}}{w_{1,1}+w_{2,1}} &frac{w_{2,2}}{w_{1,2}+w_{2,2}}
end{matrix}
right]
left[
begin{matrix}
e_{1} \
e_{2}
end{matrix}
right]
$$

再观察上式,中间层节点的误差可以看成是由权重矩阵和输出层误差通过矩阵的乘法运算得到。其中,这个公式的权重矩阵中每个元素都是一个分数,其分母是一种归一化因子,如果我们忽略每一个分数的这些归一化因子,仅仅影响的是计算出的中间层节点误差的大小,而仍然符合我们前面所提出的较大的连接权重就意味着要携带较大的输出误差给中间层的原则。此时,上式就简化为:

$$
left[
begin{matrix}
e_{hidden,1} \
e_{hidden,2}
end{matrix}
right]
=
left[
begin{matrix}
w_{1,1} & w_{1,2} \
w_{2,1} & w_{2,2}
end{matrix}
right]
left[
begin{matrix}

一、神经网络基本原理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$$
vec{X}=vec{W}cdotvec{I} tag{1}
$$
$$
vec{O}=Sigmoid(vec{X}) tag{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}$的一部分,其误差为这两部分误差之和;同理,中间层第二个节点的误差也是通过连接权重分割的误差之和得到。因此,通过反向传播误差的过程计算出中间层节点的误差,写成矩阵形式为:

$$
left[
begin{matrix}
e_{hidden,1} \
e_{hidden,2}
end{matrix}
right]
=
left[
begin{matrix}
frac{w_{1,1}}{w_{1,1}+w_{2,1}} &frac{w_{1,2}}{w_{1,2}+w_{2,2}} \
frac{w_{2,1}}{w_{1,1}+w_{2,1}} &frac{w_{2,2}}{w_{1,2}+w_{2,2}}
end{matrix}
right]
left[
begin{matrix}
e_{1} \
e_{2}
end{matrix}
right]
$$

再观察上式,中间层节点的误差可以看成是由权重矩阵和输出层误差通过矩阵的乘法运算得到。其中,这个公式的权重矩阵中每个元素都是一个分数,其分母是一种归一化因子,如果我们忽略每一个分数的这些归一化因子,仅仅影响的是计算出的中间层节点误差的大小,而仍然符合我们前面所提出的较大的连接权重就意味着要携带较大的输出误差给中间层的原则。此时,上式就简化为:

$$
left[
begin{matrix}
e_{hidden,1} \
e_{hidden,2}
end{matrix}
right]
=
left[
begin{matrix}
w_{1,1} & w_{1,2} \
w_{2,1} & w_{2,2}
end{matrix}
right]
left[
begin{matrix}

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 入门篇——解析Python神经网络基本原理及编程求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们