专栏首页机器学习爱好者社区机器学习很有趣!第3章:深度学习和卷积神经网络

机器学习很有趣!第3章:深度学习和卷积神经网络

很多的文章会介绍有关深度学习的一些新闻报道,但我们却并不真正了解其背后的原理!那么今天我们这篇文章便会带大家一览其中的奥秘!

Google 现在可以让你在你自己的图片库里面

根据你的描述搜索图片,

即使这些图片根本没有被标注任何标签!这是怎么做到的??

今天,我们这篇文章将会学习如何利用深度学习算法来通过编写程序实现图像识别。相信通过今天的学习,你能够清楚的理解Google相册分类以及搜索照片的工作原理。

让我们现在开始吧!

就像第1章第2章一样,本系列的文章适合对机器学习感到好奇但不知道从哪里开始的小伙伴。关注我们公众号,制定加星标,相信很快你就能走进机器学习的乐园!(如果您尚未阅读第1章第2章,请立即阅读!)

通过深度学习识别对象

xkcd#1425(在这里查看原图)

您可能以前曾经看过这本著名的xkcd漫画。

愚蠢的想法是,任何3岁的孩子都能认出一张鸟的照片,但是50多年来,弄清楚如何使计算机识别物体的方法使最优秀的计算机科学家感到困惑。

在过去的几年中,我们终于找到了一种使用深度卷积神经网络进行物体识别的好方法。这听起来像是威廉·吉布森(William Gibson)科幻小说中的一堆虚构词,但如果将它们一一分解,这些想法是完全可以理解的。

因此,让我们做吧-让我们编写一个可以识别鸟类的程序!

从简单开始

在学习如何识别鸟类图片之前,让我们学习如何识别更简单的内容-手写数字“ 8”。

在第2部分中,我们了解了神经网络如何通过将许多简单的神经元链接在一起来解决复杂的问题。我们创建了一个小型神经网络,根据房屋的数量,房屋的大小以及房屋的所在区域来估算房屋的价格:

就和这个漫画一样,也许一个3岁的小孩可以很快识别出鸟类的照片,而最顶尖的计算机科学家们却已经花了50年的时间来研究如何让电脑识别出不同的物体。所以,在电脑科学领域,有时候很难解释简单跟几乎办不到的差别。

由浅入深

现在我们终于可以通过深度卷积神经网络(Deep convolutional neural networks)来实现鸟类的识别,在我们开始学习编写识别鸟类的程序之前,让我们由浅入深,开始一个更加简单的任务——识别手写的数字【8】。

第二章中,我们已经了解了神经网络如何通过将许多简单的神经元链接在一起来解决复杂的问题。在那个章节中我们创建了一个小型的神经网络,根据房屋的数量,房屋的大小以及房屋的所在区域来估算房屋的价格:

我们也知道:机器学习算法的思想是通过将相同的通用算法(泛型算法)来反复使用,以处理不同的数据,从而可以解决不同的问题。因此,今天,我们将会通过修改类似的神经网络以识别手写文本。但是为了使工作真正简单,我们今天将只尝试识别一个数字“8”。

机器学习仅在我们拥有数据(最好是大数据)的时候才起作用。因此,我们需要大量手写的“8”来开始我们的训练。幸运的是,正好有研究人员为此创建了MNIST手写数字数据库:

(http://yann.lecun.com/exdb/mnist/)。MNIST提供60,000张手写数字图像,每个图像为18x18分辨率的图像。图中是数据集中的一些数字“ 8”:

MNIST数据库中的数字【8】

我们在第2部分中构建的神经网络,只能接受三个数字来作为输入(“ 3”个卧室,“ 2000”平方英尺等)。但是现在我们想用我们的神经网络处理图像。那么我们应该如何将图像而不是数字,输入到神经网络里面呢?

答案非常简单。神经网络会将数字作为输入。对于计算机来说,图像实际上就是一连串的数字网格,每个数字代表着每个像素的值。

如果我们要将上面这样的图像输入到我们的神经网络里面,我们其实只需将18x18像素的图像描述为包含324个数字的数组即可,如下图所示:

那么为了更好的处理我们这324个数字的输入,我们需要将神经网络的输入节点进行扩大以适应324个输入节点:

请注意,我们的神经网络现在也有两个输出(而不是第二章中案例的只有一个输出)。第一个输出将会预测图像为“ 8”的可能性,第二个输出将会预测图像不是“ 8”的可能性。通过为要识别的对象提供不同的输出,我们便可以通过神经网络来将对象进行分类。

我们的神经网络比上一次大得多(324个输入,而不是3个!)。但是,以任何现代计算机的算力都可以轻松处理具有数百个节点的神经网络。甚至现在也可以在您的手机上来实现。

接下来我们要做的就是:用“ 8”和一些非“ 8”的图像来训练我们神经网络,以便让他来学会区分它们。例如当我们输入“ 8”时,我们将告诉它此时“ 8”的概率是100%,而不是“ 8”的概率是0%,反之亦然。

这是我们的一些训练数据:

加油训练吧!

我们可以在一台现代笔记本电脑上在几分钟内训练这种神经网络。完成后,我们将拥有一个神经网络,可以非常准确地识别“ 8”的图片。欢迎来到(1980年代时期)图像识别的世界!

30年过去了,现在还是这样么?

也许你会说:真正简单,只要地将像素输入到神经网络,就可以进行图像识别!然而事实是这样么?

呵呵,当然不是那么简单。

首先,比较好的是如果我们的数字“8”是在图片的正中间的时候,我们的识别器的识别准确度会高出很多:

但是:

当数字不在图像正中时,我们的“ 8”识别器就完全无法工作。

这是因为我们的网络仅学习了完美居中的数字“ 8”模式。完全不知道偏心的“ 8”是什么。它仅仅知道中间是【8】的图片规律。

然而现实世界中的问题从来都不是那么简单的。因此,我们需要弄清楚在“ 8”不完全居中的情况下如何使神经网络工作。

暴力方法#1:滑动搜索窗口

我们已经创建了一个非常好的程序,可以很好地识别以“8”为图像中心的图片。如果我们直接将整个图片分成一个个小部分,并且每个部分都去识别一遍,直到我们找到“8”,这个方案可行么?

这种方法称为sliding window。这是暴力算法的一种。在某些有限的情况下,它可以很好地工作,但是效率很低。您必须一遍又一遍地检查同一张图片,识别不同大小的对象。还有更好的办法么?

暴力方法2:更多数据和深度神经网络

当我们训练我们的网络时,我们只显示出完美居中的“ 8”字。如果我们用更多数据训练图像,包括图像周围所有不同位置和大小的“ 8”,结果会不会好一些?

我们甚至不需要收集新的培训数据。我们只需要编写一个脚本来生成新的图像,图像中所有不同位置的位置都带有“ 8”,例如:

我们通过创建已有图像的不同版本来创建Synthetic Training Data。这是非常有用的技术!

使用此技术,我们可以轻松创建无休止的培训数据。

数据越多,神经网络就越难解决问题,但是我们可以通过扩大网络规模并因此学习更复杂的模式来弥补这一问题。

为了扩大网络,我们只要逐层堆叠节点:

我们称其为“深度神经网络”,因为它比传统的神经网络具有更多的层次。

这个想法自1960年代后期开始出现。但是直到最近,训练如此庞大的神经网络还是太慢而无用。但是如今,我们可以通过使用3D显卡代替普通的计算机处理器,来处理这些庞大的神经网络,从而使得大型神经网络的工作便突然变得可行。实际上,您用来玩《守望先锋》的NVIDIA GeForce GTX 1080显卡就可以用来快速地训练神经网络。

但是,即使我们可以使神经网络真正变大并使用3d显卡对其进行快速训练,但这仍然无法将我们带到一个完整的解决方案中。我们需要更聪明地将图像处理到神经网络中。

想一想。训练网络来识别图片顶部的“ 8”与训练网络来识别图片底部的“ 8”当成两个不同的情况对象来处理似乎总不是那么聪明,就好像它们是两个完全不同的对象一样。

应该有某种方法可以使神经网络足够智能,以至于无需任何额外的训练就可以知道图片中任何地方的“ 8”都是同一个“8”。有这样的解决方案么?


本文分享自微信公众号 - 机器学习爱好者社区(ML_shequ),作者:社区牛牛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-21

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【原创】机器学习从零开始系列连载(7)——人工神经网络-Neural Network

    NN is a network inspired by biological neural networks (the central nervous syst...

    lujohn3li
  • 【原创】机器学习从零开始系列连载(8)——机器学习中的统一框架

    很多机器学习问题都可以放在一个统一的框架下讨论,这样大家在理解各种模型时就是相互联系的。

    lujohn3li
  • 【收藏】40 个学术网站,满足科研文献需求!

    中国版以及备用站点:http://www.sci-hub.cn/、http://www.sci-hub.xyz/

    lujohn3li
  • 学界 | MIT CSAIL最新研究:Network Dissection可全自动内窥神经网络活动过程

    AI科技评论按:据外媒TechCrunch最新报道,MIT CSAIL(麻省理工学院计算机科学与人工智能实验室)发明了一种可以全自动内窥神经网络活动的系统Net...

    AI科技评论
  • 马里奥 AI 实现方式探索 :神经网络+增强学习(上)

    如果能够在游戏自动化测试、智能 AI 中应用这些有趣的算法,想想还是有点小激动哒。

    肖力涛
  • AI 赌神——如何教神经网络玩 21 点游戏?(附代码)

    最后,我们观察到一个简单的策略:只有在没有机会爆破的情况下才拿牌,这大大提高了我们获胜的几率,因为它将爆破的风险完全转移到了赌场。

    AI研习社
  • AI 赌神——如何教神经网络玩 21 点游戏?(附代码)

    原文标题:Teaching A Neural Net To Play Blackjack

    AI科技评论
  • 读取脑磁波,神经网络知道你在「犹豫不定」

    在神经生物学里,这个神经网络可以分类神经元发出的信号,以及检测出脑相关的病理活动,比方说癫痫,还有神经退化性疾病,帕金森和老年痴呆等。

    量子位
  • 干货 | 2 分钟论文:神经网络开始自我学习,说是用了架构搜索新算法

    来源 / Two Minute Papers 翻译 / 严谨文 校对 / 凡江 整理 / 雷锋字幕组 本期论文:结合分层表示的高级架构搜索 Hierarchic...

    AI科技评论
  • 【干货长文】神经网络浅讲:从神经元到深度学习

      神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解...

    小莹莹

扫码关注云+社区

领取腾讯云代金券