设为首页|收藏本站|
开启左侧

[分享] 用python了解神经网络(上)

[复制链接]
15735 0
laisheng3 发表于 2022-6-24 07:39:31 | 只看该作者 打印 上一主题 下一主题
 
有件事情或许会让人震惊:神经网络并没有那么复杂!【神经网络】这个词让人觉得不明觉厉,但实际上神经网络算法要比人们想象的简单。
这篇文章完全是为零基础新手准备的。我们会通过用Python从头实现一个神经网络来理解神经网络的原理。
让我们开始今天的部分吧~
1、基本单位:神经元
首先让我们看看神经网络的基本单位——神经元。神经元接受输入,对它做一些数学运算,然后产生一个输出。例如,这是一个2-输入神经元:

用python了解神经网络(上) 第1张图片
在这个神经元当中发生了三件事。
首先,每个输入都跟一个权重相乘:

用python了解神经网络(上) 第2张图片
然后,将所有和权重相乘之后的输入加到一起,再加上一个偏差b:

用python了解神经网络(上) 第3张图片
最后,将这个结果传递给一个激活函数f:

用python了解神经网络(上) 第4张图片
激活函数的用途是将一个无边界的输入,转变成一个可预测的形式。常用的激活函数就是sigmoid函数:

用python了解神经网络(上) 第5张图片
sigmoid函数的值域是(0, 1)。简单来说,就是把(−∞, +∞)压缩到(0, 1) ,很大的负数约等于0,很大的正数约等于1。
一个简单的例子
假设我们有一个2-输入神经元,激活函数就是sigmoid函数,其参数如下:

用python了解神经网络(上) 第6张图片
ω=[0, 1]就是用向量的形式表示ω1=0,ω2=1。然后,我们给这个神经元一个输入x=[2, 3],并用“点积”来简化表示:

用python了解神经网络(上) 第7张图片

用python了解神经网络(上) 第8张图片
当输入是[2, 3]时,这个神经元的输出是0.999。给定输入,得到输出的过程被称为前馈(feedforward)。
编码一个神经元
现在是时候实现一个神经元!我们用Python的NumPy库来完成其中的数学运算:

用python了解神经网络(上) 第9张图片
认出这些数字了吗?就是我们刚刚的例子里面得到的!我们得到了相同的答案“0.999”!

2、结合神经元得到神经网络
一个神经网络不过是一组神经元连接到一起。下面是一个简单的神经网络的例子:

用python了解神经网络(上) 第10张图片
这个网络中有2个输入,一个有2个神经元(h1、h2)的隐藏层(Hidden Layer),和有1个神经元(o1)的输出层(Output Layer)。注意,o1的输入是h1和h2的输入——这就是组成网络的方式。
隐藏层是输入(第一)层和输出(最后)层之间的任何层。可以有多个隐藏层!
一个例子:前馈
让我们以上面这个图片所示的网络为例,并假设所有的神经元有着相同的权重ω=[0, 1],相同的偏差b=0,和相同的sigmoid激活函数。我们用h1、h2、o1代表图中这些神经元的输出。
如果我们输入x=[2, 3],会发生什么?

用python了解神经网络(上) 第11张图片

用python了解神经网络(上) 第12张图片
对输入x=[2, 3],神经网络的输出是0.7216。很简单,对吧~

一个神经网络可以有任意数量的层,这些层中可以有任意数量的神经元。基本思想保持不变:输入通过网络中的神经元向前传输,在最后获得输出。
为简单起见,我们将在本文的其余部分继续使用上图所示的网络。
编码一个神经网络:前馈
我们来实现我们这个神经网络的前馈。还是这个网络图:



用python了解神经网络(上) 第13张图片

用python了解神经网络(上) 第14张图片
我们再次得到了0.7216!看上去这个编码没问题~

3、训练神经网络:第一部分
假设我们有以下测量:

用python了解神经网络(上) 第15张图片
让我们训练我们的网络,让它根据某人的体重和身高来预测他们的性别:

用python了解神经网络(上) 第16张图片
我们将用0表示男性,用1表示女性,同时将数据转化以使其更易于使用:

用python了解神经网络(上) 第17张图片
我这里选取了135和66来让转化的数据好看,但通常会使用平均值进行转化
►►►
损失
在我们训练我们的网络之前,我们首先需要一种方法来量化它的“好”程度,以便可以尝试让它做得“更好”。这就是损失的意义。
我们将使用平均方差(MSE)损失:

用python了解神经网络(上) 第18张图片
我们一个一个地来看:
n是指样本的数量,在例子里是4(Alice, Bob, Charlie, Diana)
y代表预测的变量,在例子里是性别;
yture是变量的真实值(“正确答案”),在例子中,对于Alice而言,yture是1(女性);
ypred是变量的预测值,是我们网络的输出;
(yture-ypred)²被称为方差(squared error)。
我们的损失函数是简单取所有方差的平均值(因此称为平均方差)。我们的预测越好,我们的损失就越低!总结一下:
更好的预测=更低的损失。
训练网络=尽量减少其损失。
一个例子:损失计算
假设我们的网络总是输出0,换句话说,它确信所有人都是男性。我们的损失会是什么?

用python了解神经网络(上) 第19张图片

用python了解神经网络(上) 第20张图片
代码:MSE损失
下面是计算MSE损失的代码:

用python了解神经网络(上) 第21张图片
import numpy as np如果你不理解此代码为何有效,请阅读NumPy快速入门中有关数组的操作
我们上篇的内容就到这里,下篇会继续讨论训练神经网络,会有更多的数学哟~


上一篇:用python了解神经网络(下)
下一篇:急性焦虑发作该怎么办?这6种方法教你摆脱急性焦虑!
@



1.西兔生活网 CTLIVES 内容全部来自网络;
2.版权归原网站或原作者所有;
3.内容与本站立场无关;
4.若涉及侵权或有疑义,请点击“举报”按钮,其他联系方式或无法及时处理。
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

排行榜
活跃网友
返回顶部快速回复上一主题下一主题返回列表APP下载手机访问
Copyright © 2016-2028 CTLIVES.COM All Rights Reserved.  西兔生活网  小黑屋| GMT+8, 2024-9-10 03:32