定义神经网络结构

首先定义可以完成非线性二分类的神经网络结构图,如图10-6所示。

非线性二分类实现 - 图1

  • 输入层两个特征值x1, x2

$$
X=\begin{pmatrix} x_1 & x_2 \end{pmatrix}
$$

  • 隐层2x2的权重矩阵W1

$$
W1=\begin{pmatrix}
w^1{11} & w^1{12} \
w^1{21} & w^1{22}
\end{pmatrix}
$$

  • 隐层1x2的偏移矩阵B1

$$
B1=\begin{pmatrix}
b^1{1} & b^1{2}
\end{pmatrix}
$$

  • 隐层由两个神经元构成

$$
Z1=\begin{pmatrix} z1{1} & z1{2} \end{pmatrix}
$$

$$
A1=\begin{pmatrix} a1{1} & a1{2} \end{pmatrix}
$$

  • 输出层2x1的权重矩阵W2

$$
W2=\begin{pmatrix}
w^2{11} \
w^2
{21}
\end{pmatrix}
$$

  • 输出层1x1的偏移矩阵B2

$$
B2=\begin{pmatrix}
b^2_{1}
\end{pmatrix}
$$

  • 输出层有一个神经元使用Logisitc函数进行分类

$$
Z2=\begin{pmatrix}
z^2_{1}
\end{pmatrix}
$$

$$
A2=\begin{pmatrix}
a^2_{1}
\end{pmatrix}
$$

对于一般的用于二分类的双层神经网络可以是图10-7的样子。

非线性二分类实现 - 图2

输入特征值可以有很多,隐层单元也可以有很多,输出单元只有一个,且后面要接Logistic分类函数和二分类交叉熵损失函数。

前向计算

根据网络结构,我们有了前向计算过程图10-8。

非线性二分类实现 - 图3

第一层

  • 线性计算

$$
z^1{1} = x{1} w^1{11} + x{2} w^1{21} + b^1{1}
$$

$$
z^1{2} = x{1} w^1{12} + x{2} w^1{22} + b^1{2}
$$

$$
Z1 = X \cdot W1 + B1
$$

  • 激活函数

$$
a^1{1} = Sigmoid(z^1{1})
$$

$$
a^1{2} = Sigmoid(z^1{2})
$$

$$
A1=\begin{pmatrix}
a^1{1} & a^1{2}
\end{pmatrix}
$$

第二层

  • 线性计算

$$
z^21 = a^1{1} w^2{11} + a^1{2} w^2{21} + b^2{1}
$$

$$
Z2 = A1 \cdot W2 + B2
$$

  • 分类函数

$$
a^2_1 = Logistic(z^2_1)
$$

$$
A2 = Logistic(Z2)
$$

损失函数

我们把异或问题归类成二分类问题,所以使用二分类交叉熵损失函数:

loss = -Y \ln A2 + (1-Y) \ln (1-A2) \tag{12}

在二分类问题中,Y、A2都是一个单一的数值,而非矩阵,但是为了前后统一,我们可以把它们看作是一个1x1的矩阵。

反向传播

图10-9展示了反向传播的过程。

非线性二分类实现 - 图4

求损失函数对输出层的反向误差

对损失函数求导,可以得到损失函数对输出层的梯度值,即图10-9中的Z2部分。

根据公式12,求A2和Z2的导数(此处A2、Z2、Y可以看作是标量,以方便求导):

\begin{aligned} {\partial loss \over \partial Z2}={\partial loss \over \partial A2}{\partial A2 \over \partial Z2} \ ={A2-Y \over A2(1-A2)} \cdot A2(1-A2) \ =A2-Y \rightarrow dZ2 \end{aligned} \tag{13}

求W2和B2的梯度

$$
{\partial loss \over \partial W2}=\begin{pmatrix} {\partial loss \over \partial w^2{11}} \ \ {\partial loss \over \partial w^2{21}}\end{pmatrix}=\begin{pmatrix} {\partial loss \over \partial Z2}{\partial z2 \over \partial w^2{11}} \ \ {\partial loss \over \partial Z2}{\partial z2 \over \partial w^2{21}}\end{pmatrix}
$$

$$
=\begin{pmatrix}
dZ2 \cdot a^1{1} \
dZ2 \cdot a^1
{2}
\end{pmatrix}
=\begin{pmatrix}
a^1{1} \ a^1{2}
\end{pmatrix}dZ2
$$

$$
=A1^T \cdot dZ2 => dW2 \tag{14}
$$

$$
{\partial{loss} \over \partial{B2}}=dZ2 => dB2 \tag{15}
$$

求损失函数对隐层的反向误差

$$
\frac{\partial{loss}}{\partial{A1}} = \begin{pmatrix} {\partial loss \over \partial a^1{1}} & {\partial loss \over \partial a^1{2}} \end{pmatrix}
$$

$$
=\begin{pmatrix}
\frac{\partial{loss}}{\partial{Z2}} \frac{\partial{Z2}}{\partial{a^1{1}}} & \frac{\partial{loss}}{\partial{Z2}} \frac{\partial{Z2}}{\partial{a^1{2}}}
\end{pmatrix}
$$

$$
=\begin{pmatrix}
dZ2 \cdot w^2{11} & dZ2 \cdot w^2{21}
\end{pmatrix}
$$

$$
=dZ2 \cdot \begin{pmatrix}
w^2{11} & w^2{21}
\end{pmatrix}
$$

$$
=dZ2 \cdot W2^T \tag{16}
$$

$$
{\partial A1 \over \partial Z1}=A1 \odot (1-A1) => dA1\tag{17}
$$

所以最后到达z1的误差矩阵是:

\begin{aligned} {\partial loss \over \partial Z1}={\partial loss \over \partial A1}{\partial A1 \over \partial Z1} \ =dZ2 \cdot W2^T \odot dA1 \rightarrow dZ1 \end{aligned} \tag{18}

有了dZ1后,再向前求W1和B1的误差,我们直接列在下面了:

$$
dW1=X^T \cdot dZ1 \tag{19}
$$

$$
dB1=dZ1 \tag{20}
$$