跳转至

10.2 非线性二分类实现

10.2 非线性二分类实现⚓︎

10.2.1 定义神经网络结构⚓︎

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

图10-6 非线性二分类神经网络结构图

  • 输入层两个特征值x1,x2 $$ X=\begin{pmatrix} x_1 & x_2 \end{pmatrix} $$
  • 隐层2×2的权重矩阵W1 $$ W1=\begin{pmatrix} w1_{11} & w1_{12} \\ w1_{21} & w1_{22} \end{pmatrix} $$
  • 隐层1×2的偏移矩阵B1
B1=(b11b12)
  • 隐层由两个神经元构成 $$ Z1=\begin{pmatrix} z1_{1} & z1_{2} \end{pmatrix} $$ $$ A1=\begin{pmatrix} a1_{1} & a1_{2} \end{pmatrix} $$
  • 输出层2×1的权重矩阵W2 $$ W2=\begin{pmatrix} w2_{11} \\ w2_{21}
    \end{pmatrix} $$

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

B2=(b21)
  • 输出层有一个神经元使用Logistic函数进行分类 $$ Z2=\begin{pmatrix} z2_{1} \end{pmatrix} $$ $$ A2=\begin{pmatrix} a2_{1} \end{pmatrix} $$

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

图10-7 通用的二分类神经网络结构图

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

10.2.2 前向计算⚓︎

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

图10-8 前向计算过程

第一层⚓︎

  • 线性计算
z11=x1w111+x2w121+b11$$$$z12=x1w112+x2w122+b12$$$$Z1=XW1+B1
  • 激活函数
a11=Sigmoid(z11)$$$$a12=Sigmoid(z12)$$$$A1=(a11a12)=Sigmoid(Z1)

第二层⚓︎

  • 线性计算
z21=a11w211+a12w221+b21$$$$Z2=A1W2+B2
  • 分类函数
a21=Logistic(z21)$$$$A2=Logistic(Z2)

损失函数⚓︎

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

(12)loss=YlnA2+(1Y)ln(1A2)

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

10.2.3 反向传播⚓︎

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

图10-9 反向传播过程

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

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

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

(13)lossZ2=lossA2A2Z2=A2YA2(1A2)A2(1A2)=A2YdZ2

W2B2的梯度⚓︎

Multiple \tag

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

(16)lossA1=(lossa11lossa12)=(lossZ2Z2a11lossZ2Z2a12)=(dZ2w211dZ2w221)=dZ2(w211w221)=dZ2W2
(17)A1Z1=A1(1A1)dA1

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

(18)lossZ1=lossA1A1Z1=dZ2W2dA1dZ1

有了dZ1后,再向前求W1B1的误差,就和第5章中一样了,我们直接列在下面:

Multiple \tag
0 comments
Anonymous
Error: Not Found.
Markdown is supported

Be the first person to leave a comment!