深度学习与 TensorFlow —— 基础篇

前言

随着谷歌的 AlphaGo 以 4:1 的悬殊比分轻松击败韩国著名九段围棋大师李世石,人工智能(AI)走进了人们的视野,这个沉寂了近 30 年的名词 —— 人工智能,异军突起,正在逐渐在每个细节上改变我们的生产能力,改变我们的生活。

到现在,靠机器人来扫地,靠刷脸来取钱,靠自动驾驶来周游世界已然不是什么科幻小说中的内容了,这些事情已经真实的发生在我们的身边。

2017 年 7 月 8 日,国务院发布文件「国务院关于印发新一代人工智能发展规划的通知」,为的便是抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国。

同年 11 月,科技部召开新一代人工智能发展规划暨重大科技项目启动会,标志着新一代人工智能发展规划和重大科技项目进入全面启动实施阶段。百度,阿里,腾讯和科大讯飞成为了国家首批新一代人工智能开放创新平台。相信大家也是知道这四家公司的实力。

以上是国内的情况,国外更不用说,谷歌除了 AlphaGo 以外,更有 Google Driverless Car 研发的的 Google 自动驾驶汽车,至今已经测试驾驶了 48 万公里。

可以说,这些事情都在鼓舞着我们这些对未来世界充满渴望的人投入更多的精力去研究 AI 带来的新惊喜,而人工智能这一领域中最为核心的内容之一就是深度学习。深度学习现在在全世界范围内都有这众多的专业工作者和业余爱好者在进行着研究,并且每个月都有不少新的落地产品问世。应该说,深度学习是目前世界上最热门的研究领域之一,而且也是未来几十年热门的研究方向之一。

但是,不得不说深度学习由于其本身的复杂性,是的很多有着浓厚兴趣的爱好者望而却步。然而 「白话深度学习与 TensorFlow」是一本适合于零基础的初学者,书中语言通俗易懂,通过聊天和讲故事的方法,凭借高中以上水平的数学知识把大家一步一步地带入深度学习的领域。只要大家在阅读这本书的时候保持一点点耐心,即便没有高等数学知识的朋友,通过努力也一样可以基本掌握深度学习的应用技巧。所以,对人工智能感兴趣,这本书是正确的选择。

机器学习

机器学习是深度学习当中的一门学科。书中讲述机器学习就类似人类学习一样,让机器通过学习,掌握一些比较复杂或高要求的工作,来代替由人类做起来比较花时间的事情。

机器学习是历史的不断进化的产物,人类有别于动物的区别,在于人类会使用工具提高效率,随着计算机的计算能力越来越强,机器也在一定程度上参与了智能化的工作。

之所以机器能智能化,其本质的原因是有算法在支撑。书中举例一个例子:把邮件分类城普遍邮件和垃圾邮件。

机器是如何学会分类邮件呢?这几需要几个要素:

  1. 样本
  2. 模型
  3. 验证

其中:样本分为训练样本 —— 提供机器学习,和验证样本 —— 用于验证机器学习成果;模型我理解的就是算法。

这种训练的过程称为有监督学习。

既然有有监督学习,那一定有无监督学习了?当然要,后文提到了无监督学习是一种不需要人类干预,机器对样本进行识别,自己给样本分类,人类就等着收结果就好了,这是一种更高级的训练过程了。

聚类

聚类用具体事物来讲就是分类,是一种典型的 “无监督学习”,聚类的行为根源来源于人类。人类在认知事物的时候,一直都拥有容量性的问题,于是,人类开始对各种事物进行分类,这样有一个好处,就是我们可以将事物的特征以文字,或其他输出形式向所有人展示,当我们在看到类似的事物的时候,就可以辨别出这一事物是哪一类,这一类事物有哪些特征。

我们想要的就是让机器为我们人类把事物进行分类,把人类从这一过程当中解放出来。这其中提到了两个算法:

  1. K-Means
  2. DBSCAN

其基本思路用白话说就是是将事物抽象成数字,机器会对相近的数字归类。

回归

回归就是 ”有果索因“ 的过程,看完这一节以后我觉得这很像哲学中讲的,从现象到本质的过程。

在机器学习领域,最常用的回归有两种:

  1. 线性回归
  2. 非线性回归

不管是哪种回归,总结起来都是讲现实中的事物抽取成数字,从大量数据中抽取对应的函数,验证函数的准确性。

分类

这一节中提到了两个比较重要的概念:

  1. 召回率
  2. 精确率

其中,召回率是指在训练开始前的规定的数据中,判断出多少个正确答案,如:有 200 只猫,正确了 150 只,召回率为 150 / 200 = 75%,召回率可以理解为结果可用程度;精确率值得是指在训练结束后的数据中,判断出多少正确答案,如:结果判断出 200 只狗,其中只有 100 只是正确的,然而在训练样本中,只有 150 只狗的图片,那么,精确率为 100 ÷ 200 = 50%。

深度学习

神经网络

在真正谈论深度学习(deep learning)之前,必须先说一下神经网络,或者称人工神经网络(artificial neural network, ANN)。神经网络其实就是一种算法体系。它的产生受益于生物神经细胞结构。

人的神经细胞由树突,细胞体,轴突,髓鞘和突触组成。它们相互协作,通过化学信号传递信息,人类虽然对化学分子具体承载的信息仍旧是一知半解,但却从中受到了一些启发,希望能设计出类似的网状链接的处理单元,让它们彼此之间通过某方法互相刺激、协同完成信息处理。这种感知器模型(perceptron)和现在最新应用框架中的神经网络单元形式上是非常相近的。

