人工神经网络学习笔记(0)


何为人工神经网络

人工神经网络是模拟人脑的神经网络,用以实现人工智能的机器学习技术。我们知道,人脑可以说是世界上最复杂最精妙的系统之一,它由千亿计的神经元细胞组成。各个神经细胞相互链接,彼此之间传递电信号。从而造就了人类高于其他物种的思维能力。科学家受到人脑神经元的启发从而提出了人工神经网络的设想,使得人工智能的实现不再遥不可及。

生物神经元

人工神经网络学习笔记(0)
关键部件: 树突 & 胞体 & 轴突

  • 单个神经元的工作机制可以简单地描述为:树突接受其他神经元的神经末梢传来的电信号,信号传送到胞体并由某种机制决定是否激发下一次电信号的传递,若激发则电信号由轴突传递至神经末梢,再由神经末梢传递给其他神经元。其中,判断是否激发的机制有一大好处是可以减小神经元间微弱电信号(噪声)的干扰,使得*足够强的电信号才能激发下一次传递。

人工神经元

概览

人工神经网络学习笔记(0)

  • 由生物神经元得到的启发,人工神经元与其大同小异。上图中: x1,x2,x3,x4x_1,x_2,x_3,x_4 为该神经元树突所接受到的其他神经元传来的电信号。中间的圆圈为胞体,在胞体中将会由处理信号的机制,以决定输出信号y。

