读书笔记:python深度学习

前言:
这就是用写笔记的方式鞭笞自己学习,顺便梳理自己的思路,也尽量整理得有逻辑一点。标记了*的是有代码可以参考的部分


本书框架:

第一部分:深度学习基础

  • 深度学习简介
  • 数学基础
  • 神经网络入门
  • 机器学习基础

第二部分:深度学习实践

  • 计算机视觉
  • 文本与序列
  • 高级深度学习实践
  • 生成式深度学习
  • 总结

第一部分:深度学习基础

1. 简介:

1.1 人工智能,机器学习,深度学习:

大概介绍了3中定义的差别,和神经网络的几个参数和专有名词,适合刚入门的孩子仔细看看。

1.2 机器学习简史:

  • 概率建模:朴素贝叶斯方法/逻辑回归
  • 早期神经网络
  • 核方法:svm(数据映射到高纬度,映射到高平面,且使所有点之间间距最大,其中的核心为核函数(人为选择):计算点之间的距离,只有分割超平面是学习得到。缺点:适用于小数量级
  • 决策树:随机森林,梯度提升(gradient boosting machine)

结论:多混迹kaggle

1.3 why now:

  • 硬件
  • 数据
  • 算法改进

2. 数学基础:

2.1 神经网络结构*

神经网络主要参数:

  • 损失函数:
  • 优化器:
  • 在训练和测试中需要监控的指标:

2.2 数据表示:

张量的特殊属性:

  • 轴的个数
  • 形状
  • 数据类型

2.3 张量运算:

  • 逐元素运算
  • 广播:较小的张量会被广播(broadcast),以匹配较大张量的形状。
    • (1) 向较小的张量添加轴(叫作广播轴),使其ndim与较大的张量相同。
    • (2) 将较小的张量沿着新轴重复,使其形状与较大的张量相同。
  • 点积
  • 变形(reshape)

深度学习的目的:为复杂的、高度折叠的数据流形找到简洁的表示。 :它将复杂的几何变换逐步分解 为一长串基本的几何变换,这与人类展开纸球所采取的策略大致相同。深度网络的每一层都通 过变换使数据解开一点点——许多层堆叠在一起,可以实现非常复杂的解开过程

2.4 梯度(优化):

  • mini-batch stochastic gradient descent 梯度优化:
  • 动量方法(解决梯度问题的难点:收敛速度和局部极小点): w 不仅要考虑当前的梯度值,还要考虑上一次的参数更新

总结:

  • 学习是指找到一组模型参数,使得在给定的训练数据样本和对应目标值上的损失函数最 小化。
  • 学习的过程:随机选取包含数据样本及其目标值的批量,并计算批量损失相对于网络参 数的梯度。随后将网络参数沿着梯度的反方向稍稍移动(移动距离由学习率指定)。
  • 整个学习过程之所以能够实现,是因为神经网络是一系列可微分的张量运算,因此可以 利用求导的链式法则来得到梯度函数,这个函数将当前参数和当前数据批量映射为一个 梯度值。
  • 后续几章你会经常遇到两个关键的概念:损失和优化器。将数据输入网络之前,你需要 先定义这二者。
  • 损失是在训练过程中需要最小化的量,因此,它应该能够衡量当前任务是否已成功解决。
  • 优化器是使用损失梯度更新参数的具体方式,比如 RMSProp 优化器、带动量的随机梯度下降(SGD)等。

3. 神经网络入门

3.1 神经网络结构简介:

  • 二分类问题,你可以使用二元交叉熵(binary crossentropy)损 失函数
  • 对于多分类问题,可以用分类交叉熵(categorical crossentropy)损失函数
  • 对于回归 问题,可以用均方误差(mean-squared error)损失函数
  • 对于序列学习问题,可以用联结主义 时序分类(CTC,connectionist temporal classification)损失函数

3.2 keras:

Keras 有三个后端实现:TensorFlow 后端、 Theano 后端和微软认知工具包(CNTK,Microsoft cognitive toolkit)后端,可以实现随时切换。

keras框架.png

3.3 如何运行:

3.4 二分类问题*

  • 通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。单词序
    列可以编码为二进制向量,但也有其他编码方式。
  • 带有 relu 激活的 Dense 层堆叠,可以解决很多种问题(包括情感分类),你可能会经常用到这种模型。
  • 对于二分类问题(两个输出类别),网络的最后一层应该是只有一个单元并使用 sigmoid激活的 Dense 层,网络输出应该是 0~1 范围内的标量,表示概率值。
  • 对于二分类问题的 sigmoid 标量输出,你应该使用 binary_crossentropy 损失函数。
  • 无论你的问题是什么,rmsprop 优化器通常都是足够好的选择。这一点你无须担心。
  • 随着神经网络在训练数据上的表现越来越好,模型最终会过拟合,并在前所未见的数据上得到越来越差的结果。一定要一直监控模型在训练集之外的数据上的性能。

3.5 多分类问题*

最后的输出变成了46


image.png
  • 网络的最后一层是大小为 46 的 Dense 层。这意味着,对于每个输入样本,网络都会输出一个 46 维向量。这个向量的每个元素(即每个维度)代表不同的输出类别。
  • 最后一层使用了 softmax 激活。你在 MNIST 例子中见过这种用法。网络将输出在 46个不同输出类别上的概率分布——对于每一个输入样本,网络都会输出一个 46 维向量,其中 output[i] 是样本属于第 i 个类别的概率。46 个概率的总和为 1。

损失 函数 categorical_crossentropy,标签应该遵循分类编码。(分类label)
对于整数标签,你应该使用 sparse_categorical_crossentropy。(整数?)

中间维度需要足够大:信息瓶颈(中间信息压缩太过于明显)

总结:

  • 如果要对 N 个类别的数据点进行分类,网络的最后一层应该是大小为 N 的 Dense 层。
  • 对于单标签、多分类问题,网络的最后一层应该使用 softmax 激活,这样可以输出在 N个输出类别上的概率分布。
  • 这种问题的损失函数几乎总是应该使用分类交叉熵。它将网络输出的概率分布与目标的真实分布之间的距离最小化。
  • 处理多分类问题的标签有两种方法。
    • 通过分类编码(也叫 one-hot 编码)对标签进行编码,然后使用 categorical_ crossentropy 作为损失函数。
    • 将标签编码为整数,然后使用 sparse_categorical_crossentropy 损失函数。
  • 如果你需要将数据划分到许多类别中,应该避免使用太小的中间层,以免在网络中造成信息瓶颈。

3.6 回归问题*

构建回归问题的时候,最后一层可以不要激活函数。

  • 回归问题使用的损失函数与分类问题不同。回归常用的损失函数是均方误差(MSE)。
  • 同样,回归问题使用的评估指标也与分类问题不同。显而易见,精度的概念不适用于回归问题。常见的回归指标是平均绝对误差(MAE)。
  • 如果输入数据的特征具有不同的取值范围,应该先进行预处理,对每个特征单独进行缩放。
  • 如果可用的数据很少,使用 K 折验证可以可靠地评估模型。
  • 如果可用的训练数据很少,最好使用隐藏层较少(通常只有一到两个)的小型网络,以避免严重的过拟合。

4. 机器学习基础

4.1 四个主要分支:

  • 监督学习:序列生成,语法树预测,目标监测,图像分割
  • 无监督学习:降维/聚类
  • 自监督学习:时序监督学习,前面的预测之后的
  • 强化学习:暂时停留于理论

4.2 评估:

注意:

  • 基于模型在验证集上的性能来调节模型配置,会很快导致模型在验 证集上过拟合,即使你并没有在验证集上直接训练模型也会如此(信息泄漏)
  • 如果是标签类特征,需要按层抽样
  • 符合时间顺序,用过去预测未来
  • 重复数据:保证训练集与测试集的独立性

重复K折验证(iterated K-fold validation with shuffling):
具体做法是多次使用K折验证,在每次将数据划分为K个分区之前都先将数据打乱。最终分数是每次 K 折验证分数的平均值。注意,这种方法一共要训练和评估 P×K 个模型(P 是重复次数),计算代价很大

4.3 数据预处理,特征工程:

神经网络的数据预处理:

  • 向量化
  • 标准化:取值较小且在同个区间范围
  • 缺失值:设置成0是很安全的
  • 特征工程:用更简单的方式表述问题,从而使问题变得更容易

特征工程对神经网络的提升不大?

  • 良好的特征仍然可以让你用更少的资源更优雅地解决问题。例如,使用卷积神经网络来 读取钟面上的时间是非常可笑的。
  • 良好的特征可以让你用更少的数据解决问题

4.4 过拟合与欠拟合*

模型好坏的评价之一:

  • 优化(optimization)是指调节模型以在训练数据上得到最佳性能
  • 泛化(generalization)是指训练好的模型在 前所未见的数据上的性能好坏

过拟合:
训练数据上迭代一定次数之后,泛化不再提高,测试集测试时先是不变,然后开始变差, 即模型开始过拟合

降低过拟合的方法:正则化

  • 获取更多数据
  • 减少网络大小:
    • 模型中可学习参数的个数通常被称为模型的容量 (capacity),模型越大容量越大
    • 工作流程:前期选择简单模型,然后逐渐增加层数,优化
  • 权重正则化
  • dropout方法

4.5 机器学习的通用工作流程:

  • 定义问题与要训练的数据。收集这些数据,有需要的话用标签来标注数据。注意非平稳的周期性数据,需要把时间维度作为输入。
  • 选择衡量问题成功的指标。你要在验证数据上监控哪些指标?
  • 确定评估方法:留出验证? K 折验证?你应该将哪一部分数据用于验证?
  • 开发第一个比基准更好的模型,即一个具有统计功效的模型。
  • 开发过拟合的模型。
  • 基于模型在验证数据上的性能来进行模型正则化与调节超参数。
  • 一旦开发出令人满意的模型配置,你就可以在所有可用数据(训练数据 + 验证数据)上训 练最终的生产模型

第二部分:深度学习实践

5. 计算机视觉

5.1 卷积神经网络简介

5.2 在小型数据集上从头开始训练一个 卷积神经网络

5.3 使用预训练的卷积神经网络

5.4 卷积神经网络的可视化

6. 文本与序列

7. 高级深度学习实践

8.生成式深度学习

9.总结

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容