[TOC]
# 第一章 深度学习介绍
## 人工智能
人工智能的概念很宽泛,现在根据人工智能的实力将它分为三大类。
(1) 弱人工智能(Artificial Narrow Intellignece,ANI)
弱人工智能是擅长于单个方面的人工智能。比如战胜世界围棋冠军的人工智能 Al-phaGo,它只会下围棋,如果你让他辨识以下猫和狗,它就不知道怎么做了。我们现在实现的几乎全是弱人工智能。
(2) 强人工智能(Artificial General Intelligence,AGI)
这是类似人类级别的人工智能。强人工智能是指在各方面都能喝人类比肩的人工智能。
(3) 超人工智能(Artificial Superintelligence,ASI)
牛津哲学家、知名人工智能思想家 Nick Bostrom 把超级智能定义为 “在几乎所有领域都比最聪明的人类大脑都聪明得多,包括科学创新、通识和社交技能”。
## 数据挖掘、机器学习与深度学习
**数据挖掘**
简单来说,数据挖掘就是在大型的数据库中发现有用的信息,并加以分析的过程,也就是人们所说的 KDD(knowledge discovery in database)。一个数据的处理过程,就是从输入数据开始,对数据进行预处理,包括特征选择、规范化、降低维数、数据提升等,然后进行数据的分析和挖掘,再经过处理,例如模式识别、可视化等,最后形成可用信息的全过程。
所以说数据挖掘只是一种概念,即从数据中挖掘到有意义的信息,从大量的数据中寻找数据之间的特性。
**机器学习**
机器学习算是实现人工智能的一种途径,它与数据挖掘类似,是一门多领域交叉学科,设计概率论、统计学、逼近论、计算复杂性理论等多门学科。相比于数据挖掘从大数据之间找相互特性而言,机器学习更注重算法的设计,让计算机能够自动地从数据中 “学习” 规律,并利用规律对未知数据进行预测。
机器学习可以分为以下五个大类:
(1) 监督学习:从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归与分类。
(2) 无监督学习:无监督学习与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有聚类等。
(3) 半监督学习:这是一种介于监督学习与无监督学习之间的方法。
(4) 迁移学习:将已经训练好的模型参数迁移到新的模型来帮助新模型训练数据集。
(5) 增强学习:通过观察周围环境来学习。每个动作都会对环境有影响,学习对象根据观察到的周围环境的反馈来判断。
<br/>
传统的机器学习算法有以下几种:线性回归模型、logistic 回归模型、k-临近算法、决策树、随机森林、支持向量机、人工神经网络、EM 算法、概率图模型等。
**深度学习**
深度学习的最初级版本是人工神经网络,这是机器学习的一个分支,其视图模拟人脑,通过更加复杂的结构自动提取数据特征。
推荐阅读:[深度学习的历史](https://www.jianshu.com/p/efda7876fe1c)
<br />
深度学习的结构
随着神经网络的发展,目前比较流行的网络结构分别有:深度神经网络(DNN)、卷积神经网络(CNN)、循环递归神经网络(RNN)、生成对抗网络(GAN)等。
# 第二章 深度学习框架
框架的出现是为了减少重复的代码,提高工作效率,下面介绍下目前流行的几个深度学习框架。
## Tensorflow
Google 开源的 TensorFlow,是一款使用 C++ 语言开发的开源数学计算软件,使用数据流图(Data Flow Graph)的形式进行计算。图中的节点代表数学运算、线条表示多维数据数组(tensor)之间的交互。
目前 TensorFlow 是全世界使用人数最多、社区最为庞大的一个框架,因为 Google 公司出品,其更新与维护也较为频繁,并且有着 Python 和 C++ 接口,教程也非常完善,可以说是深度学习界框架默认的老大。
其缺点在于语言过于底层,目前有很多基于 Tensorflow 的第三方抽象库将 Tensorflow 的函数进行封装,使其变得简洁,比较有名的有 Keras,Tflearn,tfslim,TensorLayer。
## Caffe
Caffe 全称是 Convolutional Architecture for Fast Feature Embedding,其对于卷积网络的支持特别好,是用 C++ 写的,没有提供 Python 接口,只提供了 C++ 接口。
Caffe 之所以流行,是因为之前很多 ImageNet 比赛里面使用的网络都是用 Caffe 写的,所以如果您想使用这些比赛里面的网络模型就只能使用 Caffe,这也就导致了很多人直接转到 Caffe 这个框架下。
其缺点是不够灵活,同时内存占用高,只提供了 C++ 接口。
## Torch
Torch 是一个有大量机器学习算法支持的科学计算框架。Torch 的特点在于特别灵活,但是另外一个特殊之处是其采用 Lua 作为编程语言,这就增加了学习使用 Torch 的成本。PyTorch 的前身就是 Torch,PyTorch 的低层和 Torch 框架一样,但是使用 Python 重写了很多内容,不仅更加灵活,支持动态图,也提供了 Python 接口。
## 为何使用 PyTorch
# 第三章 多层全连接神经网络
## PyTorch 基础
### Tensor(张量)
PyTorch 里面处理的最基本的操作对象就是 Tensor,Tensor 是张量的英文,表示一个多维的矩阵,比如零维就是一个点,一维就是向量,二维就是一般的矩阵,多维就相当于一个多维的数组,这和 numpy 是对应的,而且 PyTorch 的 Tensor 可以和 numpy 的 ndarray 相互转换,唯一不同的是 PyTorch 可以在 GPU 上运行,而 numpy 的 ndarray 只能在 CPU 上运行。
常用的不同数据类型的 Tensor 如下:
- torch.FloatTensor 32位浮点型
- torch.DoubleTensor 64位浮点型
- torch.ShortTensor 16位整型
- torch.IntTensor 32位整型
- torch.LongTensor 64位整型