🦖
Wii
  • 原码补码反码
  • Archive
    • Job
      • Learn
      • 算法
      • Company
        • HundunDaxue
      • Company
      • 基础
        • 原码补码反码
      • 项目经验
      • require
    • Hobbies
      • Physics
        • 上帝粒子
        • 概述
        • 时间
      • Movie
        • MovieList
      • Psychology
        • Psychology
        • Chenli
          • ChenliLivingRoom
      • Philosophy
        • Philosophy
        • Conceptions
        • 导言
      • Travel
        • City
          • 昆明
          • 沈阳
        • articles-check-list
      • Sports
        • Swimming
        • Skiing
      • Earth
        • Ocean
          • Biology
      • Read
        • BookList
        • 道德经
        • BookToRead
      • Music
        • sort
      • PickUp
        • SoldiersSortie
    • Care
      • Illness
        • cold
        • 腹泻
        • acne
        • EmotionalControl
        • 咽炎
        • Anemia
      • Foods
        • 破壁机
          • 食谱
      • I
      • WishList
      • WithL
        • MF
          • LY
    • Wfw
      • QA
    • Mac
      • Brew
        • 软件安装目录
      • Usage
        • RunScriptAsRootOnBoot
        • Mac-Config
      • 制作启动U盘
      • Software
        • IntelliJIDEALicenseServer
          • run-license-server
    • PlantUML
      • plantuml
    • Windows
      • Windows常用命令
      • PowerShell
        • powershell 命令
      • Cmder
      • MTP服务驱动无法安装
    • English
      • 英语阅读2016-07-29
      • 英语阅读2016-08-11
    • Tools
      • Plantuml
        • Setup
      • Eclipse
        • Eclipse
        • Eclipse常见问题
      • CommonHotkey
      • Jetbrain
        • JetbrainIDEs
      • VSCode
      • SublimeText
        • 格式化代码
    • I
      • WHATIAM
    • Device
      • Netgear
        • Astrill
      • RPi
        • Hardware
    • AwesomeSoftware
    • RESTful
    • Course
      • 自然辩证法
        • 我国在生态文明建设中存在的困境及解决对策
        • 工程师应该具有的基本道德素养
        • 科学文化与人文文化的关系
      • 英语写作
        • Description
      • 分布式系统
        • 分布式系统概论
      • 英语口语
        • 辩论赛
    • CloudLib
      • 推荐0.1
    • Project
      • README
        • emq
          • Emq架构
        • 启动
        • Hikvision
          • TimeSetting
    • Efficient
    • Neu
      • IpCamera
        • live
        • ffmpeg
    • Matlab
      • Matlab 2016b 破解
    • SchoolWork
      • 学术道德与学术规范
    • git-push
  • Coding
    • Design Pattern
      • 设计模式笔记_四_工厂模式
      • 设计模式笔记_六_命令模式
      • 设计模式笔记_三_装饰者模式
      • 设计模式入门
      • 设计模式笔记_八_模板方法模式
      • 设计模式笔记_一_策略模式
      • 设计模式笔记_五_单件模式
      • 设计模式笔记_七_适配器模式与外观模式
      • 设计模式笔记_二_观察者模式
      • 设计模式笔记_十_状态模式
      • 设计模式笔记_九_迭代器与组合模式
    • C++
      • Notes
        • Practice
          • Logger
        • Thread
          • PosixThreadPrograming
          • ThreadNote
        • Features
          • FuturePromise
          • Lambda
        • STL
          • STLPractice
          • 迭代器
          • UnorderedMapSet
          • Containor
          • STL
          • Vector
        • CMake
          • Startup
          • CMakeExample
          • CMake
          • CMakeUsage
          • CMakeKnowledge
        • Mutex
        • Gdb
          • Gdb
        • LanguageNotes
          • Pointer
          • String
          • Functions
          • 友元
          • IO
          • OOP
          • Exceptions
          • Basic
          • 初始化
          • Random
          • 模板函数
        • Glog
          • glog
        • Thrift
          • Thrift
        • Valgrind
          • valgrind
        • 动态库 & 静态库
        • BookNotes
          • AboutC++
        • LRvalues
      • map
      • protobuf
      • Build
      • Seastar
        • Notes
          • std::move
          • Introduce
          • Install
            • BuildAndInstall
          • Steps
          • cmd
      • Tricks
      • Map
      • CommonOperation
      • FreqAlgorithm
    • Tools
      • Git
        • GitExamples
        • GitUsage
        • GitKnowledge
        • GitIgnoreExample
        • DeleteBigFileFromHistory
      • Vim
        • VimTips
        • 安装
        • Vim-Usage
        • Plugins
        • Vim-Config
      • SVN
        • svn服务器搭建
        • svn
    • Scala
      • Notes
        • Scala-模式匹配
        • Scala: 隐式
        • Scala-符号语法
        • Scala-函数
        • Scala面向对象编程
        • Scala 函数式编程
        • Scala:zipWithIndex
        • Future
        • Scala-语法
        • Scala-基础
      • DateTime
      • 规范
    • Python
      • Notes
        • BookNotes
          • 生成器
          • 垃圾回收机制
          • 数据结构
          • 数据类型
          • RegularExpression
          • 迭代器
          • NetworkProgramming
          • 函数式编程
          • 上下文管理器
          • PythonDataModel
          • 运算符
          • 魔术方法
          • 面向对象
          • 装饰器
          • 模块
          • MultithreadProgramming
          • 异常
          • 函数
        • Modules
          • stack
          • Datetime
          • shutil:文件操作
          • logging
          • urllib
          • Re
          • 容器数据类型
          • TypeError
          • str
          • queue
          • urllib-and-requests
          • Exception
          • path
          • os
        • Others
          • PythonSerialization
          • Python函数的docstring
          • PIL
          • type-cast
          • operations
          • Python-类
          • 组及命名组匹配
          • Package
          • jieba分词
          • logging模块
          • Python
          • print
        • Examples
          • 文件读取写入
          • 命名
          • 递归更改文件为windows合法名称
          • 定制命令行运行方式
          • Python处理Excel文件(xlsx文件格式)
          • 读取ini配置文件
          • tor代理
          • 添加父目录到Path
        • CommonTips
        • CodingStandards
          • python注释
          • PEP-8
      • Django
        • DjangoDocs
          • making queries
          • 设置media路径
          • models
          • manage.py使用
          • template
          • view
          • forms
          • setting.py 文件配置说明
          • nginx-deploy
          • 使用pymysql
          • 自定义tags和filters
          • admin-interface
        • DjangoRestFramework
          • Customer Permissions
          • Serializers
          • FileField绝对路径问题
          • DjangoRestFrameworkNotes
          • ViewSet
        • DjangoNotes
          • Model对象转化为Dict
          • QuerySet
      • Scrapy
        • Scrapy
        • Spider
        • Scrapy安装出错
        • Selector
        • Scrapy模拟登陆
      • Job
        • 字典
      • Pandas
        • pandas
        • PandasExamples
      • VirtualEnv
        • virtualenv
      • Numpy
        • NumpyUsage
        • numpy
      • Matplotlib
        • MatplotlibNotes
        • MatplotlibUsage
      • Database
        • 获取表字段
      • Pip
        • 更改源
      • Scipy
        • scipy
    • Web
      • 插件
        • bootstrap-table
          • bootstrap-table
        • bootstrap
          • 模态框
        • requirejs
          • requirejs
        • toastr
          • toastor
      • Koa
        • Notes
          • KoaNotes
      • SCSS
        • 常用标签
        • Watch
      • Vue
        • Notes
          • 路由
          • 参考
          • 组件
          • Plugins
          • Vuex
          • StartUp
      • 样式
      • CSS
        • CSS
      • 排版
      • Notes
        • 跨域访问
      • Hexo
        • HexoUsage
      • Nodejs
        • Koa
          • jest
          • ParamValidate
        • 仓库镜像
      • Express
        • Express
        • Jade
          • Jade
      • Canvas
        • Canvas
    • Basic
      • Data Structure
        • Heap
          • Heap
        • Tree
          • Tree
        • Benchmark
          • map
      • Boolean
      • MultithreadProgramming
      • Software Engineering
        • UML
          • UML
      • OOP
      • 介绍
    • Antlr
      • Example
      • Grammar
      • Antlr
    • Java
      • Library
        • MyBatis
          • generator
            • mybatis配置详解
          • mybatis-获取自增ID
          • mybatis
          • problems
        • log4j
          • Usage
      • Maven
        • MavenUsage
        • Maven
        • MavenProject
        • 项目RUL路径问题
        • MavenPom
        • Settings
        • PomCommon
        • PomExample
      • Notes
        • Features
          • Reflect
          • Java函数式编程
          • toMap
          • Closeable & AutoCloseable & Flushable
          • Annotations
        • Common
        • ThinkingInJava
          • 控制执行流程
          • 接口
          • 复用类
          • 内部类
          • 操作符
          • 访问权限控制
          • 一切都是对象
          • 多态
          • 初始化与清理
          • 对象导论
        • SwordToOffer
        • Network
        • Thread
          • ThreadPool
        • Basic Library
        • Collections
          • List Interface
        • CommandLine
        • Project Common
        • JavaLang
      • JVM
        • Monitor
          • Jmap
          • mat
          • Jstat
          • Monitor
        • Notes
          • JVM
        • GC
          • GC
          • Shenandoah
            • Shenandoah
        • JVM
    • Algorithm
      • Code
        • LeetCode
          • Python
            • 0000-0050
              • 0005
              • 0030
        • SwordToOffer
          • SwordToOffer
      • AlgorithmSummary
      • Classics
        • string
          • KMP
        • Other
          • FullPermutation
        • 链表
        • Sort
          • Sort
      • Other
        • README
      • Notes
        • Math
          • 两点计算直线方程
    • Go
      • Notes
        • Go Project Layout
        • Install
        • Startup
      • Basic
        • Startup
        • Types
    • JavaScript
      • MasonryLayouts
      • jquery
      • Notes
        • Promise
      • js
    • Android
      • SDK
        • 打开SDK Manager
    • C#
      • WebBrowser
      • c#图片
      • 跨线程访问控件
    • Knowledge
      • 函数式编程
      • 设计框架
    • Rules
      • Rules
    • React
      • ReactNative
        • React Native Navigation
        • 打包Apk
        • ReactNative
      • React
        • README
    • RegExp
      • 正则表达式
    • WeChatApp
      • 登陆
    • Node
      • Notes
        • StartUp
  • Computer Science
    • ICS Security
      • 工控网络
      • 工业控制系统
      • HoneyPot
        • 蜜罐软件
          • Honeyd
      • 工业以太网
      • CNVD
        • 环境及依赖
      • 现有蜜罐系统及工具
      • 工控系统安全措施
      • 蜜网
      • 蜜罐
      • 工控安全相关概念
    • Data Analysis
      • Data Mining
        • Notes
          • Data_Preprocessing
          • 数据预处理
          • 认识数据
          • Mining_Modeling
          • 数据探索
          • Python_Data_Mining_Functions
          • Python数据分析平台搭建
          • Reference_Books
          • 数据分析与挖掘基础
        • Jupyter
          • show
            • mean
      • Hadoop
        • Hadoop权威指南:数据完整性
        • Hadoop权威指南: I/O操作序 - 列化
        • Hadoop权威指南-从Hadoop URL读取数据
        • Hadoop权威指南:FSDataInputStream对象
        • HDFS常用命令
        • Hadoop权威指南:HDFS-数据流
        • Hadoop权威指南:通过distcp并行复制
        • Hadoop权威指南:压缩
        • Hadoop权威指南:HDFS-Hadoop存档
        • 解决使用Idea/Eclipse编写Hadoop程序包依赖问题
        • HDFS
        • Hadoop-命令
        • 简单javaHadoop应用程序从打包到提交运行
        • Hadoop权威指南:HDFS-写入数据
        • Hadoop权威指南:HDFS-目录,查询文件系统,删除文件
        • HadoopInputFormat-OutputFormart
        • Hadoop-HDFS命令行接口
        • Hadoop权威指南-MapReduce应用开发
        • Linux下使用javac编译Hadoop程序
        • Hadoop权威指南:通过FileSystem API读取数据
        • Hadoop专有数据类型
      • Spark
        • Spark计算模型
        • Spark-入门二
        • 安装Hadoop及Spark(Ubuntu 16.04)
        • Spark:核心概念简介
        • Spark:控制日志输入
        • Spark - RDD编程
        • Spark工作机制
        • Spark-一个独立应用
        • Spark
        • Spark:使用Spark Shell的两个示例
    • Linux
      • Notes
        • BuildInCommand
          • ls
          • ip
          • ftp
          • 目录栈操作
          • scp
          • expect
            • expect示例
            • expect手册
            • expect笔记
          • ps
          • vsftpd
          • wget
          • 压缩程序
            • zip_unzip
            • tar
            • p7zip
          • 部署web服务
          • avidemux
          • cat
          • Awk
          • find
          • pssh使用
          • grep
          • sed
          • 路径
          • 通用命令
          • 安装JDK
          • 进程管理
          • network
          • rsync
          • cron
          • 示例
          • 用户管理
          • supervisor
        • Common
        • TestFileProcess
          • 替换文件内容
        • Commonds
        • Permissions
      • Ubuntu
        • Ubuntu 服务器配置部署
        • Ubuntu笔记
        • Ubuntu网络配置
        • Ubuntu 16.04 几个国内源
      • Script
        • ShellProgramming
        • ShellExamples
        • ShellCommands
      • CentOS
        • Centos笔记
        • 源
        • CentOS-Network-Config
        • CentOS-Security
      • Squid
        • BuildByDocker
        • Squid
      • Problem
        • 常见错误
      • Linux
        • Linux-c-cpp
        • Linux
        • Linux-NetworkProgramming
      • Codes
        • cron-test-01
      • Software
        • Shortcut key
        • Anaconda
      • Make
        • tricks
      • Deepin
        • 安装docker
      • SRE
        • CommonCommand
    • Cloud Computing
      • OpenStack
        • Fuel离线安装OpenStack
        • 验证网络
        • OpenStackNotes
    • Network
      • TCP/IP
      • 套接字
      • OSI模型
    • Data mining
      • StartUp
    • Machine Learning
      • Notes
        • 决策树学习-周志华
        • 神经网络-周志华
        • 概念学习和一般到特殊序
        • MachineLearningProblems
        • Math
          • 概率论与数理统计
          • 数学概念
          • KKT条件
          • 最优化问题
          • 优化算法
          • 最小二乘
        • 模型评估与选择
        • 引言
        • 过拟合处理
        • StatisticalLearningMethod
          • 统计学习方法概论
          • 感知机
        • 评估假设
        • Code
          • FeatureEngineering
            • Iris
        • 概念
        • SVM
        • FeatureEngineering
        • 神经网络
        • 决策树学习
        • MachineLearningKnowledge
        • 线性模型
        • 术语概念
        • 拉格朗日乘子法
      • route
      • Jupyter
        • JupyterUsage
      • Anaconda
        • AnacondaUsage
      • Coursera
        • Week01
      • ScikitLearn
        • FitTransform
        • Preprocessing
      • Octave
        • Octave
    • Search
      • Lucene
        • Api
        • Concepts
    • Virtualization Tech
      • Docker
        • dockerNetwork
        • Ubuntu
        • DockerUsage
        • Mac OS
    • Database
      • MySQL
        • Mysql Cluster
        • mysql-cluster
        • mysql
      • 部署phpmyadmin
      • SQL
      • SQL
        • SQLStatement
    • Concepts
      • Other
      • Mohout
      • LDA
    • Distributed System
      • Concepts
        • TODO
        • TODO
    • Recommend System
      • DataPipline
        • DataBus
        • 系统
    • OS
      • OS-Code
      • Notes
        • Introduce
        • ProcessManagement
        • Kernel
    • Deep Learning
      • Code
        • README
      • Notes
        • Conceptions
        • 神经网络
        • LeNet5
        • CNN
      • Tensorflow
        • Notes
          • Tensorflow
          • tensorflow开始
        • Anaconda
    • Media
      • FFmpeg
        • LiveStream
          • run
    • Spider
      • Selenium
        • Selenium
    • IoT
      • emq
        • Authentication
    • Big Data
      • Hadoop
        • MR 作业
  • Architecture
    • Storage
      • Mongodb
        • Mongodb
        • Failed to unlink socket file
      • Pegasus
        • Pegasus
        • ShellTools
      • Rocksdb
        • RocksJava
        • RocksDB
        • 本地缓存
      • Redis
        • Install
        • RedisUsage
      • 基本要素
      • HBase
        • HBase
    • MQ
      • Kafka
        • VersionCompare
        • Deploy
        • cppkafka
        • CommandLineTools
        • OffsetManage
        • Attentions
        • Notes
        • QA
    • Framework
      • Java
        • Dubbo
          • Annotation
          • 简介
        • Spring
          • SpringTest
          • 常见错误
          • TransactionRollback
          • FileUpload
          • SpringMVCNote
          • IoC
          • Start
          • Notes
            • Config
          • Spring
          • springmvc
          • Modules
        • Rose
          • Get request body
        • Netty
          • Netty
        • SpringBoot
          • SpringBoot
      • Esper
        • Documents
          • Keyed Segmented Context
          • 01 - Getting Started
          • 02 - Event Representations
          • 03 - Processing Modal
      • Swagger
        • Swagger
    • RPC
      • Thrift
        • Notes
          • Set fields
          • ThriftTyps
        • BuildFromSource
        • ThriftUsage
        • Install
      • ProtocolBuffer
        • 减少内存拷贝
        • UsageExample
        • Arena
        • ProtocolBuffer
    • Distribution
      • CAP
    • Streaming
      • Spark
        • Init
      • MapReduce
      • Spark
    • Nginx
      • Nginx knowledge
      • nginx-configurtion
      • 403
      • nginx解析php文件时502
    • Governance
      • Consul
      • Zookeeper
        • Zookeeper
      • MicroServiceArchitecture
      • 依赖
    • Conceptions
      • CloudNative
    • Kibana
      • Query
    • Performance Optimizaition
      • Notes
        • Conceptions
        • CPUAffinity
  • Math
    • Probability Theory
      • 一些概率分布
    • Statistics
      • 统计量与估计量
    • Other
      • 排列组合
  • Tools
    • Markdown
      • syntax
    • Jetbrains
      • Jetbrains
    • Zsh
      • Install
  • TODO
