这篇博客介绍简单神经网络的搭建,不借助当前已有的深度学习的框架,仅用python里面的numpy实现。下面先上代码:
import numpy as np
X = np.array[[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]]
#X代表神经网络的训练集,4*4的矩阵代表有4个实例,每个实例有4个特征
y = np.array[[0,0,1,1]]
#y代表每个实例的标签
syn0 = 2*np.random.random((4,4))-1
syn1 = 2*np.random.random((4,1))-1
#上面两步初始化权重,两个变量代表神经网络是2层的,隐藏层有4个神经元
#下面进行前向网络的训练
for i in xrange(6000):
l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
#下面进行反馈网络的参数训练
l2_delta = (y - l2)*(l2*(1-l2))
l1_delta = l2_delta.dot(syn1.T)*(l1*(1-l1))
syn1 += l1.T.dot(l2_delta)
syn0 += X.T.dot(l1_delta)
下面解释一下前向和反向网络参数的训练过程。首先介绍一下里面的数学知识,对于每一个训练实例X,由输入层向前传递首先要计算每一个特征向量的值与两个神经元之间权重的乘积,然后求和,最后经过激活函数得到输出,这里的激活函数采用sigmoid函数。然后根据误差反向传送,对于输出层:
代表输出层的输出值,Tj代表这个输入变量X的实际值
对于隐藏层:
权重更新: