从零开始学习用Python构建神经网络

人工智能和机器人研究院 2018-05-30 08:54 次阅读

这是一份用于理解深度学习内部运作方式的初学者指南。作者根据自己从零开始学习用 Python 构建神经网络的经验,编写了一份攻略。内容涵盖神经网络定义、损失函数、前向传播、反向传播、梯度下降算法,对于想要了解深度学习运作原理的各位来说,内容精彩不可错过。

动机:为了深入了解深度学习,我决定从零开始构建神经网络,并且不使用类似 Tensorflow 的深度学习库。我相信,对于任何有理想的数据科学家而言,理解神经网络内部的运作方式都非常重要。

本文涵盖了我学到的所有东西,希望你也能从中获益!

什么是神经网络?

许多有关神经网络的介绍资料会将神经网络与大脑进行类比。但我发现,将神经网络简单地描述为一个从输入映射到输出的数学函数理解起来更容易。

神经网络由以下部分组成:

一个输入层,x

任意数量的隐藏层

一个输出层,ŷ

每两层之间都有一组权重和偏置,W 和 b

每个隐藏层都要选择一个激活函数 σ。在本文中,我们选用 Sigmoid 激活函数。

下图展示了 2 层神经网络的结构(请注意,在计算神经网络层数的时候,通常不计入输入层)。

二层神经网络的结构

利用 Python 建立神经网络非常容易。

class NeuralNetwork:    def __init__(self, x, y):        self.input      = x        self.weights1   = np.random.rand(self.input.shape[1],4)        self.weights2   = np.random.rand(4,1)                        self.y          = y        self.output     = np.zeros(y.shape)

训练神经网络

一个简单 2 层神经网络的输出 ŷ 可以表示为:

你可能注意到,在上面的等式当中,权重 W 和偏置 b 是影响输出 ŷ 的唯一变量。

自然,权重和偏差的正确值决定了预测的强度。根据输入数据微调权重和偏置的过程称为神经网络训练。

训练过程的每一次迭代包含以下步骤:

计算预测的输出 ŷ,称为前向传播

更新权重和偏置,称为反向传播

以下流程图说明了这个过程:

前向传播

正如我们在上图中所看到的,前向传播只是一个简单的计算。对于一个基本的 2 层神经网络,神经网络的输出计算如下:

我们可以在 Python 代码中添加一个前向传播函数来做到这一点。简单起见,我们假设偏置为 0。

class NeuralNetwork:    def __init__(self, x, y):        self.input      = x        self.weights1   = np.random.rand(self.input.shape[1],4)        self.weights2   = np.random.rand(4,1)                        self.y          = y        self.output     = np.zeros(self.y.shape)    def feedforward(self):        self.layer1 = sigmoid(np.dot(self.input, self.weights1))        self.output = sigmoid(np.dot(self.layer1, self.weights2))

然而,我们仍然需要一种方法来评估我们的预测的「优秀程度」(即,我们的预测与真实值相差多少?)这就需要用到损失函数了。

损失函数

损失函数有很多种,而我们问题的性质会决定我们使用哪种损失函数。在本文中,我们将采用简单的误差平方和。

误差平方和,即每个预测值和真实值之间差值的平均值。这个差值是取了平方项的,所以我们测量的是差值的绝对值。

在训练过程中,我们的目标是找到一组最佳的权重和偏置,使损失函数最小化。

反向传播

现在,我们已经找到了预测误差的方法(损失函数),那么我们需要一种方法将错误「传播」回去,从而更新权重和偏置。

为了确定权重和偏置调整的适当值,我们需要知道损失函数对权重和偏置的偏导数。

从微积分的角度来看,函数的偏导数也就是函数的斜率。

梯度下降算法

如果我们知道了偏导数,我们可以通过简单增加或减少偏导数(如上图所示)的方式来更新权重和偏置。这就是所谓的梯度下降。

