【花书阅读笔记】第五章到第六章
- 第五章 机器学习基础
- 5.1 学习算法
- 任务T
- 性能度量P
- 经验E
- 设计矩阵
- 5.1.4 线性回归
- 表明系统
- 明确任务
- 定义度量
- 正规方程
- 5.2 容量、过拟合和欠拟合
- 决定机器学习算法是否好的因素
- 量化模型容量的方法:VapnikChervonenkis 维度
- 非参数模型的一个实例:最邻近回归
- 贝叶斯误差
- 5.2.1 没有免费的午餐定理
- 5.2.2 正则化
- 5.3 超参数和验证集
- 5.3.1交叉验证(见西瓜书笔记)
- 5.4 估计 偏差和方差
- 点估计
- 偏差
- 方差和标准误差
- 权衡偏值和方差以最小化均方误差
- 一致性
- 5.5 最大似然估计
- 条件对数似然和均方误差
- 最大似然估计的性质
- 5.6 贝叶斯统计
- 5.7 监督学习算法
- 5.7.1 概率监督学习
- 5.7.2 支持向量机
- 5.7.3 其他简单的监督学习算法
- 5.8 无监督学习算法
- 5.8.1 PCA主成分分析算法
- 5.8.2 K-均值聚类
- 5.9 随机梯度下降SGD
- 5.10 构建机器学习算法
- 5.11 深度学习的动机和挑战
- 5.11.1 维数灾难
- 5.11.2 局部不变性和平滑正则化
- 5.11.3 流行学习
- 流形
- 流形学习算法
- 第六章 深度前馈网络
- 6.1 实例:学习 XOR(异或逻辑)
- 损失函数
- 设计模型
- 6.2 基于梯度的学习
- 6.2.1 代价函数
- 6.2.1.1 用最大似然学习条件分布
- 6.2.1.2 学习条件统计量
- 6.2.2 输出单元
- 6.2.2.1 用于高斯输出分布的线性单元
- 6.2.2.2 用于 Bernoulli (伯努利)输出分布的 sigmoid 单元
- 6.2.2.3 用于 Multinoulli 输出分布的 softmax 单元
- 6.2.2.4 其他的输出类型
- 6.3 隐藏单元
- 6.3.1 整流线性单元及其扩展
- 6.3.2 logistic sigmoid与双曲正切函数
- 6.3.3 其他隐藏单元
- 6.4 结构设计
- 6.4.1 通用近似性质和深度
- 6.4.2 其他结构上的考虑
- 6.5 反向传播和其他的微分算法
- 6.5.1 计算图
- 6.5.2 微积分中的链式法则(略)
- 6.5.3 递归地使用链式法则来实现 BP
- 6.5.4 全连接 MLP(多层感知机) 中 BP 的计算
- 6.5.5 符号到符号的导数
- 6.5.6 一般化的 BP
- 6.5.7 实例:用于 MLP 训练的 BP
- 6.5.8 复杂化
- 6.5.9 深度学习界以外的微分
- 6.5.10 高阶微分
- 6.6 历史小记
- 碎碎念
第五章 机器学习基础
5.1 学习算法
学习的定义:对于某类任务 T 和性能度量P,一个计算机程序被认为可以从经验 E 中学习是指,通过经验 E 改进后,它在任务 T 上由性能度量 P 衡量的性能有所提升。
任务T
通常机器学习任务定义为机器学习系统该如何处理样本,样本是指我
们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的特征 (feature)
的集合。我们通常会将样本表示成一个向量 x ∈ Rn,其中向量的每一个元素 xi 是一
个特征。例如,一张图片的特征通常是指这张图片的像素值。
常见机器学习任务如下:
- 分类任务
- 输入缺失分类(此时需要学习一组函数,而不是单个函数)。
- 回归:计算机程序会对给定输入预测数值。
- 转录:机器学习系统观测一些相对非结构化表示的数据,并转录信息为离散的文本形式。
- 机器翻译任务:输入是一种语言的符号序列,计算机程序必须将其转化成另一种语言的符号序列。这通常适用于自然语言
- 结构化输出:结构化输出任务的输出是向量或者其他包含多个值的数据结构,
并且构成输出的这些不同元素间具有重要关系。 - 异常检测:这类任务中,计算机程序在一组事件或对象中筛选,并标记不正常
或非典型的个体。异常检测任务的一个例子是信用卡欺诈检测。 - 合成和采样:这类任务中,机器学习程序生成一些和训练数据相似的新样本
- 缺失值填补:这类任务中,机器学习算法给定一个新样本 x ∈ Rn,x 中某些元
素 xi 缺失。算法必须填补这些缺失值。 - 去噪:这类任务中,机器学习算法的输入是,由未知破坏过程从干净样本x ∈ Rn
得到的污染样本˜x ∈ Rn。算法根据污染后的样本 ˜x 预测干净的样本 x,或者更
一般地预测条件概率分布 P(x | ˜x)。 - 密度估计或概率分布律函数估计:在密度估计问题中,机器学习算法学习函数
pmodel : Rn → R,其中 pmodel(x) 可以解释成样本采样空间的概率密度函数(如
果 x 是连续的)或者概率分布律函数(如果 x 是离散的)
性能度量P
- 准确率:模型输出正确结果的样本比例
- 错误率:模型输出错误结果的样本比例
经验E
机器学习可以大致分为无监督学习和有监督学习
有时候可以把表面上的无监督学习给分解为n个有监督学习来解决。
设计矩阵
5.1.4 线性回归
表明系统
明确任务
定义度量
正规方程
此时可以吧MSEtrain最小
5.2 容量、过拟合和欠拟合
名称 | 定义 |
训练误差 | 在训练集上显示出来的误差 |
测试误差(泛化误差) | 在测试集上显示出来的误差 |
决定机器学习算法是否好的因素
- 降低训练误差
- 降低训练误差和测试误差的差距
这两个因素分别对应于
- 欠拟合发生于模型不能在训练集上获得足够低的误差。
- 过拟合发生于训练误差和和测试误差之间的差距太大。
通过调整模型的容量,我们可以控制模型是否偏向于过拟合或者欠拟
合。通俗地,模型的容量是指其拟合各种函数的能力
量化模型容量的方法:VapnikChervonenkis 维度
VC维度量二元分类器的容量。VC维定义为该分类器能够分类的训练样本的最大数目。假设存在 m 个不同 x 点的训练集,分类器可以任意地标记该 m 个不同的 x 点,VC维被定义为 m 的最大可能值。
量化模型的容量使得统计学习理论可以进行量化预测
训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练样本增多而下降
非参数模型的一个实例:最邻近回归
贝叶斯误差
从预先知道的真实分布 p(x, y) 预测而出现的误差被称为贝叶斯误差 (Bayes
error)。
5.2.1 没有免费的午餐定理
5.2.2 正则化
算法的效果不仅受影响于假设空间的函数数量,也取决于这些函数的具体形式。
下面这句话不太懂:
正则化是指我们对学习算法所做的降低泛化误差而非训练误差的修改。是机器学习领域的中心问题之一,能够和其重要性媲美的只有优化
5.3 超参数和验证集
5.3.1交叉验证(见西瓜书笔记)
5.4 估计 偏差和方差
点估计
除了点估计,还有函数估计。
偏差
方差和标准误差
估计量的方差或标准误差告诉我们,当独立地从潜在的数据生成过程中重采样
数据集时,如何期望估计的变化。
权衡偏值和方差以最小化均方误差
偏差和方差度量着估计量的两个不同误差来源。偏差度量着离真实函数或参数
的误差期望。而方差度量着数据上任意特定采样可能导致的估计期望的偏差。
一致性
5.5 最大似然估计
是一种准则,可以让我们从不同模型中得到特定函数作为好的估计。
下面这一点跟概率统计数一样
条件对数似然和均方误差
线性回归的例子略
最大似然估计的性质
最大似然估计最吸引人的地方在于,它被证明是当样本数目 m → ∞ 时,就收
敛率而言最好的渐近估计。
其他:一致估计的统计效率可能区别很大(统计效率一般研究有参情况)
最大似然通常是机器学习中的首选估计。
当样本数目小到会过拟合时,正则化策略如权重衰减可用于获得训练数据有限时方差较小的最大似然有偏版本。
5.6 贝叶斯统计
5.7 监督学习算法
5.7.1 概率监督学习
5.7.2 支持向量机
5.7.3 其他简单的监督学习算法
- 邻近回归
- 决策树
5.8 无监督学习算法
5.8.1 PCA主成分分析算法
5.8.2 K-均值聚类
5.9 随机梯度下降SGD
这一小节讲的感觉有点很泛
- 随机梯度下降的核心是,梯度是期望。期望可使用小规模的样本近似估计。
- 梯度下降往往被视为慢的或不可靠的。
- 随机梯度下降在深度学习之外有很多重要的应用。它是在大规模数据上训练大型线性模型的主要方法。
5.10 构建机器学习算法
5.11 深度学习的动机和挑战
本节介绍为何处理高维数据时在新样本上泛化特别困难,以及为何传统机器学习中实现泛化的机制不适合学习高维空间中复杂的函数。这些空间经常涉及巨大的计算代价。深度学习旨在克服这些,以及一些其他难题。
5.11.1 维数灾难
当数据的维数很高时,很多机器学习问题变得相当困难。这种现象被称为维数灾难 (curse of dimensionality)。
5.11.2 局部不变性和平滑正则化
但是单是平滑先验不足以应对人工智能级别的任务。
局部不变方法的一个极端例子是 k 最近邻系列的学习算法。
有一个问题:是否可以有效地表示复杂的函数,以及所估计的函数是否可以很好地泛化到新的输入?
一些其他的机器学习方法往往会提出更强的,针对特定问题的假设。
5.11.3 流行学习
流形
对于机器学习中流形的定义:机器学习倾向于更松散地定义一组点,只需要考虑少数嵌入在高维空间中的自由度或维数就能很好地近似。每一维都对应着局部的变动方向。
流形学习算法
流形学习 (manifold learning) 算法通过一个假设来克服这个障碍,该假设认为 Rn 中大部分区域都是无效的输入,感兴趣的输入只分布在包含少量点的子集构成的一组流形中,而学习函数中感兴趣输出的变动只位于流形中的方向,或者感兴趣的变动只发生在我们从一个流形移动到另一个流形的时候。流形学习是在连续数值数据和无监督学习的设定下被引入的,尽管这个概率集中的想法也能够泛化到离散数据和监督学习的设定下:关键假设仍然是概率质量高度集中。
- 第一个支持流形假设 (manifold hypothesis) 的观察是现实生活中的图像,文本,
声音的概率分布都是高度集中的。 - 支持流形假设的第二个论点是,我们至少能够非正式地想象这些邻域和变换。
第六章 深度前馈网络
学习特征来改善模型的一般化原则
深度前馈网络 (deep feedforward network),也叫作前馈神经网络 (feedforward neural network) 或者多层感知机 (multilayer perceptron, MLP)
因为训练数据并没有给出这些层中的每一层所需的输出,所以这些层被称为隐藏层 (hidden layer)。
- 这些隐藏层的维数决定了模型的宽度 (width)
如何选择映射 ϕ(非线性函数 我感觉是激活函数)
- 使用一个通用的 ϕ
- 另一种选择是手动地设计 ϕ
- 深度学习的策略是去学习 ϕ
6.1 实例:学习 XOR(异或逻辑)
XOR 函数(‘‘异或’’ 逻辑)是两个二进制值 x1 和 x2 的运算。当这些二进制值
中恰好有一个为 1 时,XOR 函数返回值为 1
损失函数
设计模型
6.2 基于梯度的学习
线性模型和神经网络的最大区别,在于神经网络的非线性导致大多数我们感兴趣的损失函数都成为了非凸的。用于非凸损失函数的随机梯度下降没有这种收敛性保证,并且对参数的初始值很敏感。对于前馈神经网络,将所有的权重值初始化为小随机数是很重要的。偏置可以初始化为零或者小的正值。
6.2.1 代价函数
用于训练神经网络的完整的代价函数,通常在我们这里描述的基本代价函数的基础上结合一个正则项。
6.2.1.1 用最大似然学习条件分布
用于实现最大似然估计的交叉熵代价函数有一个不同寻常的特性,那就是当它
被应用于实践中经常遇到的模型时,它通常没有最小值。
6.2.1.2 学习条件统计量
有时我们并不是想学习一个完整的概率分布 p(y | x; θ),而仅仅是想学习在给
定 x 时 y 的某个条件统计量。
交叉熵代价函数比均方误差或者平均绝对误差更受欢迎,即使是在没必要估计整个 p(y | x) 分布时。
6.2.2 输出单元
6.2.2.1 用于高斯输出分布的线性单元
线性模型不会饱和,所以它们对基于梯度的优化算法没有任何困难并且可以被用在相当广泛的优化算法中。
6.2.2.2 用于 Bernoulli (伯努利)输出分布的 sigmoid 单元
6.2.2.3 用于 Multinoulli 输出分布的 softmax 单元
6.2.2.4 其他的输出类型
6.3 隐藏单元
- 整流线性单元是隐藏单元极好的默认选择。
6.3.1 整流线性单元及其扩展
整流线性单元的三个扩展
- 绝对值整流
- 渗漏整流线性单元 (Leaky ReLU)
- 参数化整流线性单元 (parametric ReLU)
下图为绝对值整流
maxout 单元
maxout 单元将 z 划分为具有 k 个值的组。每个maxout 单元然后输出其中一组的最大元素:
灾难遗忘现象这个现象是说神经网络忘记了如何执行它们过去训练的任务。
6.3.2 logistic sigmoid与双曲正切函数
sigmoid函数具有广饱和性:sigmoid单元在其大部分定义域内都饱和,会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们用作前馈网络中的隐藏单元。
6.3.3 其他隐藏单元
其他一些常见的隐藏单元类型包括:
通常新的隐藏单元类型只有在被明确证明能够提供显著改进时才会被发布。
6.4 结构设计
在链式结构中,主要的结构考虑是选择网络的深度和每一层的宽度
6.4.1 通用近似性质和深度
通用近似定理
可能这就是为什么总是要连接一个激活层的原因吧
- 通用近似定理意味着无论我们试图学习什么函数,我们知道一个大的 MLP 一
定能够表示这个函数。然而,我们不能保证训练算法能够学得这个函数。 - 通用近似定理说明了存在一个足够大的网络能够达到我们所希望的任意精度,
但是定理并没有说这个网络有多大。
具有 d 个输入,深度为l,每个隐藏层有 n 个单元的深度整流网络可以描述的线性区域的数量是
6.4.2 其他结构上的考虑
6.5 反向传播和其他的微分算法
反向传播这个术语经常被误解为用于多层神经网络的整个学习算法。实际上,反向传播仅指用于计算梯度的方法。
6.5.1 计算图
6.5.2 微积分中的链式法则(略)
6.5.3 递归地使用链式法则来实现 BP
6.5.4 全连接 MLP(多层感知机) 中 BP 的计算
略
6.5.5 符号到符号的导数
- 一些反向传播的方法采用计算图和一组用于图的输入的数值,然后返回在这些
输入值处梯度的一组数值。我们将这种方法称为 ‘‘符号到数值’’ 的微分。(如torch) - 另一种方法是采用计算图以及添加一些额外的节点到计算图中,这些额外的 节点提供了我们所需导数的符号描述。如(TensorFlow caffe)
- 基于符号到符号的方法的描述包含了符号到数值的方法。符号到数值的方法可以理解为执行了与符号到符号的方法中构建图的过程中完全相同的计算。
6.5.6 一般化的 BP
反向传播算法避免了重复计算许多公共子表达式。这种表填充策略有时被称为动态规划 (dynamic programming)。
6.5.7 实例:用于 MLP 训练的 BP
6.5.8 复杂化
前面的描述听起来很简单,因为
- 还没有描述如何控制反向传播的内存消耗
- 反向传播的实现往往还要处理各种数据类型
6.5.9 深度学习界以外的微分
6.5.10 高阶微分
6.6 历史小记
最早的模型都是基于线性模型,后来发现了线性模型的一些缺陷,学习非线性函数需要多层感知机的发展和计算该模型梯度的方法。。并行分布式处理 (Parallel Distributed Processing) 一书在其中一章提供了第一次成功使用反向传播的一些实验的结果,开启了一个研究深度学习的活跃期。
当代神经网络性能的大部分改进因素如下:
- 有了大量的数据集
- 算力的发展
- 算法的变化:损失函数的交叉熵族替代均方误差
- 前馈网络性能的算法上的主要变化是使用分段线性隐藏单元来替代sigmoid隐藏单元,例如用整流线性单元。
碎碎念
在看到第六章第四小节的时候,我明白这本书的目的了(可能理解错了):就是要让读者非常深入的明白深度学习网络底层的东西,拥有从理论的层度上DIY网络的能力。
6.5的几个小节,我感觉主要在讲怎么减少计算消耗。