什么是神经网络?
在我们开始之前与如何建立一个神经网络,我们需要了解什么第一。
神经网络可能会让人感到恐惧,特别是对于新手机器学习的人来说。但是,本教程将分解神经网络的工作原理,最终您将拥有灵活的神经网络。让我们开始吧!
了解过程
拥有大约100亿个神经元,人类大脑以268英里的速度处理数据!实质上,神经网络是由突触连接的神经元集合。该集合分为三个主要层:输入层,隐藏层和输出层。你可以有许多隐藏层,这就是深度学习这个术语的起源。在人造神经网络中,有几个输入,称为特征,并产生单个输出,称为标签。
圆圈表示神经元,而线条表示突触。突触的作用是将输入和权重相乘。你可以将体重看作神经元之间连接的“强度”。权重主要定义了神经网络的输出。但是,他们非常灵活。之后,应用激活功能返回输出。
以下简要介绍一个简单的前馈神经网络的工作原理:
1.将输入作为矩阵(数字的二维数组)
2.将输入乘以设定权重(执行点积乘以矩阵乘法)
3.应用激活功能
4.返回一个输出
5.通过从数据的期望输出和预测输出的差异来计算误差。这创建了我们的渐变下降,我们可以使用它来改变权重
6.然后根据错误轻微改变权重。
7.为了训练,这个过程重复1000次以上。数据训练得越多,我们的输出结果就越准确。
神经网络的核心是简单的。他们只是使用输入和权重执行点积并应用激活函数。当权重通过损失函数的梯度进行调整时,网络适应变化以产生更准确的输出。
我们的神经网络将模拟一个具有三个输入和一个输出的隐藏层。在网络中,我们将根据我们研究多少小时以及我们前一天睡了多少小时的输入来预测考试成绩。我们的测试分数是输出。以下是我们将在以下方面培训我们的神经网络的示例数据:
正如你可能已经注意到的那样,?在这种情况下代表了我们希望我们的神经网络预测的东西。在这种情况下,我们预测根据他们之前的表现,学习了四个小时并睡了八个小时的人的测试分数。
向前传播
让我们开始编码这个坏男孩!打开一个新的python文件。您需要导入,numpy因为它可以帮助我们进行某些计算。
首先,让我们使用numpy数组导入我们的数据np.array。我们也希望我们的单位标准化,因为我们的输入是以小时为单位的,但是我们的输出是从0到100的测试分数。因此,我们需要通过除以每个变量的最大值来缩放数据。
接下来,让我们定义一个pythonclass并写一个init函数,我们将在其中指定我们的参数,如输入层,隐藏层和输出层。
现在是我们第一次计算的时候了。请记住,我们的突触执行点积或输入和权重的矩阵乘法。请注意,权重是随机生成的,介于0和1之间。
我们网络背后的计算
在数据集中,我们的输入数据X是一个3x2的矩阵。我们的输出数据y是一个3x1矩阵。矩阵中的每个元素X需要乘以相应的权重,然后与隐藏层中每个神经元的所有其他结果一起添加。以下是第一个输入数据元素(2小时学习和9小时睡眠)将如何计算网络中的输出:
这张图片分解了我们的神经网络实际上产生输出的过程。首先,将每个突触上随机生成的权重(.2,.6,.1,.8,.3,.7)和相应输入的乘积相加,作为隐层的第一个值。这些总和字体较小,因为它们不是隐藏层的最终值。
(2*.2)+(9*.8)=7.6
(2*.6)+(9*.3)=3.9
(2*.1)+(9*.7)=6.5