由 GitBook 提供支持
在本页
  • 人工神经网络
  • 简介
  • 适合神经网络学习的问题
  • 感知器
  • 多层网络和反向传播算法
  • 反向传播算法的说明

这有帮助吗?

  1. Computer Science
  2. Machine Learning
  3. Notes

神经网络

title: 人工神经网络 tags:

  • 机器学习

  • 人工神经网络

    categories:

  • 机器学习

人工神经网络

人工神经网络(Artificial Neural Networks, ANN) 提供了一种普遍而且实用的方法从样例中学习值为实数、离散值或向量的函数。像反向传播(BACKPROPAGATION)这样的算法,实用梯度下降来调节网络参数以最佳拟合由输入-输出对组成的训练集合。ANN学习对于训练数据中的错误健壮性很好。

简介

神经网络学习方法对于逼近实数值、离散值和向量值得目标函数提供了一种健壮性很强的方法。

人工神经网络是由一系列简单的单元相互密集连接构成的,其中每一个单元有一定数量的实值输入(可能是其他单元的输出),并产生单一的实数值输出(可能成为其它很多单元的输入)。

ANN系统的一个动机就是获取基于分布表示的高度并行算法。

反向传播算法假定网络是一个固定结构,对应一个有向图,可能包含环。ANN学习就是为图中的每一条边选取权值。