然而,由于损失函数的方程不包含权重和偏置,所以我们不能直接计算损失函数对权重和偏置的偏导数。因此,我们需要链式法则来帮助计算。

以上是用于计算损失函数对权重偏导数的链式法则。简单起见,我们只展示了一层神经网络的偏导数。

唷!这看起来不大好看,但这能让我们获得所需——损失函数对权重的偏导数(斜率),以便相应调整权重。

既然我们已经有了链式法则公式,接下来我们把反向传播函数添加到 Python 代码中。

class NeuralNetwork:    def __init__(self, x, y):        self.input      = x        self.weights1   = np.random.rand(self.input.shape[1],4)        self.weights2   = np.random.rand(4,1)                        self.y          = y        self.output     = np.zeros(self.y.shape)    def feedforward(self):        self.layer1 = sigmoid(np.dot(self.input, self.weights1))        self.output = sigmoid(np.dot(self.layer1, self.weights2))    def backprop(self):        # application of the chain rule to find derivative of the loss function with respect to weights2 and weights1        d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))        d_weights1 = np.dot(self.input.T,  (np.dot(2*(self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1)))        # update the weights with the derivative (slope) of the loss function        self.weights1 += d_weights1        self.weights2 += d_weights2

整合

既然我们已经有了做前向传播和反向传播的完整 Python 代码,我们可以将神经网络应用到一个示例中,看看它的效果。

我们的神经网络应该能够习得理想的权重集合以表示这个函数。请注意,对于我们来说,仅通过检查来计算权重并非一件小事。

如果我们将神经网络进行 1500 次迭代,看看会发生什么。下图展示了每次迭代的损失函数值,我们可以清晰地发现损失函数单调下降到最小值。这与我们前面讨论的梯度下降算法是一致的。

让我们看看神经网络在进行 1500 次迭代后的最终预测(输出):

进行 1500 次迭代后的预测值

我们成功了!我们的前向传播和反向传播算法成功训练了神经网络,且预测值收敛到了真实值。

请注意,预测值和真实值之间还是有一些轻微差异的。这是可取的,因为它防止了过度拟合,并且使得神经网络具有更强的泛化能力。

下一步

幸运的是,我们的探索还没有结束。关于神经网络和深度学习还有很多需要学习的地方。例如:

除了 Sigmoid 函数之外,我们还可以使用哪些激活函数?

在训练神经网络时使用学习率

使用卷积进行图像分类任务

最后一点想法

在撰写此文的过程中,我已经学到了很多,希望本文也能对你有所帮助。

在没有完全了解神经网络内部工作原理的情况下,虽然使用诸如 TensorFlow 和 Keras 之类的深度学习库可以让我们很容易地建立深度网络,但我认为对于有抱负的数据科学家而言,深入理解神经网络还是大有裨益的。

热门推荐

原文标题:无需深度学习框架,如何从零开始用Python构建神经网络

文章出处:【微信号:gh_ecbcc3b6eabf,微信公众号:人工智能和机器人研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

深度学习高效化与专用处理芯片设计

在人工智能领域,机器学习研究与芯片行业的发展,即是一个相因相生的过程。自第一个深度网络提出,深度学习....

的头像 深度学习大讲堂 发表于 06-22 09:55 57次 阅读
深度学习高效化与专用处理芯片设计

人工神经网络在这六大领域的表现已经超越了人类

记录表明,机器在图像和物体识别方面的能力远远超过了人类。在一次测试软件识别玩具的能力的实验中,Geo....

发表于 06-22 07:55 10次 阅读
人工神经网络在这六大领域的表现已经超越了人类

回看人工智能的发展历程,它将是人类的伙伴

在人工智能的今生发展,除了趋势的判断,还应落地到具体应用上。腾讯研究院高级研究员徐思彦的场景和人机回....

发表于 06-22 07:52 13次 阅读
回看人工智能的发展历程,它将是人类的伙伴

