您的位置:首页 > 大数据 > 人工智能

人工智能和深度学习(概念&&定义)

2017-10-28 00:00 141 查看
摘要: MCTS DCNN

人工智能就是研究用计算机实现人类的智能,如去模仿人类的知觉,推理,学习能力等.从而让计算机能够像人一样思考和行动,有图像识别(机器识别出猫猫狗狗),人机对话(机器感知到人类的语义和情感并给出反馈),围棋的人机对弈(AlphaGo,Master等让机器自己思考去如何下棋)等.

机器如何实现人类的智力呢?主要是通过大量的训练数据进行训练,程序不断地进行自我学习和修正来训练出一个模型,而模型本质上就是一堆参数,用上千万,上亿个参数来描述业务的特点,如"人脸" "房屋地段价格" "用户画像"的特点,从而接近人类智力.该过程一般采用机器学习以及机器学习的子集------深度学习(deep learning),结合深度神经网络的方法来训练.所以说 ,深度学习方法是能够迅速实现人工智能很有效的工具.

--- 摘自《TensorFlow技术解析与实战》

AlphaGo采用了蒙特卡洛树搜索方法(Monte Carlo tree search,MCTS)和深度卷积神经网络(deep convolutional neural network,DCNN)相结合.模型中涉及的主要网络及作用如下:

估值网络(Value network):也称盘面评估函数,计算出盘面的分数.

策略网络(policy network):计算对于下一步每个棋子的概率与胜率.它评估对手和自己可能下的位置,对可能的位置进行评估与搜寻.

  训练模型主要过程分为以下四类:

采用分类的方法得到直接策略.

直接策略对历史棋局资料库进行神经网络学习,得到习得策略.

采用强化学习方法进行自我对局来得到改良策略.

用回归方法整体统计后得到估值网络.

 更详细的论文请见Nature,《Mastering the game of Go with deep neural networks and tree search》.

深度学习需要从深度和学习2方面来谈.

深度

深度学习前身是人工神经网络(artificial neural network,ANN),基本特点就是试图模仿人脑的神经元之间传递和处理信息的模式.在机器学习中,我们说的神经网络一般就是指人工神经网络.

人工神经网络由各个层组成,输入层(input layer)输入训练数据,在输出层(output layer)输出计算结果,中间有一个或多个隐藏层(hidden layer),使输入数据向前传播到输出层.深度一般是㧈要求隐藏层很多,一般指5层,10层,几百层甚至几千层.

人工神经网络的每一层由大量的节点(神经元)组成,层与层之间有大量连接,但是层内部的神经元一般相互独立.深度学习的目的就是要利用已知的数据学习一套模型,使系统在遇见未知的数据时也能够做出预测.这个过程需要神经元具备以下两个特性:

激活函数(activation function):一般是非线性函数,每个神经元通过这个函数将原有的来自其他神经元的输入做一个非线性变化,输出给下一层神经元.激活函数实现的非线性能力是前身传播(forward propagation)很重要的一部分.

成本函数(cost function): 用来定量评估在特定输入值下,计算出来的输出结果距离这个输入值的真实值有多远,然后不断调整每一层的权重参数,使最后的损失值最小.这就是完成了一次反向传播(backward propagation),损失值越小,结果就越可靠.

神经网络算法的核心就是计算,连接,评估,纠错和训练,而深度学习的深度就在于通过不断增加中间层隐藏性和神经元数量,让神经网络变得又宽又深,让系统运行大量数据,训练它.

2.学习

计算机学习和人类类似,我们平时大量做题(训练数据),不断地经过阶段性考试(验证数据)的检验,用这些知识和解题方法(模型)最终走向最终(测试数据)的考场.

最简单最普通的一类机器学习算法就是分类(classification).对于分类,输入的训练数据有特征(feature),有标记(label),在学习中就是找出特征和标记间的映射关系(mapping).通过标记来不断纠正学习中的偏差,使学习的预测率不断提高.这种训练数据都有标记的学习被称为监督学习(supervised learning ).

