全局更新目录,及有些格式
|
|
@ -1,5 +1,3 @@
|
|||
###
|
||||
|
||||
[TOC]
|
||||
|
||||
|
||||
|
|
@ -84,7 +82,7 @@
|
|||
下面这张图就是一个神经网络系统,它由很多层组成。输入层负责接收信息,比如一只猫的图片。输出层是计算机对这个输入信息的判断结果,它是不是猫。隐藏层就是对输入信息的传递和加工处理。
|
||||

|
||||
|
||||
## 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|1)adaboost是一种有很高精度的分类器。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 @@ $$
|
|||
|
||||

|
||||
|
||||
### 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 梯度下降法直观理解?
|
||||
梯度下降法经典图示:
|
||||
|
||||

|
||||
|
|
@ -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 Analysis,LDA)是一种经典的降维方法。
|
||||
|
||||
|
|
@ -608,7 +606,7 @@ LDA分类思想简单总结如下:
|
|||
3. 对数据进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定样本的类别。
|
||||
如果用一句话概括LDA思想,即“投影后类内方差最小,类间方差最大”。
|
||||
|
||||
### 2.34 图解LDA核心思想
|
||||
### 2.14.2 图解LDA核心思想
|
||||
假设有红、蓝两类数据,这些数据特征均为二维,如下图所示。我们的目标是将这些数据投影到一维,让每一类相近的数据的投影点尽可能接近,不同类别数据尽可能远,即图中红色和蓝色数据中心之间的距离尽可能大。
|
||||
|
||||

