想学习深度学习需要什么样的基础?
2017-05-21 编辑:
作者|卢誉声
编辑|劝劝
很多小伙伴对深度学习的理解都有一些误解,今天就为你一一解答。
很多人第一反应是深度学习特别高大上,需要一定基础才能学习,但是关于需要学习深度学习所需要的基础其实存在很多误区。
迷茫于在网上虽然能找到各类深度学习课程和资料,但是是不是适合自己,如何能在一堆里面找到系统的、深入的、落地的学习内容,这对很多人来说都是横在学习面前的一道坎。
我们经过 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++ 开发,也不会应用到什么特别的语法特性。
但是另一方面也不要忽视学习好这些工具的重要性,只是希望学生自己能够权衡。对数学好的同学来说,可能最致命的是一个误区,因为计算机的基础是数学,所以完全使用数学思维去解决计算机问题是没问题的,我这里只能说计算机有自己的思维模式,哪怕是那些基于数学原理的算法问题,所以数学专业的同学必须要学会认识到这种思维的差异并学会使用计算机的思维来解决问题,而机器学习则是计算机思维的一个典型代表,这个将会在课程中具体讨论。
至于需要的数学基础,肯定是希望同学能够学习高等数学中的微积分,线性代数和概率论的相关知识,对于没有实际编程经验的学生则推荐深入学习一下离散数学(无关乎是否精于数学)。本门课程需要的数学基础也就是这些了。