深度学习基础之-5.1非线性分类-二分类(神经元解决异或问题)

逻辑异或门

样本1234
x10011
x20101
y0110

理想分类结果

在这里插入图片描述
实践证明两层神经网络可以解决问题。我们可以模拟这个思路,用两层神经网络搭建如下模型:在这里插入图片描述

  • 输入层两个特征值x1, x2 {(0, 0),(0, 1),(1,0),(1, 1)}
  • 隐层2x2的权重矩阵和2x1的偏移矩阵
  • 隐层由两个神经元构成
  • 输出层有一个神经元使用Sigmoid函数进行分类

前向计算

在这里插入图片描述
(10) Z 1 = W 1 ⋅ X + B 1 Z1 = W1 \cdot X + B1 \tag{10} Z1=W1X+B1(10) (11) A 1 = S i g m o i d ( Z 1 ) A1 = Sigmoid(Z1) \tag{11} A1=Sigmoid(Z1)(11) (12) Z 2 = W 2 ⋅ A 1 + B 2 Z2 = W2 \cdot A1 + B2 \tag{12} Z2=W2A1+B2(12) (13) A 2 = S i g m o i d ( Z 2 ) A2 = Sigmoid(Z2) \tag{13} A2=Sigmoid(Z2)(13)
注意:公式13的Sigmoid在这里不是激活函数,不是激活函数,不是激活函数(重要的概念说三遍),是用作分类函数。

损失函数

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

(14) J ( w , b ) = − 1 m ∑ i = 1 m y i ln ⁡ ( a i ) + ( 1 − y i ) ln ⁡ ( 1 − a i ) J(w,b) = -{1 \over m} \sum^m_{i=1}y_i \ln (a_i)+(1-y_i) \ln (1-a_i) \tag{14} J(w,b)=m1i=1myiln(ai)+(1yi)ln(1ai)(14)

可以简写为:

(15) J = − Y ln ⁡ A + ( 1 − Y ) ln ⁡ ( 1 − A ) J = -Y \ln A + (1-Y) \ln (1-A) \tag{15} J=YlnA+(1Y)ln(1A)(15)

反向传播

在这里插入图片描述

梯度生成

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

根据公式15,求A2和Z2的导数:

∂ J ∂ Z 2 = ∂ J ∂ A 2 ⋅ ∂ A 2 ∂ Z 2 {\partial{J} \over \partial{Z2}}={\partial{J} \over \partial{A2}} \cdot {\partial{A2} \over \partial{Z2}} Z2J=A2JZ2A2 = A 2 − Y A 2 ( 1 − A 2 ) ⋅ A 2 ( 1 − A 2 ) = {A2-Y \over A2(1-A2)} \cdot A2(1-A2) =A2(1A2)A2YA2(1A2) (15) = A 2 − Y = > d Z 2 =A2-Y \tag{15} => dZ2 =A2Y=>dZ2(15)

求W2和B2的梯度

(16) ∂ J ∂ W 2 = ∂ J ∂ Z 2 ∂ Z 2 ∂ W 2 = d Z 2 × A 1 T = > d W 2 {\partial{J} \over \partial{W2}}={\partial{J} \over \partial{Z2}}{\partial{Z2} \over \partial{W2}}=dZ2 \times A1^T => dW2\tag{16} W2J=Z2JW2Z2=dZ2×A1T=>dW2(16)

(17) ∂ J ∂ B 2 = ∂ J ∂ Z 2 ∂ Z 2 ∂ B 2 = d Z 2 = > d B 2 {\partial{J} \over \partial{B2}}={\partial{J} \over \partial{Z2}}{\partial{Z2} \over \partial{B2}}=dZ2 => dB2 \tag{17} B2J=Z2JB2Z2=dZ2=>dB2(17)

求损失函数对隐层的梯度

