实战Google深度学习框架
前言
从阿尔法狗肆虐围棋界,到人工智能创业大军的崛起,都预示着我们即将进入“AI+”时代。AI近期的爆发离不开高性能计算平台的发展和算法的进步,而深度学习则成为推动算法进步中的一个主力军。
第一章 深度学习简介
1.1人工智能,机器学习与深度学习
早期的人工智能系统只能成功应用于相对特定的环境,计算机需要了解的知识很容易被严格并且完整地定义。知识图库的出现使得计算机能更多的掌握开发环境下的知识。虽然使用知识图库可以让计算机很好地掌握人工定义的知识,但建立知识图库一方面需要花费大量的人力物力,令一方面通过知识图库方式明确定义的知识有限,不是所有的知识都可以明确地定义成计算机可以理解的固定格式。
逻辑回归算法的效果除了依赖于训练数据,也依赖于从数据中提取的特征。然而,对许多机器学习问题来说,特征提取不是一件简单的事情。深度学习通过自动地将简单的特征组合成更复杂的特征,并使用这些特征解决问题。
总的来说,人工智能,机器学习和深度学习是非常相关的几个领域。人工智能是一类非常广泛的问题,机器学习是解决这类问题的一个重要手段。深度学习则是机器学习的一个分支。在很多人工智能问题上,深度学习的方法突破了传统机器学习方法的瓶颈,推动了人工智能领域的发展。
1.2深度学习的发展历程和应用场景
早期的神经网络模型试图模仿大脑的学习机理,第二波神将网络研究因分布式知识表达和神经网络反向传播算法的提出而兴起,随着计算机性能的进一步提高,以及云计算,GPU的出现神经网络的发展迎来了新的高潮。
深度学习在图像识别,语音识别,音频处理,自然语言处理,机器人,生物信息处理,化学,电脑游戏,搜索引擎,网络广告投放,医学自动诊断和金融等各大领域均有应用。
第二章 TensorFlow环境搭建
2.1TensorFlow的主要依赖包
TensorFlow依赖的两个最主要的工具包——Protocol Buffer和Bazel。Protocot Buffer是一个处理结构化数据的工具,主要是将结构化信息持久化或者网络传输时将其序列化。Bazel是自动化构建工具。
2.2TensorFlow的安装
Docker是新一代的虚拟化技术,它可以将TensorFlow以及TensorFlow的所有依赖关系统一封装到Docker镜像中,从而大大简化了安装过程。当Docker安装完成之后,可以通过命令来启动一个TensorFlow容器。
第三章 TensorFlow入门
TensorFlow中最基本的单个概念—计算图,张量和会话。图3-1展示了通过
3.1TensorFlow计算模型计算图
计算图是TensorFlow的计算模型所有TensorFlow的程序都会通过计算图的形式表示。计算图上的每一个节点都是运算,而计算图上的边则表示了运算之间的数据传递关系。图3-1展示了通过TensorBoard画出来的两个向量相加样例的计算图。
图3-1在图3-1中,没有任何计算依赖add的结果,于是代表加法的节点add没有任何指向其他结点的边。TensorFlow的程序都可以通过计算图的形式来表示。
3.2TensorFlow的数据模型张量
在TensorFlow程序中,所有的数据都是通过张量的形式表示。张量本身并不存储任何数据。从功能的角度上,张量可以被简单理解为多维数组。张量使用主要可以总结为两大类:第一是对中间结果的引用,第二是在计算图构造完成后获得计算结果。通过张量,可以更好地组织TensorFlow程序。
3.3TensorFlow运行模式——会话
会话拥有并管理TensorFlow程序运行的所有资源,当所有计算完成之后需要关闭会话来帮助系统回收资源,否则可能出现资源泄露的问题。
第四章 深层神经网络
4.1深度学习与深层神经网络
深度学习是一类通过多层非线性变换对高复杂数据建模算法的集合。深层神经网络是实现“多层非线性变换”最常用的一种方法。可以认为深度学习就是深层神经网络的代名词。
4.2损失函数和神经网络优化
神经网络是一个优化问题,损失函数刻画了神经网络需要优化的目标。反向传播算法和梯度下降算法调整神经网络中参数的取值。梯度下降算法主要用于优化单个参数的取值,反向传播算法给出了一个高效的方式在所有参数上使用梯度下降算法,从而使神经网络模型在训练数据上的损失函数尽可能小。需要注意的是,梯度下降算法并不能保证被优化的函数达到全局最优解 。在训练神经网络时,参数的初始值会很大程度影响最后得到的结果。只有当损失函数为凸函数时,梯度下降算法才能保证达到全局最优解。除了不一定能达到全局最优外,梯度下降算法的另外一个问题就是计算时间太长。为了综合梯度下降算法和随机梯度下降算法的优缺点,在实际应用中一般采用这两个算法的折中——每次计算一小部分训练数据的损失函数。这一小部分数据被称之位一个batch。通过矩阵运算,每次在一个batch上优化神经网络的参数并不会比单个数据慢太多。另一方面,每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以收敛到的结果更加接近梯度下降的效果。 1p2
神经网络是一个优化问题,损失函数刻画了神经网络需要优化的目标。反向传播算法和梯度下降算法调整神经网络中参数的取值。梯度下降算法主要用于优化单个参数的取值,反向传播算法给出了一个高效的方式在所有参数上使用梯度下降算法,从而使神经网络模型在训练数据上的损失函数尽可能小。需要注意的是,梯度下降算法并不能保证被优化的函数达到全局最优解。在训练神经网络时,参数的初始值会很大程度影响最后得到的结果。只有当损失函数为凸函数时,梯度下降算法才能保证达到全局最优解。除了不一定能达到全局最优外,梯度下降算法的另外一个问题就是计算时间太长。为了综合梯度下降算法和随机梯度下降算法的优缺点,在实际应用中一般采用这两个算法的折中——每次计算一小部分训练数据的损失函数。这一小部分数据被称之位一个batch。通过矩阵运算,每次在一个batch上优化神经网络的参数并不会比单个数据慢太多。另一方面,每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以收敛到的结果更加接近梯度下降的效果。