深度学习进阶课程07---backpropagation算法

这篇文章来详细写一下backpropagation算法

在1970年就被提出,1986年的David Rumehart,Geoffrey Hinton,Ronald Williams提出的论文才得到重视,可以解决神经网络中的学习

Backpropagation核心解决的问题:
在这里插入图片描述
先来设计几个标记:
在这里插入图片描述
在这里插入图片描述
上下的3和2表示第三层第2个神经元,4表示第(3-1)=2层第4个神经元

在这里插入图片描述

在这里插入图片描述
表示第2层的第3个神经元的bias
在这里插入图片描述
表示第三层第一个神经元的activation function的值
在这里插入图片描述
两步:(1)wa+b (2)sigmoid函数
对于每一层(l),定义一个weight matrix(权重矩阵):
在这里插入图片描述
连接l层和l-1层,矩阵中第j行,第k列的元素就是:
在这里插入图片描述
对于每一层(l),定义一个bias vector:
在这里插入图片描述

同理,对于a:
在这里插入图片描述
Vectorizing a function:
在这里插入图片描述
例如:f(x)=x^2

在这里插入图片描述
把activation function也用向量和矩阵表示:
在这里插入图片描述
用矩阵和向量表示简单很多,对于每一层,只需要乘以权重的矩阵,加上偏向的向量
中间变量:
在这里插入图片描述

关于Cost函数的两个假设:
回顾Cost函数:
在这里插入图片描述
L:神经网络的层数
求和是对于所有单个的训练实例x加起来,然后求平均Cost

假定1:Cost函数可以写成如下:
平均Cost:
在这里插入图片描述
对于单个的Cost:
在这里插入图片描述
因为对于backpropagation,在这里插入图片描述
在这里插入图片描述
Cost可以被写成神经网络输出的一个函数
我们定义这个二次Cost方程满足这点:
在这里插入图片描述
再来看一个算法:The Hadamard product:
在这里插入图片描述
Backpropagation四个关键公式:
定义error在第l层j个神经元:
在这里插入图片描述
在这里插入图片描述
假如有一个小坏蛋试图破坏神经网络的计算,增添了一个变化:
在这里插入图片描述
本来输出:
在这里插入图片描述
结果输出:
在这里插入图片描述
最终造成Cost变化为:
在这里插入图片描述
假设这个坏蛋想帮我们,通过找到一个:
在这里插入图片描述
来降低Cost
如果:
在这里插入图片描述
太大,坏蛋想帮我们降低Cost,通过找到合适的:
在这里插入图片描述
如果cost接近0,无法改进太多,接近最优,所以:

在这里插入图片描述
可以作为error的一个衡量。
于是,我们定义:
在这里插入图片描述
(1)一个对于error在输出层的方程:
在这里插入图片描述
等式右边第一项衡量Cost变化对于第j个activation输出,比如,我们理想的情况是C不因为某一个特定的输出神经元而变化太大,所以error就比较小。
等式右边第二部分是衡量activation方程变化对于:
在这里插入图片描述
转化为矩阵的表达方式:
在这里插入图片描述

其中在这里插入图片描述

是C根据输出层activation的变化率,对于我们的二次Cost方程:
在这里插入图片描述

(2)一个因下一层error变化引起的当前层error变化的方程:
在这里插入图片描述
下一层error乘以权重矩阵的转置,理解为error往回传递,再求与在这里插入图片描述
的Hadamard product,算出对于l层的error
交替使用:
在这里插入图片描述

在这里插入图片描述
可以通过神经网络逐层计算所有error,(1)用来计算输出层error,(2)用来计算前一层
(3)一个关于cost变化率根据偏向bias的方程:
在这里插入图片描述
根据(1)和(2),可以写为:
在这里插入图片描述
(4)一个关于cost比变化率根据权重weight的方程:
在这里插入图片描述

这个告诉我们如何根据error和a求偏导数,error和a我们都可以求得,
简化为:
在这里插入图片描述
在这里插入图片描述
a i n a_in ain很小时,偏导数也很小,所以权重较慢学习,结论就是从low activation算出的权重学习比较慢,根据
在这里插入图片描述
和sigmoid函数的图像:
在这里插入图片描述
可以看出,函数值接近1或0的时候,曲线都很平,说明:
在这里插入图片描述
接近0,结论就是当输出层的权重学习较慢,如果输出层的activation很高或很低时,对于bias偏好也一样。

总结出四个方程:

(1)在这里插入图片描述
(2)在这里插入图片描述
(3)在这里插入图片描述
(4)在这里插入图片描述

Backpropagation算法

1.输入x,设置输入层activation a
2.正向更新:对于l=1,2,3…L,计算:
在这里插入图片描述
3.计算输出层error:
在这里插入图片描述
4.反向更新error(backpropagation error):
在这里插入图片描述
5.输出:
在这里插入图片描述
总结一下:
1.1 通过迭代性的来处理训练集中的实例
1.2 对比经过神经网络后输入层预测值(predicted value)与真实值(target value)之间
1.3 反方向(从输出层=>隐藏层=>输入层)来以最小化误差(error)来更新每个连接的权重(weight)
1.4 算法详细介绍:
输入:D:数据集;l:学习率(learning rate);一个多层前向神经网络
输出:一个训练好的神经网络(a trained neural network)
1.4.1 初始化权重(weights)和偏向(bias):随机初始化在-1到1之间,或者-0.5到0.5之间,每个单元都有一个偏向
1.4.2 对于每一个训练实例X,执行以下步骤:
1.4.2.1 由输入层向前传送:
在这里插入图片描述
在这里插入图片描述
I j 就 是 中 间 变 量 Z I_j就是中间变量Z IjZ
在这里插入图片描述
在这里插入图片描述
1.4.2.2 根据误差(error)反向传送
对于输出层:
在这里插入图片描述
对于隐藏层:
在这里插入图片描述
权重更新:
在这里插入图片描述
偏向更新:
在这里插入图片描述
1.4.3 终止条件
(1)权重的更新低于某个阈值
(2)预测的错误率低于某个阈值
(3)达到预设一定的循环次数
Backpropagation算法举例

在这里插入图片描述
可以根据以上公式算出error和weight以及bias
在这里插入图片描述
看起来好多公式,但是仔细地看一遍也是能够看懂的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值