微信号:infoqchina

介绍:有内容的技术社区媒体

想学习深度学习需要什么样的基础?

2017-05-21 09:04 卢誉声
作者|卢誉声
编辑|劝劝
很多小伙伴对深度学习的理解都有一些误解,今天就为你一一解答。

很多人第一反应是深度学习特别高大上,需要一定基础才能学习,但是关于需要学习深度学习所需要的基础其实存在很多误区。

迷茫于在网上虽然能找到各类深度学习课程和资料,但是是不是适合自己,如何能在一堆里面找到系统的、深入的、落地的学习内容,这对很多人来说都是横在学习面前的一道坎。

我们经过 2 个月的精心打磨,生产出这样一门适合基础研发人员也能学习的课程,它能在这以下几个方面回答大家对于深度学习的疑惑。

关于编程基础

只会 Java 语言,不会 C/C++/Python 能学习吗?或者学过 C/C++/Python,但是没有实际应用过,或者基础不好,是否可以学?是否有 Python 学习教程推荐?如果 C++/Python 基础比较薄弱,是否可以学?

【回答】完全可以。

我们会跟随实际的代码编写,一步一步进行指导。在数据科学、大数据和机器学习(深度学习)领域,Python 被视作最为简洁和直接的脚本编程语言,被科研领域和工程领域广泛采用,因此 本课程也会针对 Python 编程语言本身,跟随编程实战,与大家一起编程的过程中逐步讲解

事实上 Java 编程语言在大数据处理和机器学习领域的应用也十分广泛,课程中涉及到 真实工程代码 的部分,我们会将 C++ 与 Java 版本一同展示和讲解。由于这不是一门教学编程语言的课程,更注重于实际应用的编写,因此编程语言特性方面的门槛较低

本课程着眼于海量数据实时处理和深度神经网络架构和编程,编程语言这块不会是瓶颈。并且,大家会跟随老师一起,编写机器学习代码,也会因此熟悉 Python 编程,事实上这对未来的个人发展和工作具有非常大的帮助。

在课程后半段,我们将会使用前半段课程编写的实验程序,转化为实际的工业级代码和产品,这时将涉及 C/C++ 和 Java 代码的编写。由于 Java 在面向对象的基本结构上与 C++ 十分相似,因此这一块也应当不是问题。

正如前面所阐述的,我们也会同时展示 Java 版本的高层应用实现。最终,同学们会发现这些代码虽然由不同编程语言实现,但大体相当,并无过多区别。另外,针对编程语言方面的疑虑,老师也会手把手从最基本的代码开始编写,并尽可能详细讲解每一段重要的代码。

全课程不仅从理论方面会由浅入深的讲解,编程实战也同样会从最基础部分(包含语言的部分)开始讲解。希望能够打消同学们的疑虑。通过学习本课程,不仅对整个机器学习、深度学习和分布式大数据实时处理有一个全面的认识,而且在非常实际的工程实践,将来找工作和职业发展,都将会有非常大的提升。

如果有其他语言的基础,但是没有 C++和 python 基础也是完全可以学习的,语言只是工具,有其他语言基础学习新语言很快,尤其是 Python 这种语言很简单,而 Java 和 C++ 相比之下可能需要花费更多时间去学习。但本门课程在工程实践环节也会针对编写的代码进行详解,尽可能确保打消大家对这一方面的顾虑。

这个课需要大数据基础吗?

【回答】不需要。

本门课程不仅会讲解机器学习领域的经典理论、算法和工程实践,还有一大特色便是讲解大数据或海量数据的高性能分布式处理,通过这两大领域的学习和碰撞,会为大家未来职业发展和规划起到如虎添翼的作用,这一点在其他课程中较难体现,也是本门课程的主要特色之一。

本课程的老师拥有多年云计算和分布式实时处理方面的经验,同时撰写了相关书籍以及开源的大数据处理框架,拥有丰富经验,以此基础上再讲解机器学习和深度神经网络,让同学们对这一领域的几个关键点都一个较为全面的学习和掌握。

关于数学基础

有的同学有数学基础,但是缺乏 C++/Python 编程语言;有的同学没有数学基础,是否可以学?数学基础需要到什么程度?如果提前学习是否有资料推荐?

【回答】首先学习本门课程并不需要特别高的数学基础,只需要掌握大学本科阶段学习的高等数学、线性代数和概率论等课程。

虽然从应用角度上来看:

  • 如果想要深入研究深度学习,比如完全自己实现不同结构的网络,设计网络的层与参数最好能够熟练运用矩阵理论中的相关工具,但是我相信如果职业道路规划不是算法工程师,一般并不会深入到这一层面。

  • 对应于不同应用领域,还需要不同的数学工具,比如和图像、信号识别相关的领域,图形学等相关的基础功底是必须要有的,但这个已经是复杂的现实应用问题了,并不在本门课程的教学范围之内,本门课程的应用领域还是相对较为简单的。

实际上,如果你是一个工科生,你会发现学习数学最难的地方就是不理解这些数学工具到底能帮助我们去解决什么问题,因为大学老师大多数都是数学专业老师,并不会从学生各自专业的角度来讲解数学问题。但是当你知道你需要用数学工具做什么,有一个明确目标后,你会发现你的动力和学习能力将会有一个突破,你不会觉得这些数学知识是枯燥乏味的。因此哪怕你的数学基础相对薄弱,有一个明确的目的,再去补充这些数学知识,相信学员自己一定能解决这个问题。数学也绝对不是学习这门课的障碍,但是如果你想以其作为职业,去打好这个数学的底子是不可或缺的。

最后,如果你是数学专业,或者觉得自己数学很好的学生,你们也更不用担心不会 1、2 门语言,因为计算机语言只是一种工具,最关键的还是训练自己的思维,这种思维的核心就是数学和算法。如果你数学很好,学习这些语言是很快的,而且本门课程中除了最后的 C++ 开发,也不会应用到什么特别的语法特性。

但是另一方面也不要忽视学习好这些工具的重要性,只是希望学生自己能够权衡。对数学好的同学来说,可能最致命的是一个误区,因为计算机的基础是数学,所以完全使用数学思维去解决计算机问题是没问题的,我这里只能说计算机有自己的思维模式,哪怕是那些基于数学原理的算法问题,所以数学专业的同学必须要学会认识到这种思维的差异并学会使用计算机的思维来解决问题,而机器学习则是计算机思维的一个典型代表,这个将会在课程中具体讨论。

至于需要的数学基础,肯定是希望同学能够学习高等数学中的微积分,线性代数和概率论的相关知识,对于没有实际编程经验的学生则推荐深入学习一下离散数学(无关乎是否精于数学)。本门课程需要的数学基础也就是这些了。

关于内容

深度学习和机器学习的关系是什么?很多同学以为要先学机器学习再学深度学习是这样吗?

【回答】机器学习肯定是深度学习的基础,因为深度学习就是深度神经网络,而人工神经网络则是机器学习的一大经典模型。但是我们要认识到机器学习领域包含的算法和模型太多,因此想要专精深度学习不一定要学会其他许多的机器学习算法和理论。所以我们会在课程中安排机器学习相关的内容,只不过都是机器学习中和深度学习相关的必备基础知识。

但是如果你想要以后往算法工程师发展,去学习熟悉其他的机器学习模型也是必不可少的,只不过本门课程并没有这种要求,所有需要的机器学习知识都会在课程的前半部分详细讲解。

Caffe 框架和 TensorFlow 框架都要学吗?

【回答】首先本门课程主要应用的是 Caffe,但是同样会讲解 TensorFlow 的基本用法,并会进行简单演示。在我们的日常工作中发现 TensorFlow 是目前最强大的机器学习框架,没有之一,而且有 Google 公司的支持,有最庞大的社区,一旦有什么新模型都会有 TensorFlow 的实现可以使用(得益于 TensorFlow 的架构设计)。用 TensorFlow 来进行快速实验是非常好的选择。

但是我们也发现 TensorFlow 有两个比较大的问题,第一个问题是 TensorFlow 的单机执行效率低,尤其是和 Caffe 相比,对于资金并不是很充足的创业公司,在有一定量数据的情况下,并无法支撑一个可以快速运行 TensorFlow 训练的集群,这个时候 Caffe 以及其各种改版往往是更好的选择,而我们日常工作的实验场景就被此局限,因此更偏向于实际使用 Caffe。

