导论丨图说深度学习丨神经网络和 TensorFlow (附视频中字)

CDA字幕组 编译整理

本文为 CDA 数据分析师原创作品,转载需授权

Youtube数据科学领域的热门博主sentdex,经常会分享关于Python和机器学习相关的教程,这次他用画图的形式讲解了深度学习、神经网络和TensorFlow。

CDA字幕组对该视频进行了汉化,附有中文字幕的视频如下:

视频内容

导论丨图说深度学习丨神经网络和TensorFlow

针对不方面开视频的小伙伴,CDA字幕组也贴心的整理了文字版本,如下:

大家近况如何,欢迎观看机器学习系列教程。我们将讲解深度学习、神经网络、TensorFlow当然还有Python。

神经网络以任何方式来看都不新奇,但它现在是最先进的。并且它正在取得如今其他机器学习模型无法达到的成就,而且是很新的。

虽然神经网络从20世纪40年代就已经诞生,但直到最近才彰显它的价值。在1940年代它更像是一种概念,掌握它并无用武之地。

随后的19世纪70年代初,1974年Paul Werbos提出一种中和阈值的方法,这个我们待会再讲。这个方法起到了一点作用,但神经网络基本上都没什么价值。

直到2011或2012年左右,出现了深度学习和海量数据集,我们提出的神经网络在做一些不可思议的事。甚至我将提到的第一个例子也是如此。我认为它非常强大,体现了神经网络如何创造出数据模型。

神经网络从生物学的角度获得灵感。

它在1940年代诞生,那时我们对大脑深层所知甚少。如今我们还是几乎一无所知,我们认识很多知识,但并不知道大脑的运作方式。这是由生物学的启发。没有必要去了解一切事物是如何运作的,或者我们是如何思考 学习的,更多的是我们认为我们会怎么想诸如此类。所以不管怎样,历史并不有趣,言归正传让我们开始神经网络的学习吧。

首先我们了解下神经网络的原理,以及它的运作形式。很明显神经网络是神经元的网络,那么基本的神经元长什么样呢?

我现在画的东西叫做树突(dendrite)。然后将树突连接在一起,接着得到了细胞核(nucleus),往下是一个个的轴突(axon)轴突末端(axon terminal)有很多弯弯曲曲的东西。所以蓝色箭头指向的是树突,就是这些。绿色的则是细胞核。接着是轴突最后是轴突末端。

神经网络拥有神经元网络,仅仅一个神经元不算两个才可以。第二个神经元在这儿。这些是树突,然后连接细胞核,再画出轴突和轴突末端。大功告成。现有的知识告诉我们,这两个神经元并不是真正地连结在一起。它们中间留有叫做突触(synapse)的部分,两神经元之间可以传递信息。

现在非常有趣的是,这些术语没有一个出现在神经网络中,即人工神经网络。所以每次我提到生物神经网络时,都会称为生物神经网络。但现在开始,我将人工神经网络称为神经网络。希望在讨论人工神经网络时你能明白。

非常有趣的是,在神经网络模型中不会用到树突、突触、轴突、轴突末端,总之不会用到它们,这真的很有意思。这是建模后的样子,这是我们试着建立的生物神经网络模型。发生了什么呢?

基本上你有了信息输入,在这种情况下看到红色箭头有三个输入。所以你从原始数据开始,可能依次是1 0 0之类的。这些输入进来,通过理论上的神经元,将数据输送到轴突。如果被激活的话则经过突触,传到下一个神经元。基本上就是这样。但有时候神经元没能激活,突触没有沟通等等。这是大脑中神经元工作的原理。

接下来我们来用下这个模型,建立神经元的模型,即我们怎样处理人工神经网络。那么让我们来进行建模。事实上,人工神经网络的神经元模型很相似。基本上一切都是从原始数据输入开始,最终它成为常规输入数据。