适合神经网络学习的问题

ANN学习非常适合于这样的问题:训练集合为含有噪声的复杂传感器数据。它也适用于需要许多符号表示的问题。反向传播是最常用的ANN学习技术。它适合具有以下特征的问题:

  • 实例是用很多属性-值对表示:要学习的目标函数是定义在可以用向量描述的实例之上的,向量由预先定义的特征组成。

  • 目标函数的输出可能是离散值、实数值或者由若干实数属性或离散属性组成的向量。

  • 训练数据可能包含错误:ANN学习算法对于训练数据中的错误有非常好的健壮性

  • 可容忍长时间的训练

  • 可能需要快速求出函数值

  • 人类能否理解学到的目标函数是不重要的

组成神经网络的几种主要单元:感知器(perceptron)、线性单元(linear unit)和sigmoid单元(sigmoid unit)。

感知器

一种类型的ANN系统是以被称为感知器的单元为基础的。感知器以一个实数值向量作为输入,计算这些输入的线性组合,然后如果结果大于某个阈值,就输出1,否则输出-1。更精确地,如果输入为 x1x_1x1​ 到 xnx_nxn​ ,那么感知器计算的输出为:

o(x1,…,xn)={1if w0+w1x1+w2x2+…+wnxn>0−1otherwiseo(x_1, …, x_n) = \begin{cases} 1 & if\ w_0+w_1x_1+w_2x_2+…+w_nx_n > 0 \\ -1 & otherwise \end{cases}o(x1​,…,xn​)={1−1​if w0​+w1​x1​+w2​x2​+…+wn​xn​>0otherwise​

其中每一个 wiw_iwi​ 是一个实数常量,或叫做权值,用来决定输入 xix_ixi​ 对感知器输出的贡献率。数量(−x0-x_0−x0​)是一个阈值,它是为了使感知器输出1,输入的加权和 w1x1+w2x2+…+wnxnw_1x_1+w_2x_2+…+w_nx_nw1​x1​+w2​x2​+…+wn​xn​ 必须超过的阈值。

有时会把感知器函数写为:

o(x⃗)=sgn(w⃗⋅x⃗)o(\vec{x}) = sgn(\vec{w} \cdot \vec{x})o(x)=sgn(w⋅x)

其中

sng(y)={1if y>0−1otherwisesng(y) = \begin{cases} 1 & if\ y > 0 \\ -1 & otherwise \end{cases}sng(y)={1−1​if y>0otherwise​

学习一个感知器意味着选择权 w0,…,wnw_0, … , w_nw0​,…,wn​ 的值。所以感知器学习要考虑的候选假设空间 HHH 就是所有可能的实数值权向量的集合。

H={w⃗∣w⃗∈ℜ(n+1)}H = \{ \vec{w} | \vec{w} \in \Re ^{(n+1)} \}H={w∣w∈ℜ(n+1)}

感知器的表征能力

可以把感知器看作是 n 维实例空间(即点空间)中的超平面决策面。对于超平面一侧的实例,感知器输出1,对于另一侧的实例输出-1。某些正反样例集合不可能被任一超平面分割,那些可以被分割的称为线性可分样例集合。

感知器训练法则

从如何学习单个感知器的权值开始。准确地说,这里的学习任务是决定一个权向量,它可以使感知器对于给定的训练样例输出正确的1或-1。解决这个学习任务的算法有感知器法则和delta法则等。这两种算法保证收敛到可接受的假设。这两种方法对于ANN很重要,因为它们提供了学习多个单元构成的网络的基础。

为得到可接受的权向量,一种办法是从随机的权值开始,然后反复地应用这个感知器到每个训练样例,只要它误分类样例就修改感知器的权值。重复这个过程,知道感知器正确分类所有的训练样例。每一步根据感知器训练法则来修改权值,也就是修改与输入 xix_ixi​ 对应的权 wiw_iwi​ ,法则如下:

wi←wi+Δwiw_i \leftarrow w_i + \Delta w_iwi​←wi​+Δwi​

其中:

Δwi=η(t−o)xi\Delta w_i = \eta (t - o) x_iΔwi​=η(t−o)xi​

这里 t 是当前训练样例的目标输出,o 是感知器的输出,η\etaη 是一个正的常数称为学习速率。学习速率的作用是缓和每一步调整权的程度。它通常被设为一个小的数值(如:0.1),而且有时会使其随着权调整次数的增加而衰减。

可以证明,在有限次地使用感知器训练法则后,训练过程会收敛到一个能正确分类所有训练样例的权向量,前提是训练样例线性可分,并且使用了充分小的 η\etaη 。如果数据不是线性可分的,那么不能保证训练过程收敛。

梯度下降和delta法则

如果训练样本不是线性可分的,那么delta法则会收敛到目标概念的最佳近似。

delta法则的关键思想是使用梯度下降来搜索可能的权向量的假设空间,以找到最佳拟合训练样例的权向量。

delta法则的重要性在于:

  • 它为反向传播算法提供了基础,而反向传播算法能够学习多个单元的互连网络

  • 对于包含多种不同类型的连续参数化假设的假设空间,梯度下降是必须遍历这样的假设空间的所有学习算法的基础

最好把delta训练法则理解为训练一个无阈值的感知器,也就是一个线性单元,它的输出 o 如下:

o(x⃗)=w⃗⋅x⃗o(\vec{x}) = \vec{w} \cdot \vec{x}o(x)=w⋅x

为了推导线性单元的权值学习法则,先指定一个度量标准来衡量假设(权向量)相对于训练样例的训练误差:

E(w⃗)≡12∑d∈D(td−od)2E(\vec{w}) \equiv \frac{1}{2} \sum \limits _{d \in D} (t_d - o_d) ^2E(w)≡21​d∈D∑​(td​−od​)2

其中,D 是训练样例集合, tdt_dtd​ 是训练样例 ddd 的目标输出,odo_dod​ 是线性单元对训练样例 ddd 的输出。

可视化假设空间

为了确定一个使 E 最小化的权向量,梯度下降搜索从一个任意的初始权向量开始,然后以很小的步伐反复修改这个向量。每一步都沿误差曲面产生最陡峭下降的方向修改权向量,继续这个过程知道得到全局的最小误差点。

梯度下降法则的推导

通过计算 EEE 相对向量 w⃗\vec{w}w 的每个分量的导数来得到这个方向。这个向量导数被称为 EEE 对于 w⃗\vec{w}w 的梯度,记作 ∇E(w⃗)≡[ ∂E∂w0,∂E∂w1,…,∂E∂wn] \nabla E(\vec{w}) \equiv [ \, \frac {\partial E}{\partial w_0},\frac {\partial E}{\partial w_1},…,\frac {\partial E}{\partial w_n} ] \,∇E(w)≡[∂w0​∂E​,∂w1​∂E​,…,∂wn​∂E​]

∇E(w⃗)\nabla E(\vec{w})∇E(w) 本身是一个向量,它的成员时 EEE 对每个 wiw_iwi​ 的偏导数。当梯度被解释为权空间的一个向量时,它确定了使 EEE 最陡峭上升的方向。所以,这个方向的反方向给出了最陡峭下降的方向。那么梯度下降的训练法则是:

w⃗←w⃗+Δw⃗\vec {w} \leftarrow \vec{w} + \Delta \vec{w}w←w+Δw

其中:

Δw⃗=−η∇E(w⃗)\Delta \vec w = - \eta \nabla E (\vec w)Δw=−η∇E(w)

这里 η\etaη 是一个正的常数叫学习速率,它决定梯度下降搜索中的步长。这个训练法则也可以写成它的分量形式:

wi=wi+Δwiw_i = w_i + \Delta w_iwi​=wi​+Δwi​

其中:

Δwi=−η∂E∂wi\Delta w_i = - \eta \frac{\partial E}{\partial w_i}Δwi​=−η∂wi​∂E​

最陡峭的下降可以按照比例 ∂E∂wi\frac{\partial E}{\partial w_i}∂wi​∂E​ 改变 w⃗\vec{w}w 中的每一个分量 wiw_iwi​ 来实现。

我们需要一个高效的方法,在每一步都计算这个梯度:从训练误差公式(E(w⃗)≡12∑d∈D(td−od)2E(\vec{w}) \equiv \frac{1}{2} \sum \limits _{d \in D} (t_d - o_d) ^2E(w)≡21​d∈D∑​(td​−od​)2)中计算 EEE 的微分,从而得到组成这个梯度向量的分量 ∂E⃗∂wi\frac{\partial \vec{E}}{\partial w_i}∂wi​∂E​ :

∂E⃗∂wi=∑d∈D(td−od)(−xid)\frac{\partial \vec{E}}{\partial w_i} = \sum \limits _{d \in D} (t_d-o_d)(-x_{id})∂wi​∂E​=d∈D∑​(td​−od​)(−xid​)

其中,xidx_{id}xid​ 表示训练样例 ddd 的一个输入分量 xix_ixi​ 。

梯度下降权值更新法则:

Δwi=η∑d∈D(td−od)xid\Delta w_i = \eta \sum \limits _{d \in D} (t_d - o_d) x_{id}Δwi​=ηd∈D∑​(td​−od​)xid​

训练线性单元的梯度下降算法:

GRADIENT-DESCENT(training_examples, n)

training_examples 中每一个训练样例形式为序偶 <x⃗,t><\vec{x}, t><x,t>,其中 x⃗\vec{x}x 是输入值向量, t 是目标输出值, η\etaη 是学习速率,

  • 初始化每个 wiw_iwi​ 为某个小的随机值

  • 遇到终止条件之前,做以下操作

    • 初始化每个 Δwi\Delta w_iΔwi​ 为0

    • 对于训练样例 training_examples 中的每个 <x⃗,t><\vec{x}, t><x,t> ,做:

      • 把实例 x⃗\vec{x}x 输入到此单元,计算输出 o (o(x⃗)=w⃗⋅x⃗o(\vec{x}) = \vec{w} \cdot \vec{x}o(x)=w⋅x)

      • 对于线性单元的每个权 wiw_iwi​ ,做

        ΔwI←Δwi+η(t−o)xi\Delta w_I \leftarrow \Delta w_i + \eta (t - o) x_iΔwI​←Δwi​+η(t−o)xi​

      • 对于线性单元的每个权 wiw_iwi​ ,做:

        wi←wi+Δwiw_i \leftarrow w_i + \Delta w_iwi​←wi​+Δwi​

梯度下降的随机近似

梯度下降是一种重要的通用学习范型。它是搜索庞大假设空间或无限假设空间的一种策略,它可应用于满足以下条件的任何情况:

  • 假设空间包含连续参数化的假设

  • 误差对于这些假设参数可微

应用梯度下降的主要实践问题:

  • 收敛过程可能非常慢

  • 误差曲面上有多个局部极小值,那么不能保证这个过程会找到全局最小值

缓解上述问题的一个常见的梯度下降变体被称为 增量梯度下降 或 随机梯度下降 。随机梯度下降的思想是根据每个单独样例的误差增量计算权值更新,得到近似的梯度下降搜索。

标准的梯度下降和随机的梯度下降之间的关键区别是:

  • 标准的梯度下降是在权值更新前对所有样例汇总误差,而随机梯度下降的权值是通过考察每个训练实例来更新

  • 在标准的梯度下降中,权值更新的每一步对多个样例求和,这需要更多的计算。另一方面,因为使用真正的梯度,标准的梯度下降对于每一次权值更新经常使用比随机梯度下降大的步长

  • 如果 E(w⃗)E(\vec{w})E(w) 有多个局部极小值,随机的梯度下降有时可能避免陷入这种局部极小值中,因为它使用不同的 ∇Ed(w⃗)\nabla E_d(\vec{w})∇Ed​(w) 而不是 ∇E(w⃗)\nabla E(\vec{w})∇E(w) 来引导搜索

随机梯度下降在迭代计算每个训练样例时根据下面的公式来更新权值:

Δwi=η(t−o)xi\Delta w_i = \eta (t-o) x_iΔwi​=η(t−o)xi​

上述公式,被称为增量法则,或叫LMS法则(least-mean -square 最小均方)、Adaline法则或Window-Hoff法则。

小结

感知器训练法则和增量法则差异:

  • 感知器训练法则根据阈值化的感知器输出的误差更新权值

  • 增量法则根据输入的非阈值化线性组合的误差来更新权

感知器训练法则经过有限次的迭代收敛一个能理想分类训练数据的假设,但条件是 训练样例是否线性可分都会收敛 。

学习权向量的第三种方法是线性规划。这种方法仅当训练样例线性可分时有解。

多层网络和反向传播算法

单个感知器仅能表示线性决策面。反向传播算法所学习的多层网络能够表示种类繁多的非线性曲面。

可微阈值单元

多个线性单元的连接仍是线性函数。

不连续阈值使它不可微,所以不适合梯度下降算法。

sigmoid单元是一种类似于感知器的单元,但它基于一个平滑的可微阈值函数。sigmoid单元阈值输出是输入的连续函数。sigmoid单元这样计算它的输出:

o=σ(w⃗⋅x⃗)o = \sigma (\vec{w} \cdot \vec{x})o=σ(w⋅x)

其中:

σ(y)=11+e−y\sigma (y) = \frac{1}{1 + e ^{-y}}σ(y)=1+e−y1​

σ\sigmaσ 经常被称为sigmoid函数或者也可以称为logistic函数。它的输出范围是0到1,随输入单调递增。因为这个函数把非常大的输入值域映射到一个小范围的输出,它经常被称为sigmoid单元的挤压函数。sigmoid函数有一个有用的特征,就是它的导数很容易用它的输出表示。

反向传播算法

对于由一系列确定的单元互连形成的多层网络,反向传播算法可用来学习这个网络的权值。它采用梯度下降方法试图最小化网络输出值和目标值之间的误差平方。

反向传播算法面临的学习问题是搜索一个巨大的搜索空间,这个空间由网络中所有单元的所有可能的权值定义。

多层网络中,误差曲面可能有多个局部极小值,梯度下降仅能保证收敛到局部极小值,而未必得到全局最小的误差。

包含两层sigmoid单元的前馈网络的反向传播算法(随机梯度下降版本)

BACKPROPAGATION(training_examples, η\etaη , ninn_{in}nin​, noutn_{out}nout​, nhiddenn_{hidden}nhidden​ )

training_examplestraining\_examplestraining_examples 中每一个训练样例是形式为 <x⃗,t⃗><\vec{x}, \vec{t}><x,t> 的序偶,其中 x⃗\vec{x}x 是网络输入值向量,t⃗\vec{t}t 是目标输出值, η\etaη 是学习速率。ninn_{in}nin​ 是网络输入的数量,nhiddenn_{hidden}nhidden​ 是隐藏层单元数,noutn_{out}nout​ 是输出单元数。

从单元 iii 到单元 jjj 的输入表示为 xjix_{ji}xji​ 单元 iii 到单元 jjj 的权值表示为 wjiw_{ji}wji​ 。

  • 创建具有 ninn_{in}nin​ 个输入,nhiddenn_{hidden}nhidden​ 个隐藏单元,noutn_{out}nout​ 个输出单元的网络。

  • 初始化所有的网络权值为小的随机值(例如,-0.05到0.05之间de 数)

  • 在遇到终止条件前

    • 对于训练样例 training_examplestraining\_examplestraining_examples 中的每个单元<x⃗,t⃗><\vec{x}, \vec{t}><x,t>:

      把输入沿网络前向传播

      • 把实例 x⃗\vec{x}x 输入网络,并计算网络中每个单元 uuu 的输出 ouo_uou​

      使误差沿网络反向传播

      • 对于网络的每个输出单元 kkk,计算它的误差项 δk\delta _kδk​

        δk←ok(1−ok)(tk−ok)\delta_k \leftarrow o_k (1-o_k)(t_k-o_k)δk​←ok​(1−ok​)(tk​−ok​)

      • 对于网络的每个隐藏单元 hhh,计算它的误差项 δh\delta_hδh​

        δh←oh(1−oh)∑k∈outputswkhδk\delta_h \leftarrow o_h(1-o_h)\sum \limits _{k \in outputs} w_{kh} \delta_kδh​←oh​(1−oh​)k∈outputs∑​wkh​δk​

      • 更新每个网络权值 wjiw_{ji}wji​

        wji←wji+Δwjiw_{ji} \leftarrow w_{ji} + \Delta w_{ji}wji​←wji​+Δwji​

        其中

        Δwji=ηδjxji\Delta w_{ji} = \eta \delta _j x_{ji}Δwji​=ηδj​xji​

终止判据的条件是很重要的,因为太少的迭代可能无法有效地降低误差,而太多的迭代会导致对训练数据的过度拟合。

增加冲量项

使第 n 次迭代时的权值的更新部分地依赖于发生在第 n-1 次迭代时的更新。

冲量项具有在梯度不变的区域逐渐增大搜索步长的效果,从而可以加快收敛。

反向传播算法的说明

收敛性和局部极小值

反向传播算法实现了一种对可能的网络权值空间的梯度下降搜索,它迭代地减小训练样例的目标值和网络输出间的误差。对于多层网络,反向传播算法仅能保证收敛到误差 EEE 的某个局部最小值,不一定收敛到全局最小误差。

环节局部极小值问题的常见启发式规则包括:

  • 为梯度更新法则加一个冲量项

  • 使用随机的梯度下降而不是真正的梯度下降

  • 使用同样的数据训练多个网络,但用不同的随机权值初始化每个网络

前馈网络的表征能力

  • 布尔函数:任何布尔函数可以被具有两层单元的网络准确表示

  • 连续函数:每个有界的连续函数可以由一个两层的网络以任意小的误差逼近

  • 任意函数:任意函数可以被一个有三层单元的网络以任意精度逼近

有限深度的前馈神经网络为反向传播算法提供了非常有表征力的假设空间。

隐藏层表示

反向传播算法能够在网络内部的隐藏层发现有用的中间表示。

多层网络在隐藏层自动发现有用表示的能力是ANN学习的一个关键特性,它提供了一种相当重要的灵活性 - 允许学习器创造出设计者没有明确引入的特征。当然,这些创造出的特征一定是网络输入的sigmoid单元函数可以计算出的。网络中使用的单元层越多,就可以创造出越复杂的特征。

泛化、过度拟合和停止判据

反向传播算法容易过度拟合训练样例,降低对于其他未见实例的泛化精度。

过度拟合的内在原因:权值拟合了训练样例的特异性,而这个特异性对于样例的一般分布没有代表性。ANN中大量的权值参数为拟合这样的特异性提供了很大的自由度。

随着训练的进行:

  • 一些权值开始增长,以降低在训练数据上的误差

  • 学习到的决策面的复杂度也在提高

  • 反向传播算法获得的假设的有效复杂度也在增加

如果权值调整迭代次数足够多,反向传播算法经常会产生过度复杂的决策面,拟合了训练数据中噪声和训练样例中没有代表性的特征。

解决过度拟合问题方法:

  • 权值衰减:它在每次迭代过程中以某个小因子降低每个权值。这等效于修改 EEE 的定义,加入一个与网络权值的总量相应的惩罚项。此方法的动机在于保持权值较小,从而使学习过程向着复杂决策面的反方向偏置

  • 验证数据集:解决过度拟合问题的一个最成功的方法就是在训练数据外再为算法提供一套验证数据

  • k-fold交叉验证:过度拟合的问题对于小数据集合最为严重。在这种情况下,有时使用一种称为 k-fold交叉验证 的方法。这种方法进行k次不同的交叉验证,每次使用数据的不同分割作为训练集合和验证集合,然后对结果进行平均。

上一页FeatureEngineering下一页决策树学习

最后更新于4年前

这有帮助吗?