一、单个神经元
神经网络算法,是使用计算机模拟生物神经系统,来模拟人类思维方式的算法。它的基本单位就是人工神经元,通过相互连接形成一张神经网络。
下面三张图都展示了单神经元的结构:
图一中
x
1
、
x
2
、
…
、
x
n
x_1、x_2、… 、x_n
x1、x2、…、xn表示输入,
w
1
、
w
2
、
…
、
w
n
~w_1、w_2、…、w_n
w1、w2、…、wn表示权重参数,b表示偏置项,每个神经元都使用
∑
i
=
1
n
w
i
x
i
+
b
\sum_{i=1}^n w_ix_i + b
∑i=1nwixi+b 进行加权求和,得到该结点的一个输出值。
此时我们只做了一个线性操作,因此只能进行线性分类,要想进行非线性分类,就要使用后面的激活函数
h
(
z
)
h(z)
h(z),最终得到一个结果 a,此时 a 可以直接输出也可以作为下一个神经元的输入,下一个神经元也会重复当前的操作,直到输出。
图二中的各种参数和其他两幅图基本类似,其中
θ
\theta
θ 表示阈值或者偏差值,是指该激活神经元的难易程度。
图三与图一和图二基本类似,
σ
(
z
)
\sigma(z)
σ(z) 表示Sigmoid激活函数,改图还展示了一个神经元结点的计算步骤,即通过函数
w
T
x
+
b
w^Tx+b
wTx+b 计算出 z, 在通过激活函数
σ
(
z
)
\sigma(z)
σ(z) 计算出 a,而 a 就是输出
y
^
\hat{y}
y^。
二、一个隐层的神经网络
如图
从图中可以看出该神经元有3个输入,2个网络层、一个隐藏层,该隐藏层中有4个结点。
其实,对于该神经网络的计算就是按照单个神经元的计算步骤进行重复计算,下面是隐藏层第一个结点的计算过程:
按照单个神经元中图三所示的计算步骤,先计算结点中左边的
z
1
[
1
]
=
w
1
[
1
]
T
x
+
b
1
[
1
]
z^{[1]}_1=w^{[1]T}_1x+b^{[1]}_1
z1[1]=w1[1]Tx+b1[1],然后再计算右边的
a
1
[
1
]
=
σ
(
z
1
[
1
]
)
a^{[1]}_1 = \sigma(z^{[1]}_1)
a1[1]=σ(z1[1]),图中
z
1
[
1
]
z^{[1]}_1
z1[1]上标 1 表示第一层网络,下标 1 表示该网络层中的第一个结点。
隐藏层第二个结点的计算过程如下:
和隐藏层第一个结点计算步骤相同,先计算结点中左边的
z
2
[
1
]
=
w
2
[
1
]
T
x
+
b
2
[
1
]
z^{[1]}_2=w^{[1]T}_2x+b^{[1]}_2
z2[1]=w2[1]Tx+b2[1],然后再计算右边的
a
1
[
1
]
=
σ
(
z
2
[
1
]
)
a^{[1]}_1 = \sigma(z^{[1]}_2)
a1[1]=σ(z2[1]),图中
z
2
[
1
]
z^{[1]}_2
z2[1]下标 2 表示该网络层中的第二个结点。
分别对剩下的两个结点进行计算后可得:
对于这种重复型计算,我们可以使用
f
o
r
for
for 循环,但是
f
o
r
for
for 循环计算起来比较复杂。于是,我们可以使用矩阵来计算。首先,我们需要构建矩阵,可以将
z
j
[
i
]
、
w
j
[
i
]
、
a
j
[
i
]
、
b
j
[
i
]
z^{[i]}_j、w^{[i]}_j、a^{[i]}_j、b^{[i]}_j
zj[i]、wj[i]、aj[i]、bj[i] 堆叠起来构成矩阵
Z
、
W
、
A
、
B
Z、W、A、B
Z、W、A、B,最终使用矩阵来表示上面隐藏层四个结点的计算过程:
可以将输入
x
1
、
x
2
、
x
3
x_1、x_2、x_3
x1、x2、x3 堆叠成矩阵
a
[
0
]
a^{[0]}
a[0],则将上面矩阵计算化简可得:
因此,在计算一个但隐层神经网络时,按照上面最终化简的矩阵算法计算就可以了。