Artificial Intelligence

The Myth of A Superhuman AI

I’ve heard that in the future computerized AIs will become so much smarter than us that they will take all our jobs and resources, and humans will go extinct. Is this true? That’s the most common question I get whenever I give a talk about AI. The questioners are earnest; their worry stems in part […]

Artificial Intelligence

6 areas of AI and machine learning to watch closely

Distilling a generally-accepted definition of what qualifies as artificial intelligence (AI) has become a revived topic of debate in recent times. Some have rebranded AI as “cognitive computing” or “machine intelligence”, while others incorrectly interchange AI with “machine learning”. This is in part because AI is not one technology. It is in fact a broad […]

Artificial Intelligence

一文学会用 Tensorflow 搭建神经网络

本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的, 讲的很好,浅显易懂,入门首选, 而且在github有代码, 想看视频的也可以去他的优酷里的频道找。 Tensorflow 官网 神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出间复杂的关系进行建模。 神经网络由大量的节点和之间的联系构成,负责传递信息和加工信息,神经元也可以通过训练而被强化。 这个图就是一个神经网络系统,它由很多层构成。输入层就是负责接收信息,比如说一只猫的图片。输出层就是计算机对这个输入信息的认知,它是不是猫。隐藏层就是对输入信息的加工处理。 神经网络是如何被训练的,首先它需要很多数据。比如他要判断一张图片是不是猫。就要输入上千万张的带有标签的猫猫狗狗的图片,然后再训练上千万次。 神经网络训练的结果有对的也有错的,如果是错误的结果,将被当做非常宝贵的经验,那么是如何从经验中学习的呢?就是对比正确答案和错误答案之间的区别,然后把这个区别反向的传递回去,对每个相应的神经元进行一点点的改变。那么下一次在训练的时候就可以用已经改进一点点的神经元去得到稍微准确一点的结果。 神经网络是如何训练的呢?每个神经元都有属于它的激活函数,用这些函数给计算机一个刺激行为。 在第一次给计算机看猫的图片的时候,只有部分的神经元被激活,被激活的神经元所传递的信息是对输出结果最有价值的信息。如果输出的结果被判定为是狗,也就是说是错误的了,那么就会修改神经元,一些容易被激活的神经元会变得迟钝,另外一些神经元会变得敏感。这样一次次的训练下去,所有神经元的参数都在被改变,它们变得对真正重要的信息更为敏感。 Tensorflow 是谷歌开发的深度学习系统,用它可以很快速地入门神经网络。 它可以做分类,也可以做拟合问题,就是要把这个模式给模拟出来。 这是一个基本的神经网络的结构,有输入层,隐藏层,和输出层。 每一层点开都有它相应的内容,函数和功能。 那我们要做的就是要建立一个这样的结构,然后把数据喂进去。 把数据放进去后它就可以自己运行,TensorFlow 翻译过来就是向量在里面飞。 这个动图的解释就是,在输入层输入数据,然后数据飞到隐藏层飞到输出层,用梯度下降处理,梯度下降会对几个参数进行更新和完善,更新后的参数再次跑到隐藏层去学习,这样一直循环直到结果收敛。 tensors_flowing.gif 今天一口气把整个系列都学完了,先来一段完整的代码,然后解释重要的知识点! 1. 搭建神经网络基本流程 定义添加神经层的函数 1.训练的数据 2.定义节点准备接收数据 3.定义神经层:隐藏层和预测层 4.定义 loss 表达式 5.选择 optimizer 使 loss 达到最小 然后对所有变量进行初始化,通过 sess.run optimizer,迭代 1000 次进行学习: import tensorflow as tf import numpy as np # 添加层 […]

Artificial Intelligence

一个隐马尔科夫模型的应用实例:中文分词

什么问题用HMM解决 现实生活中有这样一类随机现象,在已知现在情况的条件下,未来时刻的情况只与现在有关,而与遥远的过去并无直接关系。 比如天气预测,如果我们知道“晴天,多云,雨天”之间的转换概率,那么如果今天是晴天,我们就可以推断出明天是各种天气的概率,接着后天的天气可以由明天的进行计算。这类问题可以用 Markov 模型来描述。 markov 进一步,如果我们并不知道今天的天气属于什么状况,我们只知道今明后三天的水藻的干燥湿润状态,因为水藻的状态和天气有关,我们想要通过水藻来推测这三天的真正的天气会是什么,这个时候就用 Hidden Markov 模型来描述。 hmm HMM 模型的本质是从观察的参数中获取隐含的参数信息,并且前后之间的特征会存在部分的依赖影响。 我们从如何进行中文分词的角度来理解HMM 根据可观察状态的序列找到一个最可能的隐藏状态序列 中文分词,就是给一个汉语句子作为输入,以“BEMS”组成的序列串作为输出,然后再进行切词,进而得到输入句子的划分。其中,B代表该字是词语中的起始字,M代表是词语中的中间字,E代表是词语中的结束字,S则代表是单字成词。 例如:给个句子 小明硕士毕业于中国科学院计算所 得到BEMS组成的序列为 BEBEBMEBEBMEBES 因为句尾只可能是E或者S,所以得到切词方式为 BE/BE/BME/BE/BME/BE/S 进而得到中文句子的切词方式为 小明/硕士/毕业于/中国/科学院/计算/所 这是个HMM问题,因为你想要得到的是每个字的位置,但是看到的只是这些汉字,需要通过汉字来推出每个字在词语中的位置,并且每个字属于什么状态还和它之前的字有关。 此时,我们需要根据可观察状态的序列找到一个最可能的隐藏状态序列。 五元组,三类问题,两个假设 五元组 通过上面的例子,我们可以知道 HMM 有以下5个要素。 观测序列-O:小明硕士毕业于中国科学院计算所 状态序列-S:BEBEBMEBEBMEBES 初始状态概率向量-π:句子的第一个字属于{B,E,M,S}这四种状态的概率 状态转移概率矩阵-A:如果前一个字位置是B,那么后一个字位置为BEMS的概率各是多少 观测概率矩阵-B:在状态B的条件下,观察值为耀的概率,取对数后是-10.460 备注:示例数值是对概率值取对数之后的结果,为了将概率相乘的计算变成对数相加,其中-3.14e+100作为负无穷,也就是对应的概率值是0 三类问题 当通过五元组中某些已知条件来求未知时,就得到HMM的三类问题: 似然度问题:参数(O,π,A,B)已知的情况下,求(π,A,B)下观测序列O出现的概率。(Forward-backward算法) 解码问题:参数(O,π,A,B)已知的情况下,求解状态值序列S。(viterbi算法) 学习问题:参数(O)已知的情况下,求解(π,A,B)。(Baum-Welch算法) 中文分词这个例子属于第二个问题,即解码问题。 我们希望找到 s_1,s_2,s_3,… 使 P (s_1,s_2,s_3,…|o_1,o_2,o_3….) 达到最大。 意思是,当我们观测到语音信号 o_1,o_2,o_3,… 时,我们要根据这组信号推测出发送的句子 s_1,s_2,s_3,….,显然,我们应该在所有可能的句子中找最有可能性的一个。 两个假设 利用贝叶斯公式得到: […]

Artificial Intelligence

从特斯拉到计算机视觉之「图像语义分割」

说起特斯拉,大家可能立马会想到今年5月份发生在特斯拉Model S自动驾驶上的一宗夺命车祸。初步的调查表明,在强烈的日照条件下,驾驶员和自动驾驶系统都未能注意到牵引式挂车的白色车身,因此未能及时启动刹车系统。而由于牵引式挂车正在横穿公路,且车身较高,这一特殊情况导致Model S从挂车底部通过时,其前挡风玻璃与挂车底部发生撞击,导致驾驶员不幸遇难。 无独有偶,8月8日美国密苏里州的一名男子、特斯拉Model X车主约书亚·尼利(Joshua Neally)在上班途中突发肺栓塞。在Model X的Autopilot自动驾驶功能的帮助下,他安全抵达了医院。这“一抑一扬”着实让人回味无穷,略有些“败也萧何,成也萧何”之意。 好奇的读者一定会有疑问:这“一成一败”背后的原理到底是什么?是自动驾驶系统中的哪个部分发生了失误而造成车祸?又是哪部分技术支撑了自动驾驶过程呢? 今天,我们就来谈谈自动驾驶系统中的一项重要核心技术——图像语义分割(Semantic image segmentation)。图像语义分割作为计算机视觉(Computer vision)中图像理解(Image understanding)的重要一环,不仅在工业界的需求日益凸显,同时语义分割也是当下学术界的研究热点之一。 什么是图像语义分割? 图像语义分割可以说是图像理解的基石性技术,在自动驾驶系统(具体为街景识别与理解)、无人机应用(着陆点判断)以及穿戴式设备应用中举足轻重。 我们都知道,图像是由许多像素(Pixel)组成,而「语义分割」顾名思义就是将像素按照图像中表达语义含义的不同进行分组(Grouping)/分割(Segmentation)。下图取自图像分割领域的标准数据集之一PASCAL VOC。其中,左图为原始图像,右图为分割任务的真实标记(Ground truth):红色区域表示语义为“person”的图像像素区域,蓝绿色代表“motorbike”语义区域,黑色表示“background”,白色(边)则表示未标记区域。显然,在图像语义分割任务中,其输入为一张的三通道彩色图像,输出则是对应的一个矩阵,矩阵的每一个元素表明了原图中对应位置像素所表示的语义类别(Semantic label)。因此,图像语义分割也称为“图像语义标注”(Image semantic labeling)、“像素语义标注”(Semantic pixel labeling)或“像素语义分组”(Semantic pixel grouping)。从上图和题图中,大家可以明显看出图像语义分割任务的难点便在于这“语义”二字。在真实图像中,表达某一语义的同一物体常由不同部件组成(如,building,motorbike,person等),同时这些部分往往有着不同的颜色、纹理甚至亮度(如building),这给图像语义的精确分割带来了困难和挑战。 前DL时代的语义分割 从最简单的像素级别“阈值法”(Thresholding methods)、基于像素聚类的分割方法(Clustering-based segmentation methods)到“图划分”的分割方法(Graph partitioning segmentation methods),在深度学习(Deep learning, DL)“一统江湖”之前,图像语义分割方面的工作可谓“百花齐放”。在此,我们仅以“Normalized cut” [1]和“Grab cut” [2]这两个基于图划分的经典分割方法为例,介绍一下前DL时代语义分割方面的研究。 Normalized cut (N-cut)方法是基于图划分(Graph partitioning)的语义分割方法中最著名的方法之一,于2000年Jianbo Shi和Jitendra Malik发表于相关领域顶级期刊TPAMI。通常,传统基于图划分的语义分割方法都是将图像抽象为图(Graph)的形式(为图节点,为图的边),然后借助图理论(Graph theory)中的理论和算法进行图像的语义分割。常用的方法为经典的最小割算法(Min-cut algorithm)。不过,在边的权重计算时,经典min-cut算法只考虑了局部信息。如下图所示,以二分图为例(将分为不相交的,两部分),若只考虑局部信息,那么分离出一个点显然是一个min-cut,因此图划分的结果便是类似或这样离群点,而从全局来看,实际想分成的组却是左右两大部分。 针对这一情形,N-cut则提出了一种考虑全局信息的方法来进行图划分(Graph partitioning),即,将两个分割部分,与全图节点的连接权重(和)考虑进去:. 如此一来,在离群点划分中,中的某一项会接近1,而这样的图划分显然不能使得是一个较小的值,故达到考虑全局信息而摒弃划分离群点的目的。这样的操作类似于机器学习中特征的规范化(Normalization)操作,故称为Normalized cut。N-cut不仅可以处理二类语义分割,而且将二分图扩展为路(-way)图划分即可完成多语义的图像语义分割,如下图例。 Grab cut是微软剑桥研究院于2004年提出的著名交互式图像语义分割方法。与N-cut一样,grab cut同样也是基于图划分,不过grab cut是其改进版本,可以看作迭代式的语义分割算法。Grab […]

Artificial Intelligence Publication & Project

Learning AI if You Suck at Math

If you’re like me, you’re fascinated with AI. Maybe you’d love to dig deeper and get an image recognition program running in TensorFlow or Theano? Perhaps you’re a kick-ass developer or systems architect and you know computers incredibly well but there’s just one little problem: You suck at math. That’s all right! I share your […]

Artificial Intelligence

神经网络浅讲:从神经元到深度学习

  神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术。   本文以一种简单的,循序的方式讲解神经网络。适合对神经网络了解不多的同学。本文对阅读没有一定的前提要求,但是懂一些机器学习基础会更好地帮助理解本文。   神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 图1 人脑神经网络   那么机器学习中的神经网络是如何实现这种模拟的,并且达到一个惊人的良好效果的?通过本文,你可以了解到这些问题的答案,同时还能知道神经网络的历史,以及如何较好地学习它。 由于本文较长,为方便读者,以下是本文的目录: 一.前言 二.神经元 三.单层神经网络(感知器) 四.两层神经网络(多层感知器) 五.多层神经网络(深度学习) 六.回顾 七.展望 八.总结 九.后记 十.备注   一. 前言   让我们来看一个经典的神经网络。这是一个包含三个层次的神经网络。红色的是输入层,绿色的是输出层,紫色的是中间层(也叫隐藏层)。输入层有3个输入单元,隐藏层有4个单元,输出层有2个单元。后文中,我们统一使用这种颜色来表达神经网络的结构。 图2 神经网络结构图     在开始介绍前,有一些知识可以先记在心里: 设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可以自由指定; 神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别; 结构图里的关键不是圆圈(代表“神经元”),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。 除了从左到右的形式表达的结构图,还有一种常见的表达形式是从下到上来表示一个神经网络。这时候,输入层在图的最下方。输出层则在图的最上方,如下图: 图3 从下到上的神经网络结构图   从左到右的表达形式以Andrew Ng和LeCun的文献使用较多,Caffe里使用的则是从下到上的表达。在本文中使用Andrew Ng代表的从左到右的表达形式。   下面从简单的神经元开始说起,一步一步介绍神经网络复杂结构的形成。 二. 神经元 1.引子  对于神经元的研究由来已久,1904年生物学家就已经知晓了神经元的组成结构。 一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。这个连接的位置在生物学上叫做“突触”。 人脑中的神经元形状可以用下图做简单的说明: 图4 神经元   1943年,心理学家McCulloch和数学家Pitts参考了生物神经元的结构,发表了抽象的神经元模型MP。在下文中,我们会具体介绍神经元模型。     图5 Warren McCulloch(左)和 Walter Pitts(右)   2.结构 神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。 下图是一个典型的神经元模型:包含有3个输入,1个输出,以及2个计算功能。 注意中间的箭头线。这些线称为“连接”。每个上有一个“权值”。 图6 神经元模型   […]