输入数据,我们有X1、X2和X3。事实上你可能会有更多的数据,比如刚刚提到的例子你会有784个初始输入值。所以很可能是一个庞大的数字。有了这些输入值之后,这些数据会构成一个总数。它们到时会进行加总,过程中会有权重。所以X1有权重1,X2有权重2,X3有权重3。每个都有独一无二的权重。因此你拿到这些原始数据后,将它们乘以各自的权重,全部相加就得到一个总数。现在,神经元根据输入,它可能激活也可能不激活。

如何决定它是否激活呢?它会经过一个阈值函数,大部分情况下被描绘成这样。有时候你会听到它被称作阶梯函数,因为它外形上很像一个阶梯。有时比如这个是0,一旦你经过了X特定的阈值,Y的返回值是1,正是y轴所在的地方。有时当你经过了特定的阈值会被激活,但若没用经过阈值则不会激活。

如果是人工神经网络则是对应数字0或1,两者中的一个。接着0和1,工神经网络中经过另一个人工神经元。0和1会转换成这些值之一。新的数据值到另一个连接的神经元,这个过程会继续,无论有多少隐蔽层。

现在你可能会有点困惑,这究竟是什么?让我们来看看,这是个单一神经元。通常人们不将阶梯函数作为阈值使用,因为0和1不合适。你宁愿选取那些有范围的等等。

因此通常情况下,人们不会使用阶梯函数,而是用S型函数。它之所以叫做S型函数,因为它的外形像S。这就是阈值函数,但它不再是阈值。实际上它称为激活函数。这是神经元的基本模型,但你构建网络时会分解。

输出Y是X和W的函数,此处这两者是向量 ,仅此而已。可能与S型函数会有一些关联,但在这里仅为X乘以W的函数。输入数据乘以权重。

这是一个神经元。现在让我们来看神经元网络的规模,看到神经元网络你大概会看到这样的内容。有X1、X2和X3,这是输入以及其他神经元。先是四个,再是三个,最后是一个。那接下来会发生什么呢?实际上再加两个,这无所谓。之后我们会讲到这点。

对于最基本的模型,所有输入数据都会经过神经元,这些都是相连的。每个连接都有唯一的相关权重,这些也是相连的。同样有唯一的权重,最后这些也两两相连,也有唯一的权重。这就是你的神经网络。这是你的输入,这是输入层。这个部分是隐蔽层1

这个部分是隐蔽层1,然后是隐蔽层2,最后是输出。

理论上输出会是1 0 1,可能有对应的内容。很多情况下 不会是1 0 1,在我们的例子中可能会是1 0 0或0 1 0等等。我会解释当中的原因。但对于我们的第一个例子这样可能更符合。

这是一个深度神经网络,我们刚刚建模的就是深度神经网络。为什么呢?因为这里有第二层隐蔽层,如果只有一层隐蔽层它就是常规神经网络。如果有两层及以上隐蔽层的话,那太棒了,你会得到一个深度神经网络。就这么简单。这就是为什么我不打算把神经网络和深度神经网络分开讲。因为它们其实是一回事,只是隐藏层的数目不同而已。在代码中你只是添加层数,但对建模来说 一层和十九层其实没什么差别。

那么有什么特别的?为什它过了这么久才渐渐成熟起来,最终成为我们所知最好的机器学习模型。

首先最关键的是,它需要大量的输入数据。

不是输入特征,这些是输入特征。它们不需要有很多,描述越多数量越大。但实际上,最大的问题是你拥有样本的数量。在第一个例子中我们使用训练的样本数量是6万。实际上是很少的,对于大多数做大型任务的商业神经网络来说,可能需要近5亿个样本。之后随着收益减弱不会再看到更好的结果了,但如今基本上需要这么多。

回想一下支持向量机(SVM),我们有一个凸优化(convex optimization)问题,在某种程度上说完美凸性。当你进行优化时,最优化的图像是这样的。所以如果想优化,你可以大步大步地提高,我们产生两大步,然后再小步,再更小。非常简单对吗?但是神经网络中你的优化图像可能像这样,有些奇怪的内容。所以优化问题并没有那么简单。

不仅如此,使用支持向量机时我们一般有两个变量W和B需要优化。然而在这个简单的神经网络中,我不准备计算这些线的数量。有很多连接,每条线都是唯一的权重。所以有很多独特的权重,这就有了很多变量。这是一个非常具有挑战性的优化问题,不仅是数学上的,对于计算的计算需求也是如此。而且你需要很多数据,因此需要很多样本、很多连接,样本数越多权重就越多。

如今我们现在有海量数据可用,以及有能处理和优化大量数据的计算机。所以当这两者结合在一起,使得神经网络得以改进并大放异彩。比方说简单的分类任务,神经网络与其它算法的表现很接近。比如支持向量机,假设在这个样本集上的正确率为97%,神经网络大概能达到98%或99%。就为了这么小小的1%的差别,有很多人在不断努力。人们花费很多年努力去弥补这小小的百分比差异,这非常重要。

但是对于我来说,这不如神经网络做的另一件事更让我感到雀跃。对于简单的分类工作确实做的不错,可以达到几乎相似的正确率,更让人惊叹的是神经网络的建模方面。实际上我们还不能完全理解,神经网络建立的模型到底是怎样运作的,但是它做得确实很好。可以挖掘和分析,启发我们揭示其中一些答案。

但由于我们面对的有很多变量,这还不太可能。比如我们来考虑这个问题: Jack 12岁,Jane 10岁,Kate比Jane大,比Jack小。那么Kate多少岁?你们大多数人可能没有跟上,但是如果你花时间想想,答案是11岁

为了得到这个答案,可能要运到一点逻辑。这是机器学习算法直到最近才能做到的。它们擅长分类之类的任务,但是它们不擅长逻辑建模,或者想出如何对逻辑建模,直到最近。

如果你想构建算法去回答刚才那个问题,你需要以某种方式去构建那个逻辑,你需要了解大量语言学之类的知识。然而有了神经网络,你就不需要如此了。给神经网络提供一堆样本,就像我读取的那些 与答案搭配起来,一直重复几百万次。结果神经网络就能自己弄清楚,弄清楚如何逻辑建模,这一切都可以自己完成。这就是神经网络最出色的地方。

人们可能会问,怎么获取像这样上百万的数据呢?

你有几个选择,至少是免费的。一个是图片数据,比如ImageNet。你可以谷歌搜索一下ImageNet,它类似WordNet,如果你有关注TK series。如果你不熟悉的话,可以随意了解一下NL、TK或者ImageNet,你就能弄明白。总之,对于图像数据你可以使用ImageNet。

接下来对于文本数据,第一站应该是Wikipedia Data Dump。你可以获得维基百科整个转储,这是很酷的。接着神经网络就可以帮你建模了。有了维基百科你可以做很多有趣的事。可以通过聊天日志、爬取reddit网站等等,得到输入和输出。对于语音,我确实想不到还没有听说过关于大型语音转储的东西。不过有一个网站tatoba。

我知道的最大的数据集同时免费的是Common Crawl。你们大多数可能没有能够运行Common Crawl的计算机,除非你的SLI有大量GPU。为了让主板能够承载,你在SLI中必须有更多的GPU。总之可能机构才会有,如果你的雇主有大型服务器或者你很有钱,而且你可以买AWS等等。Common Crawl是不错的选择。它达到千兆字节,你需要硬盘才能存储这么多字节,祝你好运。

在进行机器学习中主要的障碍是数据集的获取。去哪里找大量的数据?你能想象处理几亿个样本吗?比如说字迹。你可以去到reddit的机器学习分类看看,问问有谁熟知数据集。很多情况下谷歌搜索找不到数据集,但是我通过自己的研究我偶然发现了各种数据集。所以你可以在reddit的机器学习分类,或者类似的网站上问一问。其他人可能会知道这些数据集。

总之这是很明显的了,为什么Facebook和Google之类的大公司看重AI,尤其是神经网络领域。他们拥有大量的数据集去做一些有趣的事情。