功能

  • 在之前的生物神经元中已经说道,神经元对是否激发信号传递有一个判断机制,这是因为神经元不希望传递微小的噪声信号,而只传递有意识的明显信号。只有信号强度达到了某一个阙值,才会激发电信号的传递。
    那么在人工神经元中我们如何来实现这个机制呢?
  • 这样的一个函数也许能够满足我们的需要:
    Function(x)={0xT1x>TFunction(x) = \begin{cases} 0 & x \leq T \\ 1 & x>T \end{cases}
    显而易见,这个简单的阶跃函数在输入信号大于T(阙值)时才会产生输出信号1(被激发),而较小的输入时输出为0(被抑制);我们称这样的函数为**函数。当然,**函数不会就只有这么一种。常用的还有sigmoid函数:
    Sigmoid(x)=11+exSigmoid(x) = \frac{1}{1+e^{-x}}
    函数图像:
    人工神经网络学习笔记(0)
    可以发现,sigmoid函数相对于阶跃函数而言更加平滑,自然,接近现实。我们的神经网络也将采用它。
    如此一来,我们的单个神经元模型就成型了:
    人工神经网络学习笔记(0)
    参数含义:
  • x1,x2...xmx_1 ,x_2... x_m为输入信号
  • w1,w2...wmw_1 ,w_2... w_m为权重值,表示各个输入信号对输出结果的影响力大小。对于为何引入权值可以做如下思考:你去相亲,你对未来对象的考量主要有身高,长相,身材,文化程度等,但遇到样样都好的概率实在是太底了,所以你决定适当放宽某些要求。比如如果学历高就可以降低身材长相的要求。这表示你比较注重伴侣的文化程度。因此,对方的文化程度对你的择偶有着重要的影响,其所占权重就会比较高。
  • 求和函数将计算x=mxiwi,i=1,2,...mx=\sum_{m}{x_iw_i},i=1,2,...m后将所得的值传给**函数Sigmoid即:
    Output=Sig(x)=11+e(mxiwi)Output=Sig(x)=\frac{1}{1+e^{-(\sum_{m}{x_iw_i})}}
    观察函数图不难发现,Sigmoid函数将加权求和的输入映射到0~1的值域内输出。

人工神经网络

人工神经网络学习笔记(0)
介绍完单个神经元的功能,如果把这些小部件组合起来,就成了所谓的人工神经网络。
层次结构:

  • 输入层:接受外部输入信息,可以是图片等。
  • 隐藏层:隐藏层层数不一,可根据需求来定。
  • 输出层:将结果输出到外部。

链接方式:

  • 除输入层外,每一层的每个神经元都接受其上一层所有神经元传来的信号的加权值。
  • 神经元的链接方式并不唯一,你可以创造自己的链接方式,但为了便于抽象计算编码,规则的链接方式能帮我们大忙。

一个三层神经网络示例

人工神经网络学习笔记(0)


参数释义:

  • i1,i2,i3i_1,i_2,i_3为输入信号。
  • wj,kw_{j,k}表示后层结点jj与前一层节点kk之间链接的权重值。
  • o1,o2,o3o_1,o_2,o_3为该网络输出的结果信号。

信号的前向传播:
前面我们介绍了单个人工神经元对信号的处理。但是现在网络中有多个神经元,我们当然不愿意对每一个神经元节点都进行编码计算,因此我们将其简化为矩阵运算。
人工神经网络学习笔记(0)

  1. 将输入看成一个多维列向量:
    I=[i1i2i3] I= \left[ \begin{matrix} i_1 \\ i_2 \\ i_3 \end{matrix} \right]
  2. 链接权重为一个3×33\times3的矩阵:
    Winputhidden=[w1,1w2,1w3,1w1,2w2,2w3,2w1,3w2,3w3,3] W_{input\rightarrow hidden}= \left[ \begin{matrix} w_{1,1} & w_{2,1} & w_{3,1} \\ w_{1,2} & w_{2,2} & w_{3,2} \\ w_{1,3} & w_{2,3} & w_{3,3} \end{matrix} \right]
  3. 将两者相乘得到隐藏层的输入信号:
    Ihidden=WinputhiddenI=[w1,1i1+w2,1i2+w3,1i3w1,2i1+w2,2i2+w3,2i3w1,3i1+w2,3i2+w3,3i3] I_{hidden}=W_{input\rightarrow hidden}\cdot I= \left[ \begin{matrix} w_{1,1}\cdot i_1 + w_{2,1}\cdot i_2 + w_{3,1}\cdot i_3 \\ w_{1,2}\cdot i_1 + w_{2,2}\cdot i_2 + w_{3,2}\cdot i_3 \\ w_{1,3}\cdot i_1 + w_{2,3}\cdot i_2 + w_{3,3}\cdot i_3 \end{matrix} \right]
    也即:
    Ihidden=[j=13wj,1ijj=13wj,2ijj=13wj,3ij]=[ih1,ih2,ih3]T I_{hidden}= \left[ \begin{matrix} \sum_{j=1}^{3}{w_{j,1}\cdot i_j} \\ \sum_{j=1}^{3}{w_{j,2}\cdot i_j} \\ \sum_{j=1}^{3}{w_{j,3}\cdot i_j} \end{matrix}\right]=[i_{h1},i_{h2},i_{h3}]^T
  4. 再将加权求和的信号值经过Sigmoid**函数处理我们可以得到最终的输出向量:
    Ohidden=WhiddenoutputIhidden=[Sig(j=13wj,1ohj)Sig(j=13wj,2ohj)Sig(j=13wj,3ohj)]=[oh1,oh2,oh3]T O_{hidden}=W_{hidden\rightarrow output}\cdot I_{hidden}= \left[ \begin{matrix} Sig(\sum_{j=1}^{3}{w_{j,1}\cdot o_{hj}}) \\ Sig(\sum_{j=1}^{3}{w_{j,2}\cdot o_{hj}}) \\ Sig(\sum_{j=1}^{3}{w_{j,3}\cdot o_{hj}}) \\ \end{matrix} \right]=[o_{h1},o_{h2},o_{h3}]^T
    这里需要注意的是,输入层到隐藏层的链接权重矩阵与隐藏层到输出成的链接权重矩阵是不同的矩阵。但是计算过程是一致的,因此同理可得:
    Ioutput=WhiddenoutputOhidden I_{output}=W_{hidden\rightarrow output}\cdot O_{hidden}
    网络的最终输出为:
    Ooutput=[Sig(j=13wj,1ioj)Sig(j=13wj,2ioj)Sig(j=13wj,3ioj)]=[o1,o2,o3]T O_{output}= \left[ \begin{matrix} Sig(\sum_{j=1}^{3}{w_{j,1}\cdot i_{oj}}) \\ Sig(\sum_{j=1}^{3}{w_{j,2}\cdot i_{oj}}) \\ Sig(\sum_{j=1}^{3}{w_{j,3}\cdot i_{oj}}) \\ \end{matrix} \right]=[o_1,o_2,o_3]^T
    到此,我们已经了解了神经网络中信号的前向传播机制,但是目前这个网络模型远远达不到我们的要求,它除了单纯的传播信号什么事情也做不了。显然后续我们得为其添加反馈机制,使其能够具有学习能力。