∂ J ∂ Z 1 = ∂ J ∂ Z 2 ⋅ ∂ Z 2 ∂ A 1 ⋅ ∂ A 1 ∂ Z 1 \frac{\partial{J}}{\partial{Z1}} = \frac{\partial{J}}{\partial{Z2}} \cdot \frac{\partial{Z2}}{\partial{A1}} \cdot \frac{\partial{A1}}{\partial{Z1}} Z1J=Z2JA1Z2Z1A1 (18) = W 2 T × d Z 2 ⊙ A 1 ⊙ ( 1 − A 1 ) = > d Z 1 =W2^T \times dZ2 \odot A1 \odot (1-A1)=>dZ1 \tag{18} =W2T×dZ2A1(1A1)=>dZ1(18)

求W1和B1的梯度

(19) ∂ J ∂ W 1 = ∂ J ∂ Z 1 ∂ Z 1 ∂ W 1 = d Z 1 × X T = > d W 1 \frac{\partial{J}}{\partial{W1}} = \frac{\partial{J}}{\partial{Z1}} \frac{\partial{Z1}}{\partial{W1}}= dZ1 \times X^T => dW1\tag{19} W1J=Z1JW1Z1=dZ1×XT=>dW1(19)

(20) ∂ J ∂ B 1 = ∂ J ∂ Z 1 ∂ Z 1 ∂ B 1 = d Z 1 = > d B 1 \frac{\partial{J}}{\partial{B1}} = \frac{\partial{J}}{\partial{Z1}} \frac{\partial{Z1}}{\partial{B1}}= dZ1 => dB1\tag{20} B1J=Z1JB1Z1=dZ1=>dB1(20)

运行结果

w=[[-7.00777143 -7.01121059]
 [ 5.51518649  5.51451102]]
b=[[ 2.86885647]
 [-8.53863829]]

在这里插入图片描述

隐层神经元数量的选择

一般来说,隐层的神经元数量要大于等于输入特征的数量,在本例中是2。我们从下图可以看到,如果隐层只有一个神经元的话,是不能完成分类任务的。

在这里插入图片描述在这里插入图片描述
1个神经元2个神经元,迭代6040次到达精度要求
在这里插入图片描述在这里插入图片描述
3个神经元,迭代5228次到达精度要求4个神经元,迭代4331次到达精度要求
在这里插入图片描述在这里插入图片描述
6个神经元,迭代3903次到达精度要求8个神经元,迭代4107次到达精度要求
在这里插入图片描述在这里插入图片描述
12个神经元,迭代4667次到达精度要求16个神经元,迭代4402次到达精度要求

隐层有两个神经元的工作原理

以下是隐层为两个神经元时的结果输出:

w=[[-7.00777143 -7.01121059]
 [ 5.51518649  5.51451102]]
b=[[ 2.86885647]
 [-8.53863829]]

我们使用上面的权重矩阵结果,把4个样本数据代入到前向计算公式中,依次求得Z1,A1,Z2,A2的值,并列表如下:

1234
x10011
x20101
y0110
Z12.86885647-4.14235412-4.13891495-11.15012554
-8.53863829-3.02412727-3.02345182.49105922
A19.46285253e-011.56370110e-021.56900366e-021.43732759e-05
1.95718330e-044.63477089e-024.63775738e-029.23512657e-01
Z2-5.458510035.203479075.20247396-5.3417112
A20.004241830.994532650.994527180.00476486

完成了分割任务的二维图示分析

在这里插入图片描述在这里插入图片描述
1) 原始x1做横轴,x2做纵轴的4个点,处于4个角落2) 线性变换结果,用Z1[0,0]做横轴,Z1[1,0]做纵轴的4个点,两个绿点接近重合
在这里插入图片描述在这里插入图片描述
3) Z1的Sigmoid结果,用A1[0,0]做横轴,A1[1,0]做纵轴的4个点,两个绿点接近重合4) A1点经过第二次线性变化,4个点归类到横轴上的0点两侧,位置大概是-5.7和+5.7处(Z2的位置)。A2可以匹配到Sigmoid曲线上

完成学习的过程

损失函数值的变化与分类效果对比

损失函数值
在这里插入图片描述在这里插入图片描述
500次迭代时损失值为0.67500次迭代两种颜色基本平分
在这里插入图片描述在这里插入图片描述
800次迭代时损失值为0.53800次迭代粉色区域逐渐向左下方移动
在这里插入图片描述在这里插入图片描述
1000次迭代时损失值为0.3461000次迭代右上角出现黄色区域
在这里插入图片描述在这里插入图片描述
6000次迭代时损失值为0.0056000次迭代完美分割

Z1和A1的演进

Z1为线性变换结果,A1是Z1的Sigmoid压缩结果。

Z1:值域较大A1:值域在[0,1]之内
在这里插入图片描述在这里插入图片描述
500次迭代时两个绿点较为分散500次迭代绿点较散
在这里插入图片描述在这里插入图片描述
800次迭代时绿点接近,红点向两侧拉开800次迭代绿点接近
在这里插入图片描述在这里插入图片描述
1000次迭代时趋势更明显,但相对位置不变1000次迭代
在这里插入图片描述在这里插入图片描述
6000次迭代时绿点重合,红点拉到最远6000次迭代

Z2:A2的演进

下图是用Z2做横坐标,A2做纵坐标绘制,因为Z2,A2都是一个标量,或者说是直线上的点。

Z2:A2
在这里插入图片描述在这里插入图片描述
500次迭代分类不清800次迭代起色不大,红绿点还没分开
在这里插入图片描述在这里插入图片描述
1000次迭代向两极靠拢6000次迭代完美分割

隐层有三个神经元的工作原理

最终输出的权重矩阵值:

[[ 6.70984241 -6.82710114]
 [ 6.22781451 -5.99280808]
 [-2.74806343  2.4870413 ]]
b=[[-3.51362288]
 [ 3.15804745]
 [-1.4773994 ]]

w=[[12.31224597 -9.738143    3.80483026]]
b=[[3.05151459]]

迭代5000次到达精度要求的各层的网络输出:

1234
x10011
x20101
y0110
Z13.51362288-10.340724023.19621952-3.63088162
3.15804745-2.834760639.385861963.39305388
-1.47739941.00964189-4.22546284-1.73842154
A12.89270940e-023.22898922e-059.60691763e-012.58090628e-02
9.59224645e-015.54744264e-029.99916105e-019.67486745e-01
1.85820545e-017.32950061e-011.44079436e-021.49513539e-01
Z2-5.226379055.300444835.19728163-5.48336852
A20.005344230.99503540.994498850.00413811

我们可以把Z1,A1看作是一个三维的坐标点,并比较迭代200次与迭代5000次的结果,从而了解神经网络的工作过程:

迭代200次迭代5000次
初始x1:x2在这里插入图片描述在这里插入图片描述
Z1:观察角度1在这里插入图片描述在这里插入图片描述
两个红色点距离较远两个红色点距离很近
Z1:观察角度2在这里插入图片描述在这里插入图片描述
绿色点从一开始就已经分得很开绿色点的距离越来越远
A1:观察角度1在这里插入图片描述在这里插入图片描述
红点较散红点聚集到了一个角落里,绿点拉开距离
A1:观察角度2在这里插入图片描述在这里插入图片描述
Z2:A2在这里插入图片描述在这里插入图片描述
两种颜色的点没有分开彻底分开了
结果在这里插入图片描述在这里插入图片描述

到底是把两个红点变换到一起去,还是变换绿点,取决于随机初始化结果。

https://github.com/microsoft/ai-edu/blob/master/B-教学案例与实践/B6-神经网络基本原理简明教程/10.2-理解二分类的工作原理.md#隐层神经元数量的选择
https://github.com/microsoft/ai-edu/blob/master/B-教学案例与实践/B6-神经网络基本原理简明教程/10.1-实现逻辑异或门.md

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值