构建一个简单的人工神经网络

2017-11-22 01:28

     人工神经网络是进行机器学习的基础,模仿生物神经元的工作方式构建神经网络,让计算机拥有“自我学习“的能力。人工神经网络的诞生具有革命性的意义,”自我学习“是其最大的优点,通过适当的训练,它语音识别、图像识别、人机对话、大数据方面发挥的了巨大的作用。
    神经网络的概念早在数十年前就已经提出来了,但限于当时计算机的计算能力,还无法应用。近些年来,随着计算机的计算能力大幅提升,机器学习兴起,导致神经网络的使用日益广泛。
    目前最常用的构建神经网络的方法就是反向传播,当程序运算过一遍后,查看计算出的结果与理想结果之间的误差,通过反向传播算法让计算机优化人工神经元之间的权值(连接强度),然后再次计算结果,不断循环这一过程,经过一定次数的循环后,获得解将非常接近理想结果。


    这是一个非常简单的神经网络,分为三层,输入层(包含两个神经元i1、i2,截距项b1),隐含层(包含两个神经元h1、h2,截距项b2),输出层(o1,o2)。假设输入3对应输出映射0.2,输入8对应的是输出映射0.9。
 


令i1=3,i2=8
o1=0.2,o2=0.9
我们把权值用w表示,通常我们会随机初始化权值。
初始化权值w1=0.15,w2=0.2,w3=0.25,w4=0.3,w5=0.4,w6=0.45,w7=0.5,w8=0.55。
初始化b1=0.35,b2=0.6
首先进行前向传播:
输入层——》隐含层——》输出层,下图为本例中神经元h1的结构:

 


隐含层****计算net:

neth1=w1*i1+w2*i2+b1

neth2=w3*i1+w4*i2+b1
计算out:

outh1=sigma(neth1)
outh2=sigma(neth2)
(其中sigma函数是常用的激活函数之一,此外还有tanh(),sigma(x)=1/(1+e^(-x))) 
输出层****计算net:

neto1=w5*outh1+w6*outh2+b2

neto2=w7*outh1+w8*outh2+b2
计算out:
 outo1=sigma(neto1)

 outo2=sigma(neto2)

计算总误差:
 Eo1=0.5*(o1-outo1)*(o1-outo1)

 Eo2=0.5*(o2-outo2)*(o2-outo2)

 Etotal=Eo1+Eo2
(其中Etotal代表总误差,Eo1代表神经元o1输出的值与理想值o1得误差,Eo2代表神经元o2输出的值与理想值o2得误差) 

反向传播:

delta_o1=-(o1-outo1)*sigma_da(outo1)

delta_o2=-(o2-outo2)*sigma_da(outo2)
(delta_o1,delta_o2分别为neth1,neth2值对整体的误差) 

 

dw1=sigma_da(outh1)*i1*(delta_o1*w5+delta_o2*w7)

dw2=sigma_da(outh1)*i2*(delta_o1*w5+delta_o2*w7)

dw3=sigma_da(outh2)*i1*(delta_o1*w6+delta_o2*w8)

dw4=sigma_da(outh2)*i2*(delta_o1*w6+delta_o2*w8)

(dw1,dw2,dw3,dw4分别是w1~w4对整体的偏导)

w1-=alpha*dw1

w2-=alpha*dw2

w3-=alpha*dw3

w4-=alpha*dw4

(w1~w4为更新后的权值,alpha是学习率,自定义)


 dw5=delta_o1*outh1

dw6=delta_o1*outh2

dw7=delta_o2*outh1

dw8=delta_o2*outh2
 (dw5~dw8为w5~w8对整体的偏导)

w5-=alpha*dw5

w6-=alpha*dw6

w7-=alpha*dw7

w8-=alpha*dw8
 (w5~w8为更新后的权值)

循环一次:

outo1=0.802745098356

outo2=0.830938316533
(训练一次后,结果与理想值还有很大误差,理想值:o1=0.2,o2=0.9) 

循环40次:

outo1=0.222343700362

outo2=0.879218779053
(训练40次后,结果已经比较接近理想值了,理想值:o1=0.2,o2=0.9) 

循环200次:

outo1=0.199989353333

outo2=0.898828168138 
(训练200次后,结果变得极其接近理想值,最大误差不超过0.002,理想值:o1=0.2,o2=0.9)

    现在,这个简单的神经网络已可以根据输入值3、8, 预测出输出值0.2、0.9。如果还想要处理更加复杂的神经网络,就需要增加更多的隐含层,这就叫深度学习,通过更多层的神经网络来实现机器学习。目前国际上的一些神经网络已经达到了一千多层。
    下面是其中一些公式的推导:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值