我们首先回顾一个简单的神经网络,使用两个输入,隐藏层有两个神经元(带有ReLU激活函数),以及一个预测(输出层):
每个隐藏神经元都在执行以下过程:
其中,input是我们输入的特征。weights是我们用来乘以输入的系数,我们算法的目标就是找到最优权重。Linear Weighted Sum将输入和权重的乘积相加,并加上一个偏置项b。之后经过一个激活函数增加非线性,ReLU是最常用的激活函数。
在我们上面提到的那个简单的神经网络中,hidden layer存储了多个神经元以学习数据模式。一个神经网络有可能是多层的,即包含多个hidden layers。
要训练一个神经网络,首先要让它生成预测,这被称为前向传播,即数据从第一层到最后一层(也称为输出层)遍历所有神经元的过程。以我们提到的简单的神经网络作为例子,我们首先为其创建一些任意的权重、偏置和输入:Input:
[
0.9
,
1.0
]
[0.9, 1.0]
[0.9,1.0]、输入到隐藏层的权重
W
1
W_1
W1:神经元1:
W
1
,
1
=
[
0.2
,
0.3
]
W_{1,1}= [0.2, 0.3]
W1,1=[0.2,0.3]
神经元2:
W
1
,
2
=
[
0.4
,
0.5
]
W_{1,2}=[0.4, 0.5]
W1,2=[0.4,0.5]、隐藏层偏置
b
1
:
[
0.1
,
0.2
]
b_1:[0.1, 0.2]
b1:[0.1,0.2]、隐藏层到输出层的权重
W
2
:
[
0.5
,
0.6
]
W_2:[0.5, 0.6]
W2:[0.5,0.6]、输出层偏置
b
2
:
[
0.4
]
b_2:[0.4]
b2:[0.4]。target/label设置为
[
2.0
]
[2.0]
[2.0]。
初始化之后,我们现在可以进行前向传播,过程如下:从输入到隐藏层的线性加权和
z
1
1
z¹_{1}
z11和
z
2
1
z¹_{2}
z21为:
z
1
1
=
W
1
,
1
⋅
I
n
p
u
t
+
b
1
,
1
=
[
0.2
,
0.3
]
⋅
[
0.9
,
1.0
]
+
0.1
=
0.58
z¹_{1}=W_{1,1}\cdot Input+b_{1,1}=[0.2,0.3]\cdot[0.9,1.0]+0.1=0.58
z11=W1,1⋅Input+b1,1=[0.2,0.3]⋅[0.9,1.0]+0.1=0.58
z
1
1
=
W
1
,
2
⋅
I
n
p
u
t
+
b
1
,
2
=
[
0.4
,
0.5
]
⋅
[
0.9
,
1.0
]
+
0.2
=
1.06
z¹_{1}=W_{1,2}\cdot Input+b_{1,2}=[0.4,0.5]\cdot[0.9,1.0]+0.2=1.06
z11=W1,2⋅Input+b1,2=[0.4,0.5]⋅[0.9,1.0]+0.2=1.06 然后,我们再隐藏层执行ReLU激活函数,得到
a
1
,
1
1
a^1_{1,1}
a1,11和
a
1
,
2
1
a^1_{1,2}
a1,21,然后生成整个网络的输出,这一步不涉及激活函数:
z
1
2
=
W
2
⋅
[
a
1
,
1
1
,
a
1
,
2
1
]
+
b
2
=
[
0.5
,
0.6
]
⋅
[
0.58
,
1.06
]
+
0.4
=
1.326
z^{2}_1=W_2\cdot[a^1_{1,1},a^1_{1,2}]+b_2=[0.5,0.6]\cdot[0.58,1.06]+0.4=1.326
z12=W2⋅[a1,11,a1,21]+b2=[0.5,0.6]⋅[0.58,1.06]+0.4=1.326 现在,我们就完成了第一次前向传播。这个过程可以直观地展示出来: