神经网络(三)

一、单个神经元

    神经网络算法,是使用计算机模拟生物神经系统,来模拟人类思维方式的算法。它的基本单位就是人工神经元,通过相互连接形成一张神经网络。

    下面三张图都展示了单神经元的结构:

    图一中x1x2xnx_1、x_2、… 、x_n表示输入, w1w2wn~w_1、w_2、…、w_n表示权重参数,b表示偏置项,每个神经元都使用 i=1nwixi+b\sum_{i=1}^n w_ix_i + b 进行加权求和,得到该结点的一个输出值。
    此时我们只做了一个线性操作,因此只能进行线性分类,要想进行非线性分类,就要使用后面的**函数 h(z)h(z),最终得到一个结果 a,此时 a 可以直接输出也可以作为下一个神经元的输入,下一个神经元也会重复当前的操作,直到输出。
神经网络(三)

    图二中的各种参数和其他两幅图基本类似,其中 θ\theta 表示阈值或者偏差值,是指该**神经元的难易程度。
神经网络(三)

    图三与图一和图二基本类似,σ(z)\sigma(z) 表示Sigmoid**函数,改图还展示了一个神经元结点的计算步骤,即通过函数 wTx+bw^Tx+b 计算出 z, 在通过**函数 σ(z)\sigma(z) 计算出 a,而 a 就是输出 y^\hat{y}
神经网络(三)

二、一个隐层的神经网络

如图
神经网络(三)
    从图中可以看出该神经元有3个输入,2个网络层、一个隐藏层,该隐藏层中有4个结点。
    其实,对于该神经网络的计算就是按照单个神经元的计算步骤进行重复计算,下面是隐藏层第一个结点的计算过程:
神经网络(三)
    按照单个神经元中图三所示的计算步骤,先计算结点中左边的 z1[1]=w1[1]Tx+b1[1]z^{[1]}_1=w^{[1]T}_1x+b^{[1]}_1,然后再计算右边的 a1[1]=σ(z1[1])a^{[1]}_1 = \sigma(z^{[1]}_1),图中 z1[1]z^{[1]}_1上标 1 表示第一层网络,下标 1 表示该网络层中的第一个结点。

隐藏层第二个结点的计算过程如下:
神经网络(三)
    和隐藏层第一个结点计算步骤相同,先计算结点中左边的 z2[1]=w2[1]Tx+b2[1]z^{[1]}_2=w^{[1]T}_2x+b^{[1]}_2,然后再计算右边的 a1[1]=σ(z2[1])a^{[1]}_1 = \sigma(z^{[1]}_2),图中 z2[1]z^{[1]}_2下标 2 表示该网络层中的第二个结点。

    分别对剩下的两个结点进行计算后可得:
神经网络(三)
    对于这种重复型计算,我们可以使用 forfor 循环,但是 forfor 循环计算起来比较复杂。于是,我们可以使用矩阵来计算。首先,我们需要构建矩阵,可以将 zj[i]wj[i]aj[i]bj[i]z^{[i]}_j、w^{[i]}_j、a^{[i]}_j、b^{[i]}_j 堆叠起来构成矩阵ZWABZ、W、A、B,最终使用矩阵来表示上面隐藏层四个结点的计算过程:
神经网络(三)
神经网络(三)

神经网络(三)
    可以将输入x1x2x3x_1、x_2、x_3 堆叠成矩阵 a[0]a^{[0]},则将上面矩阵计算化简可得:
神经网络(三)
    因此,在计算一个但隐层神经网络时,按照上面最终化简的矩阵算法计算就可以了。