想学习深度学习需要什么样的基础?
可以先看看本人另外一篇相关博客:
普通程序员转型AI免费教程整合,零基础也可自学 – 流风,飘然的风 – 博客园
http://www.cnblogs.com/zdz8207/p/ai-learn-resource.html
关于编程基础
只会 Java 语言,不会 C/C++/Python 能学习吗?或者学过 C/C++/Python,但是没有实际应用过,或者基础不好,是否可以学?是否有 Python 学习教程推荐?如果 C++/Python 基础比较薄弱,是否可以学?
【回答】可以。
在数据科学、大数据和机器学习(深度学习)领域,Python 被视作最为简洁和直接的脚本编程语言,被科研领域和工程领域广泛采用,因此 针对 Python 编程语言本身,跟随编程实战,在编程的过程中逐步了解。
事实上 Java 编程语言在大数据处理和机器学习领域的应用也十分广泛,其中涉及到 真实工程代码 的部分。注重于实际应用的编写,因此编程语言特性方面的门槛较低。
使用编写的实验程序,转化为实际的工业级代码和产品,将涉及 C/C++ 和 Java 代码的编写。由于 Java 在面向对象的基本结构上与 C++ 十分相似,因此这一块也应当不是问题。
通过学习不仅对整个机器学习、深度学习和分布式大数据实时处理有一个全面的认识,而且在非常实际的工程实践,将来找工作和职业发展,都将会有非常大的提升。
如果有其他语言的基础,但是没有 C++和 python 基础也是完全可以学习的,语言只是工具,有其他语言基础学习新语言很快,尤其是 Python 这种语言很简单,而 Java 和 C++ 相比之下可能需要花费更多时间去学习。
需要大数据基础吗?
【回答】不需要。
在实战过程中学习机器学习领域的经典理论、算法和工程实践,学习大数据或海量数据的高性能分布式处理,通过这两大领域的学习和碰撞。
关于数学基础
有的同学有数学基础,但是缺乏 C++/Python 编程语言;有的同学没有数学基础,是否可以学?
数学基础需要到什么程度?如果提前学习是否有资料推荐?
【回答】并不需要特别高的数学基础,只需要掌握大学本科阶段学习的高等数学、线性代数和概率论等课程。
虽然从应用角度上来看:
如果想要深入研究深度学习,比如完全自己实现不同结构的网络,设计网络的层与参数最好能够熟练运用矩阵理论中的相关工具,但是我相信如果职业道路规划不是算法工程师,一般并不会深入到这一层面。
对应于不同应用领域,还需要不同的数学工具,比如和图像、信号识别相关的领域,图形学等相关的基础功底是必须要有的,但这个已经是复杂的现实应用问题了,并不在入门范围之内,应用领域还是相对较为简单的。
实际上,如果你是一个工科生,你会发现学习数学最难的地方就是不理解这些数学工具到底能帮助我们去解决什么问题,因为大学老师大多数都是数学专业老师,并不会从学生各自专业的角度来讲解数学问题。
但是当你知道你需要用数学工具做什么,有一个明确目标后,你会发现你的动力和学习能力将会有一个突破,你不会觉得这些数学知识是枯燥乏味的。
因此哪怕你的数学基础相对薄弱,有一个明确的目的,再去补充这些数学知识,相信学员自己一定能解决这个问题。
数学也绝对不是学习这门课的障碍,但是如果你想以其作为职业,去打好这个数学的底子是不可或缺的。
最后,如果你是数学专业,或者觉得自己数学很好的学生,你们也更不用担心不会 1、2 门语言,因为计算机语言只是一种工具,最关键的还是训练自己的思维,这种思维的核心就是数学和算法。
如果你数学很好,学习这些语言是很快的,而且本门课程中除了最后的 C++ 开发,也不会应用到什么特别的语法特性。
但是另一方面也不要忽视学习好这些工具的重要性,只是希望学生自己能够权衡。
对数学好的同学来说,可能最致命的是一个误区,因为计算机的基础是数学,所以完全使用数学思维去解决计算机问题是没问题的,计算机有自己的思维模式,哪怕是那些基于数学原理的算法问题,所以数学专业的同学必须要学会认识到这种思维的差异并学会使用计算机的思维来解决问题,而机器学习则是计算机思维的一个典型代表。
至于需要的数学基础,肯定是希望同学能够学习高等数学中的微积分,线性代数和概率论的相关知识,对于没有实际编程经验的学生则推荐深入学习一下离散数学(网上有很多大学相关免费的公开课可以学的)。需要的数学基础也就是这些了。
关于内容
深度学习和机器学习的关系是什么?要先学机器学习再学深度学习吗?
【回答】机器学习肯定是深度学习的基础,因为深度学习就是深度神经网络,而人工神经网络则是机器学习的一大经典模型。
但机器学习领域包含的算法和模型太多,因此想要专精深度学习不一定要学会其他许多的机器学习算法和理论。
所以只需要学习 机器学习中和深度学习相关的必备基础知识就可以了。
但是如果你想要以后往算法工程师发展,去学习熟悉其他的机器学习模型也是必不可少的。
Caffe 框架和 TensorFlow 框架,keras框架都要学吗?
【回答】现在大多数图像识别的教程都使用Caffe讲解,同时TensorFlow 的视频教程也很多,也是很热门的框架。
TensorFlow 是目前最强大的机器学习框架,没有之一,而且有 Google 公司的支持,有最庞大的社区,一旦有什么新模型都会有 TensorFlow 的实现可以使用(得益于 TensorFlow 的架构设计)。用 TensorFlow 来进行快速实验是非常好的选择。
TensorFlow 有两个比较大的问题:
第一:TensorFlow 的单机执行效率低,尤其是和 Caffe 相比,对于资金并不是很充足的创业公司,在有一定量数据的情况下,并无法支撑一个可以快速运行 TensorFlow 训练的集群,这个时候 Caffe 以及其各种改版往往是更好的选择,而我们日常工作的实验场景就被此局限,因此更偏向于实际使用 Caffe。
第二:TensorFlow 过于庞大,实际开发产品 SDK 的时候,我们希望训练出来的模型能够直接放到产品中使用,因此训练和产品 SDK 使用的深度学习框架往往是一致或者可以互相转换的。
而 TensorFlow 过于庞大复杂,还需要使用专门的构建工具,在实际产品应用集成中往往要使用能够完全掌控的工具和框架并进行修改,TensorFlow 的复杂性正和这种要求背道而驰。
当然一般公司没有人力对 TensorFlow 进行深度研究、裁剪和维护,所以目前大部分产品中使用 Caffe。
keras框架是在TensorFlow基础上再进行封装的,更容易调用接口实现应用功能的,类似SpringMVC框架在JavaEE基础上进行封装一样。
关于就业
学习了课程,掌握了这个技能,能不能找到工作,是否有匹配的岗位?
【回答】可以
需要自己平时更多地去实践,成为某一领域专家,你知道该去学习什么,还有学习的思路、方法,以及平时难以接触到的大型企业实际的工程经验和架构方法,这将对你的未来工作和职业发展提供极大帮助。
通过学习可以匹配到以下几个岗位:
这个实际岗位在很多公司中往往是算法工程师
大数据分析和处理方面的岗位
云计算应用或平台的开发工程师
机器学习或深度学习应用或平台的研发工程师
而算法工程部门的工程师一般会有两类人(除去部门负责人等高级职位):
一类是能够较熟练运用 1 到 2 门语言(比如 Python、Java 或 C++),数学功底好,熟悉机器学习和深度学习的人,他们的任务是不断优化机器学习模型,进行训练测试,调整参数等,这个过程中也需要编写相当多的脚本来帮助自己解决各种问题。最后要能够编写实际的产品代码,不需要有非常好的架构和设计思想,关键是能够高效地实现某种算法。
一类是有好的编程功底,同时又能够基本理解机器学习和深度学习的人,他们的任务往往是负责封装改良第一类人实现的功能模块,从时间、空间和代码质量上改良模块的实现,同时负责维护完整的算法 SDK,这类 SDK 往往要求能够快速迭代更新,能够配上完整的训练和测试流程,需要开发者具有较强的工程能力还有架构、设计思维。
至于岗位问题完全不用担心,尤其现在有许多以人工智能为核心的公司如爆发式增长,以及传统 IT 企业向海量数据处理、机器学习和深度学习领域不断加大投入,对这类工程师的需求量极大。
大公司还是小公司需要这种岗位?机器学习工程师的薪资待遇如何?
现在大公司和小公司都有,尤其是以人工智能为主的公司。同时人工智能已经很明确是未来的大趋势,大风口。
现在有许多以人工智能为核心的公司如爆发式增长,以及传统IT企业向海量数据处理、机器学习和深度学习领域不断加大投入,对这类工程师的需求量极大。
至于薪资待遇方面,由于目前以及可预期的未来很长一段时间,这类岗位的需求和缺口都非常大,对该领域的实践和工作经验,能够获得高于市场的薪酬水平。
如果你想快速掌握各方面的专业技能,不落后这个人工智能的时代。如果你的机器学习基础非常薄弱,没有在工程实践中使用过机器学习,没有实时数据处理的经验,那么,现在就是开始学习的时候了。