1.概念
首先,说说人工智能的概念(来自百度百科)
人工智能的定义可以分为两部分,即“人工”和“智能”。“人工”比较好理解,争议性也不大。有时我们会要考虑什么是人力所能及制造的,或者人自身的智能程度有没有高到可以创造人工智能的地步,等等。但总的来说,“人工系统”就是通常意义下的人工系统。
关于什么是“智能”,就问题多多了。这涉及到其它诸如意识(CONSCIOUSNESS)、自我(SELF)、思维(MIND)(包括无意识的思维(UNCONSCIOUS_MIND))等等问题。人唯一了解的智能是人本身的智能,这是普遍认同的观点。但是我们对我们自身智能的理解都非常有限,对构成人的智能的必要元素也了解有限,所以就很难定义什么是“人工”制造的“智能”了。因此人工智能的研究往往涉及对人的智能本身的研究。其它关于动物或其它人造系统的智能也普遍被认为是人工智能相关的研究课题。
其次,如何实现人工智能?
模拟大脑的工作方式,模拟生物神经网络
人工神经网络:是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为“神经网络”或类神经网络。
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
环境的搭建可以参考我之前的博客或其他人的
好了,概念的东西仅仅到这里,接下来就以实际行动来实现简单的神经网络程序
2.小程序
下面的小程序是参考十一行Python代码实现一个神经网络
输入3行3列,期望输出第一列
Input | Output | ||
---|---|---|---|
0 | 1 | 1 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 |
0 | 0 | 1 | 0 |
如果使用矩阵的方式,只需要跟转换矩阵进行乘积就可以得到结果了
转换矩阵如下(3行一列)
1 |
---|
0 |
0 |
如果现在希望有个程序,无需咱们显示设置,能自己运行,最终得到转换矩阵,那是不是很有趣。
import numpy as np
# input dataset
X = np.array([ [0,0,1],
[1,1,1],
[1,0,1],
[0,1,1] ])
# output dataset
y = np.array([[0,1,1,0]]).T
# seed random numbers to make calculation
np.random.seed(1)
# initialize weights randomly with mean 0
syn0 = 2*np.random.random((3,1)) - 1
for iter in xrange(1000):
# forward propagation
l0 = X
l1 = np.dot(l0,syn0)
# how much did we miss?
l1_error = y - l1
l1_delta = l1_error * 0.1
# update weights
syn0 += np.dot(l0.T,l1_delta)
print "syn0:"
print np.round(syn0, 3)
print "Output After Training:"
print np.round(l1, 3)
结果如下:
syn0:
[[ 1.]
[ 0.]
[ 0.]]
Output After Training:
[[ 0.]
[ 1.]
[ 1.]
[ 0.]]
发现了没,syn0跟咱们手动算的转换矩阵一模一样,可是咱们都没有给它显示的赋值。
这个就是一个超级简化版的神经网络,BP神经网络。
有人说这太简单了,跟神经网络差了十万八千里。
这小程序跟实际应用的神经网络确实相差非常远。
如果不是3*1的矩阵,而是10000*10000的矩阵,那它能实现的功能有多大呢?
如果是100万*100万的矩阵呢?
当然,实际应用的神经网络比这个复杂很多,也有各种的数学推理,数学逻辑。
希望这篇帖子能给你一个最基本的感官。
代码的具体含义可以参考十一行Python代码实现一个神经网络
这里就不详细介绍了
神经网络的实现步骤(个人理解):
1.分析场景
2.构造程序
3.使用样本数据进行训练
4.根据训练情况进行微调参数
5.使用测试数据对神经网络进行测试,确认功能、性能