要想了解神经网络,首先要看一下神经网络最基本的组成单元 —— 神经元。

神经元

我们现在使用的神经元通常有两个部分,一是「线性模型」,另一个是「激励函数」。

最简单的神经元函数表达式和一个普通函数很相近,比如:
$$
f(x) = x +1
$$
这就是一个最简单的神经元,当 \(x = 1 \) 时,输出 \(f(x) = 2 \)。

上面的函数是神经元当中,\(x\) 只是的一个一维向量,实际的神经元 x 会是多维的向量, 比如我们的函数变成了一个线性函数
$$
f(x) = wx +b
$$
其中 \(x\) 是一个 \(1 \times n\) 的矩阵,而 \(w\) 是一个 \(n \times 1\) 的权重矩阵,\(b\) 是偏置项。为了搞懂这些变量是怎么协作的,我们举个具体的例子。

假设,\(n\) 是 5,那么 x 是一个 \(1 \times 5\) 的输入矩阵,例如:
$$
\left(\begin{matrix}
1 \\
50 \\
27 \\
19 \\
-55 \\
\end{matrix}\right)
$$
这样就是一个完整的特征向量 \(x\) 了,它表示了对一个样本的描述,这个描述是个多维度的描述,具体每个维度指代的含义在不同场景下对应不同解释。比如这个矩阵可能表示的是一个样本客户的个人财务情况,分别表示:
$$
\left(\begin{matrix}
性别\\
年龄\\
年收入\\
用户忠诚度指数\\
负债\
\end{matrix}
\right)
$$
\(w\) 是一个 \(n \times 1\) 的矩阵,它表示的是一个权重的概念,例如:
$$
\left[\begin{matrix}0.3 &0.8 &1.5 &1.2 &0.5\end{matrix}\right]
$$
他们分别表示:
$$
[\begin{matrix}性别权重 &年龄权重 &年收入权重 &用户忠诚度指数权重 &负债权重]\end{matrix}
$$
\(b\) 是一个实数值,在这里我们假设 \(b\) = 0,即 \(f(x) = wx + b\) 就变成了:
$$
f(x) = 1\times0.3\ +\ 50\times0.8\ +\ 27\times1.5\ +\ 19\times1.2\ +\ (-55)\times0.5\ + \ 0 = 44.7
$$
在前面所说的回归的部分,有个 \(Loss\) 的函数:
$$
\begin{aligned}Loss = \sum_{i = 1}^{n}|wx_{i}+b-y_{i}|\end{aligned}
$$
来描述拟合与真实观测的差异之和,我们称之为残差。这个 \(Loss\) 要尽可能的小。

激励函数

激励函数(或激活函数)用来加入一些非线性的因素。

在百度(或谷歌)网站搜索「激励函数」,可以看出它可谓是五花八门,其中通常使用的激励函数有:

  • Sigmoid 函数
  • Tanh 函数
  • ReLU 函数
  • Linear 函数

神经网络

上面说了一大堆,下面看看神经网络的结构吧。在一个神经网络中通常分为这样继承:输入层 (input layer)、隐藏层 (hidden layer,也叫隐含层)、输出层 (output layer),下图是一个比较简单的神经网络结构了。

神经网络结构图

所以有个叫法很形象,神经网络 —— 由神经元(神经节点)所组织的网络。

深度神经网络

所谓深度学习实际指的是基于深度神经网络(deep neural networks,DNN)的学习,也就是深度人工神经网络所进行的学习过程,或称作 Deep Learning。这个 Deep 指的是神经网络的深度(层数多)。具体多少层算多,其实也没有一个说法,我们姑且将超过 2 层的 —— 也就是 1 个隐藏层和 1 个输出层以上深度的都叫做深度神经网络。

TensorFlow 框架特性与安装

随着深度学习技术的逐渐兴起,世界范围内支持深度学习的框架也相继登场。推动一个开源项目发展的一个至关重要的一点在于拥有一个火热的社区,谷歌在去年的谷歌开发者大会上,花了很大的篇幅去介绍自家重要的开源项目 —— TensorFlow,所以这个框架的火热程度可想而知,作为深度学习框架在合适不过了。

简介

TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库

与其他框架对比

TensorFlow 与其他框架相比,它不仅便携,高效,可扩展,还能在不同计算机上运行:小到智能手机,大到计算机集群;它是一个款轻量级的软件,可以立即生成你的训练模型,也能重新实现它;TensorFlow 有强大的社区、企业支持,因此它广泛用于从个人到企业、从初创公司到大公司等不同群体。

TensorFlow 还有一些其他特点,这些特点不见的都是独一无二的:

  • 多环境与集群支持
  • TensorBoard —— 看得见的训练
  • TensorFlow Serving —— 模型

安装 TensorFlow

你需要准备以下软件

笔者当前环境:

  • 操作系统:Mac OS X 10.13.2
  • pip 版本:9.0.1
  • python 版本:3.6

准备好上述软件以后,接下来是安装 TensorFlow

1
$ pip3 install tensorflow

执行完上面的命令,TensorFlow 就安装好了。

之后,写一段 Hello World 程序:

1
$ python
1
2
3
4
5
6
7
8
9
10
11
12
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!' # 这是 python 中 bytes 类型的数据
>>> print(sess.run(hello).decode())
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sees.run(a + b))
42
>>>

如果你运行的结果和我的结果出入不大,那么恭喜你🎉,说明你的 TensorFlow 安装成功了。

坚持原创技术分享,您的支持将鼓励我继续创作!