AI技术给人们生活带来的便利以及它的局限性

语音识别是指我们自然发出的声音需要机器转换成语言符号,通过识别和理解过程把语音信号转变为响应的文本或....

发表于 06-22 07:35 11次 阅读
AI技术给人们生活带来的便利以及它的局限性

人工智能技术发展的方向:ML和DL

深度学习(Deep Learning)是一种实现ML的技术,是当前AI技术中非常火的话题,由Hint....

发表于 06-22 07:31 43次 阅读
人工智能技术发展的方向:ML和DL

对于模型和数据的可视化及可解释性的研究方法进行回顾

另一个有趣的tutorial是:Computer Vision for Robotics and D....

的头像 将门创投 发表于 06-21 18:09 162次 阅读
对于模型和数据的可视化及可解释性的研究方法进行回顾

人工智能到底是不是“创业噱头”?人工智能创业的两种形态

人工智能的商业化有三大核心,即技术、数据和场景,科技巨头们拥有数据上的优势,目前的焦点在于人工智能的....

的头像 机器人博览 发表于 06-21 15:12 326次 阅读
人工智能到底是不是“创业噱头”?人工智能创业的两种形态

人工智能之父:不是AI,而是IA

像《我,机器人》这样水平的人工智能多久能被制造出来一直有两种声音,一种是人们认为它很快就能到来,另一....

的头像 人工智能 发表于 06-21 15:00 284次 阅读
人工智能之父:不是AI,而是IA

一种用深度学习框架对普通视频进行流畅稳定的慢动作回放的技术

接着,研究人员从YouTube和摄像机中选取了一些240fps的视频,其中包括The Slow Mo....

的头像 论智 发表于 06-21 10:14 157次 阅读
一种用深度学习框架对普通视频进行流畅稳定的慢动作回放的技术

Python中is与==判断的区别

发表于 06-20 17:11 110次 阅读
Python中is与==判断的区别

FPGA和CPU如何搭配?

如下图,FPGA作为协处理器,CPU把指令写入内存,FPGA从内存读取指令执行,并把计算结果写入内存....

的头像 ssdfans 发表于 06-20 15:17 210次 阅读
FPGA和CPU如何搭配?

从奥卡姆剃刀理论到机器学习,机器学习应用任重道远

王教授表示,如果开发者要执行的任务处于非常封闭的环境,和人的常识没有什么关系,这样的任务非常适合机器....

的头像 中国人工智能学会 发表于 06-20 15:05 164次 阅读
从奥卡姆剃刀理论到机器学习,机器学习应用任重道远

机器学习工程师有没有前途?如何正确入门

有时候并不是你的能力不够,也并不是你不够努力,只是缺少了一个正确的引导而已。

的头像 人工智能爱好者社区 发表于 06-20 10:31 222次 阅读
机器学习工程师有没有前途?如何正确入门

数据处理中最强有力也最流行的工具之一:Pandas!

Pandas 是一个低学习成本高性能的数据结构和数据分析工具。抛开大熊猫憨态可掬的样子不说,「Pan....

的头像 TensorFlow 发表于 06-20 10:09 142次 阅读
数据处理中最强有力也最流行的工具之一:Pandas!

Python系统库itertools的详细资料介绍

很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pytho....

的头像 马哥Linux运维 发表于 06-18 17:08 97次 阅读
Python系统库itertools的详细资料介绍

一些能够解决生活中一些具体问题的常用算法的整理集合

这是一篇八千字的长文,是一些算法笔记的整理集合,希望能给你帮助。

的头像 算法与数据结构 发表于 06-18 11:41 170次 阅读
一些能够解决生活中一些具体问题的常用算法的整理集合

Python 转向 Go语言的9大原因和3大缺点

转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时。今年 Stream 团队的....

发表于 06-17 07:40 77次 阅读
Python 转向 Go语言的9大原因和3大缺点

把传统的贝叶斯因果网络和知识图谱,与深度强化学习融合

用一个例子来更具体地解释 GN。考虑在任意引力场中预测一组橡胶球的运动,它们不是相互碰撞,而是有一个....

的头像 新智元 发表于 06-16 16:24 510次 阅读
把传统的贝叶斯因果网络和知识图谱,与深度强化学习融合

如何利用非监督学习实现了不同音乐间的乐器、体裁和风格间的转换

如果拥有一点乐理基础的话,可以使用CNN模型通过MIDI格式的音乐生成的label来学习音乐的表达和....

的头像 将门创投 发表于 06-16 16:09 249次 阅读
如何利用非监督学习实现了不同音乐间的乐器、体裁和风格间的转换

讨论深度学习的不同方式,让你了解客户的声音

本体和词汇是这些方法的基石。他们定义了特定行业或企业的词汇。然而,关键字提供了有限的洞察力,不能涵盖....

的头像 CTI论坛 发表于 06-15 15:12 435次 阅读
讨论深度学习的不同方式,让你了解客户的声音

AI算力6年增长30万倍,软硬件能力增长破除深度学习“寒冬论”

国内AutoML领域创业公司智铀科技发布了自动化机器学习产品“小智”,据公开数据显示,这是国内首款可....

的头像 新智元 发表于 06-15 15:07 1200次 阅读
AI算力6年增长30万倍,软硬件能力增长破除深度学习“寒冬论”

人工智能+安防主要应用于这么几个细分市场

基于深度学习的行人检测算法能够在有各类遮挡的情况下精确找出行人位置,并能够进一步分析行人姿态和动作,....

的头像 物联网技术 发表于 06-15 14:27 903次 阅读
人工智能+安防主要应用于这么几个细分市场

分享自己用于搞定数据处理和机器学习的开发环境

如果你想要针对每个环境独立控制对各类 pip 包的管理,那么这就是一款绝佳的工具比如,你可以为 We....

的头像 TensorFlow 发表于 06-15 09:53 331次 阅读
分享自己用于搞定数据处理和机器学习的开发环境

人工智能的起点:神经网络和深度学习

一、计算机和人相互依存 当今社会,计算机在我们的生活和工作中扮演着重要的角色,人类使用计算机帮助他们....

的头像 电子设计 发表于 06-15 09:36 1226次 阅读
人工智能的起点:神经网络和深度学习

单片机承载着深度学习的未来

果然,TensorFlow Mobile的老大,满脑子还是便携设备的事。Pete Warden,是谷....

的头像 重庆人工智能 发表于 06-15 09:06 1148次 阅读
单片机承载着深度学习的未来

编程初学者应该学习什么语言好?

此外,根据 Hacker News 招聘趋势排名,越来越多的公司对掌握 Python 技能的开发者感....

的头像 电子发烧友网工程师 发表于 06-15 09:02 1249次 阅读
编程初学者应该学习什么语言好?

微型化是机器学习应用的一条出路

相信机器学习可以在微小的、低功耗的芯片上运行,这种技术将解决目前方案中的瓶颈问题。

的头像 新智元 发表于 06-13 18:10 763次 阅读
微型化是机器学习应用的一条出路

友邦安达采集多方信息,打造AI主动安全管理体系

友邦安达自主研发的纯单目视觉ADAS是“智人”采集车道信息的硬件基础。主要功能有前方车距监测与警示、....

的头像 高工智能汽车 发表于 06-13 11:20 445次 阅读
友邦安达采集多方信息,打造AI主动安全管理体系

深度学习科普文:最通俗易懂 从老虎机到电子游戏

机器学习和数据科学的专家Emmanuel Ameisen分享了自己对深度学习的理解,用简明扼要的方式....

的头像 论智 发表于 06-12 19:00 556次 阅读
深度学习科普文:最通俗易懂 从老虎机到电子游戏

专业python web编程工具

