BP(Back propagation)神经网络

本文深入讲解了BP(反向传播)神经网络的工作原理,包括其结构特点、信号的正向传播与误差的反向传播机制,并探讨了损失函数、梯度下降算法的应用,以及网络优化策略如学习率调整和正则化。
1、BP(Back propagation)神经网络描述
(1) BP( 反向传播 (Back Propagation))神经网络是一种按照 误差逆向传播算法 训练的 多层前馈神经网络 ,是目前应用最广泛的神经网络之一。
(2) 该网络的 主要特点 信号的正向传播 误差反向传播
(3) BP神经网络主要分为 两个过程
     第一个过程是 信号的正向传播 (前向传播),从输入层经过隐藏层,最后到达输出层;
     第二个过程是 误差的反向传播 ,从输出层到隐藏层,最后到输入层,依次调节隐藏层到输出层的 权重 偏置 ,输入层到隐藏层的权重和偏置。

2、BP神经网络的向前传播

(1)前向传播算法的数学定义(偏置项和权重)(加权求和+激活函数





(2)偏置项和激活函数
偏置项:
    是神经网络中非常常用的一种结构
    与线性方程 y=wx+b 中的 b 的意义是一致的,在 y=wx+b 中, b 表示函数在 y 轴上的截距,控制着函数偏离原点的距离。
激活函数:
    加入非线性因素, 实现去线性化 ,解决线性模型不能解决的问题
常用激活函数如下:


3、BP神经网络的代价函数(损失函数)
(1)二次代价函数(均方误差函数)
单变量线性回归 二次代价函数

建模误差的平方和( 预测值与真实值

多变量线性回归 二次代价函数

二分类问题和回归问题,一般用二次代价函数(均方误差函数)
    比如:
           对于判断零件是否合格的 二分类问题 ,神经网络的输出层有一个节点。当这个节点越接近 0 时越有可能不合格,越接近 1 时越有可能合格。具体分类结果可以选择 0.5 作为阈值,小于 0.5 则不合格,大于 0.5 则合格。
神经网络解决多分类问题
    用 n 维数组 作为输出结果,如果样本属于类别 k ,那么这个类别所对应的的输出节点的输出值应该为 1 ,其他节点的输出都为 0
    例如:[0,0,0,0,0,0,0,1,0,0]
    那么神经网络的输出结果越接近[0,0,0,0,0,0,0,1,0,0] 越好
如何判断一个输出向量和期望的向量有多接近呢?
这就用到了 交叉熵

(2)交叉熵
交叉熵 是刻画 两个概率分布之间的距离 ,也是分类问题中使用比较广泛的一种 损失函数
给定两个概率分布 p q, 通过 q 来表示 p 的交叉熵:

该公式表示通过概率分布q 来表达概率分布 p 的困难程度( p 代表的 正确答案 q 代表的是 预测值
概率分布 p(X=x) 满足:

但是 神经网络的输出不一定是一个概率分布,所以需要在神经网络的 输出层 添加一个 Softmax 层(即Softmax回归)
Softmax 模型可以用来 给不同的对象分配概率
假设原始的神经网络输出为 y1,y2……yn ,那么经过 Softmax 回归处理之后的输出为:



Softmax举例

交叉熵举例:
交叉熵刻画的是 两个概率分布的距离 ,即交叉熵的值越小,两个概率分布越接近。
假设有一个 三分类问题
    某个样例的正确答案是(1,0,0
    某模型经过 Softmax 回归之后的预测答案是( 0.5,0.4,0.1
    则这个预测和正确答案之间的交叉熵为:

另外一个模型的预测答案是( 0.8,0.1,0.1
    则预测值和真实值之间的交叉熵为:


4、BP神经网络的反向传播
(1)梯度下降算法
主要用于优化单个参数的取值

举例:
如下图: X 轴表示参数 θ 的取值 ;Y 轴表示损失函数 J(θ)的值

参数更新公式:

例如损失函数为 J(X)= , 学习率为 0.3

(2)反向传播算法
所有的参数 上使用 梯度下降算法 ,从而使神经网络模型在训练数据集上的损失函数达到一个较小的值
    反向传播算法是训练神经网络模型的 核心算法 ,它可以根据定义好的损失函数 优化神经网络中参数的取值
神经网络中一般选用批量梯度下降算法

5、BP神经网络优化过程总结
1 定义神经网络的结构 ,通过 前向传播算法 计算得到 预测值
2 定义损失函数 ,计算 预测值 真实值 两者之间的 差距
3 选择反向传播优化算法 ,计算损失函数对每一个参数的 梯度
4 根据 梯度和学习率 使用梯度下降算法 更新每一个参数
5 在训练数据上反复运行反向传播优化算法, 训练神经网络
BP神经网络实现MNIST手写数字识别实战: TensorFlow——MNIST手写数字识别

6、BP神经网络的进一步优化
(1)学习率(learning rate)的设置
学习率 控制参数更新的速度,决定了每次参数更新的幅度。
如果 学习率过大 :可能导致参数在 极优值 的两侧来回移动。
例如:优化J(x)= 函数,如果在优化过程中使用学习率为 1
那么整个优化过程如下:

从结果可以看出:无论进行多少轮迭代,参数将在 -5 5 之间摇摆,而 不会收敛 到一个极小值
如果 学习率过小 ,虽然能保证收敛性,但是会大大降低优化速度。
所以学习率既不能过大,也不能过小
TensorFlow中提供了一种更加灵活的学习率设置方法—— 指数衰减法
指数衰减法 可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定)

(2)过拟合问题
增加数据集

正则化方法
    正则化的思想: 在损失函数中加入刻画模型复杂程度的指标
    假设用于刻画模型在训练数据上表现的损失函数为J(θ),那么在优化时不是直接优化J(θ),而是优化J(θ)+ λR(w) (其中R(w)刻画的模型的复杂度,而λ表示模型复杂损失在总损失中的比例)
注意 这里的θ表示的是一个神经网络中的所有参数,它包括边上的权重w和偏置项b,一般来说模型复杂度只由权重w决定
常用刻画模型复杂度的函数 R(w) 有两种:
一种是 L1正则化 ,计算公式如下:

一种是 L2正则化 ,计算公式如下:

两种正则化方式的基本思想 :通过 限制权重大小,使模型不能任意拟合训练数据中的随机噪音
在实践中也可以将L1正则化和L2正则化同时使用,如下公式:


Dropout方法
dropout并不会修改代价函数而是修改深度网络本身
dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照 一定的概率 将其暂时从网络中丢弃

(3)多层网络解决异或运算
异或运算 直观来说就是如果两个输入的符号相同时(同时为正或同时为负),则输出为 0 ,否则(一个正一个负)输出为 1

深层神经网络 组合特征提取 的功能,这个特性对于解决不易提取特征向量的问题(比如图片识别、语音识别等)有很大帮助。






参考书籍:《TensorFlow实战 Google深度学习框架》
吴恩达机器学习教程
神经网络游乐场: http://playground.tensorflow.org




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值