神经网络简介

简单解释神经网络是如何工作的,以及如何在Python中从头实现一个 。
这句话可能会让你大吃一惊:神经网络并没有那么复杂!“神经网络”这个词经常被用作流行语,但实际上它们往往比人们想象的要简单得多 。
这篇文章是完全针对初学者准备的,我们假设你没有任何机器学习的知识 。我们将了解神经网络如何工作,同时在Python中从零开始实现一个 。
让我们开始吧!
1. 构建块:神经元首先,我们必需讨论神经元,神经网络的基本单位 。一个经元接受输入,对它们进行一些数学运算,然后产生一个输出 。这里是一个2输入神经元的样子:

神经网络简介

文章插图
 
这里发生了三件事 。首先,每个输入被乘以一个权重:
神经网络简介

文章插图
 
接下来,将所有加权后的输入与一个偏差b相加:
神经网络简介

文章插图
 
最后,总和被传入一个激活函数:
神经网络简介

文章插图
【神经网络简介】 
激活函数用于将一个无界输入转换为一个具有良好的、可预测形式的输出 。一个常用的激活函数是sigmoid函数:
神经网络简介

文章插图
 
sigmoid函数只输出(0,1)范围内的数字 。你可以认为它是把(−∞,+∞) 压缩到(0,1)——大负数变成~0,大正数变成~1 。
一个简单的例子
假设我们有一个使用sigmoid激活函数的2输入神经元,并带有以下参数:
神经网络简介

文章插图
 
w =[0,1]就是向量形式的w1 =0,w2 =1 。现在,我们给这个神经元提供一个x=[2,3]的输入。我们用点积来写得更简洁一些:
神经网络简介

文章插图
 
给定输入x=[2,3],神经元会输出0.999 。就是这样!这个将输入向前传递以获得输出的过程称为前馈 。
编写一个神经元
是时候实现一个神经元了!我们将使用NumPy,一个流行而强大的Python计算库,来帮助我们处理数学运算:
神经网络简介

文章插图
 
认出这些数了吗?这就是我们刚才举的例子!我们得到了相同的答案0.999 。
2. 将神经元组合成一个神经网络一个神经网络只不过是一群连接在一起的神经元 。下面是一个简单的神经网络的样子:
神经网络简介

文章插图
 
这个网络有2个输入,一个带有2个神经元(h1和h2)的隐藏层,一个带有1个神经元(σ1)的输出层 。注意σ1的输入是来自h1和h2的输出——这就是一个网络的组成 。
隐藏层是在输入(第一个)层和输出(最后一个)层之间的任何层 。可以有多个隐藏层!
一个例子:前馈
我们来使用上图所示的网络,假设所有的神经元都具有相同的权重w=[0,1],相同的偏差b= 0,以及相同的sigmoid激活函数 。让h1、h2、σ1表示它们所表示的神经元的输出 。
如果我们传入输入x=[2,3] 会发生什么?
神经网络简介

文章插图
 
该神经网络对输入x=[2,3] 的输出为0.7216 。很简单,对吧?
一个神经网络可以有任意数量的层,每个层可以包含任意数量的神经元 。其基本思想是相同的: 通过网络中的神经元向前反馈输入以便最终得到输出 。为了简单起见,我们将在本文的其余部分继续使用上面所示的网络 。
编写一个神经网络: 前馈
我们来实现我们神经网络的前馈 。这里是该网络的图片,再次供参考:
神经网络简介

文章插图
 

神经网络简介

文章插图
 
我们又得到了0.7216 !看起来它可以工作 。
3.训练神经网络,第1部分假设我们有以下测量值:
神经网络简介

文章插图
 
我们来训练我们的网络,并根据一个人的体重和身高来预测他的性别:
神经网络简介

文章插图
 


推荐阅读