基本结构
一个最简单的前馈神经网络通常包含三类层:
- 输入层 (Input Layer)
- 隐藏层 (Hidden Layer)
- 输出层 (Output Layer)
一个简易神经网络结构如下图所示:

其中每一个圆圈就代表一个神经元节点。图中的 x 就是输入向量,每一层输出的向量是激活值,下一层的输入就是上一层的输出。其中每一层都会做一个线性变换,如$z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]}$,然后将线性变换后的值代入激活函数,如$a^{[l]} = g(z^{[l]})$,常见的激活函数有 Sigmoid 和 ReLU 函数。
综上完整的传导如下:
$$
a^{[l]} = g\left(W^{[l]}a^{[l-1]} + b^{[l]}\right)
$$
其中的 W 是权重矩阵,其作用是决定上一层中每个神经元对当前层神经元的影响程度。如何直观理解?
假设上一层有四个神经元,输出的是一个 $4 \times 1$ 的矩阵,当前层有三个神经元,那么这一层的 W 就是一个 $3 \times 4$ 的矩阵
$$
W^{[l]} =
\begin{bmatrix}
w_{11} & w_{12} & w_{13} & w_{14} \\
w_{21} & w_{22} & w_{23} & w_{24} \\
w_{31} & w_{32} & w_{33} & w_{34}
\end{bmatrix}
$$
其中每一行代表一个神经元,例如第一行
$$
[w_{11}, w_{12}, w_{13}, w_{14}]
$$
表示当前层第一个神经元,计算如下
$$
z_1 = w_{11}a_1 + w_{12}a_2 + w_{13}a_3 + w_{14}a_4 + b_1
$$
然后再计算激活函数
$$
a_1 = g(z_1)
$$
前向传播的具体解释
如下所示是一个简易两层网络,第一层由 3 个神经元组成,输出层由一个神经元组成。

假设输入数据维度为 2,那么就是一个长度为 2 的向量,在第一层的计算过程中,程序会做以下几件事:先依次计算每个神经元的线性变换的激活值,然后再将其组成第一层神经元个数长度的向量,输入给第二层。

第二层的输出使用这个公式

使用 tensorflow 实际构建一个神经网络
在 Tensorflow 中,可以使用 Dense 创建一个层,其中包含了单元数、激活函数类型等,接下来使用 Sequential 将多个层整合起来,在使用 compile 赋予更多信息,使用 fit 训练, predict 前向推导。基本过程如下图所示:

如下代码就展示了如何构建一个三层模型:
1 | model = Sequential([ |
在这段代码中,第一段决定了这个神经网络有多少层,每一层有多少个单元,这一层用的是什么激活函数。第二段编译模型,并告诉他该用什么损失函数,在这段代码中使用的是二元交叉熵损失。第三段就是调用 fit 函数来最小化代价函数。
在这段代码中所搭建的神经网络架构如下所示:
