4张漫画诠释「深度学习」的真实写照!(笑喷)
说到深度学习,我们不如先用一个通俗易懂的例子解释一下“什么是深度学习?”
比如超市里有3种苹果和5种橙子,通过数据分析比对,把超市里的品种和数据建立联系,通过水果的颜色、形状、大小、成熟时间和产地等信息,分辨普通橙子和血橙,从而选择购买用户需要的橙子品种。
也就是说,深度学习可以通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。
深度学习是个复杂的过程,作为初学者大家往往都会经历以下4个阶段,下面四幅漫画可以说表达的相当贴切到位。
阶段一:看到深度学习论文,真香
深度学习(Deep Learning )是Machine learning的一个经典算法。之所以叫deep,是因为和传统方法比较加深了层数(layer),从而可以解决更复杂的问题。因此对于深度学习“真香”的理解我们也可以等同于机器学习“真香”。
Machine Learning现在是一个很火的研究方向。机器学习是研究计算机怎么模拟人类的学习行为,并且能组织已有的知识构架使之不断完善的性能的学科。 是人工智能的核心,是使计算机具有智能的根本途径。随着科技的发展,machine Learning肯定会得到长足的发展的。
阶段二:看到里面有数学公式,拒绝
有多少人因为数学,机器学习从入门到放弃,那么我们就来简单盘点一下机器学习都要掌握哪些数学知识:
1、线性代数
在ML领域,线性代数无处不在。主成分分析(PCA)、奇异值分解(SVD)、特征分解、LU分解、QR分解、对称矩阵、正交化&;标准正交化、矩阵运算、投射、特征值、特征向量、向量空间和规范等这些概念对理解机器学习的优化方法都是必须的。
2、概率论与数理统计
机器学习和数理统计并不是完全不同的领域。事实上最近有人把机器学习定义为“在Mac上做数理统计”。ML需要的数理统计基础和概率论知识包括组合数学、概率规则&;公理、贝叶斯定理、随机变量、方差和均值、条件和联合分别、标准分布(伯努利、二项、多项、统一和高斯)、矩母函数、最大似然估计(MLE)、先验和后验、最大后验估计(MAP)和采样方法。
3、多元微积分
必要的概念包括微积分、偏导数、向量函数、方向梯度、Hessian、Jacobian、Laplacian和Lagragian分布。
4、算法和复杂性优化
这对理解机器学习算法的计算效率和可扩展性以及数据集的开发稀疏性很重要。需要数据结构(二叉树、Hashing、Heap、Stack等等)的知识,以及动态编程、图形、梯度/随机趋势、以及原对偶方法的知识。
5、其他
这包括上述4个主要领域没有涉及的其他数学概念。包括实分析与复分析(集合和序列、拓扑结构、度量空间、单值和连续函数、极限)、信息理论(熵、信息增益)、函数空间和流形。
阶段三:看到有开源,真香
深度学习框架开源已是趋势。目前,在人工智能领域的竞争中,Facebook、谷歌、亚马逊都拥有自己的深度学习框架。Facebook有Torch和Caffe,谷歌有Tensorflow,亚马逊则拥有MXnet。值得一提的是,这三家都无一例外地选择了开源,向开发者公布了自己内部使用的深度学习框架。
在深度学习(Deep Learning)的浪潮下,Caffe作为一个高效、实用的深度学习框架受到了国内外的广泛关注。开源深度学习框架,对于开发者来说可以不再需要从复杂的神经网络开始编代码。开发者可以依据自己的需要,使用已有的训练模型,自行训练得到模型的参数,也可以在已有模型上增加自己的训练层数,或是在一开始就选择自己需要的数据分类器。简单来说,一个深度学习框架就是一套积木,各个组件就是某个模型或算法的一部分,你可以自己设计如何使用积木去堆砌符合你数据集的积木。
如何选择一个深度学习平台需要因人而异、因项目而异。可能你是做图像处理,也可能是自然语言处理,或是数量金融,根据你不同的需求,对平台做出的选择可能会不同。深度学习平台的选择大致可参考如下5个标准:
- 标准1:与现有编程平台、技能整合的难易程度
- 标准 2: 和相关机器学习、数据处理生态整合的紧密程度
- 标准 3:通过此平台做深度学习之外,还能做什么?
- 标准 4:对数据量、硬件的要求和支持
- 标准 5:深度学习平台的成熟程度
阶段四:看到是caffe写的,拒绝
Caffe的优点是它是第一个主流的工业级深度学习工具。Caffe提供了一个用于训练、测试、微调和开发模型的完整工具包,而且它拥有完善文档的例子用于这些工作。同样的,它也是一个对于研究人员和其他开发者进入尖端机器学习的理想起点,这使得它在短时间内就能用于产业开发。
但是Caffe让人头疼的地方也不少,它有很多扩展,但是由于一些遗留的架构问题,不够灵活且对递归网络和语言建模的支持很差。同时基于层的网络结构,其扩展性不好,对于新增加的层,需要自己实现。而且非常不灵活,在 Caffe 中,每个节点被当做一个层,因此如果你想要一种新的层类型,你需要定义完整的前向、后向和梯度更新过程。这些层是网络的构建模块,你需要在无穷无尽的列表中进行选择。
觉得文章有用欢迎大家积极转发、收藏,获取更多编程干货也欢迎大家关注我的头条号~