《深度学习原理与TensorFlow实践》学习笔记(一)
深度学习与TensorFlow简介
深度学习简介
深度学习的由来
- 人工智能(Artificial Intelligence)
- 包括专家系统、机器学习等
- 机器学习(Machine Learning)
- 有监督学习(Supervised Learning)
- 逻辑回归、SVM、神经网络 ……
- 深度学习(图像识别、文字理解等)
- 无监督学习(Unsupervised Learning)
- 聚类K-means、降维PCA ……
- 有监督学习(Supervised Learning)
- 机器学习算法的本质
- 计算样本输入与目标输出之间的关联性
- 如:邮件正文中有图片 or 链接 –> 是否为垃圾邮件
- 问题和局限性
- 依赖于特征提取和特征表示,强烈依赖人类的先验知识
- 特征工程费时费力,迁移能力弱
神经网络
- 通过简单非线性函数的组合,可以拟合任意复杂的函数
- 边的权重决定节点的组合方式,不同的组合方式得到不同的模型逻辑
- 模型训练:BackPropagation算法
- 通过输入训练数据不断矫正函数逻辑,使得模型的输出符合数据分布
- 代价函数:衡量函数输出与预期之间的差距
- playground.tensorflow.org
深度学习(Deep Learning or Feature Learning)
- 在神经网络基础上发展而来的表示学习方法,一种对特征的表示
- 主要是用深度神经网络(Deep Neural Network)作为学习模型
- 卷积神经网络(CNN)
- 循环神经网路(RNN)
- 生成对抗网络(GAN)
- 深度增强学习(DRL)
- 核心思想:构建分层的表示学习结构,使用一系列非线性变换操作,把原始数据中提取到的简单特征进行组合,得到更高层、更抽象的特征表示。例如文本理解,在浅层学习字词,中层学习句子,高层学习段落。
- 深度的优势
- 从原始数据中自动学习特征与特征的表示,只依赖非常少量的人工先验知识
- 便于特征迁移,适用于更复杂的实际问题
深度学习的“深”
- 怎么才算“深度”?
- 多层全连接神经网络?计算量大、过拟合……
- 串联的非线性变换的层数 or 不同的计算概念
- 关键:是否存在多级特征提取结构
- 为什么要“深度”?
- 更多层的非线性变换嵌套
- 在神经元(参数)数量相同的情况下,深层网络结构具有更大的容量,具有更庞大的表示空间
- 多层折叠
深度学习的发展趋势
- 数据集越来越大
- 1998年MNIST手写数字图片数据集:11MB, 7W+张28x28像素黑白图片
- CIFAR-10图像识别数据集:160MB,6W张32x32像素彩色图片
- 2012年ImageNet图像识别竞赛数据集:>155GB,1400W+张大尺寸彩色图片
- 算法模型越来越复杂
- 2012年第一代深度学习图像识别模型 AlexNet:8层神经元
- 2014年ImageNet竞赛冠军模型 VGG19:19层神经元
- 2015年ImageNet竞赛冠军模型 ResNet:100~1000层神经元
- 深度学习应用的四要素
- 海量的训练数据
- 灵活适用的模型
- 足够的运算能力(GPU)
- 足够对抗维度灾难(Curse of Dimensionality)的先验经验
TensorFlow简介
- Google第二代深度学习系统
- 2015年11月开源,2017年2月发布1.0.0版本
- Github 6w star
- 架构师 Jeff Dean
- 领导实现 MapReduce、BigTable、Spanner
- TF官网简介:TensorFlow 是一个基于数据流图(Data Flow Graph)的数值计算开源软件库,其灵活的架构设计可以让用户以单机或分布式的方式将计算部署在台式机、服务器,甚至是手机上。
TensorFlow的设计目标
- 具有灵活的表达能力,能够快速实现各种算法模型
- 高执行性能,具备分布式扩展性(GPU集群训练)
- 跨平台可移植性
- 实验可复现性
- 支持快速产品化,模型可随时部署
TensorFlow的核心概念
-
计算图(Dataflow Graph)
- 用有向图表示计算过程
- 边:Tensor(N维数组)
- 节点:算子Operations(数学计算)
- 示例:
-
Tensor
- 高维数组,维数描述为阶,数值(scalar)是0阶梯,向量(vector)是1阶,矩阵(matrix)是2阶,以此类推
- 支持多种数据类型
-
Operations
- 主要是由Eigen矩阵计算库完成
- 支持多种运算
-
Variable
- 用于存储模型的权值
- 每次正向计算完成之后,根据BP算法调整权值,代入下一轮计算
-
Session
- 构建计算图
- 多设备或分布式的节点布置
- Session.run()触发
- 编程结构
TensorFlow的系统架构及源码结构
- 分布式架构
-
数据并行分布式
- 数据并行是最主要的分布式方式
- 将训练数据分成多个 partition,每个 replica 只负责一个 partition,每个partition包括多个batch
- 在每个replica中计算多个batch的loss和BP,得到权值更新Delta,但此时权值并未被更新
- 权值更新Delta被上传到中心化的 Parameter Server 上,由 Parameter Server 统一更新(计算多个batch的delta均值)并分发(在replica中更新权值)
- 值得注意的是 Parameter Server 并不是 Master,仅负责参数分发,不负责统一调度
代码结构
参考资料:
1. 《深度学习原理与TensorFlow实践》电子工业出版社