神经网络的训练算法
‘壹’ 神经网络算法是什么
Introction
--------------------------------------------------------------------------------
神经网络是新技术领域中的一个时尚词汇。很多人听过这个词,但很少人真正明白它是什么。本文的目的是介绍所有关于神经网络的基本包括它的功能、一般结构、相关术语、类型及其应用。
“神经网络”这个词实际是来自于生物学,而我们所指的神经网络正确的名称应该是“人工神经网络(ANNs)”。在本文,我会同时使用这两个互换的术语。
一个真正的神经网络是由数个至数十亿个被称为神经元的细胞(组成我们大脑的微小细胞)所组成,它们以不同方式连接而型成网络。人工神经网络就是尝试模拟这种生物学上的体系结构及其操作。在这里有一个难题:我们对生物学上的神经网络知道的不多!因此,不同类型之间的神经网络体系结构有很大的不同,我们所知道的只是神经元基本的结构。
The neuron
--------------------------------------------------------------------------------
虽然已经确认在我们的大脑中有大约50至500种不同的神经元,但它们大部份都是基于基本神经元的特别细胞。基本神经元包含有synapses、soma、axon及dendrites。Synapses负责神经元之间的连接,它们不是直接物理上连接的,而是它们之间有一个很小的空隙允许电子讯号从一个神经元跳到另一个神经元。然后这些电子讯号会交给soma处理及以其内部电子讯号将处理结果传递给axon。而axon会将这些讯号分发给dendrites。最后,dendrites带着这些讯号再交给其它的synapses,再继续下一个循环。
如同生物学上的基本神经元,人工的神经网络也有基本的神经元。每个神经元有特定数量的输入,也会为每个神经元设定权重(weight)。权重是对所输入的资料的重要性的一个指标。然后,神经元会计算出权重合计值(net value),而权重合计值就是将所有输入乘以它们的权重的合计。每个神经元都有它们各自的临界值(threshold),而当权重合计值大于临界值时,神经元会输出1。相反,则输出0。最后,输出会被传送给与该神经元连接的其它神经元继续剩余的计算。
Learning
--------------------------------------------------------------------------------
正如上述所写,问题的核心是权重及临界值是该如何设定的呢?世界上有很多不同的训练方式,就如网络类型一样多。但有些比较出名的包括back-propagation, delta rule及Kohonen训练模式。
由于结构体系的不同,训练的规则也不相同,但大部份的规则可以被分为二大类别 - 监管的及非监管的。监管方式的训练规则需要“教师”告诉他们特定的输入应该作出怎样的输出。然后训练规则会调整所有需要的权重值(这是网络中是非常复杂的),而整个过程会重头开始直至数据可以被网络正确的分析出来。监管方式的训练模式包括有back-propagation及delta rule。非监管方式的规则无需教师,因为他们所产生的输出会被进一步评估。
Architecture
--------------------------------------------------------------------------------
在神经网络中,遵守明确的规则一词是最“模糊不清”的。因为有太多不同种类的网络,由简单的布尔网络(Perceptrons),至复杂的自我调整网络(Kohonen),至热动态性网络模型(Boltzmann machines)!而这些,都遵守一个网络体系结构的标准。
一个网络包括有多个神经元“层”,输入层、隐蔽层及输出层。输入层负责接收输入及分发到隐蔽层(因为用户看不见这些层,所以见做隐蔽层)。这些隐蔽层负责所需的计算及输出结果给输出层,而用户则可以看到最终结果。现在,为免混淆,不会在这里更深入的探讨体系结构这一话题。对于不同神经网络的更多详细资料可以看Generation5 essays
尽管我们讨论过神经元、训练及体系结构,但我们还不清楚神经网络实际做些什么。
The Function of ANNs
--------------------------------------------------------------------------------
神经网络被设计为与图案一起工作 - 它们可以被分为分类式或联想式。分类式网络可以接受一组数,然后将其分类。例如ONR程序接受一个数字的影象而输出这个数字。或者PPDA32程序接受一个坐标而将它分类成A类或B类(类别是由所提供的训练决定的)。更多实际用途可以看Applications in the Military中的军事雷达,该雷达可以分别出车辆或树。
联想模式接受一组数而输出另一组。例如HIR程序接受一个‘脏’图像而输出一个它所学过而最接近的一个图像。联想模式更可应用于复杂的应用程序,如签名、面部、指纹识别等。
The Ups and Downs of Neural Networks
--------------------------------------------------------------------------------
神经网络在这个领域中有很多优点,使得它越来越流行。它在类型分类/识别方面非常出色。神经网络可以处理例外及不正常的输入数据,这对于很多系统都很重要(例如雷达及声波定位系统)。很多神经网络都是模仿生物神经网络的,即是他们仿照大脑的运作方式工作。神经网络也得助于神经系统科学的发展,使它可以像人类一样准确地辨别物件而有电脑的速度!前途是光明的,但现在...
是的,神经网络也有些不好的地方。这通常都是因为缺乏足够强大的硬件。神经网络的力量源自于以并行方式处理资讯,即是同时处理多项数据。因此,要一个串行的机器模拟并行处理是非常耗时的。
神经网络的另一个问题是对某一个问题构建网络所定义的条件不足 - 有太多因素需要考虑:训练的算法、体系结构、每层的神经元个数、有多少层、数据的表现等,还有其它更多因素。因此,随着时间越来越重要,大部份公司不可能负担重复的开发神经网络去有效地解决问题。
NN 神经网络,Neural Network
ANNs 人工神经网络,Artificial Neural Networks
neurons 神经元
synapses 神经键
self-organizing networks 自我调整网络
networks modelling thermodynamic properties 热动态性网络模型
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
网格算法我没听说过
好像只有网格计算这个词
网格计算是伴随着互联网技术而迅速发展起来的,专门针对复杂科学计算的新型计算模式。这种计算模式是利用互联网把分散在不同地理位置的电脑组织成一个“虚拟的超级计算机”,其中每一台参与计算的计算机就是一个“节点”,而整个计算是由成千上万个“节点”组成的“一张网格”, 所以这种计算方式叫网格计算。这样组织起来的“虚拟的超级计算机”有两个优势,一个是数据处理能力超强;另一个是能充分利用网上的闲置处理能力。简单地讲,网格是把整个网络整合成一台巨大的超级计算机,实现计算资源、存储资源、数据资源、信息资源、知识资源、专家资源的全面共享。
‘贰’ 神经网络算法的三大类分别是
神经网络算法的三大类分别是:
1、前馈神经网络:
这是实际应用中最常见的神经网络类型。第一层是输入,最后一层是输出。如果有多个隐藏层,我们称之为“深度”神经网络。他们计算出一系列改变样本相似性的变换。各层神经元的活动是前一层活动的非线性函数。
2、循环网络:
循环网络在他们的连接图中定向了循环,这意味着你可以按照箭头回到你开始的地方。他们可以有复杂的动态,使其很难训练。他们更具有生物真实性。
循环网络的目的是用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。
循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
3、对称连接网络:
对称连接网络有点像循环网络,但是单元之间的连接是对称的(它们在两个方向上权重相同)。比起循环网络,对称连接网络更容易分析。
这个网络中有更多的限制,因为它们遵守能量函数定律。没有隐藏单元的对称连接网络被称为“Hopfield 网络”。有隐藏单元的对称连接的网络被称为玻尔兹曼机。
(2)神经网络的训练算法扩展阅读:
应用及发展:
心理学家和认知科学家研究神经网络的目的在于探索人脑加工、储存和搜索信息的机制,弄清人脑功能的机理,建立人类认知过程的微结构理论。
生物学、医学、脑科学专家试图通过神经网络的研究推动脑科学向定量、精确和理论化体系发展,同时也寄希望于临床医学的新突破;信息处理和计算机科学家研究这一问题的目的在于寻求新的途径以解决不能解决或解决起来有极大困难的大量问题,构造更加逼近人脑功能的新一代计算机。
‘叁’ 神经网络的具体算法
神经网络和粗集理论是智能信息处理的两种重要的方法,其任务是从大量观察和实验数据中获取知识、表达知识和推理决策规则。粗集理论是基于不可分辩性思想和知识简化方法,从数据中推理逻辑规则,适合于数据简化、数据相关性查找、发现数据模式、从数据中提取规则等。神经网络是利用非线性映射的思想和并行处理方法,用神经网络本身的结构表达输入与输出关联知识的隐函数编码,具有较强的并行处理、逼近和分类能力。在处理不准确、不完整的知识方面,粗集理论和神经网络都显示出较强的适应能力,然而两者处理信息的方法是不同的,粗集方法模拟人类的抽象逻辑思维,神经网络方法模拟形象直觉思维,具有很强的互补性。
首先,通过粗集理论方法减少信息表达的属性数量,去掉冗余信息,使训练集简化,减少神经网络系统的复杂性和训练时间;其次利用神经网络优良的并行处理、逼近和分类能力来处理风险预警这类非线性问题,具有较强的容错能力;再次,粗集理论在简化知识的同时,很容易推理出决策规则,因而可以作为后续使用中的信息识别规则,将粗集得到的结果与神经网络得到的结果相比较,以便相互验证;最后,粗集理论的方法和结果简单易懂,而且以规则的形式给出,通过与神经网络结合,使神经网络也具有一定的解释能力。因此,粗集理论与神经网络融合方法具有许多优点,非常适合处理诸如企业战略风险预警这类非结构化、非线性的复杂问题。
关于输入的问题--输入模块。
这一阶段包括初始指标体系确定,根据所确定的指标体系而形成的数据采集系统及数据预处理。企业战略风险的初始评价指标如下:
企业外部因素:政治环境(法律法规及其稳定性),经济环境(社会总体收入水平,物价水平,经济增长率),产业结构(进入产业障碍,竞争对手数量及集中程度),市场环境(市场大小)。
企业内部因素:企业盈利能力(销售利润率,企业利润增长率),产品竞争能力(产品销售率,市场占有率),技术开发能力(技术开发费比率,企业专业技术人才比重),资金筹措能力(融资率),企业职工凝聚力(企业员工流动率),管理人才资源,信息资源;战略本身的风险因素(战略目标,战略重点,战略措施,战略方针)。
本文所建立的预警指标系统是针对普遍意义上的企业,当该指标系统运用于实际企业时,需要对具体指标进行适当的增加或减少。因为各个企业有其具体的战略目标、经营活动等特性。
计算处理模块。这一模块主要包括粗集处理部分和神经网络处理部分。
粗集处理阶段。根据粗集的简化规则及决策规则对数据进行约简,构造神经网络的初始结构,便于神经网络的训练。
企业战略风险分析需要解决的问题是在保证对战略风险状态评价一致的情况下,选择最少的特征集,以便减少属性维数、降低计算工作量和减少不确定因素的影响,粗集理论中的属性约简算法可以很好地解决这个问题。
然后是输出模块~
该模块是对将发生的战略风险问题发出警报。
按照战略风险大小强弱程度的不同,可将其分为三个层次。第一层次是轻微战略风险,是损失较小、后果不甚明显,对企业的战略管理活动不构成重要影响的各类风险。这类风险一般情况下无碍大局,仅对企业形成局部和微小的伤害。第二层次是一般战略风险,是损失适中、后果明显但不构成致命性威胁的各类风险。这类风险的直接后果使企业遭受一定损失,并对其战略管理的某些方面带来较大的不利影响或留有一定后遗症。第三层次是致命性战略风险,指损失较大,后果严重的风险。这类风险的直接后果往往会威胁企业的生存,导致重大损失,使之一时不能恢复或遭受破产。在实际操作中,每个企业应根据具体的状况,将这三个层次以具体的数值表现出来。
下面回答你的问题:
总的来说,神经网络输入的是初始指标体系;输出的是风险。
你所说的风险应该说属于输出范畴,具体等级分为三级:无警、轻警、重警,并用绿、黄、红三种颜色灯号表示。其中绿灯区表示企业综合指标所反映的实际运行值与目标值基本一致,运行良好;黄灯区表示企业综合指标所反映的实际运行值与目标值偏离较大,要引起企业的警惕。若采取一定的措施可转为绿灯区,若不重视可在短期内转为红灯区;红灯区则表示这种偏离超过企业接受的可能,并给企业带来整体性的重大损失。例如:销售利润率极低、资产负债率过高,资源配置不合理、缺乏发展后劲等,必须找出原因,继而采取有效措施,使企业的战略管理活动始终处于“安全”的状态。
希望以上答案能够帮到你,祝你好运~
‘肆’ 神经网络算法原理
4.2.1 概述
人工神经网络的研究与计算机的研究几乎是同步发展的。1943年心理学家McCulloch和数学家Pitts合作提出了形式神经元的数学模型,20世纪50年代末,Rosenblatt提出了感知器模型,1982年,Hopfiled引入了能量函数的概念提出了神经网络的一种数学模型,1986年,Rumelhart及LeCun等学者提出了多层感知器的反向传播算法等。
神经网络技术在众多研究者的努力下,理论上日趋完善,算法种类不断增加。目前,有关神经网络的理论研究成果很多,出版了不少有关基础理论的着作,并且现在仍是全球非线性科学研究的热点之一。
神经网络是一种通过模拟人的大脑神经结构去实现人脑智能活动功能的信息处理系统,它具有人脑的基本功能,但又不是人脑的真实写照。它是人脑的一种抽象、简化和模拟模型,故称之为人工神经网络(边肇祺,2000)。
人工神经元是神经网络的节点,是神经网络的最重要组成部分之一。目前,有关神经元的模型种类繁多,最常用最简单的模型是由阈值函数、Sigmoid 函数构成的模型(图 4-3)。
储层特征研究与预测
以上算法是对每个样本作权值修正,也可以对各个样本计算δj后求和,按总误差修正权值。
‘伍’ BP神经网络的原理的BP什么意思
原文链接:http://tecdat.cn/?p=19936
在本教程中,您将学习如何在R语言中创建神经网络模型。
神经网络(或人工神经网络)具有通过样本进行学习的能力。人工神经网络是一种受生物神经元系统启发的信息处理模型。它由大量高度互连的处理元件(称为神经元)组成,以解决问题。它遵循非线性路径,并在整个节点中并行处理信息。神经网络是一个复杂的自适应系统。自适应意味着它可以通过调整输入权重来更改其内部结构。
该神经网络旨在解决人类容易遇到的问题和机器难以解决的问题,例如识别猫和狗的图片,识别编号的图片。这些问题通常称为模式识别。它的应用范围从光学字符识别到目标检测。
本教程将涵盖以下主题:
神经网络概论
正向传播和反向传播
激活函数
R中神经网络的实现
案例
利弊
结论
- # 创建测试集test=data.frame(专业知识,沟通技能得分)
- ## 使用神经网络进行预测Pred$result
- 0.99282020800.33355439250.9775153014
- # 将概率转换为设置阈值0.5的二进制类别pred <- ifelse(prob>0.5, 1, 0)pred
- 101
模式识别:神经网络非常适合模式识别问题,例如面部识别,物体检测,指纹识别等。
异常检测:神经网络擅长异常检测,它们可以轻松检测出不适合常规模式的异常模式。
时间序列预测:神经网络可用于预测时间序列问题,例如股票价格,天气预报。
自然语言处理:神经网络在自然语言处理任务中提供了广泛的应用,例如文本分类,命名实体识别(NER),词性标记,语音识别和拼写检查。
神经网络概论
神经网络是受人脑启发执行特定任务的算法。它是一组连接的输入/输出单元,其中每个连接都具有与之关联的权重。在学习阶段,网络通过调整权重进行学习,来预测给定输入的正确类别标签。
人脑由数十亿个处理信息的神经细胞组成。每个神经细胞都认为是一个简单的处理系统。被称为生物神经网络的神经元通过电信号传输信息。这种并行的交互系统使大脑能够思考和处理信息。一个神经元的树突接收来自另一个神经元的输入信号,并根据这些输入将输出响应到某个其他神经元的轴突。
创建测试数据集
创建测试数据集:专业知识得分和沟通技能得分
预测测试集的结果
使用计算函数预测测试数据的概率得分。
现在,将概率转换为二进制类。
预测结果为1,0和1。
利弊
神经网络更灵活,可以用于回归和分类问题。神经网络非常适合具有大量输入(例如图像)的非线性数据集,可以使用任意数量的输入和层,可以并行执行工作。
还有更多可供选择的算法,例如SVM,决策树和回归算法,这些算法简单,快速,易于训练并提供更好的性能。神经网络更多的是黑盒子,需要更多的开发时间和更多的计算能力。与其他机器学习算法相比,神经网络需要更多的数据。NN仅可用于数字输入和非缺失值数据集。一位着名的神经网络研究人员说:“神经网络是解决任何问题的第二好的方法。最好的方法是真正理解问题。”
神经网络的用途
神经网络的特性提供了许多应用方面,例如:
最受欢迎的见解
1.r语言用神经网络改进nelson-siegel模型拟合收益率曲线分析
2.r语言实现拟合神经网络预测和结果可视化
3.python用遗传算法-神经网络-模糊逻辑控制算法对乐透分析
4.用于nlp的python:使用keras的多标签文本lstm神经网络分类
5.用r语言实现神经网络预测股票实例
6.R语言基于Keras的小数据集深度学习图像分类
7.用于NLP的seq2seq模型实例用Keras实现神经机器翻译
8.python中基于网格搜索算法优化的深度学习模型分析糖
9.matlab使用贝叶斯优化的深度学习
‘陆’ 简单介绍神经网络算法
直接简单介绍神经网络算法
神经元:它是神经网络的基本单元。神经元先获得输入,然后执行某些数学运算后,再产生一个输出。
神经元内输入 经历了3步数学运算,
先将两个输入乘以 权重 :
权重 指某一因素或指标相对于某一事物的重要程度,其不同于一般的比重,体现的不仅仅是某一因素或指标所占的百分比,强调的是因素或指标的相对重要程度
x1→x1 × w1
x2→x2 × w2
把两个结果相加,加上一个 偏置 :
(x1 × w1)+(x2 × w2)+ b
最后将它们经过 激活函数 处理得到输出:
y = f(x1 × w1 + x2 × w2 + b)
激活函数 的作用是将无限制的输入转换为可预测形式的输出。一种常用的激活函数是 sigmoid函数
sigmoid函数的输出 介于0和1,我们可以理解为它把 (−∞,+∞) 范围内的数压缩到 (0, 1)以内。正值越大输出越接近1,负向数值越大输出越接近0。
神经网络: 神经网络就是把一堆神经元连接在一起
隐藏层 是夹在输入输入层和输出层之间的部分,一个神经网络可以有多个隐藏层。
前馈 是指神经元的输入向前传递获得输出的过程
训练神经网络 ,其实这就是一个优化的过程,将损失最小化
损失 是判断训练神经网络的一个标准
可用 均方误差 定义损失
均方误差 是反映 估计量 与 被估计量 之间差异程度的一种度量。设t是根据子样确定的总体参数θ的一个估计量,(θ-t)2的 数学期望 ,称为估计量t的 均方误差 。它等于σ2+b2,其中σ2与b分别是t的 方差 与 偏倚 。
预测值 是由一系列网络权重和偏置计算出来的值
反向传播 是指向后计算偏导数的系统
正向传播算法 是由前往后进行的一个算法
‘柒’ 神经网络算法
20 世纪五、六⼗年代,科学家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影响,发明了感知机(Perceptrons)。
⼀个感知器接受⼏个⼆进制输⼊, ,并产⽣⼀个⼆进制输出:
如上图所示的感知机有三个输⼊: 。通常可以有更多或更少输⼊。 我们再引⼊权重: ,衡量输入对输出的重要性。感知机的输出为0 或者 1,则由分配权重后的总和 ⼩于等于或者⼤于阈值决定。和权重⼀样,阈值(threshold)是⼀个实数,⼀个神经元的参数。⽤更精确的代数形式如下:
给三个因素设置权重来作出决定:
可以把这三个因素对应地⽤⼆进制变量 来表⽰。例如,如果天⽓好,我们把
,如果不好, 。类似地,如果你的朋友陪你去, ,否则 。 也类似。
这三个对于可能对你来说,“电影好不好看”对你来说最重要,而天气显得不是那么的重要。所以你会这样分配权值: ,然后定义阈值threshold=5。
现在,你可以使⽤感知器来给这种决策建⽴数学模型。
例如:
随着权重和阈值的变化,你可以得到不同的决策模型。很明显,感知机不是⼈做出决策使⽤的全部模型。但是这个例⼦说明了⼀个感知机如何能权衡不同的依据来决策。这看上去也可以⼤致解释⼀个感知机⽹络有时确实能够做出一些不错的决定。
现在我们队上面的结构做一点变化,令b=-threshold,即把阈值移到不等号左边,变成偏置, 那么感知器的规则可以重写为:
引⼊偏置只是我们描述感知器的⼀个很⼩的变动,但是我们后⾯会看到它引导更进⼀步的符号简化。因此,我们不再⽤阈值,⽽总是使⽤偏置。
感知机是首个可以学习的人工神经网络,它的出现引起的神经网络的第一层高潮。需要指出的是,感知机只能做简单的线性分类任务,而且Minsky在1969年出版的《Perceptron》书中,证明了感知机对XOR(异或)这样的问题都无法解决。但是感知机的提出,对神经网络的发展是具有重要意义的。
通过上面的感知机的观察我们发现一个问题,每个感知机的输出只有0和1,这就意味着有时我们只是在单个感知机上稍微修改了一点点权值w或者偏置b,就可能造成最终输出完全的反转。也就是说,感知机的输出是一个阶跃函数。如下图所示,在0附近的时候,输出的变化是非常明显的,而在远离0的地方,我们可能调整好久参数也不会发生输出的变化。
这样阶跃的跳变并不是我们想要的,我们需要的是当我们队权值w或者偏置b做出微小的调整后,输出也相应的发生微小的改变。这同时也意味值我们的输出不再只是0和1,还可以输出小数。由此我们引入了S型神经元。
S型神经元使用 S 型函数,也叫Sigmoid function函数,我们用它作为激活函数。其表达式如下:
图像如下图所示:
利⽤实际的 σ 函数,我们得到⼀个,就像上⾯说明的,平滑的感知器。 σ 函数的平滑特性,正是关键因素,⽽不是其细部形式。 σ 的平滑意味着权重和偏置的微⼩变化,即 ∆w 和 ∆b,会从神经元产⽣⼀个微⼩的输出变化 ∆output。实际上,微积分告诉我们
∆output 可以很好地近似表⽰为:
上面的式子是⼀个反映权重、偏置变化和输出变化的线性函数。这⼀线性使得我们可以通过选择权重和偏置的微⼩变化来达到输出的微⼩变化。所以当 S 型神经元和感知器本质上是相同的,但S型神经元在计算处理如何变化权重和偏置来使输出变化的时候会更加容易。
有了对S型神经元的了解,我们就可以介绍神经网络的基本结构了。具体如下:
在⽹络中最左边的称为输⼊层,其中的神经元称为输⼊神经元。最右边的,即输出层包含有输出神经元,在图中,输出层只有⼀个神经元。中间层,既然这层中的神经元既不是输⼊也不是输出,则被称为隐藏层。
这就是神经网络的基本结构,随着后面的发展神经网络的层数也随之不断增加和复杂。
我们回顾一下神经网络发展的历程。神经网络的发展历史曲折荡漾,既有被人捧上天的时刻,也有摔落在街头无人问津的时段,中间经历了数次大起大落。
从单层神经网络(感知机)开始,到包含一个隐藏层的两层神经网络,再到多层的深度神经网络,一共有三次兴起过程。详见下图。
我们希望有⼀个算法,能让我们找到权重和偏置,以⾄于⽹络的输出 y(x) 能够拟合所有的 训练输⼊ x。为了量化我们如何实现这个⽬标,我们定义⼀个代价函数:
这⾥ w 表⽰所有的⽹络中权重的集合, b 是所有的偏置, n 是训练输⼊数据的个数,
a 是表⽰当输⼊为 x 时输出的向量,求和则是在总的训练输⼊ x 上进⾏的。当然,输出 a 取决于 x, w和 b,但是为了保持符号的简洁性,我没有明确地指出这种依赖关系。符号 ∥v∥ 是指向量 v 的模。我们把 C 称为⼆次代价函数;有时也称被称为均⽅误差或者 MSE。观察⼆次代价函数的形式我们可以看到 C(w, b) 是⾮负的,因为求和公式中的每⼀项都是⾮负的。此外,代价函数 C(w,b)的值相当⼩,即 C(w; b) ≈ 0,精确地说,是当对于所有的训练输⼊ x, y(x) 接近于输出 a 时。因
此如果我们的学习算法能找到合适的权重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,当 C(w; b) 很⼤时就不怎么好了,那意味着对于⼤量地输⼊, y(x) 与输出 a 相差很⼤。因此我们的训练算法的⽬的,是最⼩化权重和偏置的代价函数 C(w; b)。换句话说,我们想要找到⼀系列能让代价尽可能⼩的权重和偏置。我们将采⽤称为梯度下降的算法来达到这个⽬的。
下面我们将代价函数简化为C(v)。它可以是任意的多元实值函数, 。
注意我们⽤ v 代替了 w 和 b 以强调它可能是任意的函数,我们现在先不局限于神经⽹络的环境。
为了使问题更加简单我们先考虑两个变量的情况,想象 C 是⼀个只有两个变量 和 的函数,我们的目的是找到 和 使得C最小。
如上图所示,我们的目的就是找到局部最小值。对于这样的一个问题,一种方法就是通过微积分的方法来解决,我们可以通过计算导数来求解C的极值点。但是对于神经网络来说,我们往往面对的是非常道的权值和偏置,也就是说v的维数不只是两维,有可能是亿万维的。对于一个高维的函数C(v)求导数几乎是不可能的。
在这种情况下,有人提出了一个有趣的算法。想象一下一个小球从山顶滚下山谷的过程, 我们的⽇常经验告诉我们这个球最终会滚到⾕底。我们先暂时忽略相关的物理定理, 对球体的⾁眼观察是为了激发我们的想象⽽不是束缚我们的思维。因此与其陷进物理学⾥凌乱的细节,不如我们就这样问⾃⼰:如果我们扮演⼀天的上帝,能够构造⾃⼰的物理定律,能够⽀配球体可以如何滚动,那么我们将会采取什么样的运动学定律来让球体能够总是滚落到⾕底呢?
为了更精确地描述这个问题,让我们思考⼀下,当我们在 和 ⽅向分别将球体移动⼀个很⼩的量,即 ∆ 和 ∆ 时,球体将会发⽣什么情况。微积分告诉我们 C 将会有如下变化:
也可以用向量表示为
现在我们的问题就转换为不断寻找一个小于0的∆C,使得C+∆C不断变小。
假设我们选取:
这⾥的 η 是个很⼩的正数(称为学习速率),于是
由于 ∥∇C∥2 ≥ 0,这保证了 ∆C ≤ 0,即,如果我们按照上述⽅程的规则去改变 v,那么 C
会⼀直减⼩,不会增加。
所以我们可以通过不断改变v来C的值不断下降,是小球滚到最低点。
总结⼀下,梯度下降算法⼯作的⽅式就是重复计算梯度 ∇C,然后沿着相反的⽅向移动,沿着⼭⾕“滚落”。我们可以想象它像这样:
为了使梯度下降能够正确地运⾏,我们需要选择合适的学习速率η,确保C不断减少,直到找到最小值。
知道了两个变量的函数 C 的梯度下降方法,我们可以很容易的把它推广到多维。我们假设 C 是⼀个有 m 个变量 的多元函数。 ∆C 将会变为:
其中, ∇C为
∆v为:
更新规则为:
在回到神经网络中,w和b的更新规则为:
前面提到神经⽹络如何使⽤梯度下降算法来学习他们⾃⾝的权重和偏置。但是,这⾥还留下了⼀个问题:我们并没有讨论如何计算代价函数的梯度。这里就需要用到一个非常重要的算法:反向传播算法(backpropagation)。
反向传播算法的启示是数学中的链式法则。
四个方程:
输出层误差方程:
当前层误差方程:
误差方程关于偏置的关系:
误差方程关于权值的关系
算法描述:
检视这个算法,你可以看到为何它被称作反向传播。我们从最后⼀层开始向后计算误差向量δ。这看起来有点奇怪,为何要从后⾯开始。但是如果你认真思考反向传播的证明,这种反向移动其实是代价函数是⽹络输出的函数的结果。为了理解代价随前⾯层的权重和偏置变化的规律,我们需要重复作⽤链式法则,反向地获得需要的表达式。
参考链接: http://neuralnetworksanddeeplearning.com/
‘捌’ 用Matlab算BP神经网络的具体算法
BP神经网络的传递函数一般采用sigmiod函数,学习算法一般采用最小梯度下降法;下面是具体的程序例子:
例1 采用动量梯度下降算法训练 BP 网络。
训练样本定义如下:
输入矢量为
p =[-1 -2 3 1
-1 1 5 -3]
目标矢量为 t = [-1 -1 1 1]
解:本例的 MATLAB 程序如下:
close all
clear
echo on
clc
% NEWFF——生成一个新的前向神经网络
% TRAIN——对 BP 神经网络进行训练
% SIM——对 BP 神经网络进行仿真
pause
% 敲任意键开始
clc
% 定义训练样本
% P 为输入矢量
P=[-1, -2, 3, 1; -1, 1, 5, -3];
% T 为目标矢量
T=[-1, -1, 1, 1];
pause;
clc
% 创建一个新的前向神经网络
net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')
% 当前输入层权值和阈值
inputWeights=net.IW{1,1}
inputbias=net.b{1}
% 当前网络层权值和阈值
layerWeights=net.LW{2,1}
layerbias=net.b{2}
pause
clc
% 设置训练参数
net.trainParam.show = 50;
net.trainParam.lr = 0.05; 学习速率
net.trainParam.mc = 0.9; 动量系数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
pause
clc
% 调用TRAINGDM 算法训练 BP 网络
[net,tr]=train(net,P,T);
pause
clc
% 对 BP 网络进行仿真
A = sim(net,P)
% 计算仿真误差
E = T - A
MSE=mse(E)
pause
clc
echo off