前言
参考:https://www.bilibili.com/video/BV16x411V7Qg/?spm_id_from=333.788.recommend_more_video.-1
一、BP神经网络和误差反向传播
1.概述
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络。
2.算法
BP算法就是根据当前数据产生的误差进行逆向传播修改参数,从而不断获得更合适的参数的过程。整个算法分为数据前传获得结果以及误差逆传修改参数两部分。BP算法由信号的正向传播和误差的反向传播两个过程组成。
正向传播时,输入样本从输入层进入网络,经隐层逐层传递至输出层,如果输出层的实际输出与期望输出(导师信号)不同,则转至误差反向传播;如果输出层的实际输出与期望输出(导师信号)相同,结束学习算法。
反向传播时,将输出误差(期望输出与实际输出之差)按原通路反传计算,通过隐层反向,直至输入层,在反传过程中将误差分摊给各层的各个单元,获得各层各单元的误差信号,并将其作为修正各单元权值的根据。这一计算过程使用梯度下降法完成,在不停地调整各层神经元的权值和阈值后,使误差信号减小到最低限度。
权值和阈值不断调整的过程,就是网络的学习与训练过程,经过信号正向传播与误差反向传播,权值和阈值的调整反复进行,一直进行到预先设定的学习训练次数,或输出误差减小到允许的程度。
----------------------------------------(以上摘自百度)--------------------------------------
二、5.13公式的推导
(一).参数介绍
给定训练集D = {(x1, y1),(x2, y2),… . , (xm,ym)},xi∈ Rd, yi∈Rl,即输入示例由d个属性描述,输出l维实值向量.
下图给出了一个拥有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构,其中:
输出层第j个神经元的阈值用θj表示,
隐层第h个神经元的阈值用γh表示,
输入层第i个神经元与隐层第h个神经元之间的连接权重用vih表示,
隐层第h个神经元与输出层第j个神经元之间的连接权重用whj表示,
隐层第h个神经元接收到的输入为αh:,是权重乘以输入值的结果;
输出层第j个神经元接收到的输入用βj表示:
也是权重乘以输入值;其中,bh为隐层第h个神经元的输出。假设隐层和输出层神经元都使用Sigmoid函数:
对训练例(xk, yk),假定神经网络的输出为,即
,则在网络在上(xk, yk)上的均方误差为:
误差越小,表明对训练例(xk, yk)的测试越准确,反之就越不准;但我们要测试的不能只是一组训练例,而是大量的训练样本,于是我们便将m个训练样本的均方误差求和取平均值:,这样便能知道电脑计算的误差有多大,结果有多“糟糕”。
对于误差Ek,给定学习率
,有
(二).梯度下降法
仅仅算出电脑计算的误差有多大并没有多大用,还要告诉电脑应该如何改变权重和阈值,才能让电脑的计算越来越准确。即计算出误差函数的最小值。
局部最小:
简单的函数可以通过微积分,令导数=0时求出函数最小值;但这个误差函数过于复杂,参数是所有的权重和阈值,有时有成千上万个,基本不可能求出全局最小值。有一个方法是先随便挑一个值,然后根据函数的斜率来考虑值应该增大还是减小,一直这样下去,就会逼近函数的某个局部最小值。
梯度:
多元微积分中函数的梯度指出了函数的最陡增长方向,即按梯度方向走,函数值增长得最快。那么反过来,按照梯度的反方向走,函数值就降低得最快,一直降低到某个局部最小值,从而使电脑更加接近正确答案。为此,误差函数必须是平滑的,这也解释了人工神经元激活值从0到1为什么要是连续的变化的。这种按照负梯度不断调整函数权重和阈值的过程就叫做梯度下降法。
(三).5.13公式推导
首先,可由列出的参数、链式法则、函数求导的方法计算出公式(5.11)
:以此类推,便可用同样的方法计算出5.13公式