第二个问题是 TensorFlow 过于庞大,实际开发产品 SDK 的时候,我们希望训练出来的模型能够直接放到产品中使用,因此训练和产品 SDK 使用的深度学习框架往往是一致或者可以互相转换的。而 TensorFlow 过于庞大复杂,还需要使用专门的构建工具,在实际产品应用集成中往往要使用能够完全掌控的工具和框架并进行修改,TensorFlow 的复杂性正和这种要求背道而驰。当然也可能是我们的工作场景和人员限制导致我们没有人力对 TensorFlow 进行深度研究、裁剪和维护,这也就是我们产品中使用 Caffe 的原因。

关于就业

学习了课程,掌握了这个技能,能不能找到工作,是否有匹配的岗位?

【回答】肯定可以!

不过自己平时更多地去实践是成为某一领域专家的必经之路,这门课程的最大作用之一是让你知道该去学习什么,还有学习的思路、方法,以及平时难以接触到的大型企业实际的工程经验和架构方法,这将对同学们的未来工作和职业发展提供极大帮助。

通过学习本课程,可以匹配到以下几个岗位:

  • 这个实际岗位在很多公司中往往是算法工程师

  • 大数据分析和处理方面的岗位

  • 云计算应用或平台的开发工程师

  • 机器学习或深度学习应用或平台的研发工程师

而算法工程部门的工程师一般会有两类人(除去部门负责人等高级职位):

一类是能够较熟练运用 1 到 2 门语言(比如 Python、Java 或 C++),数学功底好,熟悉机器学习和深度学习的人,他们的任务是不断优化机器学习模型,进行训练测试,调整参数等,这个过程中也需要编写相当多的脚本来帮助自己解决各种问题。最后要能够编写实际的产品代码,不需要有非常好的架构和设计思想,关键是能够高效地实现某种算法。

  • 一类是有好的编程功底,同时又能够基本理解机器学习和深度学习的人,他们的任务往往是负责封装改良第一类人实现的功能模块,从时间、空间和代码质量上改良模块的实现,同时负责维护完整的算法 SDK,这类 SDK 往往要求能够快速迭代更新,能够配上完整的训练和测试流程,需要开发者具有较强的工程能力还有架构、设计思维。

  • 至于岗位问题同学应该完全不用担心,尤其现在有许多以人工智能为核心的公司如爆发式增长,以及传统 IT 企业向海量数据处理、机器学习和深度学习领域不断加大投入,对这类工程师的需求量极大。

大公司还是小公司需要这种岗位?机器学习工程师的薪资待遇如何?

现在大公司和小公司都有,尤其是以人工智能为主的公司。至于岗位问题同学应该完全不用担心,尤其现在有许多以人工智能为核心的公司如爆发式增长,以及传统 IT 企业向海量数据处理、机器学习和深度学习领域不断加大投入,对这类工程师的需求量极大。

至于薪资待遇方面,由于目前以及可预期的未来很长一段时间,这类岗位的需求和缺口都非常大,相信同学们在学习完本课程后,再加上自己对该领域的实践和工作经验,能够获得高于市场的薪酬水平。

如果你想快速掌握各方面的专业技能,不落后这个人工智能的时代,这绝对是一门你无法忽视的课程。如果你的机器学习基础非常薄弱,没有在工程实践中使用过机器学习,没有实时数据处理的经验,那么,就是它了。

送你价值 200 元 本课程优惠码【FCXTG3BGYX】,仅限使用 10

赶快上车,点  「 阅读原文 」!

 
InfoQ 更多文章 技术专家 or 技术管理?程序员职场规划中如何定位? 520,程序员怎样表白更有效? 技术大牛的人生是怎么过的?技术实战的细节能有多美? Python速度虽然慢,但它工作效率高啊!不服? 左耳朵耗子:技术一定会让人失业,但我没有生不逢时
猜您喜欢 【周五特色】测试知识大闯关 苹果明年会出iPhone 8,还要不要等? 今年最多的话题——测试是否要转行 Elm语言初体验 高效学习Java路线图