周志华机器学习BP改进

试设计一个算法,能通过动态调整学习率显著提升收敛速度,编程实现该算法,并选择两个UCI数据集与标准的BP算法进行实验比较。


1.方法设计

传统的BP算法改进主要有两类:

- 启发式算法:如附加动量法,自适应算法

- 数值优化法:如共轭梯度法、牛顿迭代法、Levenberg-Marquardt算法

(1)附加动量项

这是一种广泛用于加速梯度下降法收敛的优化方法。其核心思想是:在梯度下降搜索时,若当前梯度下降与前一个梯度下降的方向相同,则加速搜索,反之则降速搜索。

标准BP算法的参数更新项为:

Δω(t)=ηg(t)" role="presentation" style="position: relative;">Δω(t)=ηg(t)Δω(t)=ηg(t)

式中Δω(t)是第t次迭代的参数调整量,η为学习率,g(t)为第t次迭代计算出的梯度。" role="presentation" style="position: relative;">式中Δω(t)是第t次迭代的参数调整量,η为学习率,g(t)为第t次迭代计算出的梯度。式中Δω(t)是第t次迭代的参数调整量,η为学习率,g(t)为第t次迭代计算出的梯度。

在添加动量项后,基于梯度下降的参数更新项为:

Δω(t)=η[(1−μ)g(t)+μg(t−1)]" role="presentation" style="position: relative;">Δω(t)=η[(1−μ)g(t)+μg(t−1)]Δω(t)=η[(1−μ)g(t)+μg(t−1)]

始终,μ" role="presentation" style="position: relative;">μμ为动量因子(取值 0~1)。上式也等价于:

Δω(t)=αΔω(t−1)+ηg(t)" role="presentation" style="position: relative;">Δω(t)=αΔω(t−1)+ηg(t)Δω(t)=αΔω(t−1)+ηg(t)

式中α" role="presentation" style="position: relative;">αα 称为遗忘因子,αΔω(t−1)" role="presentation" style="position: relative;">αΔω(t−1)αΔω(t−1)表示上一次梯度下降的方向和大小信息对当前梯度下降的调整影响。

(2) 自适应学习率

附加动量法面临选取率的选取困难,进而产生收敛速度和收敛性的矛盾。于是另考虑引入学习速率自适应设计,这里给出一个·自适应设计方案:

η(t)=ση(t−1)" role="presentation" style="position: relative;">η(t)=ση(t−1)η(t)=ση(t−1)

上式中,η(t)" role="presentation" style="position: relative;">η(t)η(t)为第t次迭代时的自适应学习速率因子,下面是一种计算实力:

σ(t)=2λ" role="presentation" style="position: relative;">σ(t)=2λσ(t)=2λ

其中λ" role="presentation" style="position: relative;">λλ为梯度方向:λ=sign(g(t)(t−1))" role="presentation" style="position: relative;">λ=sign(g(t)(t−1))λ=sign(g(t)(t−1))

这样,学习率的变化可以反映前面附加动量项中的“核心思想”

(3)算法总结

将上述两种方法结合起来,形成动态自适应学习率的BP改进算法:



从上图及书中内容可知,输出层与隐层的梯度项不同,故而对应不同的学习率 η_1 和 η_2,算法的修改主要是第7行关于参数更新的内容:

将附加动量项与学习率自适应计算代入,得出公式(5.11-5.14)的调整如下图所示:

2.对比实验


BP神经网络算法改进的更多相关文章

  1. bp神经网络算法

    对于BP神经网络算法,由于之前一直没有应用到项目中,今日偶然之时 进行了学习, 这个算法的基本思路是这样的:不断地迭代优化网络权值,使得输入与输出之间的映射关系与所期望的映射关系一致,利用梯度下降的方 ...

  2. 二、单层感知器和BP神经网络算法

    一.单层感知器 1958年[仅仅60年前]美国心理学家FrankRosenblant剔除一种具有单层计算单元的神经网络,称为Perceptron,即感知器.感知器研究中首次提出了自组织.自学习的思想, ...

  3. BP神经网络算法预测销量高低

    理论以前写过:https://www.cnblogs.com/fangxiaoqi/p/11306545.html,这里根据天气.是否周末.有无促销的情况,来预测销量情况. function [ ma ...

  4. 数据挖掘系列(9)——BP神经网络算法与实践

    神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...

  5. BP神经网络算法学习

    BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个 ...

  6. BP神经网络算法推导及代码实现笔记zz

    一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤]:算法这东西,读完之后的状态多半是 --> “我是谁,我在哪?” 没事的 ...

  7. R_Studio(神经网络)BP神经网络算法预测销量的高低

    BP神经网络 百度百科:传送门 BP(back propagation)神经网络:一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络 #设置文件工作区间 setwd('D:\\ ...

  8. JAVA实现BP神经网络算法

    工作中需要预测一个过程的时间,就想到了使用BP神经网络来进行预测. 简介 BP神经网络(Back Propagation Neural Network)是一种基于BP算法的人工神经网络,其使用BP算法 ...

  9. BP神经网络算法推导

    目录 前置知识 梯度下降法 激活函数 多元复合函数求偏导的相关知识 正向计算 符号定义 输入层 隐含层 输出层 误差函数 反向传播 输出层与隐含层之间的权值调整 隐含层与输入层之间权值的调整 计算步骤 ...

随机推荐

  1. 系统性能不够原因可能是cpu不够,内存不够等等

    1.Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息. 通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. 2. ...

  2. oracle coherence介绍及使用

    网上除了官方用户指南,关于Coherence的介绍文章资料很少,因此总结出此文,从原理到快速指南和基本最佳实践,希望对需要的人提供一个参考. 1 Coherence 概述 1.1 Coherence是 ...

  3. [wxWidgets]_[0基础]_[不常见但有用的类wxCmdLineParser]

    场景: 1. 有时候须要构造命令行字符串传递給函数调用,比方CreateProcess,假设參数是动态的,那么就得使用类似std::vector<string>加入单个參数,之后拼接为一个 ...

  4. POJ 1679 The Unique MST 推断最小生成树是否唯一

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22715   Accepted: 8055 D ...

  5. STL源代码剖析——STL算法之set集合算法

    前言 本节介绍set集合的相关算法,各自是并集set_union,差集set_difference,交集set_intersection 和对称差集set_symmetric_difference.这 ...

  6. 暴力破解unix/linux平台上采用crypt加密的口令

    # coding=utf-8 ''' 暴力破解crypt模块加密的密码 ''' import crypt import optparse usage = 'Usage: %prog [optinos] ...

  7. 发现个delphi调用vc写的Dll中包括pchar參数报错奇怪现象

    发现个delphi调用vc写的Dll中包括pchar參数奇怪现象 procedure中的第一行语句不能直接调用DLL的函数,否则会执行报错,在之前随意加上条语句就不报错了奇怪! vc的DLL源代码地址 ...

  8. MySQL 存储过程传參之in, out, inout 參数使用方法

    存储过程传參:存储过程的括号中.能够声明參数. 语法是 create procedure p([in/out/inout] 參数名  參数类型 ..) in :给參数传入值,定义的參数就得到了值 ou ...

  9. ffmpeg转码本地文件(一)

    ffmpeg转码本地文件(一) 实现目标:输入本地文件.实现本地文件转码,里面包括mux层转码,codec层转码,视频格式转换,音频重採样等功能,功能点请看凝视.注意:凝视非常重要. #ifndef ...

  10. java8--异常处理(java疯狂讲义3复习笔记)

    try,catch,finally,throw,throws java将异常分为两种,Checked异常和Runtime异常. IndexOutOfBoundsException NumberForm ...