|
||||
|
|
@ -623,7 +621,7 @@ LDA分类思想简单总结如下:
|
|||
|
||||
以上例子是基于数据是二维的,分类后的投影是一条直线。如果原始数据是多维的,则投影后的分类面是一低维的超平面。
|
||||
|
||||
### 2.35 二类LDA算法原理?
|
||||
### 2.14.3 二类LDA算法原理?
|
||||
输入:数据集TODO,其中样本TODO是n维向量,TODO,TODO降维后的目标维度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是标准正交基,即TODO,TODO。经过降维后,新坐标为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 机器学习中的Bias,Error和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|预测为正例1,P|预测为负例0,N|
|
||||
|:-:|:-|:-|
|
||||
|
|
@ -911,11 +913,11 @@ TODO其映射为TODO
|
|||
|预测为正例1,P|TP(预测为1,实际为1)|FP(预测为1,实际为0)|
|
||||
|预测为负例0,N|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曲线的面积就是AUC(Area Under the Curve)。
|
||||
|
|
@ -957,7 +959,7 @@ TODO, TODO,
|
|||
经过以上分析,ROC曲线越接近左上角,该分类器的性能越好。
|
||||
|
||||
ROC曲线所覆盖的面积称为AUC(Area 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
|
|||
|
||||

|
||||
|
||||
### 2.47.11 如何计算TPR,FPR?
|
||||
### 2.16.13 如何计算TPR,FPR?
|
||||
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_{
|
|||
|
||||

|
||||
|
||||
### 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 决策树学习基本算法
|
||||
|
||||

|
||||
|
||||
### 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。支持向量机,其含义是通过支持向量
|
|||
|
||||

|
||||
|
||||
### 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 大数据与深度学习之间的关系
|
||||
|
||||
大数据**通常被定义为“超出常用软件工具捕获,管理和处理能力”的数据集。
|
||||
**机器学习**关心的问题是如何构建计算机程序使用经验自动改进。
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
# 第五章 卷积神经网络(CNN)(修改版)
|
||||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第五章 卷积神经网络(CNN)
|
||||
|
||||
标签(空格分隔): 原创性 深度学习 协作
|
||||
卷积神经网络负责人:
|
||||
|
|
@ -7,10 +11,6 @@
|
|||
|
||||
铪星创新科技联合创始人-杨文英;
|
||||
|
||||
# 第五章 卷积神经网络(CNN)
|
||||
|
||||
标签(空格分隔): 深度学习
|
||||
---
|
||||
Markdown Revision 1;
|
||||
Date: 2018/11/08
|
||||
Editor: 李骁丹-杜克大学
|
||||
|
|
@ -1,3 +1,7 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第六章 循环神经网络(RNN)
|
||||
|
||||
Markdown Revision 2;
|
||||
|
|
|
|||
|
|
@ -1,24 +1,28 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第七章_生成对抗网络(GAN)
|
||||
|
||||
## GAN的「生成」的本质是什么?
|
||||
## 7.1 GAN的「生成」的本质是什么?
|
||||
GAN的形式是:两个网络,G(Generator)和D(Discriminator)。Generator是一个生成图片的网络,它接收一个随机的噪声z,记做G(z)。Discriminator是一个判别网络,判别一张图片是不是“真实的”。它的输入是x,x代表一张图片,输出D(x)代表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
|
||||
通过最大化互信息(c,c’)来生成同类别的样本。
|
||||
|
||||
$$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 propagation(BP)给生成网络的,因此从训练结果上看,GAN中G的表现长期被D压着打。
|
||||
## Reference
|
||||
## 7.10 Reference
|
||||
### DCGAN部分:
|
||||
|
||||
### WGAN部分:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第八章 目标检测
|
||||
|
||||
**目标检测负责人:**
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
#########################################################
|
||||
### 深度学习500问-第九章 图像分割(md版本)
|
||||
|
||||
|
||||
[TOC]
|
||||
|
||||
作者:scutan90
|
||||
编辑者:shw2018(UESTC_孙洪卫_硕,Wechat:sunhwee)
|
||||
提交:2018.10.25
|
||||
更新:2018.10.31
|
||||
#########################################################
|
||||
|
||||
######
|
||||
|
||||
# **第九章 图像分割**
|
||||
|
||||
|
|
@ -223,7 +226,7 @@ learning rate:0.001。
|
|||
  
|
||||
(4) 最后再经过两次反卷积操作,生成特征图,再用两个1X1的卷积做分类得到最后的两张heatmap,例如第一张表示的是第一类的得分,第二张表示第二类的得分heatmap,然后作为softmax函数的输入,算出概率比较大的softmax类,选择它作为输入给交叉熵进行反向传播训练。
|
||||
|
||||
## 下面是U-Net模型的代码实现:(贡献者:黄钦建-华南理工大学)
|
||||
下面是U-Net模型的代码实现:(贡献者:黄钦建-华南理工大学)
|
||||
|
||||
```
|
||||
def get_unet():
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第十章 强化学习
|
||||
|
||||
## 10.1强化学习的主要特点?
|
||||
其他许多机器学习算法中学习器都是学得怎样做,而RL是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报。在很多场景中,当前的行动不仅会影响当前的rewards,还会影响之后的状态和一系列的rewards。RL最重要的3个特定在于:
|
||||
(1) 基本是以一种闭环的形式;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
# 第十章 迁移学习
|
||||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第十章 迁移学习
|
||||
|
||||
## 10.1 什么是迁移学习?
|
||||
1. 找到目标问题的相似性,迁移学习任务就是从相似性出发,将旧领域(domain)学习过的模型应用在新领域上。
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第十二章 网络搭建及训练。
|
||||
|
||||
## 10.1 网络搭建有什么原则?
|
||||
|
||||
### 10.1.1新手原则。
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第一十三章 优化算法
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第十四章 超参数调整
|
||||
|
||||
> Markdown Revision 1;
|
||||
|
|
|
|||
|
|
@ -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技术的影响?
|
||||
|
||||
|
||||
-------
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第十六章 NLP
|
||||
|
||||
Markdown Revision 1;
|
||||
|
|
|
|||
|
|
@ -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 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。
|
||||
NCNN其架构设计以手机端运行为主要原则,考虑了手机端的硬件和系统差异以及调用方式。无第三方依赖,跨平台,手机端 CPU 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。
|
||||
|
||||
功能:
|
||||
1、NCNN支持卷积神经网络、多分支多输入的复杂网络结构,如主流的 vgg、googlenet、resnet、squeezenet 等。
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
[TOC]
|
||||
|
||||
|
||||
|
||||
# 第十八章_后端架构选型、离线及实时计算
|
||||
|
||||
Markdown Revision 1;
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 683 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 178 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 503 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
|
@ -1,5 +0,0 @@
|
|||
|
||||
待完善,现有内容主要是对之前内容的整理。
|
||||
还有些新内容未加上。
|
||||
|
||||
杨文英 写的内容还未与我的合并
|
||||
|
|
@ -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 普通卷积
|
||||
普通卷积即如下图所示,使用一个固定大小的滤波器,对图像进行加权提特征。
|
||||

|
||||
###5.4.2 扩张卷积
|
||||
扩张卷积,又称为带孔(atrous)卷积或者空洞(dilated)卷积。在使用扩张卷积时,会引入一个称作扩张率(dilation rate)的参数。该参数定义了卷积核内参数间的行(列)间隔数。例如下图所示,一个3×3的卷积核,扩张率为2,它的感受野与5×5卷积核相同,而仅使用9个参数。这样做的好处是,在参数量不变的情况下,可以获得更大的感受野。扩张卷积在实时分割领域应用非常广泛。
|
||||

|
||||
###5.4.3 转置卷积
|
||||
转置卷积也就是反卷积(deconvolution)。虽然有些人经常直接叫它反卷积,但严格意义上讲是不合适的,因为它不符合一个反卷积的概念。反卷积确实存在,但它们在深度学习领域并不常见。一个实际的反卷积会恢复卷积的过程。想象一下,将一个图像放入一个卷积层中。现在把输出传递到一个黑盒子里,然后你的原始图像会再次出来。这个黑盒子就完成了一个反卷积。这是一个卷积层的数学逆过程。
|
||||
|
||||
一个转置的卷积在某种程度上是相似的,因为它产生的空间分辨率是跟反卷积后产生的分辨率相同。不同之处是在卷积核值上执行的实际数学操作。转置卷积层使用的是常规的卷积,但是它能够恢复其空间变换。
|
||||
|
||||
在这一点上,让我们来看一个具体的例子:
|
||||
将5×5的图像送到一个卷积层。步长设置为2,无边界填充,而卷积核是3×3。结果得到了2×2的图像。如果我们想要逆向该过程,则需要数学上的逆运算,以便从输入的每个像素值中生成9个值。然后,我们将步长设置为2来遍历输出图像。这就是一个反卷积过程。
|
||||

|
||||
转置卷积的实现过程则不同。为了保证输出将是一个5×5的图像,在使用卷积运算时,我们需要在输入上执行一些特别的填充。而这一过程并不是逆转了卷积运算,它仅仅是重新构造了之前的空间分辨率并进行了卷积运算。这样的做法并不是数学上的逆过程,但是很适用于编码-解码器(Encoder-Decoder)架构。我们就可以把图像的上采样(upscaling)和卷积操作结合起来,而不是做两个分离的过程。
|
||||

|
||||
|
||||
###5.4.4 可分离卷积
|
||||
在一个可分离卷积中,我们可以将内核操作拆分成多个步骤。我们用y = conv(x,k)表示卷积,其中y是输出图像,x是输入图像,k是核大小。这一步很简单。接下来,我们假设k可以由下面这个等式计算得出:k = k1.dot(k2)。这将使它成为一个可分离的卷积,因为我们可以通过对k1和k2做2个一维卷积来取得相同的结果,而不是用k做二维卷积。
|
||||

|
||||
以图像处理中的Sobel算子为例。你可以通过乘以向量[1,0,-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)窗口内的所有值进行卷积操作,得到输出图像中的一个值。
|
||||

|
||||
###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图像中的一个值。
|
||||

|
||||
|
||||
##5.6 有哪些池化方法?
|
||||
在构建卷积神经网络时,经常会使用池化操作,而池化层往往在卷积层后面,通过池化操作来降低卷积层输出的特征维度,同时可以防止过拟合现象。池化操作可以降低图像维度的原因,本质上是因为图像具有一种“静态性”的属性,这个意思是说在一个图像区域有用的特征极有可能在另一个区域同样有用。因此,为了描述一个大的图像,很直观的想法就是对不同位置的特征进行聚合统计。例如,可以计算图像在固定区域上特征的平均值 (或最大值)来代表这个区域的特征。[1]
|
||||
|
||||
###5.7.1 一般池化(General Pooling)
|
||||
池化操作与卷积操作不同,过程如下图。
|
||||

|
||||
池化操作过程如图所示,对固定区域的特征,使用某一个值来表示。最常见的池化操作有两种,分为平均池化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方法转化成维度相同的特征,最后输入到全连接层。
|
||||

|
||||
根据论文作者所述,空间金字塔池化的思想来自于Spatial Pyramid Model,它是将一个pooling过程变成了多个尺度的pooling。用不同大小的池化窗口作用于卷积特征,这样就可以得到1X1,2X2,4X4的池化结果,由于conv5中共有256个滤波器,所以得到1个256维的特征,4个256个特征,以及16个256维的特征,然后把这21个256维特征链接起来输入全连接层,通过这种方式把不同大小的图像转化成相同维度的特征。
|
||||

|
||||
对于不同的图像,如果想要得到相同大小的pooling结果,就需要根据图像大小动态的计算池化窗口大小和步长。假设conv5输出的大小为a*a,需要得到n*n大小的池化结果,可以让窗口大小sizeX为[a/n],步长为[a/n]。下图展示了以conv5输出大小是13*13为例,spp算法的各层参数。
|
||||

|
||||
|
||||
总结来说,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×192,3a模块中1×1卷积通道为64,3×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的十二分之一,当然其中也有丢掉全连接层的原因。
|
||||

|
||||
而非常经典的ResNet结构,同样也使用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图结构所示。
|
||||

|
||||
|
||||
|
||||
##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三种不同尺寸的卷积核,再将分别得到的特征进行组合。
|
||||

|
||||
|
||||
##5.11 在进行卷积操作时,必须同时考虑通道和区域吗?
|
||||

|
||||
标准的卷积过程可以看上图,一个2×2的卷积核在卷积时,对应图像区域中的所有通道均被同时考虑,那么问题来了,为什么一定要同时考虑图像区域和通道呢?能不能将通道和空间区域分开考虑?
|
||||

|
||||
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个隐藏神经元的全连接层。结构如图所示
|
||||

|
||||
在这个结构中,我们把卷积层和池化层看做是训练图像的特征提取,而后的全连接层则是一个更抽象层次的特征提取,整合全局信息。同样设定是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 局部连接
|
||||
我们首先了解一个概念,感受野,即每个神经元仅与输入神经元相连接的一块区域。
|
||||
在图像卷积操作中,神经元在空间维度上是局部连接,但在深度上是全连接。局部连接的思想,是受启发于生物学里的视觉系统结构,视觉皮层的神经元就是仅用局部接受信息。对于二维图像,局部像素关联性较强。这种局部连接保证了训练后的滤波器能够对局部特征有最强的响应,使神经网络可以提取数据的局部特征;
|
||||
下图是一个很经典的图示,左边是全连接,右边是局部连接。
|
||||

|
||||
对于一个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个权值参数(也就是卷积核的大小)。
|
||||

|
||||
这里就体现了卷积神经网络的奇妙之处,使用少量的参数,却依然能有非常出色的性能。上述仅仅是提取图像一种特征的过程。如果要多提取出一些特征,可以增加多个卷积核,不同的卷积核能够得到图像不同尺度下的特征,称之为特征图(feature map)。
|
||||
|
||||
###5.16 举例理解Local-Conv的作用
|
||||
并不是所有的卷积都会进行权重共享,在某些特定任务中,会使用不权重共享的卷积。下面通过人脸这一任务来进行讲解。在读人脸方向的一些paper时,会发现很多都会在最后加入一个Local Connected Conv,也就是不进行权重共享的卷积层。总的来说,这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。
|
||||

|
||||
截取论文中的一部分图,经过3D对齐以后,形成的图像均是152×152,输入到上述的网络结构中。该结构的参数如下:
|
||||
Conv:32个11×11×3的卷积核
|
||||
max-pooling: 3×3,stride=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时特征的计算量,仅会增加训练时的计算量。
|
||||
使用不共享的卷积核,由于需要训练的参数量大大增加,因此往往需要通过其他方法增加数据量。
|
||||