CNN感性认识(一)——BP神经网络

【作者数学捉鸡,本博客不作公式推导,只是提纲挈领地描述BP神经网络的操作过程】
参考资料:http://neuralnetworksanddeeplearning.com/index.html

一、神经网络的基本单元:感知器
感知器接受若干个二元输入x1,x2,……,生成单一的二元输出。
感知器:
这里写图片描述

每个输入对应一个权重,w,当w和x的乘积的和加上偏置大于阈值时,输出为1,当乘积的和加上偏置小于阈值时,输出为0.
适当组合并选取合适的权重,可以代替门运算。
值得一提的是,二层的感知器可以代替与门或门非门运算,但是不能代替异或运算。
这里写图片描述
这是神经网络的学习过程,当输出的output与实际值有偏差时,不断改变权重和偏置,使输出的结果越来越好,但是为了迁就一个结果而修改的权重可能对网络整体造成巨大的影响(可能造成输出的突变)。为了克服这个问题,引入了一种虚拟的神经元:sigmoid神经元。sigmoid神经元的输入可以使0到1间的任意值,它的输出可以用sigmoid函数表示:这里写图片描述
这里写图片描述
这里写图片描述
与原来的神经元相比,sigmod神经元更加平滑,这样,权重的微小改变就可以造成输出的微小改变。
这里写图片描述

神经网络的结构为:
输入层(输入神经元)—–> 隐藏层 ——> 输出层(输出神经元)
隐藏层可以有很多层。
这种多层神经网络有时被称为多层感知器,由sigmod神经元组成。
以上讨论的神经网络被称为前馈神经网络,网络中没有回路,层与层之间全连接,每层之间无连接。
这里写图片描述

二、训练神经网络
为了判断网络的表现,定义价值函数(cost function,也称损失函数,目标函数),用C表示。下面的式子就是当C是均方误差时的结果损失函数:
这里写图片描述
用w表示网络中所有权重的集合,b表示所有的偏置,n是训练样本的总数,a表示当x是输入样本时,网络给出的输出向量。
我们希望C尽可能小,用梯度下降法(gradient descent)达到目的。
这里写图片描述
从这张图上看,如果有一个球固定在这个曲面上方的某处,希望让这个球到达曲面的洼地。梯度下降法的策略就是分别从v1和v2两个方向上让这个球慢慢下降。
这里写图片描述
梯度为:这里写图片描述
这里写图片描述
这里只是求出了梯度的表示,我们的目的是用梯度更新权重。这时,我们就要考虑到小球下降速度的问题,如果在当前方向上更新梯度更新得过了头,小球就越过了洼地,这显然不是我们想看到的。因此,需要一个参数:学习率这里写图片描述,来控制梯度下降的速度。学习率是一个很小的正参数,一般训练神经网络的时候,随着损失函数变小,会将学习率调整得小一点。
v的更新为:这里写图片描述
回到神经网络,最靠近输出层的神经元就是这样更新的:
这里写图片描述
这种做法的一个缺点是,每次更新权重都要读取全部的训练数据,在训练数据比较庞大的时候,这非常耗时,因此采取随机坐标下降法(stochastic gradient descent)加速学习。这个方法的策略是,每次更新只用一部分样本。
我们不断随机选择输入,直到所有训练数据都被遍历,就完成了一轮(epoch)训练,开始下一轮训练。

现在我们知道了如何训练最后一层的神经元,那么前面几层的神经元怎么办呢?接下来就要详细介绍反向传播算法(backpropagation)。反向传播算法的核心是计算损失函数关于权重(或偏置)的偏导数这里写图片描述
这里写图片描述表示在第l-1层的第k个神经元到第l层的第j个神经元的权重。用这里写图片描述表示第j个神经元在第l层的偏置,用这里写图片描述表示第j个神经元在第l层的激励。
这里写图片描述
这样激励,权重和偏置之间的关系就是:这里写图片描述
写成向量就是:这里写图片描述
第l层的加权输入为:这里写图片描述

引入阿尔玛内积(Hadamard product)这里写图片描述
也就是相同纬度向量对应位置相乘
这里写图片描述

接下来介绍几个关于反向传播的重要方程,证明过程略(有兴趣可以移步英文原文查阅)
引入中间量这里写图片描述来表示第j个神经元在第l层上的误差。
反向传播算法可以计算 这里写图片描述,然后把它与损失函数关于w和b的偏导数联系起来。
定义:这里写图片描述
① 输出层误差方程:这里写图片描述
写成矩阵形式:这里写图片描述
这里的L表示是针对最后一层。
这里写图片描述关于这里写图片描述的方程:这里写图片描述
这个公式告诉了我们误差从后往前传播的方式,通过①和②的结合,我们可以求出网络中任意层的误差。
③ 网络中损失函数关于偏置的公式:这里写图片描述
这个公式可以简写为:这里写图片描述
④ 网络中损失函数关于权重的公式:这里写图片描述
这个公式可以简写为:这里写图片描述
从这个公式可以看出:激励小的神经元的权重学习得慢。
当激活函数是sigmoid时,如果输入的值在很左或者很右的位置,输出神经元产生的激励非常小或者非常大,这时认为输出神经元已经饱和,几乎停止学习,这样就会造成权重学习缓慢,这也是sigmoid的一个缺点

反向传播算法的具体步骤为:
① 输入x:为输入层设置相应的激励这里写图片描述
② 前馈:对每个这里写图片描述,计算这里写图片描述
③ 输出误差这里写图片描述:计算向量这里写图片描述
④ 反向传播误差:对每个这里写图片描述,计算这里写图片描述
⑤ 输出:损失函数的梯度为这里写图片描述
最后只要用这个公式更新偏置和权重就可以了:
这里写图片描述

如果用随机坐标下降法加速:
这里写图片描述
这里写图片描述
m表示一个batch里样本的个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值