首页 > 代码库 > 连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(4)

连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(4)

首先祝贺本书在百度阅读上线了

主页:http://t.cn/RPjZvzs

上一章中,给出了感知机的一个实现。在该实现中设置了感知机网络的学习算法为LMS。LMS(Least mean square)最小均方差,它是在1960年,由Widrow和他的研究生Marcian Hoff提出的,因此也叫做Widrow-Hoff学习算法。该算法是基于Adaline网络推导出来的,Adaline网络和感知机的区别就是将感知机的Step函数换为Linear线性函数。LMS学习算法的权值和偏置跟新公式为:

iw(k+1)= iw(k)+?e(k)p(k)

ib(k+1)= ib(k)+?e(k)

其中w为权值,e为误差,p为神经元输入,b为偏置,?为学习率,通常取0到1之间的小数。该算法的更新与感知机的学习规则非常类似,新的权值都等于旧的权值加上误差和输入的乘积,网络经过若干次迭代后,就可能趋于稳定,达到可用。

以下是LMS学习算法的实现:

protected void updateNeuronWeights(Neuron neuron) {
    // 取得神经元误差
    doubleneuronError = neuron.getError();
    // 根据所有的神经元输入迭代学习
    for(Connection connection : neuron.getInputConnections()) {
        // 神经元的一个输入
       double input = connection.getInput();
        // 计算权值的变更
       double weightChange = this.learningRate * neuronError * input;
        // 更新权值
        Weight weight = connection.getWeight();
       weight.weightChange = weightChange;
       weight.value += weightChange;
    }
}


可以看到,在权值的更新中,此代码严格按照LMS的更新公式,其中learningRate对应学习率?,neuronError为误差e,input为神经元的输入p。若将learningRate设置1,则此更新算法效果等同于感知机学习规则。

至此,一个感知机网络已经完全建立了。现在,可以让这个网络进行学习和记忆了。


购买《自己动手写神经网络》电子书你将会获得:

1. QQ群96980352跟【葛一鸣老师】面对面交流!

2.  一本改变你命运的《自己动手写神经网络》全本电子书!

3.  随书源代码,帮你构建属于自己的神经网络!!

4.  http://bbs.uucode.net/论坛交流,看见看不见的技术!

5.  “神经网络”公众号shenjingwangluo11,学习更多人工智能、机器学习的相关内容!

扫描公众号二维码!