一、前言
前面介绍了《感知器》,类似于单个神经元细胞,现在我们用多个感知器组合成更加复杂的神经网络。本文介绍了多层神经网络通过前向传播方法,逐层计算出最终结果值的过程。
二、神经网络结构
如上图所示(亲绘 ^ _ ^),展示了两层神经网络,有n+1个输入,2个输出,包含1个隐藏层。
其他N层的神经网络以此类推就行。
输入 x = [ x 0 x 1 ⋮ x n ] x=\begin{bmatrix} x_0 \\ x_1 \\ \vdots \\ x_n \\ \end{bmatrix} x=⎣ ⎡x0x1⋮xn⎦ ⎤
第1层权重 w ( 1 ) = [ w 00 ( 1 ) w 01 ( 1 ) w 02 ( 1 ) . . . w 0 n ( 1 ) w 11 ( 1 ) w 11 ( 1 ) w 12 ( 1 ) . . . w 1 n ( 1 ) . . . . . . . . . . . . . . . w k 1 ( 1 ) w k 1 ( 1 ) w k 2 ( 1 ) . . . w k n ( 1 ) ] w^{(1)}=\begin{bmatrix} w^{(1)}_{00} & w^{(1)}_{01} & w^{(1)}_{02} & ...&w^{(1)}_{0n} \\ w^{(1)}_{11} & w^{(1)}_{11} & w^{(1)}_{12} & ...&w^{(1)}_{1n} \\ ... & ... & ... & ...&... \\ w^{(1)}_{k1} & w^{(1)}_{k1} & w^{(1)}_{k2} & ...&w^{(1)}_{kn} \\ \end{bmatrix} w(1)=⎣ ⎡w00(1)w11(1)...wk1(1)w01(1)w11(1)...wk1(1)w02(1)w12(1)...wk2(1)............w0n(1)w1n(1)...wkn(1)⎦ ⎤
第1层输出 a ( 1 ) = f 1 ( w ( 1 ) x ) = [ a 0 ( 1 ) a 1 ( 1 ) ⋮ a k ( 1 ) ] a^{(1)}=f_1(w^{(1)}x)=\begin{bmatrix} a^{(1)}_0 \\ a^{(1)}_1 \\ \vdots \\ a^{(1)}_k \\ \end{bmatrix} a(1)=f1(w(1)x)=⎣ ⎡a0(1)a1(1)⋮ak(1)⎦ ⎤
其中 f 1 f_1 f1是第1层的激活函数。
第2层权重 w ( 2 ) = [ w 00 ( 2 ) w 01 ( 2 ) w 02 ( 2 ) . . . w 0 k ( 2 ) w 11 ( 2 ) w 11 ( 2 ) w 12 ( 2 ) . . . w 1 k ( 2 ) ] w^{(2)}=\begin{bmatrix} w^{(2)}_{00} & w^{(2)}_{01} & w^{(2)}_{02} & ...&w^{(2)}_{0k} \\ w^{(2)}_{11} & w^{(2)}_{11} & w^{(2)}_{12} & ...&w^{(2)}_{1k} \end{bmatrix} w(2)=[w00(2)w11(2)w01(2)w11(2)w02(2)w12(2)......w0k(2)w1k(2)]
第2层输出 a ( 2 ) = f 2 ( w ( 2 ) a ( 1 ) ) = f 2 ( w ( 2 ) ( f 1 ( w ( 1 ) x ) ) ) = f 2 ( [ w 00 ( 2 ) w 01 ( 2 ) w 02 ( 2 ) . . . w 0 k ( 2 ) w 11 ( 2 ) w 11 ( 2 ) w 12 ( 2 ) . . . w 1 k ( 2 ) ] [ a 0 ( 1 ) a 1 ( 1 ) ⋮ a k ( 1 ) ] ) = [ a 0 ( 2 ) a 1 ( 2 ) ] a^{(2)}=f_2(w^{(2)}a^{(1)})=f_2\big(w^{(2)}(f_1(w^{(1)}x))\big)=f_2\bigg(\begin{bmatrix} w^{(2)}_{00} & w^{(2)}_{01} & w^{(2)}_{02} & ...&w^{(2)}_{0k} \\ w^{(2)}_{11} & w^{(2)}_{11} & w^{(2)}_{12} & ...&w^{(2)}_{1k} \end{bmatrix}\begin{bmatrix} a^{(1)}_0 \\ a^{(1)}_1 \\ \vdots \\ a^{(1)}_k \\ \end{bmatrix}\bigg)=\begin{bmatrix} a^{(2)}_0 \\ a^{(2)}_1 \\ \end{bmatrix} a(2)=f2(w(2)a(1))=f2(w(2)(f1(w(1)x)))=f2([w00(2)w11(2)w01(2)w11(2)w02(2)w12(2)......w0k(2)w1k(2)]⎣ ⎡a0(1)a1(1)⋮ak(1)⎦ ⎤)=[a0(2)a1(2)]
其中 f 2 f_2 f2是第2层的激活函数。
三、前向传播
以此类推,那么在第 l l l 层
a ( l ) = f l ( w ( l ) a ( l − 1 ) ) a^{(l)}=f_l(w^{(l)}a^{(l-1)}) a(l)=fl(w(l)a(l−1))
以 x → f 1 w ( 1 ) a ( 1 ) → f 2 w ( 2 ) ⋯ → f l w ( l ) a ( l ) x\xrightarrow[f_1]{w^{(1)}}a^{(1)}\xrightarrow[f_2]{w^{(2)}}\dots \xrightarrow[f_l]{w^{(l)}}a^{(l)} xw(1) f1a(1)w(2) f2⋯w(l) fla(l)的形式,神经网络通过逐层的信息传递,最终得到网络的输出 a ( l ) a^{(l)} a(l),这叫前馈神经网络
的前向传播。
四、参考资料
神经网络与深度学习-邱锡鹏
《深度学习入门:基于Python的理论与实现》