第六百三十四章 (2/2)
请安装我们的客户端
更新超快的免费小说APP
添加到主屏幕
请点击,然后点击“添加到主屏幕”
过程中,网络已经对数万个样本能够给出正确的反应了,那么再给它输入一个它没见过的数据,它也应该有很大概率给出我们预期的决策。这就是一个神经网络工作的原理。
但这里还有一个问题,在训练过程中,当实际输出值和期望输出值产生差异的时候,要如何去调整各个参数呢?
当然,在思考怎么做之前,也应该先弄清楚:通过调整参数的方式获得期望的输出,这个方法行得通吗?
实际上,对于感知器网络来说,这个方法基本不可行。
比如在上图有39个参数的感知器网络中,如果维持输入不变,我们改变某个参数的值,那么最终的输出基本完全不可预测。
它或者从0变到,当然也可能维持不变。这个问题的关键在于:输入和输出都是二进制的,只能是0或者。
如果把整个网络看成一个函数,那么这个函数不是连续的。
因此,为了让训练成为可能,我们需要一个输入和输出能够在实数上保持连续的神经网络。于是,这就出现了sigid神经元。
sigid神经元是现代神经网络经常使用的基本结构。它与感知器的结构类似,但有两个重要的区别。
第一,它的输入不再限制为0和,而可以是任意0~之间的实数。
第二,它的输出也不再限制为0和,而是将各个输入的加权求和再加上偏置参数,经过一个称为sigid函数的计算作为输出。
具体来说,假设z=x+2x2+3x3+...+b,那么输出utput=σ,其中:σ=/。
σ是一个平滑、连续的函数。而且,它的输出也是0~之间的实数,这个输出值可以直接作为下一层神经元的输入,保持在0~之间。
可以想象,在采用sigid神经元组装神经网络之后,网络的输入和输出都变为连续的了,也就是说,当我们对某个参数的值进行微小的改变的时候,它的输出也只是产生微小的改变。这样就使得逐步调整参数值的训练成为可能。
在历史上,很多研究人员曾经也做过尝试,ihaelNielsen的书《NeuralNetrksandDeepLearning》这本书中也曾经提到过这个例子。
这个神经网络只有一层隐藏层,属于浅层的神经网络。而真正的深度神经网络,则会有多层隐藏层。
神经元系统采用了左右脑半球的设计方式进行设计和制造。
最右侧则是输出层,有0个神经元节点,分别代表识别结果是0,,2,...,9。当然,受sigid函数σ的限制,每个输出也肯定是0~之间的数。
那我们得到一组输出值之后,哪个输出的值最大,最终的识别结果就是它。
而在训练的时候,输出的形式则是:正确的那个数字输出为,其它输出为0,隐藏层和输出层之间也是全连接。
神经网络共的权重参数有74*5+5*0=90个,偏置参数有5+0=25个,总共参数个数为:90+25=935个。
这是一个非常惊人的数字。