全局更新目录,及有些格式

This commit is contained in:
Tan 2018-11-14 20:17:44 +08:00
parent 40a56d5f0d
commit 65e6f9f6cd
43 changed files with 255 additions and 519 deletions

View File

@ -1,5 +1,3 @@
###
[TOC]
@ -84,7 +82,7 @@
下面这张图就是一个神经网络系统,它由很多层组成。输入层负责接收信息,比如一只猫的图片。输出层是计算机对这个输入信息的判断结果,它是不是猫。隐藏层就是对输入信息的传递和加工处理。
![](./img/ch2/2.6/1.png)
## 2.12 理解局部最优与全局最优
## 2.7 理解局部最优与全局最优
笑谈局部最优和全局最优
@ -97,9 +95,9 @@
2. 函数局部最小点是那种它的函数值小于或等于附近点的点。但是有可能大于较远距离的点。
3. 全局最小点是那种它的函数值小于或等于所有的可行点。
## 2.7 分类算法
## 2.8 分类算法
### 2.7 常用分类算法的优缺点?
### 2.8.1 常用分类算法的优缺点?
|算法|优点|缺点|
|:-|:-|:-|
@ -111,12 +109,12 @@
|Neural Network 神经网络|1分类准确率高。2并行处理能力强。3分布式存储和学习能力强。4鲁棒性较强不易受噪声影响。|1需要大量参数网络拓扑、阀值、阈值。2结果难以解释。3训练时间过长。|
|Adaboosting|1adaboost是一种有很高精度的分类器。2可以使用各种方法构建子分类器Adaboost算法提供的是框架。3当使用简单分类器时计算出的结果是可以理解的。而且弱分类器构造极其简单。4简单不用做特征筛选。5不用担心overfitting。|对outlier比较敏感|
### 2.8 正确率能很好的评估分类算法吗?
### 2.8.2 正确率能很好的评估分类算法吗?
不同算法有不同特点,在不同数据集上有不同的表现效果,根据特定的任务选择不同的算法。如何评价分类算法的好坏,要做具体任务具体分析。对于决策树,主要用正确率去评估,但是其他算法,只用正确率能很好的评估吗?
答案是否定的。
正确率确实是一个很直观很好的评价指标但是有时候正确率高并不能完全代表一个算法就好。比如对某个地区进行地震预测地震分类属性分为0不发生地震、1发生地震。我们都知道不发生的概率是极大的对于分类器而言如果分类器不加思考对每一个测试样例的类别都划分为0达到99%的正确率但是问题来了如果真的发生地震时这个分类器毫无察觉那带来的后果将是巨大的。很显然99%正确率的分类器并不是我们想要的。出现这种现象的原因主要是数据分布不均衡类别为1的数据太少错分了类别1但达到了很高的正确率缺忽视了研究者本身最为关注的情况。
### 2.9 分类算法的评估方法?
### 2.8.3 分类算法的评估方法?
1. **几个常用的术语**
这里首先介绍几个*常见*的 模型评价术语现在假设我们的分类目标只有两类计为正例positive和负例negative分别是
1) True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数);
@ -157,13 +155,13 @@
References
[1] 李航. 统计学习方法[M]. 北京:清华大学出版社,2012.
### 2.10 什么样的分类器是最好的?
### 2.8.4 什么样的分类器是最好的?
对某一个任务,某个具体的分类器不可能同时满足或提高所有上面介绍的指标。
如果一个分类器能正确分对所有的实例那么各项指标都已经达到最优但这样的分类器往往不存在。比如之前说的地震预测既然不能百分百预测地震的发生但实际情况中能容忍一定程度的误报。假设在1000次预测中共有5次预测发生了地震真实情况中有一次发生了地震其他4次则为误报。正确率由原来的999/1000=99.9下降为996/10000=99.6。召回率由0/1=0%上升为1/1=100%。对此解释为虽然预测失误了4次但真的地震发生前分类器能预测对没有错过这样的分类器实际意义更为重大正是我们想要的。在这种情况下在一定正确率前提下要求分类器的召回率尽量高。
## 2.13 逻辑回归
## 2.9 逻辑回归
### 2.13 理解逻辑回归
### 2.9.1 理解逻辑回归
**回归划分**
广义线性模型家族里,依据因变量不同,可以有如下划分:
@ -180,13 +178,13 @@ Logistic回归的因变量可以是二分类的也可以是多分类的
4. 仅能用于线性问题。只有当目标和特征是线性关系时,才能用逻辑回归。在应用逻辑回归时注意两点:一是当知道模型是非线性时,不适用逻辑回归;二是当使用逻辑回归时,应注意选择和目标为线性关系的特征。
5. 各特征之间不需要满足条件独立假设,但各个特征的贡献独立计算。
### 2.14 逻辑回归与朴素贝叶斯有什么区别?
### 2.9.2 逻辑回归与朴素贝叶斯有什么区别?
1. 逻辑回归时生成模型,朴素贝叶斯是判别模型,所以生成和判别的所有区别它们都有。
2. 朴素贝叶斯属于贝叶斯,逻辑回归是最大似然,两种概率哲学间的区别。
3. 朴素贝叶斯需要独立假设。
4. 逻辑回归需要求特征参数间是线性的。
### 2.15 线性回归与逻辑回归的区别?(贡献者:黄钦建-华南理工大学)
### 2.9.3线性回归与逻辑回归的区别?(贡献者:黄钦建-华南理工大学)
线性回归的样本的输出,都是连续值,$ y\in (-\infty ,+\infty )$,而逻辑回归中$y\in (0,1)$只能取0和1。
@ -223,14 +221,14 @@ $\theta ^{T}x=0$就相当于是1类和0类的决策边界
1. 拟合函数和预测函数什么关系呢?其实就是将拟合函数做了一个逻辑函数的转换,转换后使得$y^{(i)} \in (0,1)$;
2. 最小二乘和最大似然估计可以相互替代吗回答当然是不行了。我们来看看两者依仗的原理最大似然估计是计算使得数据出现的可能性最大的参数依仗的自然是Probability。而最小二乘是计算误差损失。
## 2.16 代价函数
## 2.10 代价函数
### 2.16 为什么需要代价函数?
### 2.10.1 为什么需要代价函数?
1. 为了得到训练逻辑回归模型的参数,需要一个代价函数,通过训练代价函数来得到参数。
2. 用于找到最优解的目的函数。
### 2.17 代价函数作用原理
### 2.10.2 代价函数作用原理
在回归问题中,通过代价函数来求解最优解,常用的是平方误差代价函数。有如下假设函数:
$$
h(x) = A + Bx
@ -252,11 +250,11 @@ $$
![](./img/ch2/2.16/2.png)
### 2.18 为什么代价函数要非负?
### 2.10.3 为什么代价函数要非负?
目标函数存在一个下界,在优化过程当中,如果优化算法能够使目标函数不断减小,根据单调有界准则,这个优化算法就能证明是收敛有效的。
只要设计的目标函数有下界,基本上都可以,代价函数非负更为方便。
### 2.19 常见代价函数?
### 2.10.4 常见代价函数?
1. **二次代价函数(quadratic cost)**
$$
J = \frac{1}{2n}\sum_x\Vert y(x)-a^L(x)\Vert^2
@ -301,7 +299,7 @@ $$
与sigmoid搭配使用的交叉熵函数`tf.nn.sigmoid_cross_entropy_with_logits()`。
与softmax搭配使用的交叉熵函数`tf.nn.softmax_cross_entropy_with_logits()`。
### 2.20 为什么用交叉熵代替二次代价函数
### 2.10.5 为什么用交叉熵代替二次代价函数
1. **为什么不用二次方代价函数**
由2.18节可知,权值$w$和偏置$b$的偏导数为$\frac{\delta J}{\delta w}=(a-y)\delta'(z)x$$\frac{\delta J}{\delta b}=(a-y)\delta'(z)$ 偏导数受激活函数的导数影响sigmoid函数导数在输出接近0和1时非常小会导致一些实例在刚开始训练时学习得非常慢。
@ -313,14 +311,14 @@ $$
$$
由以上公式可知,权重学习的速度受到$\delta{(z)}-y$影响,更大的误差,就有更快的学习速度,避免了二次代价函数方程中因$\delta'{(z)}$导致的学习缓慢的情况。
## 2.21 损失函数
## 2.11 损失函数
### 2.21 什么是损失函数?
### 2.11.1 什么是损失函数?
损失函数Loss function又叫做误差函数用来衡量算法的运行情况估量模型的预测值 与真实值 的不一致程度,是一个非负实值函数,通常使用 来表示,损失函数越小,模型的鲁棒性就越好。
损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。
### 2.22 常见的损失函数
### 2.11.2 常见的损失函数
机器学习通过对算法中的目标函数进行不断求解优化,得到最终想要的结果。分类和回归问题中,通常使用损失函数或代价函数作为目标函数。
损失函数用来评价预测值和真实值不一样的程度。通常损失函数越好,模型的性能也越好。
损失函数可分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是在经验风险损失函数上加上正则项。
@ -389,7 +387,7 @@ $$
$$
其中$l(wx_i+by_i)$是Hinge损失函数$\Vert w^2\Vert$可看做为正则化项。
### 2.23 逻辑回归为什么使用对数损失函数?
### 2.11.3 逻辑回归为什么使用对数损失函数?
假设逻辑回归模型
TODO
假设逻辑回归模型的概率分布是伯努利分布,其概率质量函数为
@ -404,7 +402,7 @@ TODO
TODO
由此可看出,对数损失函数与极大似然估计的对数似然函数本质上是相同的。所以逻辑回归直接采用对数损失函数。
### 2.24 对数损失函数是如何度量损失的?
### 2.11.4 对数损失函数是如何度量损失的?
举例:
高斯分布中,我们需要确定均值 和标注差 。
如何确定这两个参数?最大似然估计是比较常用的方法。最大似然的目标是找到一些参数值,这些参数值对应的分布可以最大化观测到数据的概率。
@ -425,9 +423,9 @@ TODO
TODO
同理可计算TODO。
## 2.25 梯度下降
## 2.12 梯度下降
### 2.25 机器学习中为什么需要梯度下降?
### 2.12.1 机器学习中为什么需要梯度下降?
1. 梯度下降是迭代法的一种,可以用于求解最小二乘问题。
2. 在求解机器学习算法的模型参数即无约束优化问题时主要有梯度下降法Gradient Descent和最小二乘法。
@ -435,7 +433,7 @@ TODO
4. 如果我们需要求解损失函数的最大值,可通过梯度上升法来迭代。梯度下降法和梯度上升法可相互转换。
5. 在机器学习中,梯度下降法主要有随机梯度下降法和批量梯度下降法。
### 2.26 梯度下降法缺点?
### 2.12.2 梯度下降法缺点?
1. 靠近极小值时收敛速度减慢。
2. 直线搜索时可能会产生一些问题。
3. 可能会“之字形”地下降。
@ -445,7 +443,7 @@ TODO
2. 梯度的方向是最大方向导数的方向;
3. 梯度的值是最大方向导数的值。
### 2.27 梯度下降法直观理解?
### 2.12.3 梯度下降法直观理解?
梯度下降法经典图示:
![](./img/ch2/2.25/1.png)
@ -463,7 +461,7 @@ TODO
d判断是否需要终止如否返回a)
3. 得到全局最优解或者接近全局最优解。
### 2.28 梯度下降法算法描述?
### 2.12.4 梯度下降法算法描述?
1. 确定优化模型的假设函数及损失函数。
举例,对于线性回归,假设函数为:
TODO
@ -494,7 +492,7 @@ TODO
TODO
由此可看出当前位置的梯度方向由所有样本决定上式中TODO的目的是为了便于理解。
### 2.29 如何对梯度下降法进行调优?
### 2.12.5 如何对梯度下降法进行调优?
实际使用梯度下降法时,各项参数指标不能一步就达到理想状态,对梯度下降法调优主要体现在以下几个方面:
1. **算法迭代步长$\alpha$选择。**
在算法参数初始化时,有时根据经验将步长 初始化为1。实际取值取决于数据样本。可以从大到小多取一些值分别运行算法看迭代效果如果损失函数在变小则取值有效。如果取值无效说明要增大步长。但步长太大有时会导致迭代速度过快错过最优解。步长太小迭代速度慢算法运行时间长。
@ -503,7 +501,7 @@ TODO
3. **标准化处理。**
由于样本不同特征取值范围也不同导致迭代速度慢。为了减少特征取值的影响可对特征数据标准化使新期望为0新方差为1可节省算法运行时间。
### 2.30 随机梯度和批量梯度区别?
### 2.12.7 随机梯度和批量梯度区别?
随机梯度下降和批量梯度下降是两种主要梯度下降法,其目的是增加某些限制来加速运算求解。
引入随机梯度下降法与mini-batch梯度下降法是为了应对大数据量的计算而实现一种快速的求解。
下面通过介绍两种梯度下降法的求解思路,对其进行比较。
@ -553,7 +551,7 @@ d) 收敛速度来说,随机梯度下降法一次迭代一个样本,导致
对于总数为$m$个样本的数据,根据样本的数据,选取其中的$n(1< n< m)$个子样本来迭代其参数$\theta$按梯度方向更新$\theta_i$公式如下
TODO
### 2.31 各种梯度下降法性能比较
### 2.12.8 各种梯度下降法性能比较
下表简单对比随机梯度下降(SGD)、批量梯度下降BGD、小批量梯度下降mini-batch GD、和online GD的区别主要区别在于如何选取训练数据
||BGD|SGD|Mini-batch GD|Online GD|
|:-:|:-:|:-:|:-:|:-:|:-:|
@ -569,7 +567,7 @@ Online GD于mini-batch GD/SGD的区别在于所有训练数据只用一次
Online GD在互联网领域用的较多比如搜索广告的点击率(CTR)预估模型网民的点击行为会随着时间改变。用普通的BGD算法每天更新一次一方面耗时较长需要对所有历史数据重新训练另一方面无法及时反馈用户的点击行为迁移。而Online GD算法可以实时的依据网民的点击行为进行迁移。
## 2.32 计算图的导数计算图解?
## 2.13 计算图的导数计算图解?
计算图导数计算是反向传播,利用链式法则和隐式函数求导。
假设TODO在点TODO处偏导连续TODO是关于TODO的函数在TODO点可导求TODO在TODO点的导数。
@ -594,9 +592,9 @@ $$
$$
## 2.33 线性判别分析LDA
## 2.14 线性判别分析LDA
### 2.33 线性判别分析LDA思想总结
### 2.14.1 线性判别分析LDA思想总结
线性判别分析Linear Discriminant AnalysisLDA是一种经典的降维方法。
@ -608,7 +606,7 @@ LDA分类思想简单总结如下
3. 对数据进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定样本的类别。
如果用一句话概括LDA思想即“投影后类内方差最小类间方差最大”。
### 2.34 图解LDA核心思想
### 2.14.2 图解LDA核心思想
假设有红、蓝两类数据,这些数据特征均为二维,如下图所示。我们的目标是将这些数据投影到一维,让每一类相近的数据的投影点尽可能接近,不同类别数据尽可能远,即图中红色和蓝色数据中心之间的距离尽可能大。
![](./img/ch2/2.29/1.png)
@ -623,7 +621,7 @@ LDA分类思想简单总结如下
以上例子是基于数据是二维的,分类后的投影是一条直线。如果原始数据是多维的,则投影后的分类面是一低维的超平面。
### 2.35 二类LDA算法原理
### 2.14.3 二类LDA算法原理
输入数据集TODO其中样本TODO是n维向量TODOTODO降维后的目标维度TODO。定义
TODO为第TODO类样本个数
@ -648,7 +646,7 @@ LDA的目标是让两类别的数据中心间的距离TODO尽量大与此同
根据广义瑞利商的性质矩阵TODO的最大特征值为TODO的最大值矩阵TODO的最大特征值对应的特征向量即为TODO。
### 2.36 LDA算法流程总结
### 2.14.4 LDA算法流程总结
LDA算法降维流程如下
输入数据集TODO其中样本TODO是n维向量TODO降维后的目标维度TODO。
@ -664,7 +662,7 @@ LDA算法降维流程如下
6. 转化样本集的每个样本,得到新样本 。
7. 输出新样本集
### 2.37 LDA和PCA区别
### 2.14.5 LDA和PCA区别
|异同点|LDA|PCA|
|:-:|:-|:-|
|相同点|1. 两者均可以对数据进行降维2. 两者在降维时均使用了矩阵特征分解的思想3. 两者都假设数据符合高斯分布;|
@ -674,15 +672,15 @@ LDA算法降维流程如下
||选择分类性能最好的投影方向|选择样本点投影具有最大方差的方向|
||更明确,更能反映样本间差异|目的较为模糊|
### 2.38 LDA优缺点
### 2.14.6 LDA优缺点
|优缺点|简要说明|
|:-:|:-|
|优点|1. 可以使用类别的先验知识2. 以标签类别衡量差异性的有监督降维方式相对于PCA的模糊性其目的更明确更能反映样本间的差异|
|缺点|1. LDA不适合对非高斯分布样本进行降维2. LDA降维最多降到k-1维3. LDA在样本分类信息依赖方差而不是均值时降维效果不好4. LDA可能过度拟合数据。|
## 2.39 主成分分析PCA
## 2.15 主成分分析PCA
### 2.39 主成分分析PCA思想总结
### 2.15.1 主成分分析PCA思想总结
1. PCA就是将高维的数据通过线性变换投影到低维空间上去。
2. 投影思想找出最能够代表原始数据的投影方法。被PCA降掉的那些维度只能是那些噪声或是冗余的数据。
@ -694,7 +692,7 @@ LDA算法降维流程如下
协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。
7. 之所以对角化因为对角化之后非对角上的元素都是0达到去噪声的目的。对角化后的协方差矩阵对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉,即去冗余。
### 2.40 图解PCA核心思想
### 2.15.2 图解PCA核心思想
PCA可解决训练数据中存在数据特征过多或特征累赘的问题。核心思想是将m维特征映射到n维n < m这n维形成主元是重构出来最能代表原始数据的正交特征
假设数据集是m个n维$(x^{(1)}, x^{(2)}, \cdots, x^{(m)})$。如果n=2,需要降维到$n'=1$,现在想找到某一维度方向代表这两个维度的数据。下图有$u_1, u_2$两个向量方向,但是哪个向量才是我们所想要的,可以更好代表原始数据集的呢?
@ -709,7 +707,7 @@ PCA可解决训练数据中存在数据特征过多或特征累赘的问题。
1. 样本点到这个超平面的距离足够近。
2. 样本点在这个超平面上的投影能尽可能的分开。
### 2.41 PCA算法推理
### 2.15.3 PCA算法推理
下面以基于最小投影距离为评价指标推理:
假设数据集是m个n维TODO且数据进行了中心化。经过投影变换得到新坐标为TODO其中TODO是标准正交基即TODOTODO。经过降维后新坐标为TODO其中TODO是降维后的目标维数。样本点TODO在新坐标系下的投影为TODO其中TODO是TODO在低维坐标系里第j维的坐标。如果用TODO去恢复TODO则得到的恢复数据为TODO其中TODO为标准正交基组成的矩阵。
@ -730,7 +728,7 @@ TODO
基于最大投影方差的推导,这里就不再赘述,有兴趣的同仁可自行查阅资料。
### 2.42 PCA算法流程总结
### 2.15.4 PCA算法流程总结
输入TODO维样本集TODO目标降维的维数TODO。
输出降维后的新样本集TODO。
@ -745,13 +743,13 @@ TODO
7. 得到输出矩阵TODO。
*注*在降维时有时不明确目标维数而是指定降维到的主成分比重阈值TODO。假设TODO个特征值为TODO则TODO可从TODO得到。
### 2.43 PCA算法主要优缺点
### 2.15.5 PCA算法主要优缺点
|优缺点|简要说明|
|:-:|:-|
|优点|1. 仅仅需要以方差衡量信息量不受数据集以外的因素影响。 2.各主成分之间正交可消除原始数据成分间的相互影响的因素。3. 计算方法简单,主要运算是特征值分解,易于实现。|
|缺点|1.主成分各个特征维度的含义具有一定的模糊性不如原始样本特征的解释性强。2. 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。|
### 2.44 降维的必要性及目的
### 2.15.6 降维的必要性及目的
**降维的必要性**
1. 多重共线性--预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。
2. 高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间而在十维空间上只有0.02%。
@ -766,7 +764,7 @@ TODO
5. 去除数据噪声。
6. 降低算法运算开销。
### 2.45 KPCA与PCA的区别
### 2.15.7 KPCA与PCA的区别
应用PCA算法的前提是假设存在一个线性的超平面进而投影。那如果数据不是线性的呢该怎么办这时候就需要KPCA数据集从TODO维映射到线性可分的高维TODO然后再从TODO维降维到一个低维度TODO。
KPCA用到了核函数思想使用了核函数的主成分分析一般称为核主成分分析(Kernelized PCA, 简称KPCA
@ -778,8 +776,8 @@ TODO其映射为TODO
通过在高维空间进行协方差矩阵的特征值分解然后用和PCA一样的方法进行降维。由于KPCA需要核函数的运算因此它的计算量要比PCA大很多。
## 2.46 模型评估
### 2.46.1 模型评估常用方法?
## 2.16 模型评估
### 2.16.1 模型评估常用方法?
一般情况来说单一评分标准无法完全评估一个机器学习模型。只用good和bad偏离真实场景去评估某个模型都是一种欠妥的评估方式。下面介绍常用的分类模型和回归模型评估方法。
**分类模型常用评估方法:**
@ -803,7 +801,11 @@ TODO其映射为TODO
|Absolute Error (MAE, RAE)|绝对误差|from sklearn.metrics import mean_absolute_error, median_absolute_error|
|R-Squared|R平方值|from sklearn.metrics import r2_score|
### 2.47.1 机器学习中的Bias(偏差)Error(误差)和Variance(方差)有什么区别和联系?(贡献者:黄钦建-华南理工大学)
### 2.16.2 机器学习中的BiasError和Variance有什么区别和联系
**(贡献者:黄钦建-华南理工大学)**
Bias(偏差)Error(误差)和Variance(方差)
**对于Bias**
@ -821,14 +823,14 @@ TODO其映射为TODO
>
> 训练误差大,测试误差大→ 升VC维
### 2.47.1 经验误差与泛化误差
### 2.16.3 经验误差与泛化误差
误差error一般地我们把学习器的实际预测输出与样本的真是输出之间的差异称为“误差”
经验误差empirical error也叫训练误差training error。模型在训练集上的误差。
泛化误差generalization error模型在新样本集测试集上的误差称为“泛化误差”。
### 2.47.2 图解欠拟合、过拟合
### 2.16.4 图解欠拟合、过拟合
根据不同的坐标方式,欠拟合与过拟合图解不同。
1. **横轴为训练样本数量,纵轴为误差**
@ -862,7 +864,7 @@ TODO其映射为TODO
模型正常模型复杂程度控制在点B处为最优。
### 2.47.3 如何解决过拟合与欠拟合?
### 2.16.5 如何解决过拟合与欠拟合?
**如何解决欠拟合:**
1. 添加其他特征项。组合、泛化、相关性、上下文特征、平台特征等特征是特征添加的重要手段,有时候特征项不够会导致模型欠拟合。
2. 添加多项式特征。例如将线性模型添加二次项或三次项使模型泛化能力更强。例如FM模型、FFM模型其实就是线性模型增加了二阶多项式保证了模型一定的拟合程度。
@ -883,12 +885,12 @@ TODO其映射为TODO
欠拟合和过拟合这些方法,需要根据实际问题,实际模型,进行选择。
### 2.47.4 交叉验证的主要作用?
### 2.16.6 交叉验证的主要作用?
为了得到更为稳健可靠的模型,对模型的泛化误差进行评估,得到模型泛化误差的近似值。当有多个模型可以选择时,我们通常选择“泛化误差”最小的模型。
交叉验证的方法有许多种但是最常用的是留一交叉验证、k折交叉验证
### 2.47.5 k折交叉验证
### 2.16.7 k折交叉验证
1. 将含有N个样本的数据集分成K份每份含有N/K个样本。选择其中1份作为测试集另外K-1份作为训练集测试集就有K种情况。
2. 在每种情况中,用训练集训练模型,用测试集测试模型,计算模型的泛化误差。
3. 交叉验证重复K次每份验证一次平均K次的结果或者使用其它结合方式最终得到一个单一估测得到模型最终的泛化误差。
@ -898,7 +900,7 @@ TODO其映射为TODO
2. 训练集中样本数量要足够多一般至少大于总样本数的50%。
3. 训练集和测试集必须从完整的数据集中均匀取样。均匀取样的目的是希望减少训练集、测试集与原数据集之间的偏差。当样本数量足够多时,通过随机取样,便可以实现均匀取样的效果。
### 2.47.6 混淆矩阵
### 2.16.8 混淆矩阵
第一种混淆矩阵
|真实情况T or F|预测为正例1P|预测为负例0N|
|:-:|:-|:-|
@ -911,11 +913,11 @@ TODO其映射为TODO
|预测为正例1P|TP(预测为1实际为1)|FP(预测为1实际为0)|
|预测为负例0N|FN(预测为0实际为1)|TN(预测为0实际也为0)|
### 2.47.7 错误率及精度
### 2.16.9 错误率及精度
1. 错误率Error Rate分类错误的样本数占样本总数的比例。
2. 精度accuracy分类正确的样本数占样本总数的比例。
### 2.47.8 查准率与查全率
### 2.16.10 查准率与查全率
将算法预测的结果分成四种情况:
1. 正确肯定True Positive,TP预测为真实际为真
2. 正确否定True Negative,TN预测为假实际为假
@ -934,7 +936,7 @@ TODO其映射为TODO
**理解**:正确预测为阳性的数量占总样本中阳性数量的比例。
例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
### 2.47.9 ROC与AUC
### 2.16.11 ROC与AUC
ROC全称是“受试者工作特征”Receiver Operating Characteristic
ROC曲线的面积就是AUCArea Under the Curve
@ -957,7 +959,7 @@ TODO, TODO,
经过以上分析ROC曲线越接近左上角该分类器的性能越好。
ROC曲线所覆盖的面积称为AUCArea Under Curve可以更直观的判断学习器的性能AUC越大则性能越好。
### 2.47.10 如何画ROC曲线
### 2.16.12 如何画ROC曲线
http://blog.csdn.net/zdy0_2004/article/details/44948511
下图是一个示例图中共有20个测试样本“Class”一栏表示每个测试样本真正的标签p表示正样本n表示负样本“Score”表示每个测试样本属于正样本的概率。
@ -969,7 +971,7 @@ http://blog.csdn.net/zdy0_2004/article/details/44948511
![](./img/ch2/2.40.11/1.jpg)
### 2.47.11 如何计算TPRFPR
### 2.16.13 如何计算TPRFPR
1、分析数据
y_true = [0, 0, 1, 1]
scores = [0.1, 0.4, 0.35, 0.8]
@ -1034,18 +1036,18 @@ TPR = TP/(TP+FN) = 0.5
FPR = FP/(TN+FP) = 0
4、根据TPR、FPR值以FPR为横轴TPR为纵轴画图。
### 2.47.12 如何计算Auc
### 2.16.14 如何计算Auc
a.将坐标点按照横着FPR排序
b.计算第i个坐标点和第i+1个坐标点的间距 dx
c.获取第i或者i+1个坐标点的纵坐标y
d.计算面积微元ds = ydx;
e.对面积微元进行累加得到AUC。
### 2.47.13 为什么使用Roc和Auc评价分类器
### 2.16.15 为什么使用Roc和Auc评价分类器
模型有很多评估方法为什么还要使用ROC和AUC呢
因为ROC曲线有个很好的特性当测试集中的正负样本的分布变换的时候ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡即正负样本比例差距较大而且测试数据中的正负样本也可能随着时间变化。
### 2.47.14 直观理解AUC
### 2.16.17 直观理解AUC
http://blog.csdn.net/cherrylvlei/article/details/52958720
AUC是ROC右下方的曲线面积。下图展现了三种AUC的值
@ -1055,7 +1057,7 @@ AUC是衡量二分类模型优劣的一种评价指标表示正例排在负
因为一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。
我们不妨举一个极端的例子一个二类分类问题一共10个样本其中9个样本为正例1个样本为负例在全部判正的情况下准确率将高达90%而这并不是我们希望的结果尤其是在这个负例样本得分还是最高的情况下模型的性能本应极差从准确率上看却适得其反。而AUC能很好描述模型整体性能的高低。这种情况下模型的AUC值将等于0当然通过取反可以解决小于50%的情况,不过这是另一回事了)。
### 2.47.15 代价敏感错误率与代价曲线
### 2.16.18 代价敏感错误率与代价曲线
http://blog.csdn.net/cug_lzt/article/details/78295140
@ -1099,14 +1101,14 @@ $Cost_{norm}=\frac{FNR*p*Cost_{01}+FNR*(1-p)*Cost_{10}}{p*Cost_{01}+(1-p)*Cost_{
![](./img/ch2/2-3.png)
### 2.40.17 模型有哪些比较检验方法
### 2.16.19 模型有哪些比较检验方法
http://wenwen.sogou.com/z/q721171854.htm
正确性分析:模型稳定性分析,稳健性分析,收敛性分析,变化趋势分析,极值分析等。
有效性分析:误差分析,参数敏感性分析,模型对比检验等。
有用性分析:关键数据求解,极值点,拐点,变化趋势分析,用数据验证动态模拟等。
高效性分析:时空复杂度分析与现有进行比较等。
### 2.40.18 偏差与方差
### 2.16.20 偏差与方差
http://blog.csdn.net/zhihua_oba/article/details/78684257
方差公式为:
@ -1130,7 +1132,7 @@ generalization error=bias+variance。
偏差大,会造成模型欠拟合;
方差大,会造成模型过拟合。
### 2.40.19为什么使用标准差?
### 2.16.21为什么使用标准差?
标准差公式为:
$S_{N}=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}}$
@ -1143,14 +1145,14 @@ $S_{N}=\sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}}$
2、表示离散程度的数字单位与样本数据的单位一致更方便做后续的分析运算。
3、在样本数据大致符合正态分布的情况下标准差具有方便估算的特性66.7%的数据点落在平均值前后1个标准差的范围内、95%的数据点落在平均值前后2个标准差的范围内而99%的数据点将会落在平均值前后3个标准差的范围内。
### 2.40.20 点估计思想
### 2.16.22点估计思想
点估计:用实际样本的一个指标来估计总体的一个指标的一种估计方法。
点估计举例:比如说,我们想要了解中国人的平均身高,那么在大街上随便找了一个人,通过测量这个人的身高来估计中国人的平均身高水平;或者在淘宝上买东西的时候随便一次买到假货就说淘宝上都是假货等;这些都属于点估计。
点估计主要思想:在样本数据中得到一个指标,通过这个指标来估计总体指标;比如我们用样本均数来估计总体均数,样本均数就是我们要找到的指标。
### 2.40.21 点估计优良性原则?
### 2.16.23 点估计优良性原则?
获取样本均数指标相对来说比较简单,但是并不是总体的所有指标都很容易在样本中得到,比如说总体的标准差用样本的哪个指标来估计呢?
优良性准则有两大类:一类是小样本准则,即在样本大小固定时的优良性准则;另一类是大样本准则,即在样本大小趋于无穷时的优良性准则。最重要的小样本优良性准则是无偏性及与此相关的一致最小方差无偏计。
@ -1169,7 +1171,7 @@ $S_{N}=\sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}}$
要明白一个原则:计算样本的任何分布、均数、标准差都是没有任何意义的,如果样本的这种计算不能反映总体的某种特性。
### 2.40.22点估计、区间估计、中心极限定理之间的联系?
### 2.16.24 点估计、区间估计、中心极限定理之间的联系?
https://www.zhihu.com/question/21871331#answer-4090464
点估计:是用样本统计量来估计总体参数,因为样本统计量为数轴上某一点值,估计的结果也以一个点的数值表示,所以称为点估计。
@ -1186,13 +1188,13 @@ https://www.zhihu.com/question/21871331#answer-4090464
不同点:点估计只提供单一的估计值,而区间估计基于点估计还提供误差界限,给出了置信区间,受置信度的影响。
### 2.40.23 类别不平衡产生原因?
### 2.16.25 类别不平衡产生原因?
类别不平衡class-imbalance是指分类任务中不同类别的训练样例数目差别很大的情况。
产生原因:
通常分类学习算法都会假设不同类别的训练样例数目基本相同。如果不同类别的训练样例数目差别很大则会影响学习结果测试结果变差。例如二分类问题中有998个反例正例有2个那学习方法只需返回一个永远将新样本预测为反例的分类器就能达到99.8%的精度;然而这样的分类器没有价值。
### 2.40.24 常见的类别不平衡问题解决方法
### 2.16.26 常见的类别不平衡问题解决方法
http://blog.csdn.net/u013829973/article/details/77675147
  防止类别不平衡对学习造成的影响,在构建分类模型之前,需要对分类不平衡性问题进行处理。主要解决方法有:
@ -1238,12 +1240,12 @@ ADASYN根据学习难度的不同对不同的少数类别的样本使用
对问题进行分析与挖掘,将问题划分成多个更小的问题,看这些小问题是否更容易解决。
## 2.41 决策树
## 2.17 决策树
### 2.41.1 决策树的基本原理
### 2.17.1 决策树的基本原理
决策树是一种分而治之(Divide and Conquer)的决策过程。一个困难的预测问题, 通过树的分支节点, 被划分成两个或多个较为简单的子集,从结构上划分为不同的子问题。将依规则分割数据集的过程不断递归下去(Recursive Partitioning)。随着树的深度不断增加,分支节点的子集越来越小,所需要提的问题数也逐渐简化。当分支节点的深度或者问题的简单程度满足一定的停止规则(Stopping Rule)时, 该分支节点会停止劈分,此为自上而下的停止阈值(Cutoff Threshold)法;有些决策树也使用自下而上的剪枝(Pruning)法。
### 2.41.2 决策树的三要素?
### 2.17.2 决策树的三要素?
一棵决策树的生成过程主要分为以下3个部分:
特征选择:从训练数据中众多的特征中选择一个特征作为当前节点的分裂标准,如何选择特征有着很多不同量化评估标准标准,从而衍生出不同的决策树算法。
@ -1251,11 +1253,11 @@ ADASYN根据学习难度的不同对不同的少数类别的样本使用
决策树生成:根据选择的特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止生长。树结构来说,递归结构是最容易理解的方式。
剪枝:决策树容易过拟合,一般来需要剪枝,缩小树结构规模、缓解过拟合。剪枝技术有预剪枝和后剪枝两种。
### 2.41.3 决策树学习基本算法
### 2.17.3 决策树学习基本算法
![](./img/ch2/2-5.png)
### 2.41.4 决策树算法优缺点
### 2.17.4 决策树算法优缺点
决策树算法的优点:
@ -1289,7 +1291,7 @@ ADASYN根据学习难度的不同对不同的少数类别的样本使用
6、对于各类别样本数量不一致的数据在决策树当中,信息增益的结果偏向于那些具有更多数值的特征。
### 2.40.5熵的概念以及理解
### 2.17.5熵的概念以及理解
熵:度量随机变量的不确定性。
@ -1300,7 +1302,7 @@ $H(X)=-\sum_{i=1}^{n}p_{i}log_{2}p_{i}$
对于样本集合 假设样本有k个类别每个类别的概率为$\frac{|C_{k}|}{|D|}$,其中$|C_{k}|}{|D|$为类别为k的样本个数,$|D|$为样本总数。样本集合D的熵为
$H(D)=-\sum_{k=1}^{k}\frac{|C_{k}|}{|D|}log_{2}\frac{|C_{k}|}{|D|}$
### 2.40.6 信息增益的理解
### 2.17.6 信息增益的理解
定义:以某特征划分数据集前后的熵的差值。
熵可以表示样本集合的不确定性熵越大样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
假设划分前样本集合D的熵为H(D)。使用某个特征A划分数据集D计算划分后的数据子集的熵为H(D|A)。
@ -1321,7 +1323,7 @@ $g(D,A)=H(D)-H(D|A)$
惩罚参数数据集D以特征A作为随机变量的熵的倒数。
### 2.40.7 剪枝处理的作用及策略?
### 2.17.7 剪枝处理的作用及策略?
剪枝处理是决策树学习算法用来解决过拟合的一种办法。
在决策树算法中,为了尽可能正确分类训练样本, 节点划分过程不断重复, 有时候会造成决策树分支过多,以至于将训练样本集自身特点当作泛化特点, 而导致过拟合。 因此可以采用剪枝处理来去掉一些分支来降低过拟合的风险。
@ -1332,9 +1334,9 @@ $g(D,A)=H(D)-H(D|A)$
后剪枝:生成决策树以后,再自下而上对非叶结点进行考察, 若将此节点标记为叶结点可以带来泛化性能提升,则修改之。
## 2.41 支持向量机
## 2.18 支持向量机
### 2.41.1 什么是支持向量机
### 2.18.1 什么是支持向量机
SVM - Support Vector Machine。支持向量机其含义是通过支持向量运算的分类器。其中“机”的意思是机器可以理解为分类器。
什么是支持向量呢?在求解的过程中,会发现只根据部分数据就可以确定分类器,这些数据称为支持向量。
@ -1343,7 +1345,7 @@ SVM - Support Vector Machine。支持向量机其含义是通过支持向量
![](./img/ch2/2-6.png)
### 2.25.2 支持向量机解决的问题?
### 2.18.2 支持向量机解决的问题?
https://www.cnblogs.com/steven-yang/p/5658362.html
解决的问题:
@ -1385,7 +1387,7 @@ f(x)=∑ni=1αiyiK(xi,x)+bherexi : training data iyi : label value of training d
αα, σσ 和 bb 是训练数据后产生的值。
可以通过调节σσ来匹配维度的大小,σσ越大,维度越低。
### 2.25.2 核函数作用?
### 2.18.3 核函数作用?
核函数目的把原坐标系里线性不可分的数据用Kernel投影到另一个空间尽量使得数据在新的空间里线性可分。
@ -1399,14 +1401,14 @@ f(x)=∑ni=1αiyiK(xi,x)+bherexi : training data iyi : label value of training d
4核函数方法可以和不同的算法相结合形成多种不同的基于核函数技术的方法且这两部分的设计可以单独进行并可以为不同的应用选择不同的核函数和算法。
### 2.25.3 对偶问题
### 2.25.4 理解支持向量回归
### 2.18.4 对偶问题
### 2.18.5 理解支持向量回归
http://blog.csdn.net/liyaohhh/article/details/51077082
### 2.25.5 理解SVM核函数
### 2.18.6 理解SVM核函数
http://blog.csdn.net/Love_wanling/article/details/69390047
### 2.25.6 常见的核函数有哪些?
### 2.18.7 常见的核函数有哪些?
http://blog.csdn.net/Love_wanling/article/details/69390047
本文将遇到的核函数进行收集整理,分享给大家。
@ -1464,8 +1466,8 @@ $k(x,y)=tanh(ax^{t}y+c)$
$k(x,y)=1-\frac{\left \| x-y \right \|^{2}}{\left \| x-y \right \|^{2}+c}$
### 2.25.6 软间隔与正则化
### 2.25.7 SVM主要特点及缺点
### 2.18.8 软间隔与正则化
### 2.18.9 SVM主要特点及缺点
http://www.elecfans.com/emb/fpga/20171118582139_2.html
@ -1486,8 +1488,8 @@ http://www.elecfans.com/emb/fpga/20171118582139_2.html
(2) 用SVM解决多分类问题存在困难
经典的支持向量机算法只给出了二类分类的算法而在数据挖掘的实际应用中一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点结合其他算法的优势解决多类问题的分类精度。如与粗集理论结合形成一种优势互补的多类问题的组合分类器。
## 2.26 贝叶斯
### 2.26.1 图解极大似然估计
## 2.19 贝叶斯
### 2.19.1 图解极大似然估计
极大似然估计 http://blog.csdn.net/zengxiantao1994/article/details/72787849
@ -1513,12 +1515,12 @@ $\hat{\theta}=d(x_{1},x_{2},...,x_{N})=d(D)$
$\hat{\theta}(x_{1},x_{2},...,x_{N})$称为极大似然函数估计值。
### 2.26.2 朴素贝叶斯分类器和一般的贝叶斯分类器有什么区别?
### 2.26.4 朴素与半朴素贝叶斯分类器
### 2.26.5 贝叶斯网三种典型结构
### 2.26.6 什么是贝叶斯错误率
### 2.26.7 什么是贝叶斯最优错误率
## 2.27 EM算法解决问题及实现流程
### 2.19.2 朴素贝叶斯分类器和一般的贝叶斯分类器有什么区别?
### 2.19.3 朴素与半朴素贝叶斯分类器
### 2.19.4 贝叶斯网三种典型结构
### 2.19.5 什么是贝叶斯错误率
### 2.19.6 什么是贝叶斯最优错误率
## 2.20 EM算法解决问题及实现流程
1.EM算法要解决的问题
@ -1539,8 +1541,7 @@ EM算法解决这个的思路是使用启发式的迭代方法既然我们无
当然K-Means算法是比较简单的实际中的问题往往没有这么简单。上面对EM算法的描述还很粗糙我们需要用数学的语言精准描述。
EM算法流程
2.EM算法流程
现在我们总结下EM算法的流程。
@ -1561,7 +1562,9 @@ c) 如果θj+1θj+1已收敛则算法结束。否则继续回到步骤a)进
输出:模型参数θθ。
## 2.28 为什么会产生维数灾难?
## 2.21 降维和聚类
### 2.21.1 为什么会产生维数灾难?
http://blog.csdn.net/chenjianbo88/article/details/52382943
@ -1617,7 +1620,7 @@ $V(d)=\frac{\pi ^{\frac{d}{2}}}{\Gamma (\frac{d}{2}+1)}0.5^{d}$
参考资料:
[1] Vincent Spruyt. The Curse of Dimensionality in classification. Computer vision for dummies. 2014. [Link]
## 2.29怎样避免维数灾难
### 2.21.2 怎样避免维数灾难
解决维度灾难问题:
@ -1627,7 +1630,7 @@ $V(d)=\frac{\pi ^{\frac{d}{2}}}{\Gamma (\frac{d}{2}+1)}0.5^{d}$
Lassio缩减系数法、小波分析法、
## 2.30聚类和降维有什么区别与联系?
### 2.21.3 聚类和降维有什么区别与联系?
聚类用于找寻数据内在的分布结构,既可以作为一个单独的过程,比如异常检测等等。也可作为分类等其他学习任务的前驱过程。聚类是标准的无监督学习。
@ -1643,21 +1646,7 @@ Lassio缩减系数法、小波分析法、
但是他们虽然都能实现对数据的约减。但是二者适用的对象不同聚类针对的是数据点而降维则是对于数据的特征。另外它们着很多种实现方法。聚类中常用的有K-means、层次聚类、基于密度的聚类等降维中常用的则PCA、Isomap、LLE等。
## 2.31 GBDT和随机森林的区别
GBDT和随机森林的相同点
1、都是由多棵树组成
2、最终的结果都是由多棵树一起决定
GBDT和随机森林的不同点
1、组成随机森林的树可以是分类树也可以是回归树而GBDT只由回归树组成
2、组成随机森林的树可以并行生成而GBDT只能是串行生成
3、对于最终的输出结果而言随机森林采用多数投票等而GBDT则是将所有结果累加起来或者加权累加起来
4、随机森林对异常值不敏感GBDT对异常值非常敏感
5、随机森林对训练集一视同仁GBDT是基于权值的弱分类器的集成
6、随机森林是通过减少模型方差提高性能GBDT是通过减少模型偏差提高性能
## 2.32 四种聚类方法之比较
### 2.21.4 四种聚类方法之比较
http://www.cnblogs.com/William_Fire/archive/2013/02/09/2909499.html
@ -1709,7 +1698,7 @@ http://www.cnblogs.com/William_Fire/archive/2013/02/09/2909499.html
 (3) 重新计算新类与所有类之间的距离;
 (4) 重复(2)、(3),直到所有类最后合并成一类。
## 2.3 SOM聚类算法
### 2.21.5 SOM聚类算法
SOM神经网络[11]是由芬兰神经网络专家Kohonen教授提出的该算法假设在输入对象中存在一些拓扑结构或顺序可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。
SOM网络包含输入层和输出层。输入层对应一个高维的输入向量输出层由一系列组织在2维网格上的有序节点构成输入节点与输出节点通过权重向量连接。 学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。
@ -1722,7 +1711,7 @@ SOM网络包含输入层和输出层。输入层对应一个高维的输入向
(4) 提供新样本、进行训练;
(5) 收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。
## 2.4 FCM聚类算法
### 2.21.6 FCM聚类算法
1965年美国加州大学柏克莱分校的扎德教授第一次提出了集合的概念。经过十多年的发展模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即彼的分类缺点出现了以模糊集合论为数学基础的聚类分析。用模糊数学的方法进行聚类分析就是模糊聚类分析[12]。
@ -1760,7 +1749,21 @@ FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度
$avg=\frac{1}{k}\sum_{i=1}^{k}\frac{m_{i}}{n_{i}}$
## 2.18 大数据与深度学习之间的关系
## 2.22 GBDT和随机森林的区别
GBDT和随机森林的相同点
1、都是由多棵树组成
2、最终的结果都是由多棵树一起决定
GBDT和随机森林的不同点
1、组成随机森林的树可以是分类树也可以是回归树而GBDT只由回归树组成
2、组成随机森林的树可以并行生成而GBDT只能是串行生成
3、对于最终的输出结果而言随机森林采用多数投票等而GBDT则是将所有结果累加起来或者加权累加起来
4、随机森林对异常值不敏感GBDT对异常值非常敏感
5、随机森林对训练集一视同仁GBDT是基于权值的弱分类器的集成
6、随机森林是通过减少模型方差提高性能GBDT是通过减少模型偏差提高性能
## 2.23 大数据与深度学习之间的关系
大数据**通常被定义为“超出常用软件工具捕获,管理和处理能力”的数据集。
**机器学习**关心的问题是如何构建计算机程序使用经验自动改进。

