深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。
深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。
深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。
前言
在深度学习理论篇的上一次文章中,我们从总体上对深度学习、人工智能、机器学习进行了了解和他们的关系,并着重阐述了深度学习的现有方向和主流网络。今天的文章将继续铺开深度学习的理论基础,我们从零开始,不对,也不能说完全的从零开始,还是得具有一定的基础,不然,学起来还是有点吃力,一起来看看今天的文章吧!
一、理论基础
1.1 专业基础
由于深度学习学科的特殊性和专业性,我们来看看学习深度学习的专业基础,何谓专业基础呢?通俗一点就是之前的专业是什么类型的?基础怎么样?之前的专业决定你对深度学习的促进作用,说到这个问题,我们要先了解深度学习细节部分,总的来说,深度学习=数学 计算机 逻辑思维能力。其实数学已经包括了一部分逻辑思维能力,但是逻辑思维能力并不是数学就可以完全概括的,逻辑思维能力可以在一定程度上决定你对深度学习的理解能力和今后的学习境界,通常来说,基本的逻辑思维的可以从高中到大学本科开始的,而这个时候,你的专业就显得特别重要了,可以单纯的想想,如果你的大学是文科专业,比如,音乐,艺术,管理等专业的话,可能逻辑思维能力得到锻炼的机会就较少,因此,如果以这样的文科专业进行深度学习的学习的话,可能有一点吃力,花费的时间也较长,但是也有不乏优秀者,学的很快。而这个问题面对理科专业的学生,如,电子,计算机,电气,机械等等专业,他们的逻辑思维能力就占据了优势,本身大学的专业基础课大部分是与数学、编程等相关的,特别是授课知识与实验大部分都是需要进行逻辑推理的,因此,他们的逻辑能力是一直在锻炼的,对于这样专业的学生来书,进入深度学习的话,正常情况下会学的快一点。
一句话概括:专业基础决定逻辑思维能力,逻辑思维能力决定深度学习的起始速度和最终境界,尤为重要,因此,踏上深度学习的同学最好是理工科的学生,当然,文科的学生也不例外,有志者事竟成。
1.2 数学基础
深度学习的早期存在其实是数学的的不断推进,因此,数学能力是深度学习的基石也是以后更加高效算法开发的前提,举个简单的例子,会一般的数学,那么可能对于深度学习你就只会用,只会改,但是如果是高深的数学,那么,深度学习对你来说可能以为创造和超越,而不仅仅是会用。
就目前而言,深度学习的数学基础为:大学数学(主要是微积分和线性代数 概率论等等) 研究生数学,例如,深度学习的基础算法之一的BP算法,主要思想就是大学微积分的导数和偏导,梯度等等,这部分知识对于一个合格的大学生来说是必须要掌握的,也是深度学习入门的基础,否则后期进步空间有限,而研究生数学则是入进入深度学习其他领域的基石,例如,想要进如强化学习,你可能要先学习排队论等等。
二、计算机基础
2.1 硬件基础
说到硬件基础,其实是一个痛点,为什么这么说呢,因为深度学习的硬件配置要求比一般的办公硬件要高,CPU 内存条 显卡 固态都要给力才行,至于为啥没需要用到配置较好的硬件呢?深度学习有一个特点,大数据和训练,因此训练的时间快慢就决定了硬件的选择方向,而其中最重要的则是显卡,因为深度学习需要用到显卡才能达到加速的功能,否则你的模型可能需要训练一天,而别人的可能几个小时就搞定了,而且深度学习需要调试很多参数才能得到较好的模型,参数的每一次更改就是一次新的训练,所以,一个好的深度学习模型的诞生,无一不是经过多次的调试和较长时间的训练才能得出的结果,这一途,很少有捷径一说,硬件基础,深度学习之重器也!
2.2 编程基础
好的模型,好的算法,不光停留于思想,行驶于纸笔,而更应该看到实际的效果,深度学习的算法实现必然离不开计算机语言,因此,为什么说专业基础特别重要了吧,因为,编程基础可能就来自于你的专业基础了,如今的深度学习,编程基础主要是python、C 两门语言,Python是如今最受欢迎的语言,深度学习的很多网络都是用Python语言来实现的,而C 则多用于工业界的落地,一个好的深度学习算法诞生可能是用Python编写代码的,但是应用在实际的场景时通常会采用C 重写代码,便于后期维护,集成和嵌入等等。
因此,如果大学的时候就拥有了编程基础,那么对于深度学习将会是很大的助力,这一点对于计算机、电子等专业的同学来说,十分具有优势,毋庸置疑,期待深度学习遇见更好的你们。
2.3 深度学习框架
深度学习的广泛使用和传播,开源框架在一定深度上起到了推动作用,目前的深度学习大多数是基于几个著名的开源框架实现的, 这里主要介绍三个平台。
1.Tensorflow
TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief 。
Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究 。
TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在内的多个项目以及各类应用程序接口(Application Programming Interface, API) 。自2015年11月9日起,TensorFlow依据阿帕奇授权协议(Apache 2.0 open source license)开放源代码 。
2. Keras
Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化 。
Keras在代码结构上由面向对象方法编写,完全模块化并具有可扩展性,其运行机制和说明文档有将用户体验和使用难度纳入考虑,并试图简化复杂算法的实现难度 。 Keras支持现代人工智能领域的主流算法,包括前馈结构和递归结构的神经网络,也可以通过封装参与构建统计学习模型 。在硬件和开发环境方面,Keras支持多操作系统下的多GPU并行计算,可以根据后台设置转化为Tensorflow、Microsoft-CNTK等系统下的组件 。
3. Pytorch
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的的深度神经网络。
PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是很多主流深度学习框架比如Tensorflow等都不支持的。
PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用 。
关于深度学习平台的实践,我们在代码实践环节会进行讲解,主要设计Tensorflow和Keras框架,大家可以先进行了解,我们我们再来深入。
结语
深度学习的基础分享到此结束了,我们从理论基础与计算机基础出发,较为认真的分析了深度学习之路需要用到的数学基础,专业基础,硬件基础等等,由此说明,入门深度学习需要一定的条件,不是可以随便就可以入门的,但是,我依旧坚信,不管做什么研究和学习,兴趣和坚持是永远的动力和支撑,深度学习这一门新兴学科,是属于全人类的,任何人都可以自由,开放的可以学习,没有国籍,种族,性别,社会地位的限制,期待,深度学习的路上,遇见更好的,你们,我们!
编辑:玥怡居士|审核:小圈圈居士