无监督学习(unsupervised learning)看起来很困难.无监督学习的目的是让计算机自己去学习怎样做一些事情.因此所有数据只有特征而没有标记.

无监督学习一般有两种思路:一是在训练时不为其指定明确的分类,但是这些数据会呈现出聚群的结构,彼此相似的类型会聚集在一起.计算机通过把这些没有标记的数据分成一个个组合.就是聚类(clustering);二是在成功时采用某种形式的激励制度,即强化学习(reinforcement learning,RL).对强化学习来说,它虽然没有标记,但有一个延迟奖赏与训练相关,通过学习过程中激励函数获得某种从状态到行动的映射.强化学习一般用在游戏,下棋(前面提到的AlphaGo)等需要连续决策的领域.

还有一种半监督学习(semi-supervised learning).其训练数据一部分有标记,另一部分没有标记,而没标记数据的数量常常极大于有标记数据的数量(符合现实,大部分数据没有标记,标记数据成本很大).它的基本规律是:数据的分布必然不是完全随机的,通过结合有标记数据的局部特征,以及大量没标记数据的整体分布,可以得到比较好的分类结果.

有监督学习(分类,回归)<<<<<>>>>>半监督学习(分类,回归)<<<<>>>>半监督聚类(有标记数据的标记不是确定的,类似于:肯定不是XXX,很可能是YYYY)<<<<>>>>无监督学习(聚类).

要想入门深度学习,需要两个工具,算法知识大量的数据. 如果计算机支持GPU就更好了.入门过程大体分为以下7个步骤:

数学知识
我们的目标是训练出一个模型,用这个模型去进行一系列的预测.于是我们将训练过程涉及的过程抽象成数学函数:首先需要定义一个网络结构,相当于定义一种线性非线性函数;接着,设定一个优化目标,也就是定义一种损失函数(lost function). 而训练过程就是求解最优解及次优解的过程.在这个过程中我们需要掌握基本的概率统计,高等数据,线性代数等知识,如果学过就最好,没学过也没关系,仅仅知道原理和过程即可.有兴趣可以涉猎一些推导证明.

机器学习理论与算法:这些基本算法包括支持向量机,逻辑回归,决策树,朴素贝叶斯分类器,随机森林,聚类算法,协同过滤,关联性分析,人工神经网络和BP算法,PCA,过拟合与正则化等.

编程工具:推荐Python.易入门.我们需要重点掌握使用线性代数库和矩阵的操作,尤其是Numpy,Pandas第三方库,以及机器学习库sklearn,做一些SVM及逻辑回归的练习.TensorFlow提供了和Python平行语料库的接口.对于Java熟悉的可以看看TensorFlowOnSpark.

研讨论文,公众号,博客:一些经典的论文是必读的.如做手写数字识别,采用LeNet,要阅读LeNet的学术论文;要做物体目标检测的训练,若选择MSCNN,可以先读MSCNN相关论文.那么论文从哪里找,这么多论文应该读哪篇呢.以GoogleNet的TensowFlow 为例,在GitHub上,一般在开头的描述中就会说明这个模型所依据的论文.顺着这篇论文阅读,我们可以大致了解这个网络的实现原理.

动手训练:用TensowFlow自己来训练数据.深度神经网络目前研究方向主要集中在视觉和语音两个领域.初学者最好从计算机视觉入手,因为它不像语音等领域需要那么多的领域知识,结果也比较直观.

深入工作相关领域:目前AI应用领域很多,主要是计算机视觉和自然语言处理,以及各种预测等.对于计算机视觉,可以做图像分类,目标检测,视频中的目标检测等;对于自然语言处理,可以做语音识别,语音合成,对话系统,机器翻译,文章摘要,情感分析等,还可以结合图像,视频和语音一起发挥价值.

