从零开始学习用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,微信公众号:人工智能和机器人研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

零经验也可轻松学习《Python编程快速上手-让繁琐工作自动化》

《Python编程快速上手—让繁琐工作自动化》是畅销Python编程图书,帮助你通过编程快速实现工作自动化。在本书中,你将学习利用...

发表于 10-15 16:47 112次 阅读
零经验也可轻松学习《Python编程快速上手-让繁琐工作自动化》

11种深度学习框架影响力对比

现在数据科学领域最热门的方向仍旧是深度学习。相应地,深度学习框架也处于飞速变革之中。现在最流行的框架....

的头像 罗欣 发表于 10-15 11:50 53次 阅读
11种深度学习框架影响力对比

未来人工智能的五大发展趋势是怎么样的?

虽然人工智能曾经存在泡沫,但一般泡沫破灭之后就是发展。让我们一起看一下,在未来人工智能的发展趋势。

的头像 Thundersoft中科创达 发表于 10-14 11:45 462次 阅读
未来人工智能的五大发展趋势是怎么样的?

纽劢科技以基于深度学习的多传感融合方案打造量产级自动驾驶

自动驾驶汽车的发展正成为社会各界关注的热点,国内外已有越多越多城市允许车辆进行道路测试。

的头像 智车科技 发表于 10-14 09:54 428次 阅读
纽劢科技以基于深度学习的多传感融合方案打造量产级自动驾驶

7个Python调试通过的代码详细资料分析

"Python的应用十分广泛,今天我们来分享7个Python实战项目代码,希望你有所收获。

的头像 马哥Linux运维 发表于 10-14 09:46 220次 阅读
7个Python调试通过的代码详细资料分析

GAN之父Goodfellow回顾自己当年的科研经历

近日,NeuroAscent联合创始人、数据科学家Sanyam Bhutani对Ian Goodfe....

的头像 论智 发表于 10-13 09:11 269次 阅读
GAN之父Goodfellow回顾自己当年的科研经历

激活函数如何隐式地改变传入网络层的数据分布,进而影响网络的优化过程

你可以自己试验一下。我试了很多次,从来没能得到一个数量级大于10-18的数。如果这个值是神经元A的梯....

的头像 论智 发表于 10-13 08:58 218次 阅读
激活函数如何隐式地改变传入网络层的数据分布,进而影响网络的优化过程

关于从pyrealsense2中的'pc.calculate'获取的点云的问题

我使用python包装器中的代码来获取点云: depth = frames.get_depth_frame() color = frames.get_color_frame() 如果不是...

发表于 10-12 11:50 36次 阅读
关于从pyrealsense2中的'pc.calculate'获取的点云的问题

成为Python工程师需要哪些技能

掌握计算机的构成和工作原理

的头像 工程师人生 发表于 10-12 09:54 190次 阅读
成为Python工程师需要哪些技能

UC Berkeley大学的研究人员们利用深度姿态估计和深度学习技术

给定一段视频,我们用基于视觉的动作估计器预测每一帧演员的动作qt。该动作预测器是建立在人类网格复原这....

的头像 论智 发表于 10-12 09:06 238次 阅读
UC Berkeley大学的研究人员们利用深度姿态估计和深度学习技术

《深度学习:AI革命及其前沿进展》报告

018年9月9日-14日,DeepMind主办的Deep Learning Indaba 2018大....

的头像 智能制造 发表于 10-11 14:27 385次 阅读
《深度学习:AI革命及其前沿进展》报告

深度数据输出具有许多零距离

我正在编写python应用程序来测量从D435到障碍物的距离。 我在GitHub中找到了简单的对齐代码,然后我下载并运行它。 主机上的...

发表于 10-11 14:22 13次 阅读
深度数据输出具有许多零距离

一种深度学习系统可以从高精度的气候模拟中识别出极端天气模式

研究人员表示这一研究实现了很多记录,不仅是在气象科学领域第一次将深度学习用于解决如此大规模的气候分割....

的头像 将门创投 发表于 10-11 10:11 314次 阅读
一种深度学习系统可以从高精度的气候模拟中识别出极端天气模式

Keras和TensorFlow究竟哪个会更好?

Keras 依然作为一个库,与 TensorFlow 分开,进行独立操作,所以仍存在未来两者会分开的....

的头像 电子发烧友网工程师 发表于 10-11 10:05 300次 阅读
Keras和TensorFlow究竟哪个会更好?

探讨新款煤气灶,对VR头显能起到多大作用

