简单神经网络
1. 如何用9行Python代码编写一个简易神经网络
学习人工智能时,我给自己定了一个目标--用Python写一个简单的神经网络。为了确保真得理解它,我要求自己不使用任何神经网络库,从头写起。多亏了Andrew Trask写得一篇精彩的博客,我做到了!下面贴出那九行代码:在这篇文章中,我将解释我是如何做得,以便你可以写出你自己的。我将会提供一个长点的但是更完美的源代码。
首先,神经网络是什么?人脑由几千亿由突触相互连接的细胞(神经元)组成。突触传入足够的兴奋就会引起神经元的兴奋。这个过程被称为“思考”。我们可以在计算机上写一个神经网络来模拟这个过程。不需要在生物分子水平模拟人脑,只需模拟更高层级的规则。我们使用矩阵(二维数据表格)这一数学工具,并且为了简单明了,只模拟一个有3个输入和一个输出的神经元。
我们将训练神经元解决下面的问题。前四个例子被称作训练集。你发现规律了吗?‘?’是0还是1?你可能发现了,输出总是等于输入中最左列的值。所以‘?’应该是1。
训练过程
但是如何使我们的神经元回答正确呢?赋予每个输入一个权重,可以是一个正的或负的数字。拥有较大正(或负)权重的输入将决定神经元的输出。首先设置每个权重的初始值为一个随机数字,然后开始训练过程:
取一个训练样本的输入,使用权重调整它们,通过一个特殊的公式计算神经元的输出。
计算误差,即神经元的输出与训练样本中的期待输出之间的差值。
根据误差略微地调整权重。
重复这个过程1万次。最终权重将会变为符合训练集的一个最优解。如果使用神经元考虑这种规律的一个新情形,它将会给出一个很棒的预测。
这个过程就是back propagation。
计算神经元输出的公式
你可能会想,计算神经元输出的公式是什么?首先,计算神经元输入的加权和,即接着使之规范化,结果在0,1之间。为此使用一个数学函数--Sigmoid函数:Sigmoid函数的图形是一条“S”状的曲线。把第一个方程代入第二个,计算神经元输出的最终公式为:你可能注意到了,为了简单,我们没有引入最低兴奋阈值。
调整权重的公式
我们在训练时不断调整权重。但是怎么调整呢?可以使用“Error Weighted Derivative”公式:为什么使用这个公式?首先,我们想使调整和误差的大小成比例。其次,乘以输入(0或1),如果输入是0,权重就不会调整。最后,乘以Sigmoid曲线的斜率(图4)。为了理解最后一条,考虑这些:
我们使用Sigmoid曲线计算神经元的输出
如果输出是一个大的正(或负)数,这意味着神经元采用这种(或另一种)方式
从图四可以看出,在较大数值处,Sigmoid曲线斜率小
如果神经元认为当前权重是正确的,就不会对它进行很大调整。乘以Sigmoid曲线斜率便可以实现这一点
Sigmoid曲线的斜率可以通过求导得到:把第二个等式代入第一个等式里,得到调整权重的最终公式:当然有其他公式,它们可以使神经元学习得更快,但是这个公式的优点是非常简单。
构造Python代码
虽然我们没有使用神经网络库,但是将导入Python数学库numpy里的4个方法。分别是:
exp--自然指数
array--创建矩阵
dot--进行矩阵乘法
random--产生随机数
比如, 我们可以使用array()方法表示前面展示的训练集:“.T”方法用于矩阵转置(行变列)。所以,计算机这样存储数字:我觉得我们可以开始构建更优美的源代码了。给出这个源代码后,我会做一个总结。
我对每一行源代码都添加了注释来解释所有内容。注意在每次迭代时,我们同时处理所有训练集数据。所以变量都是矩阵(二维数据表格)。下面是一个用Python写地完整的示例代码。
我们做到了!我们用Python构建了一个简单的神经网络!
首先神经网络对自己赋予随机权重,然后使用训练集训练自己。接着,它考虑一种新的情形[1, 0, 0]并且预测了0.99993704。正确答案是1。非常接近!
传统计算机程序通常不会学习。而神经网络却能自己学习,适应并对新情形做出反应,这是多么神奇,就像人类一样。
2. 神经网络是什么
神经网络可以指向两种,一个是生物神经网络,一个是人工神经网络。
生物神经内网络:一般容指生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动。
人工神经网络它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的
3. 求C#编写的传统的BP神经网络算法,不要太复杂的,就要简单完整的,最好给出输入得出输出谢谢谢谢。
http://wenku..com/link?url=cBIpLDY_0PHQ2B2TB7S8vrMMevUyab1_fj3_7
4. 神经网络优缺点,
首先来看一下神经网络的缺点:
1. 黑盒子
神经网络最可能被人知晓的缺点是它们的“黑盒子”性质(也就是说你不知道神经网络是如何以及为什么会产生一定的输出)。例如,当你将一张猫的图像放入神经网络,预测结果显示它是一辆汽车时,这让人很难理解。而在某些领域,可解释性非常重要。
很多银行之所以不使用神经网络来预测一个人是否有信誉,是因为他们需要向客户解释为什么他们没有获得贷款。像Quora这样的网站也是如此。如果他们因为机器学习算法而决定删除用户账户,他们需要向用户解释为什么这样做。
如果将机器学习运用与重要的商业决策时,你能想象一个大公司的首席执行官会在不明白为什么应该完成的情况下做出数百万美元的决定吗?仅仅因为“计算机”说他需要这样做?
2. 发展的可持续时间
虽然有像Keras这样的库,让神经网络的开发变得相当简单,但有时您需要更多地控制算法的细节。您可能还会使用到Tensorflow,但是由于它相对复杂,开发需要的时间也更长。对于公司管理层来说,如果用简单的算法就可以更快地解决问题,则让他们花高昂的费用和较长的时间去开发一些东西,显然是不合适的。
3. 数据量
与传统的机器学习算法相比,神经网络通常需要更多的数据,至少需要数千数百万个标记样本。而如果使用其它算法,许多机器学习问题可以用较少的数据很好地解决。
虽然在某些情况下,神经网络需要处理少量数据(大多数情况下它们不需要)。而像朴素贝叶斯这样的简单算法也可以很好地处理少数数据。
4. 计算代价高昂
通常,神经网络比传统算法的计算代价更高。对于最先进的深度学习算法,完成深度神经网络从头到尾的完整训练,可能需要几周的时间。而大多数传统的机器学习算法则只需要少于几分钟到几个小时或几天的时间即可。
神经网络所需的计算能力很大程度上取决于数据的大小,同时也取决于网络的深度和复杂程度。
然后就是神经网络的优点:
ANN 有能力学习和构建非线性的复杂关系的模型,这非常重要,因为在现实生活中,许多输入和输出之间的关系是非线性的、复杂的。
ANN 可以推广,在从初始化输入及其关系学习之后,它也可以推断出从未知数据之间的未知关系,从而使得模型能够推广并且预测未知数据。
与许多其他预测技术不同,ANN 不会对输入变量施加任何限制(例如:如何分布)。此外,许多研究表明,ANN 可以更好地模拟异方差性,即具有高波动性和不稳定方差的数据,因为它具有学习数据中隐藏关系的能力,而不在数据中强加任何固定关系。这在数据波动非常大的金融时间序列预测中非常有用。
神经网络的发展主要为:启蒙时期(1890-1969),低潮时期(1969-1982),复兴时期(1982-1986),新时期(1986至今)
5. 人工神经网络有什么简单的代码实现的案例
用matlab神经网络工具箱
傻瓜式操作,都不需要编程
望采纳
6. 求教!!用MATLAB建立一个简单的bp神经网络
可以运行
你看看是不是你的版本有问题?
net =
Neural Network object:
architecture:
numInputs: 1
numLayers: 2
biasConnect: [1; 1]
inputConnect: [1; 0]
layerConnect: [0 0; 1 0]
outputConnect: [0 1]
numOutputs: 1 (read-only)
numInputDelays: 0 (read-only)
numLayerDelays: 0 (read-only)
subobject structures:
inputs: {1x1 cell} of inputs
layers: {2x1 cell} of layers
outputs: {1x2 cell} containing 1 output
biases: {2x1 cell} containing 2 biases
inputWeights: {2x1 cell} containing 1 input weight
layerWeights: {2x2 cell} containing 1 layer weight
7. 求做一个简单的BP神经网络的预测,感激不尽!!!
真是因为外推能力有限,所以希望采用外推模型
即:P=(数据版1~数据n) T=(数据n~数据n+m)的方式权
使得数据输入/输出在范围内
比如P=[一月降水,二月降水````五月降水,二月降水,三月降水````六月降水……]
T=[六月降水,七月降水……]
训练完毕后
由于降水情况在某个范围内,不具有一直延伸的特性
用[六月降水,七月降水````十一月降水]能推出[十二月降水]
故可以控制在样本范围附近
如果一直外延如P=[1,2,3,4,5],T=[一月降水,二月降水````五月降水];
则6无法推得六月降水
不懂请继续追问
8. 那个最简单的BP神经网络是什么意思啊,求解答
最简单的BP神经网络?可能指单输入单输出的单隐层感知器模型。
BP(Back Propagation)神经网回络是1986年由Rumelhart和McCelland为首的科学家小组答提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。
9. 简单介绍人工神经网络和模糊神经网络
其实网络介绍的很详细,如“人工神经网络是模拟人脑结构的思维功能,具有较强的自学习和联想功能,人工干预少,精度较高,对专家知识的利用也较少。但缺点是它不能处理和描述模糊信息,不能很好利用已有的经验知识,特别是学习及问题的求解具有黑箱特性,其工作不具有可解释性,同时它对样本的要求较高;模糊系统相对于神经网络而言,具有推理过程容易理解、专家知识利用较好、对样本的要求较低等优点,但它同时又存在人工干预多、推理速度慢、精度较低等缺点,很难实现自适应学习的功能,而且如何自动生成和调整隶属度函数和模糊规则,也是一个棘手的问题。”
即保证人工神经网络自身的学习能力下,采用模糊理论解决模糊信号,使神经网络权系数为模糊权,或者输入为模糊量。
比如原本神经网络处理的是连续数据(double)不适合求解模糊数据,此时就需要引入模糊理论,来构造适合于求解这类模糊数据的神经网络。
10. 想要学习人工神经网络,需要什么样的基础知识
最基础的部分的话需要:线性代数,机器学习,微积分,优化等等。内
几乎所有操作都容有矩阵运算,所以至少最基础的线性代数需要掌握
建议从单一的感知机Perceptron出发,继而认识到DecisionBoundary(判别边界),以及最简单的一些“监督训练”的概念等,有机器学习的基础最好。就结果而言,诸如“过拟合”之类的概念,以及对应的解决方法比如L1L2归一,学习率等也都可以从单个感知机的概念开始入门。
从单层感知器推广到普通的多层感知器MLP。然后推广到简单的神经网络(激活函数从阶跃“软化”为诸如tanh等类型的函数),然后引入特定类型的网络结构,比如最基本的全连接、前向传播等等概念。进而学习训练算法,比如反向传播,这需要微积分的知识(Chainrule),以及非线性优化的最基础部分,比如梯度下降法。
其次至少需要具备一些适用于研究的编程语言的技能,例如python,matlab,(C++也可行)等,哪怕不自己实现最简单的神经网络而是用API,也是需要一定计算机能力才能应用之。
超过网络工程师的决心,不要弄出个网络知道答案审批这么搓的东西。