根据数据我们知道,人类的神经元的
计算速度大概在10^-3左右,远远不及现在的电子元件的速度,但是表现出的速度却令人吃惊,原因则在于神经网络的高度并行计算的能力。
我们先从一个神经元开始说明。
现在我们假设一个神经元它有N个输入,分别为x1,x2,...,xn, 他们的权重分别为w1,w2,...wn。并且我们还有一个额外的x0 = 1,以及它相对应的w0
.
我们现在定义一个式子:
之后我们将这个值作为一个输入进行判别,判别式如下:
根据这个式子我们可以划分出一个超平面,其中平面由于w0的存在而不会永远经过原点,平面的其他信息则由其他的w1,w2等共同决定。
当然,这里的大于0并不是绝对的,你可以根据需要进行更改。
根据这个超平面我们就可以将一堆点进行划分。这也就是一个简单的神经元的模型,如果难以理解我举出下面这样的一个例子。
假定:w0 = -0.8, w1 = w2 = 0.5,此时我有四对输入(0,0)(0,1)(1,0)(1,1)那么根据刚才的判别式,我们分别可以得到这四组input的输出,即:
0,0,0,1. 通过观察可以发现,其实这个神经元实现了一个简单的与门的操作。
再往后假设我给出了更多的数据,目的是为了训练出一个能达到我要的效果的模型。我只需要对于当前的模型进行评估,然后给出一个优化的方向,然后再重复直到达到效果。
此时我们就不得不定义出一个量来具体量化我的模型的优劣,在这里我们用批处理学习的方式来定义,假设我已经给出了一个dataset,他的误差的计算如下:
然后我们既然要优化,肯定要对这个值求梯度。
然后得到一个方向
,接下来将这个更新给原来的w,即:
在
的计算公式中,η代表了学习率,可以理解为学习的步长,这个值要适量,否则效果不好,再接下来就是一个方向。
对于这个方向的计算,如下:
要注意的是,在这个式子中,我们假定od与x是线性的,即:
有了这个假设以后,我们就得到了最后的值,即:
然后我们就可以通过这个式子进行优化现有的参数,不仅仅可以用于批处理学习,还可以用于其他方式,比如来一个新值我一对比,发现可以优化,就立即优化。
我举一个例子说明这个神经学习的方式:
假设我要实现一个与非门,然后给了一堆training set
在这个例子之中,零界值(threshold)为0.5,学习率(learning rate)为0.1,经过不断地学习,我们最后得到了与非门的参数。
欢迎讨论,相互学习。