前向传播算法就是: 将上一层的输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止
在正式介绍前向传播前,先简单介绍计算图(Computational Graph)的概念。
y = w ∗ x + b \mathrm{y}=\mathrm{w} * \mathrm{x}+\mathrm{b} y=w∗x+b
可以用下面的有向无环图表示。
假设一个三层的神经网络,有两个输入和一个输出,每一个层都是全连接层和激活函数层
第一层输入为
Y ( 1 ) = X ( 1 ) W ( 1 ) + b ( 1 ) Y^{(1)}=X^{(1)} W^{(1)}+b^{(1)} Y(1)=X(1)W(1)+b(1)
[ y 1 , 1 ( 1 ) y 1 , 2 ( 1 ) y 1 , 3 ( 1 ) y 1 , 4 ( 1 ) ] = [ x 1 , 1 ( 1 ) x 1 , 2 ( 1 ) ] [ w 1 , 1 ( 1 ) w 1 , 2 ( 1 ) w 1 , 3 ( 1 ) w 1 , 4 ( 1 ) w 2 , 1 ( 1 ) w 2 , 2 ( 1 ) w 2 , 3 ( 1 ) w 2 , 4 ( 1 ) ] + [ b 1 , 1 ( 1 ) b 1 , 2 ( 1 ) b 1 , 3 ( 1 ) b 1 , 4 ( 1 ) ] \left[y(1)1,1y(1)1,2y(1)1,3y(1)1,4\right]=\left[x(1)1,1x(1)1,2\right]\left[w(1)1,1w(1)1,2w(1)1,3w(1)1,4w(1)2,1w(1)2,2w(1)2,3w(1)2,4\right]+\left[b(1)1,1b(1)1,2b(1)1,3b(1)1,4\right] [y1,1(1)y1,2(1)y1,3(1)y1,4(1)]=[x1,1(1)x1,2(1)][w1,1(1)w2,1(1)w1,2(1)w2,2(1)w1,3(1)w2,3(1)w1,4(1)w2,4(1)]+[b1,1(1)b1,2(1)b1,3(1)b1,4(1)]
其中w和b的数值是神经网络通过学习得到的
之后我们可以得到第一层的输出,第一全连接层的运算过程
[ 1.12 1.28 0.32 − 0.36 ] = [ 0.4 0.6 ] [ 1.1 − 0.3 − 0.1 − 0.6 − 0.2 0.5 1.1 − 0.2 ] + [ 0.8 1.1 − 0.3 0.0 ] \left[1.121.280.32−0.36\right]=\left[0.40.6\right]\left[1.1−0.3−0.1−0.6−0.20.51.1−0.2\right]+\left[0.81.1−0.30.0\right] [1.121.280.32−0.36]=[0.40.6][1.1−0.2−0.30.5−0.11.1−0.6−0.2]+[0.81.1−0.30.0]
接着是激活函数层,激活函数用于提供非线性性,我们以ReLU函数为例
https://baike.baidu.com/item/ReLU 函数/22689567
y = ReLU ( x ) = { 0 , x < 0 x , x ⩾ 0 y=\operatorname{ReLU}(x)=\left\{0,x<0x,x⩾0\right. y=ReLU(x)={0,x,x<0x⩾0
ReLU函数相当于保留正值,将负值强制置0
第二层输出为
Y ( 2 ) = X ( 2 ) W ( 2 ) + b ( 2 ) Y^{(2)}=X^{(2)} W^{(2)}+b^{(2)} Y(2)=X(2)W(2)+b(2)
[ y 1 , 1 ( 2 ) y 1 , 2 ( 2 ) y 1 , 3 ( 2 ) y 1 , 4 ( 2 ) ] = [ x 1 , 1 ( 2 ) x 1 , 2 ( 2 ) x 1 , 3 ( 2 ) x 1 , 4 ( 2 ) ] [ w 1 , 1 ( 2 ) w 1 , 2 ( 2 ) w 1 , 3 ( 2 ) w 1 , 4 ( 2 ) w 2 , 1 ( 2 ) w 2 , 2 ( 2 ) w 2 , 3 ( 2 ) w 2 , 4 ( 2 ) w 3 , 1 ( 2 ) w 3 , 2 ( 2 ) w 3 , 3 ( 2 ) w 3 , 4 ( 2 ) w 4 , 1 ( 2 ) w 4 , 2 ( 2 ) w 4 , 3 ( 2 ) w 4 , 4 ( 2 ) ] + [ b 1 , 1 ( 2 ) b 1 , 2 ( 2 ) b 1 , 3 ( 2 ) b 1 , 4 ( 2 ) ] \left[y(2)1,1y(2)1,2y(2)1,3y(2)1,4\right]=\left[x(2)1,1x(2)1,2x(2)1,3x(2)1,4\right]\left[w(2)1,1w(2)1,2w(2)1,3w(2)1,4w(2)2,1w(2)2,2w(2)2,3w(2)2,4w(2)3,1w(2)3,2w(2)3,3w(2)3,4w(2)4,1w(2)4,2w(2)4,3w(2)4,4\right]+\left[b(2)1,1b(2)1,2b(2)1,3b(2)1,4\right] [y1,1(2)y1,2(2)y1,3(2)y1,4(2)]=[x1,1(2)x1,2(2)x1,3(2)x1,4(2)]⎣⎢⎢⎢⎡w1,1(2)w2,1(2)w3,1(2)w4,1(2)w1,2(2)w2,2(2)w3,2(2)w4,2(2)w1,3(2)w2,3(2)w3,3(2)w4,3(2)w1,4(2)w2,4(2)w3,4(2)w4,4(2)⎦⎥⎥⎥⎤+[b1,1(2)b1,2(2)b1,3(2)b1,4(2)]
x2的值由上一层的输出得到,最后得到第二全连接层的输出
在经过激活函数层
最后一层为输出层
[ y 1 , 1 ( 3 ) ] = [ x 1 , 1 ( 3 ) x 1 , 2 ( 3 ) x 1 , 3 ( 3 ) x 1 , 4 ( 3 ) ] [ w 1 , 1 ( 3 ) w 2 , 1 ( 3 ) w 3 , 1 ( 3 ) w 4 , 1 ( 3 ) ] + [ b 1 , 1 ( 3 ) ] \left[y(3)1,1\right]=\left[x(3)1,1x(3)1,2x(3)1,3x(3)1,4\right]\left[w(3)1,1w(3)2,1w(3)3,1w(3)4,1\right]+\left[b_{1,1}^{(3)}\right] [y1,1(3)]=[x1,1(3)x1,2(3)x1,3(3)x1,4(3)]⎣⎢⎢⎢⎡w1,1(3)w2,1(3)w3,1(3)w4,1(3)⎦⎥⎥⎥⎤+[b1,1(3)]
最终输出为
这就是整个网络的前向传播过程