新显卡的测评首先带来刷新率和画面效果的提升。新的两款显卡RTX 2080与GTX 1080Ti在实测....

的头像 VR陀螺 发表于 10-11 09:29 714次 阅读
探讨新款煤气灶,对VR头显能起到多大作用

python基础教程(含100例程和crossin全60课)

python基础入门100例程序包含了100个python入门的小例子,包括了基础语法,数据结构,控制流,类继承等基础知识的训练和,很适合...

发表于 10-10 13:41 1364次 阅读
python基础教程(含100例程和crossin全60课)

NAC的工作原理,以及它如何处理加法和减法等操作

现在,我们可以定义样板代码来训练模型。 我们首先定义占位符 X 和 Y,用以在运行时提供数据。 接下....

的头像 TensorFlow 发表于 10-10 11:34 231次 阅读
NAC的工作原理,以及它如何处理加法和减法等操作

fast.ai发布的一个简便、好用的PyTorch库

Christine McLeavey Payne是从上一期Fast.ai深度学习课程中脱颖而出的一名....

的头像 论智 发表于 10-10 09:20 339次 阅读
fast.ai发布的一个简便、好用的PyTorch库

假设不懂数据科学,如何解决问题?

常识告诉你,应该选择那些最忠诚的顾客,毕竟,他们是最可能对邮件感兴趣的人。(不过,其实这个问题也可以....

的头像 论智 发表于 10-10 09:09 217次 阅读
假设不懂数据科学,如何解决问题?

深度学习算法应用于三维医学影像的超快分析

英国《自然·医学》杂志13日在线发表的两项独立研究显示,最新的人工智能(AI)已可以基于三维医学影像....

的头像 通信信号处理研究所 发表于 10-09 16:40 342次 阅读
深度学习算法应用于三维医学影像的超快分析

深度学习颠覆了传统生物识别技术,未来生物识别技术的应用领域将更加广泛

目前在安防领域应用较为普遍的生物特征识别技术就包含了一部分以计算机视觉为技术基础的人员身份特征,除了....

发表于 10-09 10:54 298次 阅读
深度学习颠覆了传统生物识别技术,未来生物识别技术的应用领域将更加广泛

浅谈Python语言

python是目前市面上,我个人认为是最简洁&&最优雅&&最有钱途&&最全能的编程语言,没有之一。所....

发表于 10-09 09:45 188次 阅读
浅谈Python语言

人工智能无法通过儿童可轻松完成的“视力检测”

相比之下,人工智能会非常费力地制造视觉印象,就好像它是用盲文阅读描述一样。不同的算法,人工智能产生了....

的头像 电子发烧友网工程师 发表于 10-08 15:02 333次 阅读
人工智能无法通过儿童可轻松完成的“视力检测”

Facebook宣布发布深度学习框架 PyTorch 1.0开发者预览版

为了满足这些需求,Google Cloud 也将为其众多服务引入 PyTorch 支持。Facebo....

的头像 电子发烧友网工程师 发表于 10-08 14:36 368次 阅读
Facebook宣布发布深度学习框架 PyTorch 1.0开发者预览版

【连载】深度学习笔记9:卷积神经网络(CNN)入门

      前面的八篇学习笔记,基本上都是围绕着深度神经网络(DNN)和全连接网络(FCN)在学习。....

的头像 人工智能实训营 发表于 10-08 12:56 134次 阅读
【连载】深度学习笔记9:卷积神经网络(CNN)入门

讨论热度最高的论文TOP 5

尽管近期由于生成图像建模的研究进展,从复杂数据集例如 ImageNet 中生成高分辨率、多样性的样本....

的头像 新智元 发表于 10-08 11:09 1307次 阅读
讨论热度最高的论文TOP 5

将Python数据处理速度提升2~6倍的简单方法

让我们举一个简单的例子,我们在一个文件夹中有一个图像数据集; 或者我们甚至有成千上万的图像!为了节省....

的头像 新智元 发表于 10-08 10:56 315次 阅读
将Python数据处理速度提升2~6倍的简单方法

GPU会在深度学习领域失宠吗?

AI WORLD 2018世界人工智能峰会重磅发布了AI领域年度大奖——AI Era创新大奖,NVI....

的头像 新智元 发表于 10-08 10:23 378次 阅读
GPU会在深度学习领域失宠吗?

了解人工智能的实际应用,以及它的缺陷

在这个项目里,我们用了两个公开的数据集,A中包含了来自伦敦三家不同医院的数据,有将近600名病人。数....

的头像 论智 发表于 10-08 09:08 796次 阅读
了解人工智能的实际应用,以及它的缺陷

Python的受欢迎程度真的能超越JavaScript吗?

可以发现,有69.8%的受访用户表示支持JavaScript,而稳定使用Python的用户只占38.....

的头像 论智 发表于 10-08 09:02 691次 阅读
Python的受欢迎程度真的能超越JavaScript吗?

怎么有效学习Python数据分析?Python数据分析基础电子教材免费下载

本书展示如何用 Python 程序将不同格式的数据处理和分析任务规模化和自动化。主要内容包括 :Py....

发表于 10-08 08:00 54次 阅读
怎么有效学习Python数据分析?Python数据分析基础电子教材免费下载

树莓派自动驾驶:使用 Keras 与 Tensorflow 构建车道跟踪自动汽车

无人驾驶虽然入门门槛很高,但是还是可以通过一些简化的模型迅速上手。例如比较有名的DonkeyCar,....

的头像 基于树莓派的自动驾驶 发表于 10-07 17:59 330次 阅读
树莓派自动驾驶:使用 Keras 与 Tensorflow 构建车道跟踪自动汽车

预计2023年深度学习市场价值超181亿美元,复合成长率或达最高水平

深度学习(Deep Learning)是机器学习技术的一部分,通过实现端到端优化,使用多层线性和非线....

的头像 工控网智造工程师 发表于 10-02 17:49 197次 阅读
预计2023年深度学习市场价值超181亿美元,复合成长率或达最高水平

2018年受到众多开发者关注的7个Python类库

几个还不太知名的库引起了Python开发者的关注。

的头像 马哥Linux运维 发表于 10-02 09:30 361次 阅读
2018年受到众多开发者关注的7个Python类库

十个最受欢迎的Python机器学习库盘点

Python已成为机器学习领域最热门的编程语言之一。

的头像 智车科技 发表于 10-02 08:47 982次 阅读
十个最受欢迎的Python机器学习库盘点

国际数据公司:2022年全球认知和人工智能系统支出将达776亿美元

国际数据公司(IDC)近日发布了《全球半年度认知和人工智能系统支出指南》的最新版本,报告显示,随着企....

的头像 安全自动化 发表于 10-01 17:12 786次 阅读
国际数据公司:2022年全球认知和人工智能系统支出将达776亿美元

Python变量很难记?常见的解决办法有三种

在PEP 484中,引入了Type Hints,在PEP 526中引入了Variable Annot....

的头像 马哥Linux运维 发表于 09-30 09:10 239次 阅读
Python变量很难记?常见的解决办法有三种

11种深度学习框架影响力评估

总体而言,PyTorch是第三流行的框架,也是第二流行的独立框架。它比TensorFlow要年轻,流....

的头像 论智 发表于 09-30 08:48 225次 阅读
11种深度学习框架影响力评估

如何使用Python来设计和实现语料分析系统设计?

语料分析系统是利用计算机软件技术实现语料分析与研究的重要手段,利用它可以实现对大量语料的分析、词语1....

发表于 09-29 17:23 63次 阅读
如何使用Python来设计和实现语料分析系统设计?

用Python爬取拉勾网不同编程语言职位信息

这张图告诉我们,在大部分情况下,没(Ren)钱(Chou)就要多读书。不管是经验经验1年以下、经验3....

的头像 人工智能 发表于 09-29 16:51 375次 阅读
用Python爬取拉勾网不同编程语言职位信息

迭代器和生成器的区别

经由内存池登记的内存到最后还是会回收到内存池,并不会调用 C 的 free 释放掉.以便下次使用.对....

的头像 马哥Linux运维 发表于 09-29 15:41 324次 阅读
迭代器和生成器的区别

汉斯·乌思克尔特:结合不同类型机器学习进行的信息和知识提取

在让我们再看一下历史,看一下这两种系统,一个系统是做窄面的事情,可以反映有很长的历史,还有其他的系统....

的头像 中国人工智能学会 发表于 09-29 11:49 646次 阅读
汉斯·乌思克尔特:结合不同类型机器学习进行的信息和知识提取

盘点TensorFlow在智能终端中的应用

深度学习在图像处理、语音识别、自然语言处理领域的应用取得了巨大成功,但是它通常在功能强

的头像 人工智能 发表于 09-29 11:33 291次 阅读
盘点TensorFlow在智能终端中的应用

MicroPython开发板:TPYBoard v102播放音乐实例

0x00 前言 前段时间看到TPYBoard的技术交流群(群号:157816561)里有人问关于TPYBoard播放音乐的问题。最近抽空...

发表于 09-29 10:33 161次 阅读
MicroPython开发板:TPYBoard v102播放音乐实例

算法是什么?python的时间,空间复杂度和常用算法实例说明免费下载

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系....

发表于 09-29 08:00 39次 阅读
算法是什么?python的时间,空间复杂度和常用算法实例说明免费下载

Python基础教程之《Python机器学习—预测分析核心算法》免费下载

 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措。本书从算法和 Py....

发表于 09-29 08:00 48次 阅读
Python基础教程之《Python机器学习—预测分析核心算法》免费下载

关于Python 新手不得不知道

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

发表于 09-28 17:18 171次 阅读
关于Python 新手不得不知道

解析媒体矩阵的Python编程函数讲解资料免费下载

每种计算机语言都会遇到这样的应用情况:程序中会出现重复执行的语句。尽管可以用复制/ 粘贴的方式重复代....

发表于 09-28 16:57 42次 阅读
解析媒体矩阵的Python编程函数讲解资料免费下载

基于dragonboard 410c使用python进行GPS报文解析获取位置信息

       dragonboard 410c是一款非常强大的开发板,其自带了GPS,wifi和高性能的图形处理单元,可以方便的...

发表于 09-28 11:54 2047次 阅读
基于dragonboard 410c使用python进行GPS报文解析获取位置信息

如何为深度学习模型寻找最佳超参数集?

寻找超参数的最佳配置,通常会面临的挑战是,超参数搜索是一个受计算、金钱和时间约束的迭代过程。

的头像 中国人工智能学会 发表于 09-28 11:49 253次 阅读
如何为深度学习模型寻找最佳超参数集?

玩转Dragonboard 410c USB摄像头之人脸识别

      人脸识别是一个非常酷的技术,在移动支付、安防、娱乐等众多领域有着非常广泛的应用,今天就带大家一...

发表于 09-28 10:53 127次 阅读
玩转Dragonboard 410c USB摄像头之人脸识别

AI计算系统设计与优化:从实验到生产

从Gartner 2018年数据看到,全球人工智能市场商业价值一直处于高速增长趋势,到2018年,所....

的头像 新智元 发表于 09-28 09:53 456次 阅读
AI计算系统设计与优化:从实验到生产

什么是Adam、ReLU、YOLO?解释深度学习的一些常用术语

AlexNet是一个流行的CNN架构,有八层,它比LeNet更广泛,因此训练用时也更长。2012年,....

的头像 论智 发表于 09-28 09:11 333次 阅读
什么是Adam、ReLU、YOLO?解释深度学习的一些常用术语

深入浅出地介绍了梯度下降这一概念

初始化权重时,我们在损失曲面的A点。我们首先要做的,是检查一下,在x-y平面上的所有可能方向中,沿着....

的头像 论智 发表于 09-28 09:06 254次 阅读
深入浅出地介绍了梯度下降这一概念

只要3千(美元),顶级GPU可扩展的深度学习计算机抱回家

假设这台只有一个GPU的机器在未来三年不会折旧,下表显示,如果你至少用了一年后,它会便宜10倍,其中....

的头像 论智 发表于 09-28 09:02 388次 阅读
只要3千(美元),顶级GPU可扩展的深度学习计算机抱回家

R和Python,哪个对数据科学初学者更友好?

我想强调的是,这主要不是少打几个字的问题,而是形成“恰当的”心智模型的问题。许多人抱怨R代码很慢,9....

的头像 论智 发表于 09-28 08:59 196次 阅读
R和Python,哪个对数据科学初学者更友好?

深度学习背后的线性代数问题

向量是一维有序数组,是一阶张量的例子。向量被称为向量空间的对象的片段。向量空间可以被认为是特定长度(....

的头像 人工智能 发表于 09-27 18:51 381次 阅读
深度学习背后的线性代数问题

如何从摄像头中获取图像并保存和实时显示

   前一个blog中跟大家分享了如何快速的编写程序从连接在Dragonboard 410c开发板上的USB摄像头中读取图像信息,给...

发表于 09-25 15:15 127次 阅读
如何从摄像头中获取图像并保存和实时显示

Dragonbaord 410c Python交互设计:利用pyQt搭建交互程序界面

     在一文中向大家介绍了如何在dragonboard 410c开发板上搭建PyQt UI设计环境,今天将进一步以一个天...

发表于 09-25 15:07 104次 阅读
Dragonbaord 410c Python交互设计:利用pyQt搭建交互程序界面

python

python学习 1.爬取数据 2.爬取图片

发表于 09-21 18:18 38次 阅读
python