那么现在抛开这些不谈,我们怎样利用神经网络工作呢?

我们将使用TensorFlow。这是谷歌开发的一个比较新的包,在我录这段视频时还处于测试阶段,还有其他包来进行机器学习。比如Diono和Torch 工作原理基本一致。因为这些都可以归结为,我之前所展示的根本就是关于X和W的函数,仅此而已。

如果学会用TensorFlow做这些,其他的也没问题了。只需学习不同的语法,实际建模部分一样。所以只需挑选一个框架,我选了TensorFlow。因为TensorFlow有一些功能,我如今和之后都会用到,比如说分布式运算之类的。

之后我们将在Ubuntu上安装TensorFlow,可能还要用到Windows的虚拟机。你如果想很好的跟着课程也想在Ubuntu上安装TensorFlow。在什么操作系统上安装其实不重要,我就继续用Ubuntu了,因为我的TensorFlow就在Ubuntu上。如果你的是Mac也可以在Mac上运行TensorFlow,也可以把TensorFlow放在Windows的Docker上。

如果你有问题、评论等请大胆留言。感谢收看,下次见。

原文发布于微信公众号 - CDA数据分析师(cdacdacda)

原文发表时间:2017-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

机器学习算法一览

认识人工智能,还需要理清几个概念之间的关系:人工智能是一个大的概念,是让机器像人一样思考甚至超越人类;而机器学习是实现人工智能的一种方法,是使用算法来解析数据、...

15520
来自专栏鸿的学习笔记

The Brain vs Deep Learning(四)

现在我们经历了整个过程,让我们把所有这一切都放在全文中,看看大脑如何使用所有的这一切。大多数神经元每秒重复接收输入和发射的过程约50到1000次; 射击频率高度...

7110
来自专栏AI科技评论

学界 | 女朋友说「我想要MAC」,OpenAI帮直男get到是口红还是电脑

AI 科技评论按:语言词汇的多义性已经是一个越发让人头疼的问题。比如女生对男朋友说:「生日礼物我想要MAC」,本来心怀期待地揣测他买来的唇彩会是什么色,结果收到...

37790
来自专栏chenjx85的技术专栏

直方图均衡化及matlab实现

38740
来自专栏AI研习社

Keras 之父讲解 Keras:几行代码就能在分布式环境训练模型

AI研习社按:在今年的谷歌开发者大会 I/O 2017 的讲座中,Keras 之父 Francois Chollet 被请出来向全世界的机器学习开发者进行一场对...

55550
来自专栏ATYUN订阅号

不需要大把的GPU如何赢得Kaggle比赛?fast.ai给出的十个技巧

Jeremy Howard是fast.ai的联合创始人,目前在Kaggle的植物幼苗分类竞赛中获得了第105名,但他的成绩下降得很快。因为,他自己的学生击败了他...

17040
来自专栏ATYUN订阅号

谷歌新突破:AI自动重构3D大脑神经地图,准确度提高一个数量级

连接组学的目的是全面成像在神经系统中的神经元网络结构,以便更好地理解大脑的运作。这个过程需要对脑组织进行纳米级(通常使用电子显微镜)3D成像,然后分析所得到的图...

14730
来自专栏AI科技大本营的专栏

AI 技术讲座精选:数学不好,也可以学好人工智能(五)——深度学习和卷积神经网络

【AI100 导读】欢迎阅读《数学不好,也可以学好人工智能》系列的第五篇文章。如果你错过了之前的四部分,一定记得把它们找出来看一下!本文主要介绍了深度学习架构—...

424100
来自专栏机器之心

资源 | Darkon:可更好理解深度学习模型的开源工具包

29550
来自专栏AI科技评论

约翰霍普金斯大学刘晨曦:渐进式神经网络结构搜索

近年来,神经网络已经成为了计算机视觉中主要的机器学习解决方案。然而神经网络结构的设计仍然需要极强的专业知识,在一定程度上妨碍了神经网络的普及。

8920

扫码关注云+社区

领取腾讯云代金券