View File

@ -1,4 +1,8 @@
# 第五章 卷积神经网络CNN修改版
[TOC]
# 第五章 卷积神经网络CNN
标签(空格分隔): 原创性 深度学习 协作
卷积神经网络负责人:
@ -7,10 +11,6 @@
铪星创新科技联合创始人-杨文英;
# 第五章 卷积神经网络CNN
标签(空格分隔): 深度学习
---
Markdown Revision 1;
Date: 2018/11/08
Editor: 李骁丹-杜克大学

View File

@ -1,3 +1,7 @@
[TOC]
# 第六章 循环神经网络(RNN)
Markdown Revision 2;

View File

@ -1,24 +1,28 @@
[TOC]
# 第七章_生成对抗网络(GAN)
## GAN的「生成」的本质是什么
## 7.1 GAN的「生成」的本质是什么
GAN的形式是两个网络GGenerator和DDiscriminator。Generator是一个生成图片的网络它接收一个随机的噪声z记做G(z)。Discriminator是一个判别网络判别一张图片是不是“真实的”。它的输入是xx代表一张图片输出Dx代表x为真实图片的概率如果为1就代表100%是真实的图片而输出为0就代表不可能是真实的图片。
GAN*生成*能力是*学习分布*引入的latent variable的noise使习得的概率分布进行偏移。因此在训练GAN的时候latent variable**不能**引入均匀分布uniform distribution),因为均匀分布的数据的引入并不会改变概率分布。
## GAN能做数据增广吗
## 7.2 GAN能做数据增广吗
GAN能够从一个模型引入一个随机数之后「生成」无限的output用GAN来做数据增广似乎很有吸引力并且是一个极清晰的一个insight。然而纵观整个GAN的训练过程Generator习得分布再引入一个Distribution(Gaussian或其他)的噪声以「骗过」Discriminator并且无论是KL Divergence或是Wasserstein Divergence本质还是信息衡量的手段在本章中其余部分介绍能「骗过」Discriminator的Generator一定是能在引入一个Distribution的噪声的情况下最好的结合已有信息。
训练好的GAN应该能够很好的使用已有的数据的信息特征或分布现在问题来了这些信息本来就包含在数据里面有必要把信息丢到Generator学习使得的结果加上噪声作为训练模型的输入吗
## VAE与GAN有什么不同
## 7.3 VAE与GAN有什么不同
1. VAE可以直接用在离散型数据。
2. VAE整个训练流程只靠一个假设的loss函数和KL Divergence逼近真实分布。GAN没有假设单个loss函数, 而是让判别器D和生成器G互相博弈以期得到Nash Equilibrium。
## 有哪些优秀的GAN
## 7.4 有哪些优秀的GAN
### DCGAN
### 7.4.1 DCGAN
### WGAN/WGAN-GP
### 7.4.2 WGAN/WGAN-GP
WGAN及其延伸是被讨论的最多的部分原文连发两文第一篇(Towards principled methods for training generative adversarial networks)非常solid的提了一堆的数学一作Arjovsky克朗所的数学能力果然一个打十几个。后来给了第二篇Wasserstein GAN可以说直接给结果了和第一篇相比第二篇更加好接受。
@ -53,42 +57,42 @@ $$JS(P_1||P_2)=\frac{1}{2}KL(P_1||\frac{P_1+P_2}{2})$$
**如何理解Wasserstein距离**
Wasserstein距离与optimal transport有一些关系并且从数学上想很好的理解需要一定的测度论的知识。
### condition GAN
### 7.4.3 condition GAN
### InfoGAN
### 7.4.4 InfoGAN
通过最大化互信息cc来生成同类别的样本。
$$L^{infoGAN}_{D,Q}=L^{GAN}_D-\lambda L_1(c,c')$$
$$L^{infoGAN}_{G}=L^{GAN}_G-\lambda L_1(c,c')$$
### CycleGAN
### 7.4.5 CycleGAN
**CycleGAN与DualGAN之间的区别**
### StarGAN
### 7.4.6 StarGAN
目前Image-to-Image Translation做的最好的GAN。
## Self-Attention GAN
### 7.4.7 Self-Attention GAN
## GAN训练有什么难点
## 7.5 GAN训练有什么难点
由于GAN的收敛要求**两个网络D&G同时达到一个均衡**
## GAN与强化学习中的AC网络有何区别
## 7.6 GAN与强化学习中的AC网络有何区别
强化学习中的AC网络也是Dual Network似乎从某个角度上理解可以为一个GAN。但是GAN本身
## GAN的可创新的点
## 7.7 GAN的可创新的点
GAN是一种半监督学习模型对训练集不需要太多有标签的数据。
## 如何训练GAN
## 7.8 如何训练GAN
判别器D在GAN训练中是比生成器G更强的网络
Instance Norm比Batch Norm的效果要更好。
使用逆卷积来生成图片会比用全连接层效果好,全连接层会有较多的噪点,逆卷积层效果清晰。
## GAN如何解决NLP问题
## 7.9 GAN如何解决NLP问题
GAN只适用于连续型数据的生成对于离散型数据效果不佳因此假如NLP方法直接应用的是character-wise的方案Gradient based的GAN是无法将梯度Back propagationBP给生成网络的因此从训练结果上看GAN中G的表现长期被D压着打。
## Reference
## 7.10 Reference
### DCGAN部分
### WGAN部分

View File

@ -1,3 +1,7 @@
[TOC]
# 第八章 目标检测
**目标检测负责人:**

View File

@ -1,10 +1,13 @@
#########################################################
### 深度学习500问-第九章 图像分割(md版本
[TOC]
作者scutan90
编辑者shw2018UESTC_孙洪卫_硕Wechatsunhwee
提交2018.10.25
更新2018.10.31
#########################################################
######
# **第九章 图像分割**
@ -223,7 +226,7 @@ learning rate0.001。
&emsp;&emsp;
(4) 最后再经过两次反卷积操作生成特征图再用两个1X1的卷积做分类得到最后的两张heatmap,例如第一张表示的是第一类的得分第二张表示第二类的得分heatmap,然后作为softmax函数的输入算出概率比较大的softmax类选择它作为输入给交叉熵进行反向传播训练。
## 下面是U-Net模型的代码实现贡献者黄钦建华南理工大学
下面是U-Net模型的代码实现贡献者黄钦建华南理工大学
```
def get_unet():

View File

@ -1,4 +1,9 @@
[TOC]
# 第十章 强化学习
## 10.1强化学习的主要特点?
其他许多机器学习算法中学习器都是学得怎样做而RL是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报。在很多场景中当前的行动不仅会影响当前的rewards还会影响之后的状态和一系列的rewards。RL最重要的3个特定在于
(1) 基本是以一种闭环的形式;

View File

@ -1,4 +1,8 @@
# 第十章 迁移学习
[TOC]
# 第十章 迁移学习
## 10.1 什么是迁移学习?
1. 找到目标问题的相似性,迁移学习任务就是从相似性出发,将旧领域(domain)学习过的模型应用在新领域上。

View File

@ -1,4 +1,9 @@
[TOC]
# 第十二章 网络搭建及训练。
## 10.1 网络搭建有什么原则?
### 10.1.1新手原则。

View File

@ -1,3 +1,7 @@
[TOC]
# 第一十三章 优化算法

View File

@ -1,3 +1,7 @@
[TOC]
# 第十四章 超参数调整
> Markdown Revision 1;

View File

@ -1,4 +1,9 @@
[TOC]
# 第十五章 异构计算, GPU和框架选型指南
深度学习训练和推理的过程中,会涉及到大量的向量(vector),矩阵(matrix)和张量(tensor)操作通常需要大量的浮点计算包括高精度在训练的时候和低精度在推理和部署的时候。GPU 作为一种通用可编程的加速器最初设计是用来进行图形处理和渲染功能但是从2007年开始英伟达(NVIDIA)公司提出了第一个可编程通用计算平台GPGPU同时提出了CUDA框架从此开启了GPU用于通用计算的新纪元。此后不计其数的科研人员和开发者对各种不同类型的算法用CUDA进行部分改写从而达到几倍到数百倍的加速效果。尤其是在机器学习特别是深度学习的浪潮来临后GPU加速已经是各类工具实现的基本底层构架之一。本章里会简单介绍GPU的基本架构性能指标框架选择等等和深度学习相关的内容。
## 15.1 什么是异构计算?
@ -156,23 +161,23 @@ cuda9.0: sudo sh cuda_9.0.176_384.81_linux.run
2 Do you accept the previously read EULA?
accept/decline/quit: **accept**
accept/decline/quit: **accept**
3 Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: **no**
(y)es/(n)o/(q)uit: **no**
4 Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: **yes**
(y)es/(n)o/(q)uit: **yes**
5 Enter Toolkit Location
[ default is /usr/local/cuda-9.0 ]: 直接按enter键即可
[ default is /usr/local/cuda-9.0 ]: 直接按enter键即可
6 Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: **yes**
(y)es/(n)o/(q)uit: **yes**
7 Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: **yes**
(y)es/(n)o/(q)uit: **yes**
以上步骤基本就是cuda的安装步骤。
@ -276,7 +281,6 @@ mxnet的最知名的优点就是其对多GPU的支持和扩展性强其优秀
### 15.8.6 未来量子计算对于深度学习等AI技术的影响
-------

View File

@ -1,3 +1,7 @@
[TOC]
# 第十六章 NLP
Markdown Revision 1;

View File

@ -1,3 +1,7 @@
[TOC]
# 第十七章 模型压缩及移动端部署
Markdown Revision 1;
@ -347,7 +351,7 @@ ncnn GitHub地址https://github.com/Tencent/ncnn
https://cloud.tencent.com/developer/article/1005805
特点:
NCNN其架构设计以手机端运行为主要原则考虑了手机端的硬件和系统差异以及调用方式。无第三方依赖跨平台手机端 CPU 的速度快于目前所有已知的开源框架。基于 ncnn开发者能够将深度学习算法轻松移植到手机端高效执行开发出人工智能 APP将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQQzone微信天天P图等。
NCNN其架构设计以手机端运行为主要原则考虑了手机端的硬件和系统差异以及调用方式。无第三方依赖跨平台手机端 CPU 的速度快于目前所有已知的开源框架。基于 ncnn开发者能够将深度学习算法轻松移植到手机端高效执行开发出人工智能 APP将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQQzone微信天天P图等。
功能:
1、NCNN支持卷积神经网络、多分支多输入的复杂网络结构如主流的 vgg、googlenet、resnet、squeezenet 等。

View File

@ -1,3 +1,7 @@
[TOC]
# 第十八章_后端架构选型、离线及实时计算
Markdown Revision 1;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 683 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@ -1,5 +0,0 @@
待完善,现有内容主要是对之前内容的整理。
还有些新内容未加上。
杨文英 写的内容还未与我的合并

View File

@ -1,315 +0,0 @@
# 第五章 卷积神经网络CNN修改版
标签(空格分隔): 原创性 深度学习 协作
卷积神经网络负责人:
重庆大学研究生-刘畅 787913208@qq.com
铪星创新科技联合创始人-杨文英;
## 5.1 卷积神经网络的组成层
在卷积神经网络中一般包含5种类型的层
> * 输入层
> * 卷积运算层
> * 激活函数层
> * 池化层
> * 全连接层
**输入层**主要包含对原始图像进行预处理,包括白化、归一化、去均值等等。
**卷积运算层**主要使用滤波器,通过设定步长、深度等参数,对输入进行不同层次的特征提取。滤波器中的参数可以通过反向传播算法进行学习。
**激活函数层**主要是将卷积层的输出做一个非线性映射。常见的激活函数包括sigmoid,tanh,Relu等。
**池化层**主要是用于参数量压缩。可以减轻过拟合情况。常见的有平均池化和最大值池化,不包含需要学习的参数。
**全连接层**主要是指两层网络,所有神经元之间都有权重连接。常见用于网络的最后一层,用于计算类别得分。
## 5.2 卷积如何检测边缘信息?
卷积运算是卷积神经网络最基本的组成部分。在神经网络中以物体识别为例特征的检测情况可大致做一下划分。前几层检测到的是一些边缘特征中间几层检测到的是物体的局部区域靠后的几层检测到的是完整物体。每个阶段特征的形成都是由多组滤波器来完成的。而其中的边缘检测部分是由滤波器来完成的。在传统的图像处理方法里面有许多边缘检测算子如canny算子。使用固定的模板来进行边缘检测。
##5.3 卷积层中的几个基本参数?
在卷积层中,有一些我们常用的参数,定义如下
###5.3.1 卷积核大小
英文名是Kernel Size:卷积核的大小定义了卷积的感受野。二维卷积的核大小选择通常是3即3×3。
###5.3.2 卷积核的步长
英文名是Stride: Stride定义了卷积核在卷积过程中的步长。虽然它的默认值通常为1但我们可以将步长设置为2可以实现类似于pooling的下采样功能。
###5.3.3 边缘填充
英文名是Padding: Padding用于填充输入图像的边界。一个(半)填充的卷积将使空间输出维度与输入相等而如果卷积核大于1则对于未被填充的图像卷积后将会使图像一些边界消失。
###5.3.4 输入和输出通道
英文名是 Input/Output Channels 一个卷积层接受一定数量的输入通道I并计算一个特定数量的输出通道O这一层所需的参数可以由I*O*K计算K等于卷积核中参数的数量。
##5.4 卷积的网络类型分类?
###5.4.1 普通卷积
普通卷积即如下图所示,使用一个固定大小的滤波器,对图像进行加权提特征。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img7.png)
###5.4.2 扩张卷积
扩张卷积又称为带孔atrous卷积或者空洞dilated卷积。在使用扩张卷积时会引入一个称作扩张率dilation rate的参数。该参数定义了卷积核内参数间的行间隔数。例如下图所示一个3×3的卷积核扩张率为2它的感受野与5×5卷积核相同而仅使用9个参数。这样做的好处是在参数量不变的情况下可以获得更大的感受野。扩张卷积在实时分割领域应用非常广泛。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img8.png)
###5.4.3 转置卷积
转置卷积也就是反卷积deconvolution。虽然有些人经常直接叫它反卷积但严格意义上讲是不合适的因为它不符合一个反卷积的概念。反卷积确实存在但它们在深度学习领域并不常见。一个实际的反卷积会恢复卷积的过程。想象一下将一个图像放入一个卷积层中。现在把输出传递到一个黑盒子里然后你的原始图像会再次出来。这个黑盒子就完成了一个反卷积。这是一个卷积层的数学逆过程。
一个转置的卷积在某种程度上是相似的,因为它产生的空间分辨率是跟反卷积后产生的分辨率相同。不同之处是在卷积核值上执行的实际数学操作。转置卷积层使用的是常规的卷积,但是它能够恢复其空间变换。
在这一点上,让我们来看一个具体的例子:
将5×5的图像送到一个卷积层。步长设置为2无边界填充而卷积核是3×3。结果得到了2×2的图像。如果我们想要逆向该过程则需要数学上的逆运算以便从输入的每个像素值中生成9个值。然后我们将步长设置为2来遍历输出图像。这就是一个反卷积过程。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img9.png)
转置卷积的实现过程则不同。为了保证输出将是一个5×5的图像在使用卷积运算时我们需要在输入上执行一些特别的填充。而这一过程并不是逆转了卷积运算它仅仅是重新构造了之前的空间分辨率并进行了卷积运算。这样的做法并不是数学上的逆过程但是很适用于编码-解码器Encoder-Decoder架构。我们就可以把图像的上采样upscaling和卷积操作结合起来而不是做两个分离的过程。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img10.png)
###5.4.4 可分离卷积
在一个可分离卷积中我们可以将内核操作拆分成多个步骤。我们用y = convxk表示卷积其中y是输出图像x是输入图像k是核大小。这一步很简单。接下来我们假设k可以由下面这个等式计算得出k = k1.dotk2。这将使它成为一个可分离的卷积因为我们可以通过对k1和k2做2个一维卷积来取得相同的结果而不是用k做二维卷积。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img11.png)
以图像处理中的Sobel算子为例。你可以通过乘以向量[10-1]和[1,2,1] .T获得相同的核大小。在执行相同的操作时你只需要6个参数而不是9个。上面的示例显示了所谓的空间可分离卷积。即将一个二维的卷积分离成两个一维卷积的操作。在神经网络中为了减少网络参数加速网络运算速度。我们通常使用的是一种叫深度可分离卷积的神经网络。
##5.5 2D卷积与3D卷积有什么区别
###5.5.1 2D卷积
二维卷积操作如图所示为了更直观的说明分别展示了单通道和多通道的操作。假定只使用了1个滤波器即输出图像只有一个channel。其中针对单通道输入图像的channel为1卷积核尺寸为 (k_h, k_w, 1),卷积核在输入图像的空间维度上进行滑窗操作,每次滑窗和 (k_h, k_w)窗口内的值进行卷积操作得到输出图像中的一个值。针对多通道假定输入图像的channel为3卷积核尺寸则为 (k_h, k_w, 3)则每次滑窗与3个channels上的 (k_h, k_w)窗口内的所有值进行卷积操作,得到输出图像中的一个值。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img12.png)
###5.5.2 3D卷积
3D卷积操作如图所示同样分为单通道和多通道且假定只使用1个滤波器即输出图像仅有一个channel。其中针对单通道与2D卷积不同之处在于输入图像多了一个length维度卷积核也多了一个k_l维度因此3D卷积核的尺寸为k_h, k_w, k_l),每次滑窗与 (k_h, k_w, k_l)窗口内的值进行相关操作得到输出3D图像中的一个值.针对多通道则与2D卷积的操作一样每次滑窗与3个channels上的 (k_h, k_w, k_l) 窗口内的所有值进行相关操作得到输出3D图像中的一个值。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img13.png)
##5.6 有哪些池化方法?
在构建卷积神经网络时,经常会使用池化操作,而池化层往往在卷积层后面,通过池化操作来降低卷积层输出的特征维度,同时可以防止过拟合现象。池化操作可以降低图像维度的原因,本质上是因为图像具有一种“静态性”的属性,这个意思是说在一个图像区域有用的特征极有可能在另一个区域同样有用。因此,为了描述一个大的图像,很直观的想法就是对不同位置的特征进行聚合统计。例如,可以计算图像在固定区域上特征的平均值 (或最大值)来代表这个区域的特征。[1]
###5.7.1 一般池化General Pooling
池化操作与卷积操作不同,过程如下图。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img14.png)
池化操作过程如图所示对固定区域的特征使用某一个值来表示。最常见的池化操作有两种分为平均池化mean pooling和最大池化max pooling
1、平均池化计算图像区域的平均值作为该区域池化后的值。
2、最大池化选图像区域的最大值作为该区域池化后的值。
上述的池化过程,相邻的池化窗口间没有重叠部分。
###5.7.2 重叠池化General Pooling
重叠池化即是一种相邻池化窗口之间会有重叠区域的池化技术。论文中[2]中作者使用了重叠池化其他的设置都不变的情况下top-1和top-5 的错误率分别减少了0.4% 和0.3%。
###5.7.3 空金字塔池化Spatial Pyramid Pooling
空间金字塔池化可以将任意尺度的图像卷积特征转化为相同维度这不仅可以让CNN处理任意尺度的图像还能避免cropping和warping操作导致一些信息的丢失。一般的卷积神经网络都需要固定输入图像大小这是因为全连接层的输入需要固定输入维度但在卷积操作时并没有对图像大小有限制所以作者提出了空间金字塔池化方法先让图像进行卷积操作然后使用SPP方法转化成维度相同的特征最后输入到全连接层。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img17.png)
根据论文作者所述空间金字塔池化的思想来自于Spatial Pyramid Model,它是将一个pooling过程变成了多个尺度的pooling。用不同大小的池化窗口作用于卷积特征这样就可以得到1X1,2X2,4X4的池化结果由于conv5中共有256个滤波器所以得到1个256维的特征4个256个特征以及16个256维的特征然后把这21个256维特征链接起来输入全连接层通过这种方式把不同大小的图像转化成相同维度的特征。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img18.png)
对于不同的图像如果想要得到相同大小的pooling结果就需要根据图像大小动态的计算池化窗口大小和步长。假设conv5输出的大小为a*a需要得到n*n大小的池化结果可以让窗口大小sizeX为[a/n],步长为[a/n]。下图展示了以conv5输出大小是13*13为例spp算法的各层参数。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img19.png)
总结来说SPP方法其实就是一种使用多个尺度的池化方法可以获取图像中的多尺度信息。在卷积神经网络中加入SPP后可以让CNN处理任意大小的输入这让模型变得更加的灵活。
##5.8 1x1卷积作用
1×1的卷积主要有以下两个方面的作用
1. 实现信息的跨通道交互和整合。
2. 对卷积核通道数进行降维和升维,减小参数量。
下面详细解释一下:
**第一点 实现信息的跨通道交互和整合**
对1×1卷积层的探讨最初是出现在NIN的结构论文作者的动机是利用MLP代替传统的线性卷积核从而提高网络的表达能力。文中从跨通道池化的角度进行解释认为文中提出的MLP其实等价于在传统卷积核后面接cccp层从而实现多个feature map的线性组合实现跨通道的信息整合。而查看代码实现cccp层即等价于1×1卷积层。
**第二点 对卷积核通道数进行降维和升维,减小参数量**
1x1卷积层能带来降维和升维的效果在一系列的GoogLeNet中体现的最明显。对于每一个Inception模块如下图左图是原始模块右图是加入1×1卷积进行降维的模块。虽然左图的卷积核都比较小但是当输入和输出的通道数很大时卷积核的参数量也会变的很大而右图加入1×1卷积后可以降低输入的通道数因此卷积核参数、运算复杂度也就大幅度下降。以GoogLeNet的3a模块为例输入的feature map是28×28×1923a模块中1×1卷积通道为643×3卷积通道为128,5×5卷积通道为32如果是左图结构那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层这样卷积核参数就变成了1×1×192×64+1×1×192×96+3×3×96×128+1×1×192×16+5×5×16×32参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量
左图pooling后feature map是不变的再加卷积层得到的feature map
会使输出的feature map扩大到416如果每个模块都这样网络的输出会越来越大。而右图在pooling后面加了通道数为32的1×1卷积使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后得到了更为紧凑的网络结构虽然总共有22层但是参数数量却只是8层AlexNet的十二分之一当然其中也有丢掉全连接层的原因。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img20.png)
而非常经典的ResNet结构同样也使用了1×1卷积并且是在3×3卷积层的前后都使用了不仅进行了降维还进行了升维使得卷积层的输入和输出的通道数都减小参数数量进一步减少如下图结构所示。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img21.png)
##5.9 卷积核是否一定越大越好?
首先,给出答案。不是。
在AlexNet网络结构中用到了一些非常大的卷积核比如11×11、5×5卷积核。之前研究者的想法是卷积核越大receptive field感受野越大因此获得的特征越好。虽说如此但是大的卷积核会导致计算量大幅增加不利于训练更深层的模型而相应的计算性能也会降低。于是在VGG、Inception网络中实验发现利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳同时参数量3×3×2+1 VS 5×5×1+1会更少因此后来3×3卷积核被广泛应用在各种模型中。
多个小卷积核的叠加使用远比一个大卷积核单独使用效果要好的多,在连通性不变的情况下,大大降低了参数量和计算复杂度。当然,卷积核也不是越小越好,对于特别稀疏的数据,当使用比较小的卷积核的时候可能无法表示其特征,如果采用较大的卷积核则会导致复杂度极大的增加。
总而言之,我们多倾向于选择多个相对小的卷积核来进行卷积。
##5.10 每层卷积是否只能用一种尺寸的卷积核?
经典的神经网络都属于层叠式网络并且每层仅用一个尺寸的卷积核例如VGG结构中使用了大量的3×3卷积层。事实上同一层feature map可以分别使用多个不同尺寸的卷积核以获得不同尺度的特征再把这些特征结合起来得到的特征往往比使用单一卷积核的要好例如GoogLeNet、Inception系列的网络均是每层使用了多个卷积核结构。如下图所示输入的feature map在同一层分别经过1×1、3×3、5×5三种不同尺寸的卷积核再将分别得到的特征进行组合。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img24.png)
##5.11 在进行卷积操作时,必须同时考虑通道和区域吗?
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img27.png)
标准的卷积过程可以看上图一个2×2的卷积核在卷积时对应图像区域中的所有通道均被同时考虑那么问题来了为什么一定要同时考虑图像区域和通道呢能不能将通道和空间区域分开考虑
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img28.png)
Xception网络由此诞生。我们首先对每一个通道进行各自的卷积操作有多少个通道就有多少个过滤器。得到新的通道feature maps之后这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作。这种操作被称为 “DepthWise convolution”称为深度可分离卷积。在imagenet 1000类分类任务中取得了非常鲁棒的效果同时也减少了大量的参数。我们可以通过一个例子来算一算使用深度可分离卷积能d假设输入通道数为3要求输出通道数为256。
1. 使用标准的卷积操作使用3×3×256的卷积核参数量为3×3×3×256 = 6,912
2. 使用深度可分离的结构分两步完成。参数量为3×3×3 + 3×1×1×256 = 795。
参数量仅为标准卷积的九分之一! 因此使用depthwise操作比标准的卷积操作在降低不少参数量的同时得到了更好的分类效果。
##5.12 在卷积操作后,输出特征图(图像)大小如何计算?
在进行卷积操作时往往根据需要我们需设定一些参数。常见的参数有卷积核大小k, 窗口滑动的步长s, 进行填充的像素p, 假设输入特征图大小为Iw*Iw。则由以下公式可计算出输出特征图的大小Ow。
O_w = \frac{(I_w - k + 2p))}{s} + 1
##5.13 卷积神经网络的经验参数设置
对于卷积神经网络的参数设置,没有很明确的指导原则,以下仅是一些经验集合。
1、learning-rate 学习率学习率越小模型收敛花费的时间就越长但是可以逐步稳健的提高模型精确度。一般初始设置为0.1然后每次除以0.2或者0.5来改进,得到最终值;
2、batch-size 样本批次容量影响模型的优化程度和收敛速度需要参考你的数据集大小来设置具体问题具体分析一般使用32或64在计算资源允许的情况下可以使用大batch进行训练。有论文提出大batch可以加速训练速度并取得更鲁棒的结果
3、weight-decay 权重衰减用来在反向传播中更新权重和偏置一般设置为0.005或0.001
4、epoch-number 训练次数包括所有训练样本的一个正向传递和一个反向传递训练至模型收敛即可和迭代次数iteration不一样
总之,不是训练的次数越多,测试精度就会越高。会有各种原因导致过拟合,比如一种可能是预训练的模型太复杂,而使用的数据集样本数量太少,种类太单一。
##5.14 提高泛化能力的方法总结(代码示例)
本节主要以代码示例来说明可以提高网络泛化能力的方法。
代码实验是基于mnist数据集mnist是一个从0到9的手写数字集合共有60000张训练图片10000张测试图片。每张图片大小是28*28大小。目的就是通过各种手段来构建一个高精度的分类神经网络。
###5.14.1 手段
一般来说,提高泛化能力的方法主要有以下几个:
> * 使用正则化技术
> * 增加神经网络层数
> * 使用恰当的代价函数
> * 使用权重初始化技术
> * 人为增广训练集
> * 使用dropout技术
###5.14.2 主要方法
下面我们通过实验结果来判断每种手段的效果。
1普通的全连接神经网络
网络结构使用一个隐藏层其中包含100个隐藏神经元输入层是784输出层是one-hot编码的形式最后一层是Softmax层。损失函数采用对数似然代价函数60次迭代学习速率η=0.1随机梯度下降的小批量数据mini-SGD大小为10没使用正则化。在测试集上得到的结果是97.8%,代码如下:
```python
>>> import network3
>>> from network3 import Network
>>> from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer
>>> training_data, validation_data, test_data = network3.load_data_shared()
>>> mini_batch_size = 10
>>> net = Network([FullyConnectedLayer(n_in=784, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
```
2使用卷积神经网络 — 仅一个卷积层
输入层是卷积层卷积核大小是5*5一共20个特征映射。最大池化层的大小为2*2。后面接一层100个隐藏神经元的全连接层。结构如图所示
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img62.png)
在这个结构中我们把卷积层和池化层看做是训练图像的特征提取而后的全连接层则是一个更抽象层次的特征提取整合全局信息。同样设定是60次迭代批量数据大小是10学习率是0.1.代码如下,
```python
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)),
FullyConnectedLayer(n_in=20*12*12, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1,
validation_data, test_data)
```
经过三次运行取平均后准确率是98.78%提高得较多。错误率降低了1/3。
3使用卷积神经网络 — 两个卷积层
我们接着插入第二个卷积层把它插入在之前结构的池化层和全连接层之间同样是使用5*5的局部感受野2*2的池化层。
```python
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2)),
FullyConnectedLayer(n_in=40*4*4, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
```
这一次准确率达到了99.06%。
4使用卷积神经网络 — 两个卷积层+线性修正单元(ReLU)+正则化
上面的网络结构我们使用的是Sigmod激活函数现在我们换成线性修正激活函数ReLU 同样设定参数为60次迭代学习速率η=0.03使用L2正则化正则化参数λ=0.1,代码如下:
```python
>>> from network3 import ReLU
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
```
这一次准确率达到了99.23%超过了使用sigmoid激活函数的99.06%. ReLU的优势是当取最大极限时梯度不会饱和。
5卷积神经网络 —两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集
拓展训练集数据的一个简单方法是将每个训练图像由一个像素来代替无论是上一个像素下一个像素或者左右的像素。其他的方法也有改变亮度改变分辨率图片旋转扭曲位移等。我们把50000幅图像人为拓展到250000幅图像。使用与第四小节一样的网络因为我们训练时使用了5倍的数据所以减少了过拟合的风险。
```python
>>> expanded_training_data, _, _ = network3.load_data_shared(
"../data/mnist_expanded.pkl.gz")
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
```
这次得到了99.37的训练正确率。
6卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层
继续上面的网络我们拓展全连接层的规模使用300个隐藏神经元和1000个神经元的额精度分别是99.46%和99.43%.
```python
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
FullyConnectedLayer(n_in=100, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
```
这次取得了99.43%的精度。拓展后的网络并没有帮助太多。
7卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+拓展数据集+继续插入额外的全连接层+dropout技术
dropout的基本思想就是在训练网络时随机的移除单独的激活值使得模型更稀疏不太依赖于训练数据的特质。我们尝试应用dropout到最终的全连接层(而不是在卷积层)。由于训练时间将迭代次数设置为40全连接层使用1000个隐藏神经元因为dropout会丢弃一些神经元。Dropout是一种非常有效且能提高泛化能力降低过拟合的方法
```python
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(
n_in=40*4*4, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
FullyConnectedLayer(
n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)],
mini_batch_size)
>>> net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,
validation_data, test_data)
```
使用dropout得到了99.60%的准确率。
8卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层+弃权技术+组合网络
组合网络类似于随机森林或者adaboost的集成方法创建几个神经网络让他们投票来决定最好的分类。我们训练了5个不同的神经网络每个都大到了99.60%的准去率用这5个网络来进行投票表决一个图像的分类。
采用这种集成方法精度又得到了微小的提升达到了99.67%。
##5.15 卷积神经网络凸显共性的方法?
###5.15.1 局部连接
我们首先了解一个概念,感受野,即每个神经元仅与输入神经元相连接的一块区域。
在图像卷积操作中,神经元在空间维度上是局部连接,但在深度上是全连接。局部连接的思想,是受启发于生物学里的视觉系统结构,视觉皮层的神经元就是仅用局部接受信息。对于二维图像,局部像素关联性较强。这种局部连接保证了训练后的滤波器能够对局部特征有最强的响应,使神经网络可以提取数据的局部特征;
下图是一个很经典的图示,左边是全连接,右边是局部连接。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img63.png)
对于一个1000 × 1000的输入图像而言如果下一个隐藏层的神经元数目为10^6个采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数如此巨大的参数量几乎难以训练而采用局部连接隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接那么此时的权值参数数量为10 × 10 × 10^6 = 10^8将直接减少4个数量级。
###5.15.2 权值共享
权值共享,即计算同一深度的神经元时采用的卷积核参数是共享的。权值共享在一定程度上讲是有意义的,是由于在神经网络中,提取的底层边缘特征与其在图中的位置无关。但是在另一些场景中是无意的,如在人脸识别任务,我们期望在不同的位置学到不同的特征。
需要注意的是,权重只是对于同一深度切片的神经元是共享的。在卷积层中,通常采用多组卷积核提取不同的特征,即对应的是不同深度切片的特征,而不同深度切片的神经元权重是不共享。相反,偏置这一权值对于同一深度切片的所有神经元都是共享的。
权值共享带来的好处是大大降低了网络的训练难度。如下图假设在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像因此有10 × 10个权值参数将这10 × 10个权值参数共享给剩下的神经元也就是说隐藏层中10^6个神经元的权值参数相同那么此时不管隐藏层神经元的数目是多少需要训练的参数就是这 10 × 10个权值参数也就是卷积核的大小
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img64.png)
这里就体现了卷积神经网络的奇妙之处使用少量的参数却依然能有非常出色的性能。上述仅仅是提取图像一种特征的过程。如果要多提取出一些特征可以增加多个卷积核不同的卷积核能够得到图像不同尺度下的特征称之为特征图feature map
###5.16 举例理解Local-Conv的作用
并不是所有的卷积都会进行权重共享在某些特定任务中会使用不权重共享的卷积。下面通过人脸这一任务来进行讲解。在读人脸方向的一些paper时会发现很多都会在最后加入一个Local Connected Conv也就是不进行权重共享的卷积层。总的来说这一步的作用就是使用3D模型来将人脸对齐从而使CNN发挥最大的效果。
![image](https://github.com/scutan90/DeepLearning-500-questions/blob/master/img/ch5/img66.png)
截取论文中的一部分图经过3D对齐以后形成的图像均是152×152输入到上述的网络结构中。该结构的参数如下
Conv32个11×11×3的卷积核
max-pooling: 3×3stride=2
Conv: 16个9×9的卷积核
Local-Conv: 16个9×9的卷积核
Local-Conv: 16个7×7的卷积核
Local-Conv: 16个5×5的卷积核
Fully-connected: 4096维
Softmax: 4030维。
前三层的目的在于提取低层次的特征比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但不能使用更多的Max-pooling层因为太多的Max-pooling层会使得网络损失图像信息。全连接层将上一层的每个单元和本层的所有单元相连用来捕捉人脸图像不同位置特征之间的相关性。最后使用softmax层用于人脸分类。
中间三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:
1对齐的人脸图片中不同的区域会有不同的统计特征因此并不存在特征的局部稳定性所以使用相同的卷积核会导致信息的丢失。
2不共享的卷积核并不增加inference时特征的计算量仅会增加训练时的计算量。
使用不共享的卷积核,由于需要训练的参数量大大增加,因此往往需要通过其他方法增加数据量。