深度学习一探

人工智能(AI)

    AI,即赋予计算机能够自动处理人类世界常规劳动,理解语音或图像,帮助医学诊断等能力。

    它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

    前人在探索该问题时,一个想法是:将世界的知识用形式化的语言进行硬编码,计算机可以使用逻辑推理规则来自动理解这些形式化语言中的申明。这就是AI的知识库(knowledgebase)方法。

机器学习

   机器学习(Machine  Learning)是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构市值不断改善自身的性能的学科,简单地说,机器学习就是通过算法,使得机器能从大量的历史数据中学习规律,从而对新的样本做智能识别或预测未来。

    常用机器学习算法,很大程度上依赖于给定的数据表示,即特征工程。在广告预测系统中,AI 不会像人一样去看某条广告,而是需要人类告诉AI系统几条关键信息,比如该广告主信息、广告类别、推送人群相关度等。

表示学习

    我们很难判断如何设计特征,一个思路就是使用机器学习来发掘特征本身,而不仅仅是把特征映射到输出。这称作表示学习。学习到的特征往往比手动设计特征更好,而且人工干预少。手动设计特征非常耗费时间,可遇不可求。

   经典案例:自编码器。它由一个编码器和解码器函数组成。编码器函数将输入数据转化为一种新的不同表示,解码器函数将这个新的表示转换到原先形式。我们期望的是:输入数据经过编、解码器之后尽可能多保留信息,而且新的表示有各种好的特性。所谓好的特征,就是指有助于分类器的。

深度学习

    自2006年,深度学习(DeepLearning)已经成为机器学习研究中的一个新兴领域,通常也被叫做深层结构学习或分层学习。其动机在于建立、模拟人脑进行分析学习的神经网络,它模拟人脑的机制来解释数据,例如图像,声音和文本,深度学习是无监督学习的一种。

    深度学习的概念源于人工神经网络的研究,含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,已发现数据的分布式特征表示。


深度学习 ∈ 表示学习 ∈ 机器学期 ∈ AI

人脑的视觉机理

     1981年的诺贝尔医学奖获得者David Hubel和Torsten Wiesel发现了视觉系统的信息处理机制,他们发现了一种被称为“方向选择性细胞的神经元细胞,当瞳孔发现了眼前的物体的边缘,而且这个边缘指向某个方向时,这种神经元细胞就会活跃。


人脑神经网络示意

    由此可知人的视觉系统的信息处理是分级的,高层的特征是低层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图,抽象层面越高,存在的可能猜测就越少,就越利于分类。


神经网络处理

深度学习与神经网络的异同


神经网络


深度学习

线性代数要点

    线性代数中,由单独的数a构成的元素被称为标量(scalar):一个标量a可以是整数、实数或复数

    如果多个标量a1,a2,…,an按照一定顺序组成一个序列,这样的元素就被称为向量(vector)

    每个向量都由若干标量构成,如果将向量的所有标量都替换成相同规格的向量,得到的就是矩阵(matrix)

    同理如果将矩阵中的每个标量元素再替换为向量的话,得到的就是张量(tensor),直观地理解,张量就是高阶的矩阵

    线性代数的本质在于将具体书屋抽象为数学对象,并描述其静止和动态特性;

    向量的实质是n维线性空间中的静止点; 

    线性变换描述了向量或作为参考系的坐标系的变化,可以用矩阵表示;

    矩阵的特征值和特征向量描述了 变化的速度与方向(Ax=λx)

概率论要点

    从事件发生的频率认识概率的方法被称为“频率学派”,频率学派口中的“概率”,其实是一个可独立重复的随机实验中单个结果出现频率的极限




    概率论关注的是生活中的不确定性和可能性

    频率学派认为先验分布是固定的,模型参数要靠最大似然估计计算

    贝叶斯学派认为先验分布是随机的,模型参数要靠后验概率最大化计算

    正态分布是最重要的一种随机变量的分布

