本帖最后由 yuwenge 于 2018-4-7 19:55 编辑
公众号:
Jeemy110
功能介绍
机器学习、深度学习、数据挖掘等人工智能领域的技术实战干货文章
经典文章推荐:
快来操纵你的GPU| CUDA编程入门极简教程
2006年,NVIDIA公司发布了CUDA( http://docs.nvidia.com/cuda/),CUDA是建立在NVIDIA的CPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题。近年来,GPU最成功的一个应用就是深度学习领域,基于GPU的并行计算已经成为训练深度学习模型的标配。目前,最新的CUDA版本为CUDA 9。 GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。在异构计算架构中,GPU与CPU通过PCIe总线连接在一起来协同工作,CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device),如下图所示。
基于CPU+GPU的异构计算. 来源:Preofessional CUDA® C Programming
可以看到GPU包括更多的运算核心,其特别适合数据并行的计算密集型任务,如大型矩阵运算,而CPU的运算核心较少,但是其可以实现复杂的逻辑运算,因此其适合控制密集型任务。另外,CPU上的线程是重量级的,上下文切换开销大,但是GPU由于存在很多核心,其线程是轻量级的。因此,基于CPU+GPU的异构计算平台可以优势互补,CPU负责处理逻辑复杂的串行程序,而GPU重点处理数据密集型的并行计算程序,从而发挥最大功效。
基于CPU+GPU的异构计算应用执行逻辑. 来源:Preofessional CUDA® C Programming
深度学习入门 引言
近几年来人工智能越来越火,大家都已经知道了AlphaGo的威力,然而在其背后,从技术层面来说,深度学习功不可没。那么深度学习到底是什么,其与传统的机器学习之间又有什么样的关联。对于想入坑深度学习的同学,又该从哪些方面入手。这就是本文要回答的问题。
深度学习的提出
先从深度学习的提出开始说起,深度学习的概念是由Hinton在2006年提出,他当时首次提出了深度信念网络(DBN),相比之前,他采用无监督方式逐层训练深层网络,在深层网络训练中取得了跨越式的进展。虽然称为是深度学习,但其实是深层神经网络。神经网络或者说人工神经网络早在上个世纪都已经提出,但是在Hinton之前,很少人尝试去训练深层神经网络,也当然没有深度的概念了。2006年可以说是深度学习的元年,但是对于神经网络来说,虽然不是元年,但确是其振兴的又一个重要转折点。神经网络之前经历了跌宕的发展,但是从此时之后,它重回时代的舞台。
深度学习的兴起
这里有必要谈一下深度学习的兴起原因。为什么是深度学习或者说是深层神经网络成为热点。神经网络从生物相似性来说,应该是比较理想的人工智能实现载体,因为其与生物的神经元结构是类似的。通过层与层之间的连接或者传递,可以实现复杂模式的学习。早在上个世纪,就已经证明了单隐含层的神经网络就可以实现任何非线性模式的拟合。因此,经典的BP神经网络也大多采用单个隐含层,按理说可以拟合任何模型。不过这毕竟是理想,现实并非如此,因为找到这个优化点就是个大难题。那么人们可能会尝试增加隐含层的个数即深层神经网络,从直观上讲,深层神经网络要由于增加了隐含层,表达力会更强,而且应该在实践中比浅层神经网络的效果要好。但是在真实情境中却并不是这样,因为在当时深层神经网络的训练难度要大,这与算法、数据以及计算力都有关系。比如,我们知道神经网络的初始参数对网络训练可能会影响很大,较糟糕的初始参数可能会导致网络很难收敛,对深层神经网络这个效应更大,而Hinton提出无监督预训练方式也就是解决网络的初始参数问题,无监督预训练的原理是他假定一个好的特征表达,后面的输出层总是可以重构出前面的输入层。还有如果你的训练样本很少,也很难训练出一个很好的深度模型。而目前深度学习之所以热,就是现在出现了新技术来解决深层神经网络的难训练问题。这主要归功于以下三个方面: (1) 计算力的提高:大家都知道的摩尔定律,以及GPU,FPGA,ASIC等在深度学习的应用;
(2) 大数据时代的到来:我们有了更多的训练样本;
(3) 算法的创新:启发式的参数初始化,新的激活函数、优化方法以及网络架构等;
深度学习的兴起与这三个方面紧密相关,其实更重要的是前两个方面,因为深度学习的核心算法相比之前并没有太大的变革,也难怪有人称为深度学习为“暴力计算型”人工智能,有了更多的训练数据,加上强大的计算能力我们完全可以拟合更好的模型,之前是理论上可以实现,现在是实践上做得越来越好。值得一提的是,深度学习是一个发展迅速的领域,尤其是近几年更是暴热,当年Hinton提出的深度信念网络现在也被遗忘在角落里了,也许这就是技术变革吧。
深度学习与机器学习
由于之前神经网络也是归到机器学习的范畴,毕竟是表征学习(Representation learning),还是在机器学习的定义中,所以从这个角度来看,深度学习也是在机器学习之下的,但是由于时势造英雄,只不过单独被拎出来罢了,而现在我们说机器学习可能大多是指传统的机器学习方法如决策树及支持向量机等,或者说是除了神经网络之外的算法,不过从本质上讲,机器学习应该囊括了深度学习,至少现在还是这样。
深度学习如何入门
如果要入门深度学习,掌握了神经网络基础之后,可以先学习深度学习两个最基本的模型:卷积神经网络(CNnsorflow以及Facebook的Pytorch等等,大家可以选择某个框架从简单的N)和递归神经网络(RNN)。前者主要用于计算机视觉(CV),后者主要用于自然语言处理(NLP)。其实两种模型也早在上个世纪被提出,不过加上深度,两个模型分别在两个不同的领域取得重大进展。然后还要学习一下深度学习模型的训练方法,即相关梯度下降法(SGD)以及相关变体,值得注意的是SGD方法需要计算梯度,这不得牵扯到经典的BP算法,还有一些自动求导的方法,这些也只很重要的方面。接着要开始学习深度学习的框架,如Google的Tedemo开始搭建模型,这对学习理论是有裨益的。作为一个迅猛发展的领域,最重要的是要开始跟进一些最新的paper,多学习一些新的模型及架构。下面我们来介绍CV中使用最多的CNN模型。
机器学习该如何入门 引言 可能你对这个名字叫“机器学习”的家伙不是特别的了解,但是相信用过iPhone的同学都知道iPhone的语音助手Siri,它能帮你打电话,查看天气等等;相信大家尤其是美女童鞋都用过美颜相机,它能自动化的给我们拍出更漂亮的照片;逛京东淘宝的时候,细心的童鞋应该也会发现它们会有一个栏目“猜你喜欢”;最近异军突起的新闻客户端软件今日头条,它们就是会根据分析你的日常喜好给每个人推荐不同的新闻……没错,这些功能背后的核心就是今天要介绍的主题:机器学习。 什么是机器学习 对于这个问题的解释,说实话我很有压力,因为在分享篇文章之前就有朋友告诉我,这个百度上一搜一大片,还需要你讲吗?但是,我觉得并非如此。正如同一千个读者眼里有一千个林黛玉一样,我解释的当然是我个人自从读研到工作这么多年对机器学习的学习到应用过程的独特见解。 首先我们看下图了解一下机器学习在AI(Artificial Intelligence 人工智能)领域的地位。在图中,我们可以看到,机器学习是人工智能的一个子领域。而现在火的不要不要的 深度学习 其实是机器学习的一个子分支。
机器学习在人工智能中的地位
那么到底什么才是真正的机器学习呢?在这里我将对比我和学术界大神的解释: 大神的解释 机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身。简单一点说,就是计算机从数据中学习出规律和模式,以应用在新数据上做预测的任务。 我的解释 传统的机器学习主要做的事情就是利用统计学的基本观点,利用要学习的问题的历史样本数据的分布对总体样本分布进行估计。分析数据大致特性建立数学分布模型,并利用最优化的知识对模型的参数进行调优学习,使得最终的学习模型能够对已知样本进行很好的模拟与估计。最终利用学习好的模型对未知标签的样本进行预测和估计的过程。 但是越说越觉得机器学习有距离感,云里雾里高深莫测,我们不是专家,但说起算有一些从业经验,做过一些项目在实际数据上应用机器学习。这一篇就我们的经验和各位同仁的分享,总结一些对于初学者入门有帮助的方法和对进阶有用的资料。
机器学习的基本问题 对于机器学习中的基本问题,我们将从以下几个角度进行讲解:机器学习的特点;机器学习的对象;机器学习的分类;机器学习的要素;模型的评估与选择。 机器学习的特点机器学习主要特点如下:
机器学习的一般训练过程
机器学习的对象 机器学习研究的对象是多维向量空间的数据。它从各种不同类型的数据(数字,文本,图像,音频,视频)出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到数据的分析与预测中去。 机器学习的分类 对于机器学习的分类,绝大多数人只简单的分为有监督学习和无监督学习这两类。严格意义上来讲应该分为四大类:有监督学习、无监督学习、半监督学习、强化学习。下面对这四种学习做一下简要的介绍: 有监督学习 有监督学习是指进行训练的数据包含两部分信息:特征向量 + 类别标签。也就是说,他们在训练的时候每一个数据向量所属的类别是事先知道的。在设计学习算法的时候,学习调整参数的过程会根据类标进行调整,类似于学习的过程中被监督了一样,而不是漫无目标地去学习,故此得名。 无监督学习 相对于有监督而言,无监督方法的训练数据没有类标,只有特征向量。甚至很多时候我们都不知道总共的类别有多少个。因此,无监督学习就不叫做分类,而往往叫做聚类。就是采用一定的算法,把特征性质相近的样本聚在一起成为一类。 半监督学习 半监督学习是一种结合有监督学习和无监督学习的一种学习方式。它是近年来研究的热点,原因是在真正的模型建立的过程中,往往有类标的数据很少,而绝大多数的数据样本是没有确定类标的。这时候,我们无法直接应用有监督的学习方法进行模型的训练,因为有监督学习算法在有类标数据很少的情况下学习的效果往往很差。但是,我们也不能直接利用无监督学习的方式进行学习,因为这样,我们就没有充分的利用那些已给出的类标的有用信息。
Tensorflow快速入门
引言 实践深度学习肯定要至少学习并掌握一个深度学习框架。这里我们介绍一个最流行的深度学习框架:Tensorflow。Tensorflow是谷歌公司在2015年9月开源的一个深度学习框架。虽然我们称Tensorflow为一种深度学习框架,但是看看官网: 可以看到,从功能上看,Tensorflow定义为专为机器智能打造的开源软件库。而从内部机制上,Tensorflow定义为一个使用数据流图进行数值计算的开源软件库。这说明Tensorflow的功能远不是只应用在深度学习领域,但是通常我们还是用Tensorflow来搭建深度学习模型。其他流行的深度学习框架也有很多,如PyTorch, MXnet, Theano,Caffe等,还有根据这些框架衍生出来的高级深度学习框架,如Keras, TFLearn, TensorLayer等。其实各个深度学习框架都有自己独特的优势,网上也有针对各个框架的对比。但是,不管在学术界还是在工业界,Tensorflow绝对是学习深度学习的一个较好的选择,这里谈一下其优势:
1.平台支持性良好,无论是Windows, Linux, 和macOS等系统,还是IOS和Android;
2提供简单且灵活的Python API接口,内部使用C++进行优化;
3丰富的算子,可以很容易搭建各种深度学习模型,如CNN和RNN模型;
4提供可视化工具TensorBoard,这个是TF独有的优势;
5支持CPU和GPU,支持分布式多机多卡训练;
总之,TF的优势还是挺多的,基本上的需求都可以满足,毕竟背后有强大的谷歌大佬在维护。接下来,就从入门TF开始吧。
更多点击链接
详解数据挖掘与机器学习的区别与联系
0、为什么写这篇博文 最近有很多刚入门AI领域的小伙伴问我:数据挖掘与机器学习之间的区别与联系。为了不每次都给他们长篇大论的解释,故此在网上整理了一些资料,整理成此篇文章,下次谁问我直接就给他发个链接就好了。 本篇文章主要阐述我个人在数据挖掘、机器学习等方面的学习心得,并搜集了网上的一些权威解释,或许不太全面,但应该会对绝大多数入门者有一个直观地解释。 本文主要参照周志华老师的:机器学习与数据挖掘 一文。有兴趣的可以自行百度,其文对人工智能、数据挖掘、机器学习等演变历程,有详细介绍。 1、概念定义首先,第一步,我们对机器学习和数据挖掘的定义做一下总结,看看大家有没有一点体会: 机器学习:广泛的定义为 “利用经验来改善计算机系统的自身性能。”,事实上,由于“经验”在计算机系统中主要是以数据的形式存在的,因此机器学习需要设法对数据进行分析,这就使得它逐渐成为智能数据分析技术的创新源之一,并且为此而受到越来越多的关注。 数据挖掘:一种解释是“识别出巨量数据中有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程”,顾名思义,数据挖掘就是试图从海量数据中找出有用的知识。 2、关系与区别2.1 关系 数据挖掘可以认为是数据库技术与机器学习的交叉,它利用数据库技术来管理海量的数据,并利用机器学习和统计分析来进行数据分析。其关系如下图:
数据挖掘受到了很多学科领域的影响,其中数据库、机器学习、统计学无疑影响最大。粗糙地说,数据库提供数据管理技术,机器学习和统计学提供数据分析技术。由于统计学界往往醉心于理论的优美而忽视实际的效用,因此,统计学界提供的很多技术通常都要在机器学习界进一步研究,变成有效的机器学习算法之后才能再进入数据挖掘领域。从这个意义上说,统计学主要是通过机器学习来对数据挖掘发挥影响,而机器学习和数据库则是数据挖掘的两大支撑技术。 2.2 区别 数据挖掘并非只是机器学习在工业上的简单应用,他们之间至少包含如下两点重要区别: 传统的机器学习研究并不把海量数据作为处理对象,因此,数据挖掘必须对这些技术和算法进行专门的、不简单的改造。 作为一个独立的学科,数据挖掘也有其独特的东西,即:关联分析。简单地说,关联分析就是希望从数据中找出“买尿布的人很可能会买啤酒”这样看起来匪夷所思但可能很有意义的模式。
链接
全面直观认识深度神经网络
1.深度学习的精准定义
一类通过多层非线性变换对高复杂性数据建模算法的集合。它的两个非常重要的特征是多层性和非线性。俗称多层非线性变换。所以深度学习要去线性化。
为什么呢?因为线性模型存在局限性,任意线性模型得到组合仍然还是线性模型。所以只要通过线性变换,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别,而且他们都是线性模型,线性模型解决问题的能力是有限的。
2.激活函数实现去线性化
每个神经元(也就是神经网络上的节点)的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,这个非线性函数就是激活函数。
tensorflow常见的激活函数有:
tf.nn.relu
tf.sigmoid
tf.tanh
tensorflow 也支持自定义激活函数。
带激活函数的前向传播算法:
a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)
3.单层神经网络解决不了的问题
事实上,一个单极网络可以将平面划分为两部分,用多个单极网络组合在一起,并用其中的一个区综合其他单极网络的结果,就可以构造出一个两极神经网络。
4.组合特征提取
深度神经网络具有组合特征提取的功能,这个特征对于不易提取特征向量的问题(比如图片识别和语音识别等)有很大的帮助。隐藏层的主要作用也就是隐藏层节点可以被认为代表了从输入特征中抽取更高纬度的特征。
5.损失函数
损失函数用于评价模型的效果。分类问题使用最广泛的损失函数是交叉熵。
交叉熵:
刻画两个概率分布的距离,也就是说交叉熵越小两个概率分布越接近。
交叉熵的数学定义是:
其用来衡量在给定真实分布下,使用非真实分布所指定的策略消除系统不确定性所需付出的努力的大小。
神经网络的输出不一定是概率模型,可以使用Softmat回归将神经网络的前向传播的结果变成概率分布。
代码实例:
cross_entropy = -tf.reduce_mean(
y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)
但是交叉熵一般会和softmax回归一起使用,所以会使用tf.nn.softm
cross_entropy=
tf.nn.softmax_cross_entropy_with_logits(y,y_)
y代表原始神经网络的输出结果,而y_给出了标准答案。
在只有一个正确答案的分类问题中,Tensorflow提供了函数:
tf.nn.sparse_softmax_cross_entropy_with_logits
来加快计算过程。
回归问题常用的损失函数是均方误差。均方误差是指各数据偏离真实值的距离平方和的平均数。
6.神经网络的优化算法
梯度下降算法主要用于优化单个参数的取值,而反向传播算法则给出了一个高效的方式在所有参数上使用梯度下降算法,从而使神经网络模型在训练数据集上的损失函数尽可能的小。
反向传播算法是训练神经网络的核心算法。它可以根据定义好的损失函数优化神经网络中参数的取值,从而使神经网络模型在训练数据集上的损失函数达到一个较小的值。
神经网络模型中参数的优化过程直接决定了模型的质量。
7.什么是梯度和学习率
梯度:
由导数的概念,对点x0的导数反应了函数在点x0出的瞬时变化速率,或者叫做点x0出的斜度。推广到多维函数中,就有了梯度的概念,梯度是一个向量的组合,反应了多维图形中变化速率最快的反向。
学习率:
每次参数移动的幅度。
更多点击链接
|