作者: J.;翻译:陈之炎;校对:丁楠雅
本文共2000字,建议阅读9分钟。
本文将为你演示如何创建一个神经网络,带你深入了解神经网络的工作方式。
了解神经网络工作方式的最佳途径莫过于亲自创建一个神经网络,本文将演示如何做到这一点。
神经网络(NN)又称人工神经网络(ANN),是机器学习领域中基于生物神经网络概念的学习算法的一个子集。
拥有五年以上经验的德国机器学习专家声称:“神经网络正在彻底改变机器学习,因为它们能够在广泛的学科和行业中为抽象对象高效建模。”
人工神经网络基本上由以下组件组成:
神经网络有多种类型。在本项目中,我们将创建前馈或感知神经网络。这种类型的ANN直接将数据从前向后传递。
前馈神经元的训练往往需要反向传播,它为网络提供了相应的输入和输出集。当输入数据被传送到神经元时,经过处理后,产生一个输出。
下面的图表显示了一个简单的神经网络的结构:
了解神经网络如何工作的最佳方法是学习如何从头开始构建神经网络(而不是采用任何库)。
在本文中,我们将演示如何利用编程语言创建一个简单的神经网络。
问题
如下是一个展示问题的表格。
我们将提供一个新的数据集,利用它训练神经网络,从而能够预测正确的输出值。
正如上表所示,输出值总是等于输入部分中的第一个值。因此,我们期望输出的值为1。
让我们看看是否可以使用代码来得出相同的结果(你可以在本文末尾仔细阅读这个项目的代码,然后再继续阅读本文)。
创建一个类
我们将用创建一个类来训练神经元,以期给出准确的预测。这个类还会有其他的帮助函数。
即使我们不会在这个简单的神经网络示例中使用神经网络库,我们也将导入numpy库来辅助计算。
numpy库提供了以下四种重要方法:
1. 应用函数
我们将使用函数,来绘制一个特征“S”型曲线,作为神经网络的激活函数。
此函数可以将任何值映射到0到1之间的值,它将有助于我们对输入的加权和归一化。
此后,我们将创建函数的导数,以帮助计算权重的调整参数。
可以利用函数的输出来生成它的导数。例如,如果输出变量为“x”,则其导数为x*(1-x)。
2. 训练模型
这是我们教神经网络做出准确预测的阶段。每个输入都有一个权重-可为正值或负值。这意味着:有较大的正权重或负权重的输入会对结果的输出产生更大的影响。请记住,我们最初是通过为每个随机数分配一个权重后开始的。
下面是这个神经网络示例的训练过程:
第一步:从训练数据集中提取输入,根据训练数据集的权重进行调整,并通过一种计算神经网络输出的方法对其进行筛选。
第二步:计算反向传播错误率。在这种情况下,它是神经元的预测输出与训练数据集的期望输出之间的差异。
第三步:利用误差加权导数公式,根据所得到的误差范围,进行了一些较小的权值调整。
第四步:对这一过程进行15000次迭代。在每次迭代中,整个训练集被同时处理。
我们使用“.T”函数将矩阵从水平位置转换为垂直位置。因此,数字将以如下方式存储:
最终,神经元的权重将根据所提供的训练数据进行优化。随后,如果让神经元考虑一个新的状态,与先前的状态相同,它便可以作出一个准确的预测。这就是反向传播的方式。
打包运行
最后,类初始化成功后,可以运行代码了。
下面是如何在项目中创建神经网络的完整代码:
asnp
():
(self):
# for
np..seed(1)
# to a 3 by 1 with from -1 to 1 and mean of 0
self. = 2* np..((3, 1)) – 1
(self, x):
# the
/ (1+ np.exp(-x))
e(self, x):
# to the
* (1- x)
(self, , , ):
# the model to make while
():
# the data via the
= self.think()
# error rate for back-
error = –
#
= np.dot(.T, error * self.())
self. +=
(self, ):
# the via the to get
# to
= .(float)
= self.(np.dot(, self.))
== “”:
# the class
= ()
print(” : “)
print(.)
# data of 4 –3 input and 1
= np.array([[0,0,1],
[1,1,1],
[1,0,1],
[0,1,1]])
= np.array([[0,1,1,0]]).T
# place
.train(, , 15000)
print(” After : “)
print(.)
= str(input(“User Input One: “))
= str(input(“User Input Two: “))
= str(input(“User Input Three: “))
print(” New : “, , , )
print(“New data: “)
print(.think(np.array([, , ])))
print(“Wow, we did it!”)
运行代码之后的输出:
这样,我们便成功地创建了一个简单的神经网络。
神经元首先给自己分配一些随机权重,接着,利用训练实例进行了自我训练。
之后,如果出现新的状态[1,0,0],则它得出的数值为0.。
还记得我们想要的正确答案是1吗?
这个数值非常接近,函数输出值在0到1之间。
当然,在这个例子中,我们只使用一个神经元网络来完成简单的任务。如果我们把几千个人工神经网络连接在一起,情况将会是怎样呢?我们能不能完全模仿人类的思维方式呢?
作者简介:
J.博士是洛杉矶区块链教育公司()的创始人和首席执行官。它是世界领先的教育培训平台,为学员培训实用技能,以期在未来的技术领域(包括机器学习)创造完整的产品。
原文标题:
How to a in
原文链接:
译者简介:陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。
「完」
本次转自:THU数据派 微信公众号;
发表回复