数理统计要点

    数理统计的任务是根据可观察的样本反过来推断总体的性质

    推断的工具是统计量,统计量是样本的函数,是个随机变量

    参数估计通过随机抽取的样本来估计总体分布的未知参数,包括点估计和区间估计

    假设检验通过随机抽取的样本来接受或拒绝关于总体的某个判断,常用于估计机器学习模型的泛化错误率

概率论的前提是随机变量的分布已知,根据已知的分布来分析随机变量的特征与规律;数理统计的研究对象则是未知分布的随机变量,研究方法是对随机变量的进行独立重复的观察,根据得到的观察结果对原始分布做出推断。

机器学习过程

    计算圆的面积显然是一个很简单的问题,任何程序员应该都能立马写出类似以下的函数来进行计算:


现在让你看看如何让机器通过“学习”来计算圆的面积:


    我们提供给机器足够的训练数据data,比如下面这样:


    然后learn函数(我们暂时不知道如何实现这个函数,之后的实验我们会逐步实现这个函数)使用这些数据去训练模型model(我们接下来会介绍如何构建这个model),当我们需要计算一个新的圆的面积时,就调用test函数,根据训练好的模型去计算其面积。注意这里我们不需要事先知道输入和输出之间的关系,也不需要手动设置任何参数,只要把数据“喂给”学习算法learn,它就会自动得出一个能够解决问题的模型。也就是说,在训练过程中,模型model其实是“学习”到了输入和输出之前的关系以及相关的参数。就像是一个数学家通过对圆的观察,得出了圆的面积和半径的关系,并且求出了圆周率。

    上面我们提到过要让机器“学习”,一般需要:

        1.用来解决问题的模型model

        2.学习数据(或者说训练数据)data

        3.让模型model通过数据data学会解决特定问题的学习算法learn

    自下而上的非监督学习:从底层开始,一层一层的往顶层训练,分别得到各层参数。采用无标签数据分层训练各层参数(可以看作是特征学习的过程)。

    自上而下的监督学习:基于第一步的得到的各层参数进一步调整整个多层模型的参数,这一步是一个有监督的训练过程。

有监督学习和无监督学习

    有监督与无监督是机器学习方法的两大分类。有监督学习输入data既包含输入x,又包含x对应的y,即学习数据已经事先给出了正确答案。无监督学习则是只有输入x。无监督学习目前一般用于聚类(cluster)问题,即给定一批数据,根据这批数据的特点,将其分为多个类别,虽然我并不知道这每个类别所代表的具体含义。比如网络商城的商品推荐算法可能会根据用户的使用习惯,以往的浏览历史等,将用户分为多个类别,同一类别的用户在行为模式上可能比较相似。而事先并不知道最终会划分出多少个类别,每个类别有哪些共同特点。

深度学习的几种常用模型

    Auto Encoder(自动编码器)

    Sparse Coding (稀疏编码)

    Restricted Boltzmann Machine(限制玻尔兹曼机)

    Deep Belief Networks (深度信任网络)

    Convolutional Neural Networks (卷积神经网络)

    Recurrent Neural Networks(循环神经网络)

    Convolutional Neural Networks(CNN)

    卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

卷积神经网络原理图

    如图所示,输入图像(Input)通过和三个可训练的卷积核和可加偏置进行卷积,卷积后在C1层产生三个特征映射图(Feature map)然后,C1层的Feature map在经过子采样(Subsampling)后,加权值,加偏置,再通过一个Sigmoid函数得到三个S2层的特征映射图。


CNN的Convolution过程

    如图,原图像是5*5大小,有25个神经元,用一个3*3的卷积核对它进行卷积,得到了如右图所示的卷积后的Feature map。该特征图大小为3*3。


    假设一种卷积核只提取出图像的一种特征,所以一般要多个卷积核来提取不同的特征,所以每一层一般都会有多张Feature map。同一张Feature map上的神经元共用一个卷积核,这大大减少了网络参数的个数。

CNN的Pooling过程

    图像具有一种“静态性(stationarity)”的属性,可以对图像某一个区域上的特征取平均值 (或最大值)。这种聚合的操作就叫做池化 (pooling)。


    如果人们选择图像中的连续范围作为池化区域,并且只是池化相同(重复)的隐藏单元产生的特征,那么,这些池化单元就具有平移不变性(translation invariant)。这就意味着即使图像经历了一个小的平移之后,依然会产生相同的(池化的)特征。

