逖靖寒的世界

Share my world. Share your viewpoint.
数据加载中……
人工神经网络入门(2) —— 人工神经基本概念介绍

如果您有疑问,可以先参考 FAQ
如果您未找到满意的答案,可以在下面留言:)
首先向大家道歉,很长时间没有来更新文章了。最近杂事太多,不好意思。

1 介绍

上一篇文章中,我们已经看到了一个简单的关于ANN实际应用程序,这篇文章中,我将简单地介绍一下ANN的最最基础的知识以及上一篇文章中的程序原理的说明。

2 ANN的最最基础的知识

ANN算法起源于生物体的神经系统,相信大家对生物神经系统的工作方式都非常了解,这里我也就不详细介绍了,不过,为了后续说明的方便,给大家上一个截图:
 

 

 

图1

根据生物神经系统的工作过程,我们可以大概理解以下这个图所要表达的含义:


 

 

图2

大家可以想象这样一种情形:寒冷的冬天,我们伸手到火炉边烤火,慢慢地,你觉得自己快要睡着了,这个时候,突然发现自己伸在火炉边的手特别烫得疼,然后马上将手缩回去。这就是一个神经网络的工作实例,火对手产生的温度就是图2的输入层(Input),而缩手或不缩手就是图2的输出层(Output)。但是缩手只有在手的温度达到一定的程度才发生的,比如说40度。

用图2来表示上面所说的情形:

X1 = 火对手产生的温度

w1 =火对手产生的温度的权值(对火对手产生的温度的放大或是缩小,我们让这个值为1)

激活函数(Active Function)= 如果 x1 * w1 > 40 激活(缩手),否则抑制(不缩手)

这是单输入的情况,如果有多个输入,则输出为 f(x1 * w1 + x2 * w2 + x3 * w3 …)

其中,f(x)为激活函数。

下面,我们来看2个多输入的神经网络结构图:

AND运算

 

其中f(x) =

If (x >= 2) return 1;

Else return 0;

阀值为2

我们可以利用这个结构图来检验一下是否正确:

X1 = 0, x2 = 0, x = x1*w1 + x2*w2 = 0 f(x) = 0;正确

X1 = 0, x2 = 1, x = x1*w1 + x2*w2 = 1 f(x) = 0;正确

X1 = 1, x2 = 0, x = x1*w1 + x2*w2 = 1 f(x) = 0;正确

X1 = 1, x2 = 1, x = x1*w1 + x2*w2 = 2 f(x) = 0;正确

OR运算

 

其中f(x) =

If (x >= 1) return 1;

Else return 0;

阀值为1

我们可以利用这个结构图来检验一下是否正确:

X1 = 0, x2 = 0, x = x1*w1 + x2*w2 = 0 f(x) = 0;正确

X1 = 0, x2 = 1, x = x1*w1 + x2*w2 = 1 f(x) = 1;正确

X1 = 1, x2 = 0, x = x1*w1 + x2*w2 = 1 f(x) = 1;正确

X1 = 1, x2 = 1, x = x1*w1 + x2*w2 = 2 f(x) = 1;正确

上面2个实例,就是我上篇文章中所需要建立的一个神经网络模型。

但是我们如何确定w1,w2和阀值呢?

这就需要通过神经网络来学习,从而确定w1,w2和阀值。

2 学习

拿计算AND运算的模型来说,需要2个输入1个输出是肯定的。关键就是如何确定2个输入的权值和激活函数的阀值。

为了计算激活函数的阀值,我们可以增加一个输入层,变成这个样子

 

这样,我们只需让激活函数f(x)=

If (x >= 1) return 1;

Else return 0;

即可。至于阀值究竟是多少,可以让w3的值去确定。这样,原先的问题就转化成了求解w1, w2 ,w3的大小的问题了。

接下来,我们制定这样的学习规律:

W(i) =     W(i)    + (正确值-实际计算的值)*x(i).

通过一定次数的训练,我们就可以让    (正确值-实际计算的值)变得相当下,这样最后的结果也就稳定了,同时求出了我们需要的w1, w2 ,w3的近似值。

3实际执行过程

  • 得到训练集合(合理的输入和期望的输出(如:输入x1=1,x2=1输出1))
  • 随机给w1, w2,w3赋值
  • 执行一定次数的训练

4 预告
在下一篇文章中,我将介绍和一个多层的神经网络,用于计算XOR(异或)操作。

5 总结
在本文中,咱们介绍了神经网络的简单最最基本的原理和上一篇文章的实例原理。

 

posted on 2008-06-03 19:14 逖靖寒 阅读(4032) 评论(21)  编辑 收藏 网摘 所属分类: .NET 编程算法

评论

#1楼 2008-06-03 21:09 NetSoft      

