深度学习总结:深层神经网络(tensorflow实战)
tensorflow实战Google深度学习框架
人工智能、机器学习、深度学习关系图
人工智能:让计算机掌握人类看起来非常直观的常识,如自然语言理解、图像识别、语音识别等等
如何数字化表达现实世界中的实体 一旦解决数据表达和特征提取 人工智能任务解决了90%
机器学习:如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,称程序可以从经验中学习。
垃圾邮件分类问题 逻辑回归算法 每个特征与预测结果的相关 既依赖训练数据也依赖提取的特征
深度学习:机器学习的一个分支,除了可以学习特征和任务之间的关联,还能自动从简单特征中提取更加复杂的特征,并使用组合特征解决问题。
深度学习算法从图像像素特征中逐渐组合出线条、边、角、简单形状、复杂形状等更有效的复杂特征
深度学习历史:基于20世纪40年代神经网络算法
1958年感知机模型:首个根据样例数据学习特征权重模型
1969被证明感知机只能解决线性可分问题 陷入低潮
80年代末因分布式知识表达和神经网络反向传播算法而兴起,分布式知识表达使神经网络从宽度走向深度,而深层神经网络可解决线性不可分问题。反向传播算法大幅降低训练神经网络时间。
90年代计算能力发展,卷积神经网络、循环神经网络(LSTM)得到发展,但传统的机器学习也有突破性进展,逐步超越神经网络。例,手写体识别,SVM错误率降低到0.8%,超越神经网络。
原因:计算资源难以训练深层神经网络 数据量较小不能满足训练深层神经网络的需求
2010年左右 云计算、GPU、海量数据 迎来新高潮
深度学习应用领域:兴于图像识别,迅速推广到机器学习各领域。
计算机视觉、语音识别、自然语言处理、生物、化学、医学、游戏、搜索等
深度学习工具:
TensorFlow:谷歌开源的计算框架,很好实现各种深度学习算法。
开源社区活跃度高 谷歌全力支持
TensorFlow-通过计算图形式表述计算的编程系统
计算模型——计算图
Tensor张量:多维数组(功能上), 表明数据结构
Flow流:直观表达张量之间通过计算相互转化的过程
每一个节点都是一个运算,每一条边代表计算之间的依赖关系。
TensorFlow程序分为两个阶段:定义计算图中所有计算
执行计算
计算定义阶段如下图:
数据模型——张量:管理数据的形式
可理解为n维数组,但不直接采用数组形式,没有真正保存数字,保存是如何得到这些数字的计算过程。
张量中保存三个属性:名字、维度、类型
运行模型——会话:执行定义好的运算
前向传播算法:全连接网络结构
TensorFlow中矩阵乘法的实现如下:
神经网络参数与TensorFlow变量:
在TensorFlow中,变量(tf.Variable)作用:保存和更新神经网络中的参数,变量的声明函数是一个运算,运算的输出结果是一个张量
神经网络中给参数赋予初始值最为常见,一般使用随机数给TensorFlow中的变量初始化。
声明一个2*3矩阵变量,均值为0,标准差为2
变量初始值可以设置成随机数、常数或其他变量初始值计算得到
TensorFlow常量声明方法
通过变量实现神经网络的参数并实现前向传播的过程:
通过TensorFlow训练神经网络模型:
使用监督学习的方式来更合理地设置参数取值,设置神经网络参数的过程就是神经网络的训练过程,
使用监督学习的方式设置神经网络参数需要一个标注好的训练数据集。
监督学习最重要的思想是:在已知答案的标注数据集上,模型给出的预测结果要尽量接近真实的答案。通过调整神经网络的参数对训练数据进行拟合,可以使得模型对未知样本提供预测的能力。
神经网络优化算法,常用反向传播算法
反向传播算法实现迭代的过程。每次迭代开始,首先选取一小部分训练数据即batch,此batch样例会通过前向传播算法得到神经网络模型的预测结果。因训练数据有正确答案标注,可计算出当前预测答案与正确答案之间的差距。基于预测值与真实值间的差距,反向传播算法会更新神经网络参数的取值,使在batch上神经网络的预测结果和真实答案更加接近。
为避免生成大量常量,使得计算图过于庞大,TensorFlow提供placeholder机制将数据通过placeholder传入TensorFlow计算图。
损失函数与反向传播算法TensorFlow中定义:
Cross-entropy定义真实值和预测值之间的交叉熵,分类问题中常用的损失函数。
Train-step定义反向传播的优化方法。
训练神经网络解决二分类问题:
训练神经网络3个步骤:
- 定义神经网络的结构和前向传播的输出结果
- 定义损失函数以及选择反向传播优化的算法
- 生成会话并且在训练数据上反复运行反向传播优化算法