Neural Networks

来源:互联网 发布:淘宝旺铺基础版模板 编辑:程序博客网 时间:2024/05/20 05:53

继续之前的整理。

这次把多层感知机整理一下,其实多层和一层的原理都一样,都是知道误差以后,重新调整权重的过程。

其实深度学习也就是把hidden这一层不断的变多,十几层甚至几十层,当然他们的计算方法就和我马上要说的不太一样。

假设我现在的神经网络有三层,input、 hidden、 output。 他们之中分别有三个神经元i, j, k。

我首先知道了最后的结果的误差,然后对他进行downstream的计算。

我们现在要求出这一项

计算出以后为

但这一项暂时还不能用,需要继续计算

然后把这个式子拆成两个部分进行计算

另一部分

这个地方我们要提一个东西,叫做sigmoid函数,他是一个有效的映射函数,可以将值稳定的映射在0~1之间,而且导数也很好计算。具体可以参考:

https://baike.baidu.com/item/Sigmoid%E5%87%BD%E6%95%B0/7981407?fr=aladdin

然后我们就得到了

最后计算出答案:

但这还只是一半,现在只得到了output层的改变量,还需要一个hidden层的改变量。

这个量不能够通过简单的误差方法的计算,因为这个误差我们是不能够得到的,于是我们采用了一种反馈的方式,即:

上一层的使用本神经元的错误的汇总是本神经元的错误。

最后得:

最后得到改变量:

这样的话我们就得到了最后的改变量。

整理一下:

for each output unit k:

for each hidden unit h:

update each network weight:

其实最后得到的式子就是这么简单的三个,但是需要认真了解为什么是这三个,以及到底是如何计算的。


说到这里,neural networks还有一个问题,容易陷入局部最优。我们可以通过最简单的多试几次来解决这个问题,

但不仅如此,我们还可以再添加一个量,这个量由上一个时刻的量所决定,具体体现为:



当然,这个只是一个简单的感知机的实现,现在还有更多的其他的实现方式,欢迎讨论。

原创粉丝点击