在外文网站看到过这个文章:P,楼主这个是原创吗?
    回复  引用  查看    

#2楼[楼主] 2008-06-03 21:26 逖靖寒      

@NetSoft
真的啊?
你在哪看到啊?
这是我刚刚写的文章:)
    回复  引用  查看    

#3楼[楼主] 2008-06-03 21:27 逖靖寒      

@NetSoft
文章中引用的2个图片确实是我参考的一个外文资料上截取下来的。但是内容不一样:)
    回复  引用  查看    

#4楼 2008-06-03 21:59 Indigo Dai      

呵呵 全才
    回复  引用  查看    

#5楼 2008-06-03 22:48 NetSoft      

:D我在codeproject上看到过。那个时候也研究算法。
    回复  引用  查看    

#6楼 2008-06-03 23:22 读后感[未注册用户]

@NetSoft
的确在codeproject上也有一篇文章是讲网络神经的,不过内容不一样……那个好象是讲进化(evolution)什么的,没细看。
    回复  引用    

#7楼 2008-06-03 23:29 簡簡單單..      

Mark
    回复  引用  查看    

#8楼 2008-06-04 06:56 生鱼片      

学习
    回复  引用  查看    

#9楼[楼主] 2008-06-04 07:57 逖靖寒      

@NetSoft
恩,我参考了CodePorject上面的文章,其中一篇名字是《AI Neural Network for beginners》
    回复  引用  查看    

#10楼 2008-06-04 11:58 求知无傲      

    回复  引用  查看    

#11楼 2008-06-04 15:46 高中时的耗子(EE)[未注册用户]

GP啊,看把你累得,我代表大家感谢你啊!

麻烦你还多多介绍点计算机音频处理、语音识别之类的知识(注意,不是指音乐艺术行业软件的操作方法!),先谢过了!
    回复  引用    

#12楼 2008-06-04 19:48 G yc {Son of VB.NET}      

哦, 这个就是传说中的
神经算法?

话说回来, 神经(元)原来是那个样子啊
    回复  引用  查看    

#13楼 2008-06-06 02:56 耗子[未注册用户]

@逖靖寒
趁没被engine cache之前把那name给delete吧!!!
今后多多联系!!!
    回复  引用    

#14楼 2008-06-27 08:06 秦[未注册用户]

强烈质问版主:为什么没有下一篇了?快点儿更新啊,期待中。。。。
    回复  引用    

#15楼[楼主] 2008-06-27 09:18 逖靖寒      

@秦
已经更新。
    回复  引用  查看    

#16楼 2008-06-27 14:44 秦[未注册用户]

谢谢版主。期待很久了。
你是C#编的程序吗?为什么我一点都看不懂????
你的基础教程还是让我这个基础不深的人难以看懂。。。。
不过这已经很好了,除了程序不懂,其它慢慢都差不多能看懂,总比我买的那两本书强,一点都看不懂!

//初始化训练集合
TrainSet[] sets = new TrainSet[]{new TrainSet(0, 0, 0), new TrainSet(0, 1, 0),
new TrainSet(1, 0, 0), new TrainSet(1, 1, 1)};

//构造单层神经网络 2 个输入节点 1个输出节点
NeuralNetwork nn = new NeuralNetwork(2, 1);
slnn = new SingleLayerNeuralNetworks(nn, sets);

//训练
slnn.Train();

    回复  引用    

#17楼[楼主] 2008-06-27 16:01 逖靖寒      

@秦
是C#编的程序,我的示例更多地是让你对ANN有一个认识
更多详细的资料,您可以查询http://en.wikipedia.org/wiki/Artificial_neural_network" target="_new">http://en.wikipedia.org/wiki/Artificial_neural_network
    回复  引用  查看    

#18楼 2008-06-27 17:47 秦[未注册用户]

上天啊,版主到底是什么样的人物啊?给我一大堆鸟语网站!本人英语四级还是6年前过的,现在八成连个初三水平都不如了,佩服!
    回复  引用    

#19楼[楼主] 2008-06-27 17:56 逖靖寒      

@秦
我也是过了4级的人:)
    回复  引用  查看    

#20楼 2009-04-07 00:32 王明13[未注册用户]

(正确值-实际计算的值) 这其中的 '正确值'和实际计算的值,这两个不知是什么,能否详细讲解一下?
    回复  引用    

#21楼 2009-04-24 14:17 phil4000[未注册用户]

X1 = 1, x2 = 1, x = x1*w1 + x2*w2 = 2 f(x) = 0;正确

这个是不是错了

X1 = 1, x2 = 1, x = x1*w1 + x2*w2 = 2 f(x) = 1;正确

才对吧,楼主

    回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1213008




相关文章:

相关链接: