English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية 
神经网络
与学习落后的误差传播
Colin Fahey
neuron_group01.jpg
生物神经网络

1. 软件

NeuralNetwork20080614.zip
神经网络的源代码(C#)
21971 字节
MD5: 94443565716e1101a3326dc2ffd558fd

2. 导言

本文档介绍了如何实施人工神经网络是能够被受过训练的认识模式。
本文档介绍了模型的神经网络学习由一种算法,使用“落后的误差传播” 。
本文件包含了基本的示威学习“落后的误差传播” 。  本文件有一个链接到计算机代码。  计算机代码,包括示威游行。  计算机代码可以用来建立复杂的神经网络。  然而,计算机代码,只是为了示范目的。  另类的实施可以减少记忆体使用量,并可能增加的速度。

3. 替代学习落后的误差传播

本文档介绍了模型的神经网络学习算法由一个名为“落后的误差传播” 。  该算法可以需要很长的时间去学习各种经验教训。  此外,该算法可以随机不学习各种经验教训,由于随机初始状态的神经网络,方可接受训练。
学习“缔积极投入”是一个重要的替代学习“落后的误差传播” 。  学习缔积极投入,根本联营公司的投入,同时积极。  这样的学习可以快速和可靠的。  但是,对于许多实际目的,有没有明显的方法,可使用的神经网络,学会协会,而有一个明显的方法,可使用的网络学习落后的误差传播。
一些生物神经网络是众所周知的了解,由协会积极投入。  落后的误差传播尚未观察到任何生物的神经网络。
本文档介绍了有趣的用途的神经网络学习落后的误差传播。  然而,学习由协会是一个非常重要的替代算法学习。  设计一个神经网络学会,由协会来解决一个特别的问题,可能会较为困难desgining另一种神经网络学习落后的误差传播,但生物系统学习,协会,及学习能力的生物系统是显而易见的。

4. 生物神经元

4.1 神经元细胞

neuron_1umeter01.jpg
生物神经元( “多极化的”类型, ~4 um细胞体)
神经元是类型的细胞有能力,用来接收和发送神经信号。
神经元的基础上的神经系统,发现在动物,鸟类,鱼类,昆虫等。
大脑与记忆体和逻辑,以及简单的反射系统,均安排为基础的神经元。
神经元也可用来传达信号的长距离,在动物的身体,例如从传感器到脑部,或由大脑的肌肉。
行为的生物神经元是非常复杂的,但下面的简化描述捕获的基本原则:
神经元累积收到的信号从其他神经元,如果总信号的积累超过某一阈值,神经元传递自己的信号,其他神经元。

4.2 神经元的部分

neuron_labels01.jpg
部分生物神经元
索玛
细胞体的神经元
树突
纤维与化学受体(投入)延伸,从细胞体的神经元。一个神经细胞通常有许多树突,树突,往往有很多分支。
轴突
纤维与化学品排放(产出)在其端点延伸,从细胞体的神经元。神经元有一个单一的轴突,轴突通常有极少数分行。
突触
配置这种轴突的神经元1和树突的另一个神经元的分离,由一个很小的差距。在这样的配置,化学品排放的一轴突的神经元的跨突触,并收到由树突其他神经元。这是如何影响其他神经元的神经元。

4.3 神经元发射

一个神经细胞积累的化学信号,从它的树突,如果总的化学积累超过某一阈值,内部在一段时间内,神经元的“火灾” ,发送自己的信号通过其轴突。
一些神经元有能力发射脉冲对秩序的100 Hz 。
信号通过神经元涉及囤积(Na)钠,钾(K) , (Cl)和氯离子,以及所造成的电化学电位(即电压) 。
静电压(-70 mV)和着火电压(+30 mV)可以衡量,甚至影响常规电气电路。
以下是电压记录大鼠神经元的射击率大约100 Hz时,一个单一的晶须是感动,举行了其休息的位置是:
neuron_spikes_whisker01.jpg
老鼠神经元发射(100 Hz)由于持有晶须。
以下是相同的信号表现为音频: neuron_spikes_whisker01.wav
虽然刺激不断,神经元的信号是快速脉动。

4.4 神经网络

人脑有大约10^11 ( 100亿元)的神经元。
每个神经元在小脑收到的投入多达10^4 (10000)突触。
虽然轴突和树突的神经元,往往延长,只有几微米远离细胞体,有些轴突是对秩序的一米的长度。
一脑的神经元轴突相对较短的分组在地区或集群。
大脑也有捆绑的神经元比较长的轴突连接的地区分隔厘米。
因此,一个层次化网络的处理单元组成的。

4.5 神经网络的地位

的地位,网络的神经元,既是方式,神经元连接和信号在所有的突触。
目前还不清楚有多少状态信息将会消失,如果脑tranquilized在总闲置的任何数量的时间。
可以想见的资料,只有通过持续的信号,通过移动网络,而不是通过网络连接本身一样,元胞自动机的模拟像Conway's “Game of Life” ,简单Dynamic Random Access Memory (DRAM)芯片,回声在一个会议厅。

4.6 神经网络学习

传统的学习时发生的属性改变树突在突触成为更多或更少有效率在接受化学信号从一个轴突。
原因这种变化是复杂的,但结果是一个神经细胞需要不同的组合突触的投入,触发输出信号。

5. 人工神经元

5.1 定义

一个“人工神经元”是一种算法或物理装置,实现了一个数学模型,灵感的基本行为的生物神经元。
一个神经细胞积聚所收到的信号从其他神经元或投入(例如,传感器) ,如果总信号的积累超过某一阈值,神经元传递一个信号,其他神经元或产出(例如,效应) 。
任何数学模型结合的思想,积累了多种投入和高产一个单一的输出(即加剧的相对强度的投入相对一些象征性的水平) ,可用于模式识别。
这种模型可以根据一个人工神经元。
如果影响每个输入可以进行修改,那么,该模型可以支持学习。

5.2 激活函数

1 “激活函数”是一种数学函数转换输入值低于某一特定的价值相对较低的产值,并将其转换为输入值以上,特别是价值相对较高的产值。
1 “激活功能”是用来转换的加权总和,输入值的一个神经元的价值,代表的输出神经元。
1 “sigmoid”功能,是一种通用类别的顺利职能渐近的做法,下限为输入值接近负至无限远,并渐近的做法,上限输入值接近积极至无限远。
一个具体的sigmoid职能是“logistic sigmoid”功能:
logistic_sigmoid_function.jpg
该“Logistic Sigmoid”功能: 1 / ( 1 + Exp( -x ) )
该“logistic sigmoid”功能可以被用来作为“激活函数”为数学模型的神经元。
数学衍生的“logistic sigmoid”可以计算为一个公式,因此很容易计算相关的学习公式。

5.3 神经网络的输入

“神经网络的输入”代表输入到一个神经网络。
neural_network_input.jpg
神经网络的输入
“Input”是数值的投入。

5.4 神经网络的输出

“神经网络的输出”代表一个输出的神经网络。
neural_network_output.jpg
神经网络的输出
“Output”是数值的输出。
“Error”是一个数值代表之间的差额,产值和“Desired”值:
Error = (Output - Desired);  // Derived from: Output = Desired + Error;
“Desired”价值,代表一个理想值,或是一个理想值,或是正确的价值观,即神经网络的应出示作为输出在回应具体的投入。
误差值是计算和分配给“Error”由训练算法。
误差值是反馈给神经网络。
神经网络能够适应,以减少差异,其产出和理想的价值观;也就是说,神经网络可以借鉴,因此,可以减少今后的错误。

5.5 神经元体

一个“神经细胞组织,”代表机构的一个神经细胞,累积投入的贡献,并增加了一个偏见,和变换所产生的价值是由“激活函数”产生的产值。
neuron_body.jpg
神经元体
“InputAccumulator”是一种价值,代表的累积投入,从神经元的联系,其产出是连接到神经元的机构。
“Bias”是一个可调的价值是结合累积的输入值。
“Output”是一个数值代表产值神经元。
产值计算使用下列公式:
Output = ActivationFunction( Bias + InputAccumulator );
“ErrorAccumulator”是一个数值代表累积误差。
由于特定的产值神经元的机构,并赋予一个特定的输出误差值,累积误差值是调整根据下列公式:
ErrorAccumulator += Output * (1 - Output) * OutputError;
“Rate”是一个价值的影响如何“Bias”价值的变化,为了回应“ErrorAccumulator”值:
Bias += (-1) * Rate * ErrorAccumulator;

5.6 神经元链接

一个“神经细胞连接”代表之间的联系:
( 1 )输入的神经网络和投入的一个神经细胞体;
或,
( 2 )一个输出一个神经元的身体和投入的另一个神经元的机构;
或,
( 3 )输出一个神经元的身体和一个输出的神经网络。
neuron_link.jpg
神经元链接
“Input”是一个高速缓存的输入到该连结。
“Weight”是一个可调的价值,如何影响信号的价值观和错误价值观的宣传,通过联系汇率制度。
“Output”是一个高速缓存的输出链接。
该值是计算使用下列公式:
Output = Weight * Input;
“Error”是一个高速缓存的误差联系汇率制度。
“WeightedError”是一个缓存的错误连结,加权重量因素:
WeightedError = Weight * Error;
“Rate”是一个价值的影响如何“Weight”价值的变化,为了回应“Error”价值和“Input”价值。
在神经网络学习, “Weight”的价值是在调整方式如下:
Weight += (-1) * Rate * Input * Error;

5.7 神经网络

“神经网络”包含了投入,产出,神经元的机构,和链接。
下面的图像,描绘一个简单的神经网络,有两个投入,以及两个机构的神经元在第一层,和一个单一的神经元在第二层,和一个输出。
neuron_network_drawing.jpg
例如一个神经网络
在模拟神经网络,输入值宣传着通过链接和神经元的机构,并最终到达的产出。
neuron_network_forward_propagation.jpg
例如前进,繁殖在一个神经网络
培训期间,错误的价值观所提供的产出,这些错误宣传倒退,通过神经网络,从而在改造度量衡和偏见,在神经元的机构和联系。
neuron_network_backward_propagation.jpg
例如落后的误差传播在一个神经网络

5.8 神经网络模拟

定义:
“网络仿真”程序是用来宣传网络的投入,通过链接和神经元的机构,直至达到网络的产出。
网络仿真涉及模拟,其所有的组成环节和神经元的机构。
模拟没有循环或时间:
有很多可能的网络配置,涉及循环。
有许多神经元模型,依赖于时间。
但一些最常见的应用人工神经元涉及既不循环也不是时间。
以下是数学模型的一个神经细胞团体:
Output = ActivationFunction( Bias + InputAccumulator );
与此神经元模型,以及网络“环路” ,我们只是从外部投入,产出计算的第一层神经元,以及供应这些产出的投入到下一层,计算产出为层,并继续透过层层神经元,直到最后的产出计算。
循环:
一个网络可以有联系,在形式的回路(或“周期” ) 。
举例来说,输出一个神经细胞可以直接连接到一投入相同的神经元,造成“的反馈意见” 。
另一个例子是输出神经元# 1被连接到输入神经元# 2 ,输出神经元# 2被连接到输入神经元# 1 。
如果您就可以开始从一些点,在一个网络和微量元素的路径,通过神经元和连接,服从一个双向流动的信号,并最终到达相同的起点,那么,路径是一个循环。
循环介绍有趣的可能性,信号流围绕网络无限期的一段时间。
一些简单的模型假设,它需要的具体数额的时间信号,通过个体神经元。
在这样的模式,通过信号的流通循环,只有少数神经元速度比信号分发通过循环与许多神经元。
一个神经细胞连接到本身将有最快的信号流通速度。
如果一个神经元有一个输入X ,重量W ,偏见B ,和一个非负输出Y (例如, 0.0 -> 1.0 ) ,那么我们可以形成一个振荡器,只要设置W = (-8)和B = +4和连接Y ,以X ;
我们每一次模拟神经元,信号将切换到对面的国家。
网络环路,可繁忙的活动,甚至当它不接受外部信号(刺激)的投入。
元胞自动机的规则Conway's “Game of Life”可以实施在一个神经网络,让你一个小提示的多样性活动,可以发生在一个神经网络与循环。
有限状态机(FSM) ,振荡器,挥发性记忆体(在对比的学习模式,通过不断变化的权重) ,是可能的循环。
如果一个网络环路,我们不能更新任何产出,直到我们计算的所有产出,因此,我们需要一个临时的缓冲区来存储计算的产出,直到我们计算的所有产出,然后我们可以承诺,新的输出值向神经元网络。
任何方法更新的产出在实际的网络在一个渐进的方式,而不是一个全在一次的方式,介绍了一个任意订购的时间,导致混乱。
物理模拟涉及加上实体,如行星与恒星的引力势力相互之间的所有机构,要求相同的种方法:计算的净势力对所有机构,然后再更新任何速度和立场。
时间相关性:
一个简单的网络仿真通常涉及的投入,造成了预期的产出后,一个单一的模拟时间步。
在这样一个模拟,我们认为在条件“迭代次数” ,而不是“在几秒钟的时间” 。
不必有任何书信来往迭代和时间尺度。
一个制度的设计可能会做网络仿真(迭代)只有当新的输入是可用的,这可能是发生在不规则的间隔时间。
不过,考虑的数学模型,一个神经细胞,试图模拟脉冲输出方面的生物神经元。
脉冲可能的特点是在时间的条款,如脉冲在某一特定频率或有脉冲,其曲线延伸为某一大量的时间。
我们可以有其他时间依赖的要素在一个数学模型,一个神经细胞,例如作为一项投入,蓄电池,其价值得到捐款的投入,但有一个泄漏成正比,其目前的价值。
一般而言,我们可以找到一个类比电路的内容,遵守一定的数学方程,因此可以把神经元作为电路的电阻,电容,和一个非线性放大器。
正如一位电路可以展示复杂的时间依赖的行为,输出一个神经细胞,可被视为一个功能取决于其投入和时间,在一个复杂的方式。

5.9 落后的误差传播

定义:
“落后的误差传播”是一种数学程序,开始与错误的输出的神经网络和宣传这个错误倒退,通过网络,以收益率的输出误差值为所有神经元网络。
落后的误差传播公式:
误差值在神经网络的产出计算,使用下列公式:
Error = (Output - Desired);  // Derived from: Output = Desired + Error;
错误的积累在一个神经元的机构调整,根据输出神经元的机构和输出误差(所指定的链接连接到神经元的机构) 。
每个输出的误差值,有助于错误蓄能器在下列方式:
ErrorAccumulator += Output * (1 - Output) * OutputError;
在某种意义上说,所有的输出误差在下次层泄漏倒退,通过投入的权重和积累,在输出的神经元在先前的层。
这积累的价值乘以一个值,该值是最大的,当电流输出的神经元是最中性的(最“未定” ) ,并至少当输出神经元是最极端的(很“某些” ) 。
体重变化和偏见的变化公式:
基础学习是调整权重和偏差的价值观,企图以减少未来的输出错误。
学习“率”是一个数值,基本上表明,如何迅速的神经元调整重量和偏见,价值观,根据错误的价值观。
下列公式表明,如何变更的权重的神经元与特定的输入值和其输出误差值:
Weight += (-1) * Rate * Input * Error;
下列公式表明,如何改变偏见的一个神经细胞鉴于目前的输出误差为神经元:
Bias += (-1) * Rate * Error;

6. 训练一个神经网络

6.1 培训程序

一就可以开始与受过训练的网络,并继续以减少输出误差进一步的培训,但往往一开始与一个未受过训练的网络。
前培训,随机选择的价值观为所有的重量都在神经元网络。
我注意到的问题,当我随机挑选的价值观,在间隔[ -1.0, +1.0 ] ,和我没有问题,当我选定的随机值从区间[ +0.1, +1.0 ] 。
我提到这些意见,但他们可能是由于我的失误。
目的是随机的重量减轻的可能性,任何病理情况,在一个网络。
如果所有神经元网络开始使用相同的重量,该网络将有就没有了基础,增加分化的神经元之间。
我曾指出,设置的所有偏见,价值观,以零(0.0)是可以接受的。
培训会议涉及经历一个训练集了很多次,也许是数百或数千次。
为每个通过训练集,我们认为每一个项目,训练集。
培训设置项目都有一套的投入,和一套理想的产出。
我们模拟网络,使用一套投入所指定的培训项目。
仿真产量产值。
我们宣传的错误思想倒退的神经网络计算的输出误差的所有神经元。
我们更新所有的权重和偏见。
注意事项:一学术讨论的文本神经网络的主张经历整个训练集和总结,只有体重变化和偏见。
经历了整个训练集,我们有一整套的款项,体重的变化和偏见的变化。
我们采取这些款项,并更新所有的权重和偏见。
这样的总结可以为庞大的大型训练集-和由此产生的跳转,体重空间会受到不合理的大。
所以,我觉得划分的人数,通过培训项目,获得的平均体重改变的价值观和平均偏差的价值观改变,将是合理的。
有一些东西,呼吁有关计算一个单一的体重变化矢量有点需要整个训练集在审议。
我不知道如果我只是犯了一个错误,在执行的想法,但我几乎完全放弃了对神经网络,因为如何不好的东西被转出。
然后,当我尝试天真替代,即使更新后,每一个培训项目,工作完美的东西。
考虑到整个训练集之前,做一个有一些更新的优点和缺点:
优势:
单一的训练项目,训练集与极端错误(即坏的培训项目)将不会作出大的贡献,以更新的,因为这将被压倒的影响, “良好”的数据;
缺点:
如果N是项目的数量在您的训练集,你的进展速度,以最优权重向量将划分由N 。
或者,对于给定的距离,您将有只有一小部分的提示方向在前进的道路上比较天真的做法;
也许这种技术将为您工作,但尝试了天真的做法,之前你放弃对神经网络在极大的挫折!

6.2 失败,以减少错误

训练可能会失败,以减低整体的错误为训练集。
这是很重要的检测失败,以减少错误。
以下列表说明了失败的原因,以减少错误,以及可能的解决办法。
该项目在名单中列出的近似命令的概率,与第一个项目正在最有可能的。
( 1 )权重组合已达到当地最低限度的错误,表面上是“坚持” ;
解决方法 :启动一个新的仿真与新的随机的权重。
( 2 )该网络已太少神经元或层进行编码,所有的模式,在您的训练集;
解决方案 :谨慎受理的可能性,加入层或神经元。
( 3 )一个或多个项目在您的训练集的矛盾,或是极不符合您的其他培训项目;
解决方法 :检查您的数据集的违规行为。
找到测试的项目收益率最误差为您的受过训练的网络。
看看在以技术,以平均体重的变化,超过整个数据集,以减少影响的任何坏的案件。
( 4 )学习率过高(超过任何1.0可能是过度) ,以及更新总是过的目标;
解决办法 :减少学习率。
( 5 )学习率过低(低于0.01任何可能太小) ,以及网络真的是收敛对理想的权重组合-但速度太慢;
解决方案 :增加学习率。
培训1 2层, 3 -神经网络,以配合专用或(xor)功能,可以,尽管简单的功能,无法衔接。
这可以令人惊讶和沮丧。
不过,解决的办法是简单地设置所有神经元的连接权重,以新的随机值,然后尝试列车网络。
在该案件的培训网络,以配合专用或(xor)功能,随机积极的权重似乎导致成功学习的每一次,而某些组合的正面和负面的权重,有时会导致培训失败的急剧变化。
需要选择新的随机初始权值,以收回从一个失败的衔接,是一个不幸的后果相结合的学习程序。
学习的程序,主要是寻找一个全球最低速下降,由上表面,并有潜力为在场的“当地最低”在其中搜索可以成为被困。

6.3 整体训练误差

整体误差网络的特点是可以通过的平方根的平均平方错误,或“的均方根” (RMS) 。
错误在任何特定的网络输出是由下列公式:
Error = (Output - Desired);
总和的平方误差为一个单一的培训项目是由下列公式:
double squaredError = 0.0;
foreach (NeuralNetworkOutput output in ListOfOutputs)
{
    squaredError += (output.Error * output.Error);
}
总和的平方误差的整套项目,在训练集是总结的平方误差的个别项目。下面的代码显示了如何平方误差的整套培训项目,可以计算:
double squaredError = 0.0;
for
    (
    int trainingItemIndex = 0;
    trainingItemIndex < totalTrainingItems;
    trainingItemIndex++
    )
{
    trainingSet.SetAllInputNodeValues( trainingItemIndex );
    Simulate( propagationIterations );
    trainingSet.SetAllOutputNodeErrorValues( trainingItemIndex );
    PropagateErrors( propagationIterations );
    UpdateWeightsAndBiases();

    foreach (NeuralNetworkOutput output in ListOfOutputs)
    {
        squaredError += (output.Error * output.Error);
    }
}
整体的均方根(RMS)的错误是给予的平方根的平均平方错误:
double rmsError = Math.Sqrt( squaredError / (double)totalTrainingItems );
这个值是其中一个方法的特点整体误差的一个网络在考虑所有的训练情况。

7. 学习

学习时发生的重量和偏见的价值观神经元和神经元的联系机构调整,按照指定的网络输入和输出错误的价值观。
考虑神经网络与二投入( x1和x2 ) ,以及两个环节(与度量衡w1和w2 ) ,和一神经元的身体,一个输出(y) 。
neuron_network_single_neuron.jpg
神经网络与两个投入,一个神经元和机构,以及一个输出
我们的列车,这是由供应神经元的投入,计算输出,计算错误,计算重量和偏见的变化,和更新的权重和偏见,到达新的度量衡( w1', w2' ) 。
有一个很有趣的方式可视化这一进程。
我们可以把一套度量衡作为一个向量在多维空间。例如,对于两个砝码,我们有矢量W = (w1, w2)在一个两维“空间的重量” 。
时权重调整,我们有一个新的权重向量W' = (w1',w2') 。
我们可以设想,这作为一个出发点W移动到一个新的点W'作为一个进程的一部分,以减少输出误差。
通常一将不会计算输出误差为所有可能的重量组合,因为希望的是重量的调整过程,将有效地走向的最佳结合。
不过,让我们的阴谋,表面上说,基本上显示了如何以及神经元满足所有项目的训练定为功能,它的两个砝码:
neuron_weight_space03.jpg
总结的平方误差为指定训练集作为一个功能的两个砝码(w1, w2)
基本上,学习的目标是要下降到最低水平,这表面看来,那里的错误减至最低。
一旦我们找到点W = (w1, w2)认为,殖利率最低的价值,这表面看来,学习是成品,然后我们可以简单地使用受过训练的神经元。
以下图表显示的输出受过训练的神经元作为一个函数的所有可能的投入X = (x1, x2) :
neuron_input_space02.jpg
神经元的输出作为一个功能的两个投入(x1, x2)为权重组合,尽量减少误差平方
即使加权总和,为这两个输入神经元只不过是(w1*x1 + w2*x2) ,激活函数轮流一个简单的旋转飞机在一个悬崖。
这表面上具有正确的输出值为所有输入组合(x1, x2)指定我们的训练集。
但你可以想象是如何的输入向量X = (x1, x2)类似的训练价值观,也将导致适当的输出值;此功能的神经网络是所谓的“概括”和是主要的价值,神经网络。
正如我们试图“降落”表面平方误差,我们必须“跨越式之前,我们期待” !
我们更新权重向量和偏见,然后我们评价的“高度” ,表面上在我们的新位置。
后果之一,这是我们可能移动到一个点一个更极端的错误。
另一个后果是,它可能需要一段时间才能降回的深度,我们先前的位置。
的可能性, “跨越式发展” ,以更极端的高峰和低谷的错误表面上是直接关系到“学习率” ,因为学习率的确定有多少影响,错误的价值观对我们的重量和偏见的变化。
以下图表显示如何增加学习率,加速我们到达较低的位置上平方误差表面,那里的错误减至最低。
该图还表明,增加学习率还介绍了有可能作出坏的步骤:
neuron_training_error1512_zoom.jpg
短期趋势均方根(RMS)误差为整个训练集数重复训练,学习率0.1 , 0.5 , 1.0 , 2.0 。
这里是一个图形的均方根输出误差的一个多层网络与训练集与19386项目经历了很多不好的步骤,路径的最佳权向量:
neuron_training_error_spikes.jpg
培训有时遇到尖峰,在均方根(RMS)错误,当错误增加一些重复的,然后才恢复下降趋势。
有时趋势是简单地顺利衔接,以理想的一套度量衡:
neuron_training_error1512.jpg
趋势均方根(RMS)误差为整个训练集数重复训练,学习率0.1 , 0.5 , 1.0 , 2.0 。

8. 例如:专用或(xor)

“独家-或” (xor)是一个函数接受两个布尔的投入和产量的一个单一的布尔输出根据如下表:
X1
X2
Y = xorX1X2
0
0
0
0
1
1
1
0
1
1
1
0
在一般来说,一个单一的神经元已投入{x1, x2, ...} ,进入链接,通过与度量衡{w1, w2, ...} 。
神经元计算的中间量d = bias + (w1*x1 + w2*x2 + ...) ,它可以被视为确定哪些飞机,在一个无限的一套平行平面,包含一个指定的点与坐标{x1, x2, ...} 。
神经元计算产值, y = ActivationFunction( d ) ,这已影响分裂无限的一套平行平面,以两套,其中一套生产低产值,和另一套生产高产值。
因此,一个单一的神经元的分裂多维空间,在两个地区,并以逗号分隔飞机bias + w1*x1 + w2*x2 + ...  = 0 ,并指派低产出的价值点在该地区的一个方面,飞机,并指派高产值,以点在该地区的对岸的飞机。
因此,如果两套点在多维空间有明显的分类和可完全分开,由飞机,然后一个单一的神经元,可以用来正确分类点从那些套属于一组或其他。
独家-或(xor)功能划分点在两维空间(坐标(x1, x2) )等认为,分在一套{ (0,0), (1,1) }被列为生产的产量“为0” ,并指出在设定{ (0,1), (1,0) }被列为生产的产量“1” 。
有没有一个单一的“平面” (在这种情况下,一条线) ,可以分开的四点在以两套。
因此,一个单一的神经元不能用来区分点,根据独家-或(xor)功能。
一个单一的神经元只可以分裂一个空间点在两个地区。
独家-或(xor)功能划分点,以某种方式基本上分为两维空间中,以三个地区(或者,或者, 四个地区) 。
两个神经元的可以分裂的两维空间中,以三个地区(例如,由两个截然不同的平行线) ,因此可以用来区分点,根据独家-或(xor)功能。
第三个神经元,可以用来结合起来,产出的其他两个神经元在一个单一的输出。
下面的神经网络,有两个投入,以及两个机构的神经元在第一层,和一个单一的神经元在第二层,和一个单一的输出,可以用来区分点,根据独家-或(xor)功能。
以下神经网络可以是受过训练的计算专用或(xor)功能,或神经网络可以简单地有其重量和偏见的价值观指派的方式,产生预期的行为。
neuron_network_drawing.jpg
神经网络有能力进行分类分据独家-或(xor)
计算机代码与此相关的文件表明,训练神经网络所显示的图以上,以配合专用或(xor)功能。
神经网络有时不能了解的功能,但该软件可以简单地重新启动尝试与学习一套新的初始权重。
如果软件成功地学会了独家-或(xor)功能,然后输出类似以下内容:
x1 =   0.0000   x2 =   0.0000   y =   0.0172    error =   0.0172
x1 =   1.0000   x2 =   0.0000   y =   0.9802    error =  -0.0198
x1 =   0.0000   x2 =   1.0000   y =   0.9839    error =  -0.0161
x1 =   1.0000   x2 =   1.0000   y =   0.0154    error =   0.0154
输出(y)是2 %的预期值为每四个组合的变数(x1, x2) 。
虽然网络是受过训练的学习输出值为只有4个组合的变数(与价值观0.0和1.0 ,代表布尔值) ,投入人工神经网络可以设置为任意浮动点值。
以下图片显示的输出训练神经网络的许多组合的输入值:
neuron_xor_surface02.jpg
神经网络有能力进行分类分据独家-或(xor)
表面上代表了输出的神经网络为所有可能的输入组合(x1, x2)在范围[ -2.0, +2.0 ] 。
输出是接近0.0在降低的领域,表面上和输出接近1.0在最高地区的表面。
请注意,表面上是低为上,使该点{ (0,0), (1,1) } ,表面上是在高点{ (0,1), (1,0) } 。
网络只是训练产生预期的产出为四个具体的组合,输入变量,但神经网络也生产产出的所有其他可能的组合的输入值。
的能力,神经网络,以产生合理的反应,一般案件后,正在接受培训,具体的案件,应可视为“泛化” 。
任何进程相适应的数据点到一个模型,如拟合点,一条线或其他曲线,也产生一个“泛化”作用,所以事实,即拟合的神经网络,以产生理想的产出,具体的教训,结果在一个种的泛化,是不是不平凡的,但它仍然是有趣的观察能力,一概而论,从具体案例。

9. 例如: Tic-tac-toe ( “naughts和十字架” )

9.1 导言

Tic-tac-toe ( “naughts和十字架” )是一个简单的游戏就一3 * 3网格的干细胞能显着与“O”或“X” 。
球员交替的地方, “O”和“X”马克在无人居住的细胞,直到其中一个球员完成行,列,或对角。
因为有3行, 3栏,和2对角线上,有8个获奖模式,每个玩家。
tic_tac_toe_board_and_winning_patterns.jpg
Tic-Tac-Toe局,打赢模式
这是小事写一递归函数的探索一切可能的Tic-Tac-Toe游戏,因为最长期限为游戏是9举动。
在每一个点在游戏中我们只是研究的结果,提出在每个其余空置的细胞。
这种功能可以肯定地说,一Tic-Tac-Toe游戏与“完美的球员”最后将没有赢家。

9.2 训练一个神经网络,以显示最佳动作

1递归函数可以探索一切可能的游戏及确定最佳的举措,各委员会的配置。
我们添加每个委员会的配置(投入) ,和最佳动作(预期产出) ,以列表的培训项目。
然后,我们的列车网络,以产生预期的产出为每套投入。
该网络将有9投入相应的每一个细胞的网格,并输入值将只限于以下值:
0 :空置细胞
+1 :主角播放器
-1 :对手的球员
该网络将有9产出相应的每一个细胞的网格,并输出值将只限于以下值:
0 :不要在这里动议
1 :移至这里
八产出将设置为“0” ,和一个输出将被设置为“1” 。
因此,训练后的神经网络,一个董事会的配置可以指定为投入,神经网络将表明,最好的动议。
输出最接近的“一”将表明,最好的动议,和所有其他的产出应接近“零” 。
一般而言,只要功能与布尔参数和布尔输出可以代表了一个神经网络的两层神经元。
第一层神经元可以鸿沟的多维空间的地区,和第二层相结合的地区分类,产生适当的输出值。
该Tic-Tac-Toe神经网络产生的布尔产出,虽然投入的有三个国家( -1, 0, +1 ) ,我们可以在原理,转换为这几个离散的输入值,以一套布尔的投入。
因此,两层的神经元,应足以了解Tic-Tac-Toe 。
因为网络有9个产出,有9个神经元的团体在最后的(第二)层。
剩下的唯一神经网络的设计决策,是决定神经元的数目机构向在第一层的神经网络。
作出这一决定,计算机代码可以生成和培养神经网络与N神经元在第一层。
的能力,神经网络,以了解完整的训练集为Tic-Tac-Toe可以绘制成图表。
以下图表显示整体训练集的误差在训练中的每48不同的神经网络,与N = 1,2,...,48神经元在第一层。
neuron_training_tictactoe_nlayers01.jpg
整体训练集的误差在训练中, N = 1,2,...,48神经元在第一层( N = 1是在最上方,并N = 48是在底部,和最中间曲线是较低的更高的价值观N )
另一种方法,可视化的趋势,这是形成一个表面,从序列的曲线:
neuron_training_tictactoe_surface01.jpg
整体训练集的误差在训练中, N = 1,2,...,48神经元在第一层( N = 1是在背部,和N = 48是在前面)
因此,我们看到,由于我们的做法N = 48神经元在第一层,网络似乎是可以接受的所有训练的个案。
任何少于48个神经元的水平似乎不足,学习一套完整的案件。
低的数目神经元,每增加神经元显着减少整体的错误。
但是,当神经元数是接近的人数须了解整套的经验教训,每增加神经元不仅降低了错误,由一个相对小的数额。
以下图片显示的神经网络与九月投入, 48个神经元和机构在第一层,神经元和9机构在第二层,和第9的产出。
tic_tec_toe_network.jpg
神经网络能够学习,以发挥tic-tac-toe
计算机代码与此相关的文件包括代码建立和训练神经网络如上所示。
训练集有4520培训项目。
在200训练迭代(涉及3繁殖的步骤,共200 * 4520 * 3 = 2712000仿真的步骤和相同数目的误差传播步骤) ,整体的错误,下降至1.520 ,以0.153 。
(这些数字可以依随机初始条件) 。
培训所需的好几分钟。
以下是两个例子指定的投入和生产产出的受过训练的神经网络:
Scenario #1:

Input:
  1.0000 -1.0000  0.0000
  0.0000  1.0000 -1.0000
 -1.0000  0.0000  0.0000

Best move:
  0.0001  0.0000  0.0676
  0.0001  0.0000  0.0000
  0.0000  0.0000  0.9870


Scenario #2:

Input:
 -1.0000 -1.0000  0.0000
  1.0000  1.0000  0.0000
  0.0000  0.0000  0.0000

Best move:
  0.0000  0.0000  0.0859
  0.0000  0.0000  0.9819
  0.0000  0.0000  0.0000
该网络的训练,产生最佳的动作为播放器的马克相当于“1” 。
最好的动议,为对手的球员,其对应的马克“-1” ,可以发现乘以所有投入由(-1)之前,模拟神经网络。

10. 训练神经网络

以下是引用“Artificial Intelligence” (3rd edition; Addison Wesley; 1993) ,由Patrick Henry Winston ,第22章, Learning by Training Neural Nets , p.  468 。
神经网络的训练是一门艺术
你现在知道你面临着许多选择后,您决定要工作,一个问题由训练神经网络使用反向传播:
*你如何能代表信息在神经网络的条款呢?
你如何能利用神经网络的投入,表达什么你知道吗?
你如何能利用神经网络的产出,以确定是什么你想知道吗?
*有多少神经元,如果您有在您的神经网络?
有多少投入?
有多少产出?
有多少权重?
有多少隐层?
*什么率参数应使用在反向传播公式?
*如果您训练您的神经网络,分阶段或同时?
错误的选择,导致业绩不佳。
一个小神经网络可能不会了解什么您想要了解。
一个大网将学习缓慢,可能会碰到困难,对局部极大值,并有可能展出过拟合。
一个小率参数可能促进不稳定或提供穷人的预测。
不幸的是,适当的选择取决于性质的样本。
在数学上,您可以查看样品作为代表一窥一个隐藏的功能,与一维为每个输入。
如果有很多投入,功能的多层面性质,使功能,努力思考和不可能的可视化。
因此,最好的指南,您的选择是审判和错误,支撑,如果可能的话,参考的选择,运作良好,在类似的问题。
因此,成功地部署神经网络技术需要时间和经验。
神经网络专家是艺术家,他们不是单纯的用户手册。

11. 使输入值和输出值适合的神经网络

数学模型的一个神经细胞体在本文件中产生一个产值使用“后勤Sigmoid函数” (即, ( 1 / (1 + Exp(-x)) ) ) 。
因此,产出是有限的,以范围从0.0 ,以1.0 。