发表于 06-12 16:23 213次 阅读
专业python web编程工具

NVIDIA和Pure Storage推出了一种经济的AI基础设施构建方式

对于要创建深度学习系统的企业来说,如何快速入门、能否投入较低的前期成本、如何从GPU中获得最大收益等....

的头像 英伟达NVIDIA企业解决方案 发表于 06-11 17:46 948次 阅读
NVIDIA和Pure Storage推出了一种经济的AI基础设施构建方式

生成对抗网络GAN,正在成为新的“深度学习”

生成对抗网络由一个生成网络(Generator)与一个判别网络(Discriminator)组成。生....

的头像 新智元 发表于 06-11 16:04 480次 阅读
生成对抗网络GAN,正在成为新的“深度学习”

新一代智能机床与智能数控系统的探索与实践

数控机床正从数字化机床(NumericalControl Machine Tools)向智能化机床(....

的头像 工业4俱乐部 发表于 06-11 15:14 315次 阅读
新一代智能机床与智能数控系统的探索与实践

Python编程电子教材:从入门到实践让你快速学会Python编程

 本书旨在让你成为优秀的程序员,具体地说,是优秀的Python程序员。通过阅读本书,你将迅速掌握编程....

发表于 06-11 08:00 125次 阅读
Python编程电子教材:从入门到实践让你快速学会Python编程

Python爬虫速成指南让你快速的学会写一个最简单的爬虫

本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容。 本文受众:没写过....

的头像 马哥Linux运维 发表于 06-10 09:57 438次 阅读
Python爬虫速成指南让你快速的学会写一个最简单的爬虫

初学C语言 先搞懂这些基础知识再谈深度学习吧!

很多初学者都会问我“我想学C,该怎么开始呢?”今天我们就来聊一聊属于初学者必须懂的知识希望小伙伴们能....

的头像 C语言编程学习 发表于 06-09 10:41 870次 阅读
初学C语言 先搞懂这些基础知识再谈深度学习吧!

Lookalike技术:让客户量级的倍增的利器

最近,乐天营销(Rakuten Marketing)发布的一份全球广告营销报告显示,营销人员预计他们....

的头像 新智元 发表于 06-08 17:54 674次 阅读
Lookalike技术:让客户量级的倍增的利器

谷歌AutoML是一个基于谷歌在图像识别领域的最新研究成果

但AutoML弥补了人工智能在应用上的不足和技术的限制,并使更多的企业更好的利用AI并从中受益。它可....

的头像 将门创投 发表于 06-08 16:35 511次 阅读
谷歌AutoML是一个基于谷歌在图像识别领域的最新研究成果

人工智能、机器学习、深度学习有什么关系?

有三个词,这两年出现的频率越来越高:人工智能(AI),机器学习(ML),深度学习(DL),到底他们哥....

的头像 机器人博览 发表于 06-08 15:19 942次 阅读
人工智能、机器学习、深度学习有什么关系?

深度学习时代的新主宰:可微编程

深度学习自诞生之日起,即面临着黑盒智能、可解释性差等质疑, 发展至今,不可否认地带来了一波人工智能的....

的头像 深度学习大讲堂 发表于 06-08 11:51 642次 阅读
深度学习时代的新主宰:可微编程

2018年数据科学和机器学习工具调查

近日,数据科学网站KDnuggets发布 2018年数据科学和机器学习工具调查结果。

的头像 算法与数据结构 发表于 06-07 17:05 712次 阅读
2018年数据科学和机器学习工具调查

我们目前在机器学习方面的进展有多可靠?

不幸的是,我们通常对相同分布中的新数据的访问受限。现如今,人们已经普遍接受在整个算法和模型设计过程中....

的头像 中国人工智能学会 发表于 06-07 16:37 531次 阅读
我们目前在机器学习方面的进展有多可靠?

大众眼中的人工智能研究

概言之,他引发的革命、对行业的翻盘和对学术圈的震荡、还有隐患和不足都是那么的个性鲜明、棱角分明 。

的头像 人工智能学家 发表于 06-07 15:42 464次 阅读
大众眼中的人工智能研究

AI芯片已经成了最热门的投资领域,各种AI芯片层出不穷

在设备端,智能终端的数量庞大,而且需求差异较大,推理环节无法在云端完成,要求设备有独立的推理计算能....

的头像 ICChina 发表于 06-07 15:17 469次 阅读
AI芯片已经成了最热门的投资领域,各种AI芯片层出不穷

请问python可以替代shell吗?

发表于 06-07 14:57 230次 阅读
请问python可以替代shell吗?

一种以50帧/秒进行端到端车道检测的方法

最近的研究有人用深度神经网络取代手工标记,通过构建一定量学习密集的特征检测器进行预测,即像素级的车道....

的头像 智车科技 发表于 06-07 10:20 559次 阅读
一种以50帧/秒进行端到端车道检测的方法

美军机密:AI系统能预测导弹发射国

据路透社报道,美国军方正加大经费研究一种AI系统,它能预测朝鲜等国是否要发射核导弹,并可以追踪和瞄准....

的头像 全球技术地图 发表于 06-07 10:07 445次 阅读
美军机密:AI系统能预测导弹发射国

12行简单的Python代码,初窥爬虫的秘境

往往不少童鞋写论文苦于数据获取艰难,辗转走上爬虫之路;许多分析师做舆情监控或者竞品分析的时候,也常常....

的头像 马哥Linux运维 发表于 06-07 09:17 1502次 阅读
12行简单的Python代码,初窥爬虫的秘境

人工智能在企业的落地是一门大学问,而且是一门艺术性的学问

高维度的、统一的特征表达,这就是人工智能想达到的目标。所有的推理、类比、抽象等,都可以在这个空间里得....

的头像 新智元 发表于 06-06 18:04 864次 阅读
人工智能在企业的落地是一门大学问,而且是一门艺术性的学问

人工智能正在以前所未有的速度发展

三大部分第一部分 人工智能领域即将进入产业爆发的拐点深度学习技术使人工智能达到商用化水平云计算和大数....

的头像 鼎酷IOT部落 发表于 06-06 15:46 407次 阅读
人工智能正在以前所未有的速度发展

用AlexNet对cifar-10数据进行分类

AlexNet在图像分类中是一个比较重要的网络,在学习的过程中不仅要学会写网络结构,知道每一层的结构....

的头像 人工智能爱好者社区 发表于 06-06 14:18 542次 阅读
用AlexNet对cifar-10数据进行分类

基于Keras搭建的深度学习网络示例

Python软件基金会成员(Contibuting Member)Vihar Kurama简明扼要地....

的头像 论智 发表于 06-06 11:21 575次 阅读
基于Keras搭建的深度学习网络示例

哪些平台支持Python?

发表于 06-05 16:41 243次 阅读
哪些平台支持Python?

Python Editor如何轻松玩转MicroPython?

发表于 06-04 14:36 156次 阅读
Python Editor如何轻松玩转MicroPython?

Python的就业前景怎么样

发表于 05-30 17:45 317次 阅读
Python的就业前景怎么样

Python快速入门方法

发表于 05-24 15:37 444次 阅读
Python快速入门方法

机器学习、深度学习、卷积神经网络...人工智能时代的曙光

发表于 05-22 09:54 1155次 阅读
机器学习、深度学习、卷积神经网络...人工智能时代的曙光

在 MaxCompute UDF 中运行 Scipy

发表于 05-17 19:30 337次 阅读
在 MaxCompute UDF 中运行 Scipy

【产品功能】配置网卡从此与关机无缘,弹性网卡支持热插拔功能

发表于 05-15 22:49 285次 阅读
【产品功能】配置网卡从此与关机无缘,弹性网卡支持热插拔功能