知己知彼,百战不殆:一篇文章看懂隐藏在阿尔法狗背后的深度学习
AndreaROI
9年前
<p>本篇文章共分为三部分,第一部分回答关于深度学习基本的问题;第二部分介绍深度学习一些最基本的概念。第三部分我将手把手教你如何从零开始打造一款超酷的深度学习应用,由于第三部分涉及到实际编程相关的知识和步骤,在此不作介绍,感兴趣的读者可 <a href="/misc/goto?guid=4959670523755624858" rel="nofollow,noindex">戳原文查看</a> 。</p> <p>(一)</p> <p>深度学习?就是那个隐藏在阿尔法狗背后神秘的技术?也是无人驾驶汽车的大脑?</p> <p>没错。深度学习是机器学习的一个分支,在完成一些难度极高的任务中展现了惊人的功力,如从图片中识别物体、语言理解,当然,还包括棋盘类游戏。十几年来,一帮世界上最聪明的人一直在进行相关研究,这绝对是最先进的技术!</p> <p><strong>但是我不是什么狂热的科学家!看不懂啊</strong></p> <p>既然你点进来了这篇文章,说明你对深度学习还是很好奇。考虑到你是零基础,我还是先来回答你可能会问的几个入门级问题。</p> <p><strong>深度学习究竟是什么鬼?</strong></p> <p>简而言之,深度学习是试图模仿人类大脑的软件程序。如大脑的构成、行为和反馈模式。深度学习源于神经科学,可用于处理很难用编程解决的人工智能任务。</p> <p><strong>我为什么要了解深度学习?</strong></p> <p>因为目前,这是一座金矿。不信可以看看 Quora 上这个价值 1000 美元的问题: <a href="/misc/goto?guid=4959670523846174059" rel="nofollow,noindex">在接下来的 2-3 年间,什么科技趋势将给创业公司带来大量机遇?</a></p> <p>不论何时,只要有了大的技术突破,总会有机会去利用最新的技术创造之前从未有过的应用。深度学习有很多重大的研究成果,但是环顾四周,你能看到多少深度学习的应用?</p> <p><strong>需要庞大的数据中心吗?</strong></p> <p>训练驱动 Google 图片搜索等产品的复杂模型的确需要大规模的数据中心以及强大的计算资源。但是如果要开发能在手机上运行的程序,完成不用。</p> <p>如果把 Google 的数据中心比作一个人,那么我们的手机就相当于一只蚂蚁。你不可能把人类的大脑植入蚂蚁,对吧。但是蚂蚁仍然非常聪明,可以做很多事。</p> <p>(二)</p> <p>回答完以上基本的问题后,这部分我们来看看深度学习究竟是如何运作的,介绍一些深度学习最基本的概念。</p> <p>首先,防止你对深度学习一无所知......</p> <p>一般来说,机器学习的问题是在没有特定编程的情况下,你希望电脑去回答的问题。如,「我的房子在上海值多少钱?」或者,「这篇文章说的是事实吗?」</p> <p>这类问题可以翻译成以下形式:</p> <p>对于给定的输入 X,正确的输出 Y 是什么?</p> <p>就拿上面的问题来说。房子的信息是输入,预估的价格是输出;文章的内容是输入,输出则为「是」或者「不是」。</p> <p>这些例子就是「训练数据」,将这些问题提供给程序的过程就是「训练」。你不断地向程序提供这些问题,直到程序足够聪明,可以主动预测没有提供过的问题的答案。试图观察程序是够足够智能的过程就是「测试」或者「评估」,而程序则称之为「模型」。</p> <p>整个过程中最大的挑战在于如果获取精准的训练数据、如果设计输入、输出以及模型的内部结构,从而形成问题的解决方案。</p> <p><strong>深度学习有何特别之处?</strong></p> <p>举个栗子:给定一张照片,告诉我照片里是否有一只猫。这是一个非常棒的例子,因为这对人类来说小菜一碟,但对程序而言,却难于上青天。</p> <p>传统的机器学习需要我们人类首先定义一系列程序寻找的「特征」。比如,「它是多毛的吗?」、「它的头上是否有两个眼睛和一个鼻子」、「它是否有四条腿?」、「它是黄色的吗?」等等。然后给程序提供大量的例子,但是对于每个例子,都不会向程序展示全局图片,而是展示预先设定的特征的变量,然后你告诉程序那个才是猫。经过训练之后,程序就能明白这些「如果它不是多毛的,它可能不是猫,」「它是不是黄色真的没关系,」等等。</p> <p>然而,棘手的部分在于,我们很难去定义一整套正确的「特征」。如果你问我猫是什么,我可能会这样回答:猫是一种多毛的小动物,头小小的、两只眼睛、两只耳朵、身体长着四条腿和一条尾巴...... 然后,你给你看了这样一张图片。</p> <p><img src="https://simg.open-open.com/show/69d99053444d7a2a109efefad98379a6.jpg"></p> <p>完全没有腿!完全看不到眼睛!但是我们是如何判定这是一只猫呢?我们大脑究竟是利用哪些「特征」把猫和其他物体区分开来?如果我们自己都不能找出哪些「特征」是有用的,我们又如何给模型提供可用如何给模型提供可用的「特征」?</p> <p>这就是传统机器学习方法挣扎的泥潭,而这也正是深度学习派上用场的时候。深度学习的魔力在于我们再也不用去定义这些「特征」。我们只需要打造一个空白的「大脑」,结构上足够「智能」,能够自动判断哪些特征是有用的,以及如何使用这些特征做出预测。</p> <p><strong>深度学习模型如何运作?</strong></p> <p>为了解决以上识别猫的问题,一个有效的深度学习模型为 <strong>CNN(卷积神经网络)</strong> ,通常由图层(layers)构成。假设我们已经有一个训练好的 CNN,稍后我将解释它是如何运作的。我们来看看深度学习是如何识别猫的。</p> <p>首先,我们给模型提供全局图片,而不是提供某些「特征」作为输入。假设,这行照片尺寸为 200x200 像素。第一层神经网络将从左上角到右下角扫描图片,以 10x10 的色块为单位,去寻找一些基本的特征,如「这一色块是否有水平线」、「这一色块是否有垂直线」、「这一色块绝大部分是黑色吗?」或者「这一色块看起来是毛茸茸的吗?」</p> <p>第一层会有几十上百个这类特征探测器,称为 <strong>「神经元」(neurons)</strong> 。每个神经元都会逐一扫描所有色块,找出最匹配其要寻找的样式。为了方便起见,我们假设色块之间是没有重叠的,那么每个神经元的结果就是 20x20 网格的布尔值。如果这一层有 100 个神经元,那么就会有产生 100 个这样的网格,把这些合在一起就构成了第二层的输入源。有时候,这些网络称之为 <strong>特征地图</strong> 。</p> <p><img src="https://simg.open-open.com/show/3d81f9bd5a844e774729dd0458684c53.jpg"></p> <p>第二层将观察由第一层产生的特征地图,然后再次从左上角到右下角,逐块扫描,这不过这次色块的尺寸更大。在 20x20 的网格中,第二层将以 3x3 的尺寸扫描,相当于 200x200 原图 30x30 的区域。有了第一层获取的基础特征,第二层则研究更复杂的外形,如毛茸茸的尾巴、有颜色的眼睛或者小耳朵等等。</p> <p>一层又一层,直到有一层获取了足够的信息足以判断这是一只猫。下面我们再看一个使用 CNN 进行面部识别的例子。关键在于:每一层都利用上一层的结果,然后鉴定更复杂的样式。</p> <p><img src="https://simg.open-open.com/show/0f1dfa7af53258447b3235bf69332f97.png"></p> <p>整个技术最神奇的地方在于:我们无需告诉第一层去寻找水平线、垂直线,也不用告诉第二层去寻找毛茸茸的尾巴等等。实际上,我们无需告诉模型任何关于猫的信息。我们只需设定模型的结构,然后从训练数据中学习。如果水平线对识别猫很重要,那么模型就会有一个对应的神经元。如果颜色不是非常有用,那么颜色相关的特征就会自然褪去,然后模型就会用神经元寻找更重要的特征。</p> <p>在自己开始打造深度学习应用之前,以上就是你需要了解的所有信息,是不是很神奇!在第三部分,我们将演示一个可在图片中识别任意数字的实际应用,你会发现原来这可以如此简单。</p> <p><a href="/misc/goto?guid=4959670523755624858" rel="nofollow,noindex">第三部分可戳原文查看。</a></p> <p>来自: <a href="/misc/goto?guid=4959670524064596409" rel="nofollow">http://tech2ipo.com/10028992</a></p>