白话深度学习-基础篇

收获

「白话深度学习与TensorFlow」的基础篇主要内容为“机器学习是什么”、“深度学习是什么”以及“TensorFlow”框架特性与安装,通过阅读基础篇的内容大致了解了以下几个部分:

  • 机器学习与深度学习的概念
  • 机器学习与深度学习的区别
  • 机器学习的常用方法
  • 安装TensorFlow框架

第一章

机器学习是什么

机器学习是人类定义一定的计算机算法,让计算机根据输入的样本和一些人类的干预来总结并归纳其特征和特点,并用这些特征和特点与一定的学习目标形成映射关系,进而自动化地做出相应反应的过程。

机器学习的目的

人类学习的目的是掌握知识、掌握能力、掌握技巧然后最终能够进行比较复杂的或者高要求的工作。相似的机器学习的最终目的在于让计算机能够独立或者半独立的进行相对复杂或者高要求的工作。

机器学习与非机器学习的区别在于过去的计算机在程序给定的情况下,其行为逻辑就已经确定了,而机器学习则需要通过样本进行统计归纳然后才会确定其行为逻辑。所以通过机器学习可以进行相片识别信息、新闻的自动分类等工作。因为计算机事先是不会知道需要提取的信息在给定的相片中所具备的特征,只有通过机器学习不断的统计归纳才能得出适合识别大多数相片中所需提取的信息的模型。

机器学习的分类

从学习的种类来说,机器学习一般分为两种:有监督学习和无监督学习
有监督学习是指先对给予的样本进行总结得出分类规则,之后根据这个规则进行分类操作,对于有监督学习而言基本分为三个过程:

  • 训练 训练的过程主要是拿一定具有标签的样本进行统计和归纳总结出一个模型
  • 验证 验证的过程主要是拿一些未分类的样本对这个模型进行验证,判断其是否具有泛化性(generalization)。
  • 测试 测试则是用一定量的样本判断模型的识别能力

无监督学习则是在获得训练的向量数据后在没有标签的情况下尝试找出其内部蕴含关系的一种挖掘工作。

有监督学习和无监督学习的区别在于前者的输入数据具有标签,而后者的输入数据没有标签

机器学习的常用方法

聚类

聚类是指将物理对象或抽象对象的集合分组为由彼此类似的对象组成多个类的分析过程

特征形态的相同或近似的划在一个概念下,特征形态不同的划在不同概念下

聚类常用的算法有 K-Means、DBSCAN 等几种,其基本思路都是利用每个向量之间的距离,从远近判断是否从属于同一类别。

回归

回归是一个「由果索因」的过程,是一种归纳的思想,当我们看到大量的事实所呈现的样态去推断原因或客观蕴含的关系是如何的。 回归的训练过程一般如下:

  • 根据观察和归纳样本(训练集)的结果推断向量和最终的函数值呈现如下映射关系 \[ y=f(x)=wx+b \] 这里的 \(w\)\(x\) 分别是 \(1*n\)\(n*1\) 的矩阵,也就是说接下来的问题是求解 w 和 b

  • 代入样本值(验证集)得到误差和 \(Loss\) \[ Loss=\sum_{i=1}^n|wx_i+b-y_i| \] 这里的 \(wx_i+b\) 是根据第一步推断关系计算出的值,\(y_i\) 是实际观测到的值,将所有测试的误差相加之后即可得到总的误差,\(Loss\) 越小则代表映射关系越精确

这里以线性回归为例,至于非线性回归过程是一致的,只是映射关系和 \(Loss\) 函数有些不同。

分类

分类这个概念一直都很熟悉,具体到机器学习当中则是利用我们编写的分类器对样本进行分类,而判断这种分类器是否合理的原则在于召回率精确率这两个指标

  • 召回率是检索出的相关样本和样本库中所有的相关样本的比率,衡量的是分类器的查全率
  • 精确率是检索出的相关样本数与检索出样本总数的比率,衡量的是分类器的查准率

分类的训练过程和回归的训练过程基本一致:

  1. 输入样本和分类标签
  2. 建立映射假说的某个\(y=f(x)\)
  3. 求解出全局的损失函数\(Loss\)和待定系数\(w\)的映射关系,\(Loss=g(w)\)
  4. 通过迭代优化逐步降低\(Loss\),最终找到一个\(w\)能使召回率和精确率满足当前场景需要

第二章

深度学习是什么

深度学习是指基于深度神经网络「deep neural networks」的学习,也就是深度人工神经网络所进行的学习过程。

深度神经网络的组成

深度神经网络由多个神经元组成,而神经元是人类受到生物神经细胞结构启发而研究出的一种算法体系,一个完整的神经元由线性模型激励函数两部分首尾相接组成。基本模型如下:其中\(wx+b\)是线性模型,\(\int\)表示激励函数

常见的激励函数有如下几种:

  1. Sigmoid 函数 \[ f(x)={1 \over 1+e^{-(wx+b)}} \]

  2. Tanh 函数 \[ tanh(x)={e^x-e^{-x}\over e^x+e^{-x}} \]

  3. ReLu 函数 \[ y=max(x,0) \]

  4. Linear 函数 \[ f(x)=x \]

对于神经网络而言主要分为三层:输入层 (input layer)、隐藏层 (hidden layer)、输出层 (output layer)

输入层直接接收输入的向量,不对数据进行任何处理 隐藏层可以有一层或者多层 输出层是最后一层,用于输出整个网络处理的值,这个值可能是一个分类向量值,也可能是一个类似线性回归产生的连续的值

深度学习和机器学习的区别

深度学习是机器学习的子集,当深度学习和传统的机器学习的区别在于,传统的机器学习通常是需要人提前进行特征提取,把提取过的特征向量化后再丢给模型去训练,这里人要做相当的前置工作。而深度学习通常可以采用 End-to-End 的学习方式,输入的内容只需要做很少的一些归一化 (normalization)、白化 (whitening) 等处理就可以丢给模型去训练,通常不需要人做特征提取的工作。

第三章

安装 TensorFlow 框架

本次安装环境是 macos、Python3

  1. 安装 Anaconda 在 Anaconda 官网 下载 Python3.6 版本 pkg 文件进行安装

  2. 建立 TensorFlow 运行环境

    1
    2
    conda create -n tensorflow python=3.6
    source activate tensorflow
  3. 安装 TensorFlow

    1
    pip3 install tensorflow
  4. 测试 TensorFlow

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> import tensorflow as tf
    >>> hello = tf.constant('Hello,TensorFlow!')
    >>> sess = tf.Session()
    >>> print(sess.run(hello))
    b'Hello,TensorFlow!'

    >>> a = tf.constant(10)
    >>> b = tf.constant(32)
    >>> print(sess.run(a + b))
    42