CNN的优点

    如下图所示,如果我们有1000x1000像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有个连接,也就是10^12个权值参数。


    卷积神经网络避免了显式的特征取样,隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其他基于神经网络的分类器,通过结构重组和减少权值将特征提取功能融合进多层感知器。它可以直接处理灰度图片,能够直接用于处理基于图像的分类。

        卷积神经网络较一般神经网络在图像处理方面有如下优点:

             a)输入图像和网络的拓扑结构能很好的吻合;

            b)特征提取和模式分类同时进行,并同时在训练中产生;

            c)权重共享可以减少网络的训练参数,使神经网络结构变得更简单,适应性更强。

RNN网络结构

    RNN网络在某一个节点或某一时刻 t (以下统称为某一时刻 t ),输入网络的参数还有外界的信号 x(t) ,有 s(t)=f(s(t−1),x(t);θ)。

    在式子中有不变的参数 θ , x(t) 为 t 时刻的输入参数,通过保证 θ 使得整个网络可以进行权值共享,每一阶段通过参数将前一阶段的状态导入。

    在图中黄色框标注的部分为网络的一个计算图,也可以将其称作为一个细胞体。计算图其实质上是用来描述一个函数方法的模块,也等同于一个数据处理“ 盒子 ”。每一个计算图有输入和输出的数据,同时在某一时刻的计算图的数据对下一时刻计算图造成影响。x(t) 为 t 时刻的输入参数,h(t) 为隐藏层的激活函数,o(t) 为 t 时刻的输出参数, L(t) 为网络的损失值, y(t) 为目标函数。通过将网络展开,能够较好的看到对于一个序列 x(t) ,可以使用 RNN 循环神经网络进行处理,网络具有联想能力,可以将之前的信息加以保存,并在之后的循环中进行调用。


TensorFlow

    TensorFlow 是世界上最受欢迎的开源机器学习框架,它具有快速、灵活并适合产品级大规模应用等特点,让每个开发者和研究者都能方便地使用人工智能来解决多样化的挑战。

    TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。

    TensorFlow可被用于语音识别或图像识别等多项机器学习和深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以用。

TensorFlow Lite

    TensorFlow Lite是GoogleI/O 2017 大会上的其中一个重要宣布,有了TensorFlowLite,应用开发者可以在移动设备上部署人工智能。Google 表示 Lite版本TensorFlow是TensorFlowMobile 的一个延伸版本。尽管是一个轻量级版本,依然是在智能手机和嵌入式设备上部署深度学习的一大动作。此前,通过TensorFlow Mobile API,TensorFlow已经支持手机上的模型嵌入式部署。TensorFlow Lite应该被视为TensorFlow Mobile的升级版。

    TensorFlowLite 目前仍处于“积极开发”状态,目前仅有少量预训练AI模型面世,比如MobileNet、用于计算机视觉物体识别的Inception v3、用于自然语言处理的SmartReply,当然,TensorFlowLite上也可以部署用自己的数据集定制化训练的模型。

    TensorFlowLite可以与Android 8.1中发布的神经网络API完美配合,即便在没有硬件加速时也能调用CPU处理,确保模型在不同设备上的运行。而Android端版本演进的控制权是掌握在谷歌手中的,从长期看,TensorFlowLite会得到Android系统层面上的支持。



         AutoFitTextureView:一个自定义View;

        CameraActivity:整个app的入口activity,这个activity只做了一件事,就是加载了一个fragment; 

        Camera2BasicFragment: 入口activity中加载的fragment,其中实现了所有跟UI相关的代码;首先在onActivityCreated中,初始化了一个ImageClassifier对象,此类是整个demo的核心,用于加载模型并实现推理运算功能。然后开启了一个后台线程,在线程中反复地对从摄像头获取的图像进行分类操作。

        ImageClassifierQuantizedMobileNet是ImageClassifier的具体实现,定义了model数据和label的路径




你可能感兴趣的:(深度学习一探)