遇到问题重复4~6步. 在训练中,准确率,坏案例(bad case),识别速度等都是可能遇到的瓶颈.训练好的模型也不是一成不变的,需要不断的优化,也需要结合具体行业领域和业务进行创新.

什么是TensowFlow

在机器学习流行以前,语音和图像相关的识别大多数是基于规则的系统.如做自然语言处理,需要很多语言学的知识.如1997年IBM深蓝计算机对战国际象棋,也需要很多国象的知识.

当以统计方法为核心的机器学习方法成为主流后,我们需要的领域知识相对变少了.重要的是做特征工程(feature engineering),然后调整一些参数,根据一些领域的经验来不断提取特征,特征的好坏往往就直接决定了模型的好坏.这种方法的缺点是对文字等抽象领域,特征相对容易提取,而对语音(一维)和图像这种二维空域信号等领域,提取特征就相对困难.

而TensowFlow可以用它来搭建自己的神经网络.有点类似于PHP开发中的CodeIgniter,Java中的SSH,Python中的Tornado,Django框架.TensowFlow的目的是提供一个工具箱,使开发时能够简化代码,呈现出的模型尽可能简洁易懂.

为什么要学习TensowFlow

TensowFlow一大亮点是支持异构设备分布式计算(heterogeneous distributed computing).异构有异构网络(互联网,不同厂家的硬件软件产品组成统一网络且互相通信),异构数据库(多个数据库系统的集合,可以实现数据的共享和透明访问).这里异构设备是指使用CPU,GPU等核心进行有效地协同合作;与只靠CPU相比,性能更高,功耗更低.

TensowFlow支持卷积神经网络(convolutional neural network,CNN)循环神经网络(recurrent neural network,RNN)以及RNN的一个特例长短期记忆网络(long short-term memory,LSTM).这些都是目前在计算机视觉,语音识别,自然语言处理方面最流行的深度神经网络模型.

TensowFlow特点:

TensowFlow库是对CPU/GPU透明的.并且实现了很多操作(如切片,数组或矩阵操作等).透明是指,在不同设备上如何运行,是框架帮用户去实现的,用户只需要指定在哪具设备上进行哪种运算即可.

有一个完全独立的代码库,用脚本语言来操作TensowFlow,最理想的是Python.并且实现所有深度学习的内容,包括前向传播/反向传播,图形计算等.

可以轻松地共享预训练模型(如Caffe的模型及TensowFlow中的slim模块)

没有编译过程.在复杂图像算法中花费时间很大.如果进行编译的话可能会丢失可解释性和有效进行日志调试的能力.

TensowFlow6大特性:

高度灵活性(deep flwxibility):它采用数据流图(data flow graph) 用于数值计算.但它并不是一个严格的"神经网络库".用户也可以在其上封装自己的"上层库".如果发现没有自己需要的底层操作,也可以自己写C++来丰富.

真正的可移植性:可以在CPU和GPU上运行以及在台式机,服务器,移动端,云端服务器,Docker容器等各个终端运行.因此,当用户有一个新点子,就可以立即在笔记本上进行尝试.

将科研和产品结合在一起:过去如果将一个科研的机器学习想法应用到商业化产品中,需要很多的代码重写工作.现在它提供了一个快速试验的框架,可以尝试新算法,并训练出模型,大大提高了科研产出率.

自动求微分:求微分是基于梯度的深度学习算法的重要一步.利用TensowFlow只需要定义预测模型的结构和目标函数,将两者结合在一起后,添加相应的数据,就会自动完成计算微分操作.

多语言支持:提供了Python,C++,Java接口来构建用户程度,而核心部分是用C++实现.用户也可以开发其他语言接口如Go,Lua,R等.

最优化性能:假如用户有一台32个CPU内核,4个GPU显卡的机器,如何将计算机的所有硬件计算资源全部发挥出来呢?TensowFlow给予线程,队列,分布式计算等支持,可以让用户将数据流图上的不同计算元素分配到不同设备上,最大化的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: