提出问题

有如下1000个样本和标签:

样本序号 1 2 3 1000
x1 0.0091867 0.10245588 -0.41033773 -0.20625644
x2 0.00666677 0.20947882 0.18172314 0.19683694
y 1 2 3 2

还好这个数据只有两个特征,所以我们可以用可视化的方法展示,如下图:
深度学习基础之-5.2非线性分类-多分类

定义神经网络结构

深度学习基础之-5.2非线性分类-多分类

  • 输入层两个特征值x1, x2
  • 隐层8x2的权重矩阵和8x1的偏移矩阵
  • 隐层由8个神经元构成
  • 输出层有3个神经元负责3分类,使用Softmax函数进行分类

前向计算

深度学习基础之-5.2非线性分类-多分类
单样本矩阵运算过程: W1(8×2)X(2×1)+B1(8×1)=>Z1(8×1)W_1^{(8 \times 2)} \cdot X^{(2 \times 1)} + B_1^{(8 \times 1)} => Z_1^{(8 \times 1)} Sigmoid(Z1)=>A1(8×1)Sigmoid(Z1) => A_1^{(8 \times 1)} W2(3×8)×A1(8×1)+B2(3×1)=>Z2(3×1)W_2^{(3 \times 8)} \times A_1^{(8 \times 1)} + B_2^{(3 \times 1)} => Z_2^{(3 \times 1)} Softmax(Z2)=>A2(3×1)Softmax(Z2) => A_2^{(3 \times 1)}

损失函数

使用多分类交叉熵损失函数:

J(w,b)=1mi=1mj=1nyijln(aij) J(w,b) = -{1 \over m} \sum^m_{i=1} \sum^n_{j=1} y_{ij} \ln (a_{ij})

m为样本数,n为类别数。

可以简写为:

J=YlnA J = -Y \ln A

反向传播

深度学习基础之-5.2非线性分类-多分类
JA2A2Z2=A2Y=>dZ2\frac{\partial{J}}{\partial{A2}} \frac{\partial{A2}}{\partial{Z2}} = A2-Y => dZ2

虽然这个求导结果和二分类一样,但是过程截然不同,详情请看6.4。

后续的梯度求解与9.1节一样,只拷贝结论在这里:

(2)dW2=dZ2×A1TdW2=dZ2 \times A1^T \tag{2}

(3)dB2=dZ2dB2=dZ2 \tag{3}

(4)W2T×dZ2A1(1A1)=>dZ1W2^T \times dZ2 \odot A1 \odot (1-A1) => dZ1 \tag{4}

(5)dW1=dZ1XTdW1= dZ1 \cdot X^T \tag{5}

(6)dB1=dZ1dB1= dZ1 \tag{6}
迭代了10000次,没有到底损失函数小于0.06的条件。
分类结果图示:
深度学习基础之-5.2非线性分类-多分类

多分类的工作原理

使用以下参数测试:

  • eta = 0.1
  • batch_size = 10
  • n_hidden = 3
  • eps = 0.005

如果隐层只使用2个神经元,只能得到近似的线性结果,如下图:
深度学习基础之-5.2非线性分类-多分类
所以,隐层必须用3个神经元以上。以下是结果:

多分类损失函数值 分类结果(待优化)
深度学习基础之-5.2非线性分类-多分类 深度学习基础之-5.2非线性分类-多分类

https://github.com/microsoft/ai-edu/blob/master/B-教学案例与实践/B6-神经网络基本原理简明教程/11.2-理解多分类的工作原理.md
https://github.com/microsoft/ai-edu/blob/master/B-教学案例与实践/B6-神经网络基本原理简明教程/11.1-非线性多分类.md

相关文章: