• 二分类神经网络公式推导过程


    简介:本文主要介绍了简单二分神经网络的公式推导过程。

    欢迎探讨,如有错误敬请指正

    如需转载,请注明出处 http://www.cnblogs.com/nullzx/


    1. 数据表示说明

    定义一个名为n的列表

    n[i]表示第i层的节点数 i从0开始

    L = len(n)-1表示神经网络的层数,网络的层数从第0层开始

    W[i]的维度为(n[i], n[i-1]) i从1开始

    b[i]的维度为(n[i], 1) i从1开始

    clip_image002

    clip_image004

     

    2. 正向传播

    X表示训练样本矩阵,每个训练样本有d个特征,有m个训练样本,所以X的维度是(d, m) 即n[0] = d

    clip_image002[6]

    clip_image004[5]

    clip_image006

    clip_image008

    clip_image010表示第i层的激活函数

    clip_image012 维度 (n[i], m)一个样本对应一列

    clip_image014 维度 (n[i], m)一个样本对应一列

    3. 交叉熵损失函数的推导过程

    clip_image002[8]

    “*”表示对应元素相乘,clip_image004[7]表示第i个样本的真实值,clip_image006[5]表示第i个样本的预测值,也就是神经网络最后一层的输出。

    对于二分类的神经网络来说,最后一层的激活函数一般都是sigmoid函数

    sigmoid函数由下列公式定义

    clip_image007

    clip_image008[5]

    从图中可知,最后一层的输出为0~1之间,可以看做概率。我们可以把二分神经网络看成一个概率模型,输入为一些特征,输出为概率,而且满足二项分布

    clip_image010[5] 表示真实值为1时,神经网络预测准确的概率

    clip_image012[5] 表示真实值为0时,神经网络预测准确的概率,我们可以将上面的分段函数写成一个表达式

    clip_image014[5]

    所以上式表示了神经网络预测准确的概率。

    当前有m个样本,那么like表示了这m个样本同时预测准确的概率

    clip_image016

          clip_image002[14]

    我们的目的就是让like取最大值,由于对数函数ln(x)是一个单调函数,所以当like函数取最大值时,ln(like)一定取得最大值

    clip_image020

    ln(like)取得最大值等价于下面的值取得最小。

    clip_image022

    而这个就是损失函数,初始化时w和b随机,我们通过随机梯度下降法,得到w和b使得损失函数最小。

    另一方面,我们还可以通过信息论的角度推导交叉熵

    clip_image024

     

    4. 反向传播(随机梯度下降法)

    L表示最后一层,从最后一层开始,由损失函数逐步向后求导

    clip_image002[10]

    clip_image004[9]

    一般情况下

    clip_image006[7]

    sigmoid的导数可以用自身表示:

    clip_image007[5]

    所以clip_image009

    clip_image011

    clip_image013 一定是维度 (1, m)一个样本对应一列(也就是一个数值),

    假设已经知道了clip_image015 ,它的维度是(n[i], m),则可以推出三点:

    1)clip_image017 ,它的维度是(n[i], m) 乘以(n[i-1], m)T

    2)clip_image019,它的维度是(n[i], 1)

    3)clip_image021

    它的维度是(n[i+1], n[i]).T乘以(n[i+1], m)

    同理还可以继续推出

    clip_image023

    *表示对应元素相乘,而clip_image025就是激活函数的求导,这样就可以继续向下求导了

     

    5. 参数更新

    clip_image002[12]

    clip_image004[11]

    k表示学习速度

    clip_image006[9]维度 (n[i], m) 一个样本对应一列

    clip_image008[7]维度 (n[i], 1) 一个样本对应一行

    clip_image010[7] 维度 (n[i], n[i-1])

    clip_image008[8] 维度 (n[i], m)

    6. 通过具体的例子解释反向传播的公式

    clip_image002[16]

    对于上图神经网络的而言的一个训练样本而言,在求导的过程中我们应该把clip_image004[13]看成一个有关clip_image006[11]的超多元函数

    clip_image008[11]的维度(1,1)

    clip_image010[9]的维度(1,1)

    clip_image012[7]就是一个数


    我们从最后一层开始反向传播

    clip_image014[7] 维度(1,1)

    clip_image016[6]

    clip_image018[6]

    clip_image020[7]

    clip_image022[6]
    clip_image024

    clip_image026

    clip_image028

    注意最后推导出来的结果是两个矩阵的乘法

    clip_image030 维度(1,3)

    clip_image032 维度(1,1)


    继续向前一层进行反向传播

    clip_image034

    clip_image036
    clip_image038

    所以clip_image040维度(3,1),还因为 clip_image042,所以

    clip_image044

    clip_image046

    clip_image048

    clip_image050

    维度(3,1)


    因为

    clip_image052

    展开可得

    clip_image002[18]

    现在将成本函数clip_image058看成由clip_image060这12个自变量的函数(为啥是12个,因为每一个clip_image062都是一个1行4列的向量)

    成本函数clip_image058[1]对着12个参数求导就形成了一个矩阵

    clip_image064

    这矩阵正好可以表示成

    clip_image066

    维度(3,1)乘 维度(4,1)T 形成一个(3,4)的矩阵


    现在将成本函数clip_image058[2]看成由clip_image068这4个自变量的函数(为啥是4个,因为clip_image068[1]是一个4行1列的向量)

    成本函数clip_image058[3]对着4个参数求导就形成了一个四行一列的向量

    clip_image070

    这个矩阵恰好可以表示成

    clip_image072

    通用形式:

    clip_image074

    同理有了clip_image076就可以推出clip_image078 进而可以推出clip_image080clip_image082


    对于m个样本而言,我们求得的某个参数的导数是m样本分别对这个参数求导的平均值。至此反向传播过程推导推导完毕。

    7. 参考内容

    [1]. 浅谈神经网络算法

  • 相关阅读:
    二叉树
    bfs
    E-Gold Coins
    D-We Love MOE Girls
    A
    哈希--查找出现过的数字
    二分查找
    KMP简单应用
    KMP算法(2)
    [JSOI2008]最大数
  • 原文地址:https://www.cnblogs.com/nullzx/p/9234058.html
Copyright © 2020-2023  润新知