仅以此图,催眠我学习deep learning的动力!
深度学习的实质无非如此:根据模型产生的误差调整模型中的诸多权重,直到误差不能再减少为止
Bias(偏差)&Variance(方差)&Error(误差)的区别
首先Error = Bias + Variance
Error
反映的是整个模型的准确度Bias
反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度Variance
反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的精确性
在一个实际系统中,Bias与Variance往往是不能兼得的。如果要降低模型的Bias,就一定程度上会提高模型的Variance,反之亦然。造成这种现象的根本原因是,我们总是希望试图用有限训练样本去估计无限的真实数据。当我们更加相信这些数据的真实性,而忽视对模型的先验知识,就会尽量保证模型在训练样本上的准确度,这样可以减少模型的Bias。但是,这样学习到的模型,很可能会失去一定的泛化能力,从而造成过拟合,降低模型在真实数据上的表现,增加模型的不确定性。相反,如果更加相信我们对于模型的先验知识,在学习模型的过程中对模型增加更多的限制,就可以降低模型的variance,提高模型的稳定性,但也会使模型的Bias增大。Bias与Variance两者之间的trade-off(权衡)是机器学习的基本主题之一。
- 准:bias描述的是根据样本拟合出的模型的输出预测结果的期望与样本真实结果的差距,简单讲,就是在样本上拟合的好不好。要想在bias上表现好,low bias,就得复杂化模型,增加模型的参数,但这样容易过拟合 (overfitting),过拟合对应上图是high variance,点很分散。low bias对应就是点都打在靶心附近,所以瞄的是准的,但手不一定稳。
- 确:varience描述的是样本上训练出来的模型在测试集上的表现,要想在variance上表现好,low varience,就要简化模型,减少模型的参数,但这样容易欠拟合(unfitting),欠拟合对应上图是high bias,点偏离中心。low variance对应就是点都打的很集中,但不一定是靶心附近,手很稳,但是瞄的不准。
什么是欠拟合(unfitting)&过拟合(overfitting)
- 欠拟合就是模型能力不足,偏差大。(图1:higt bias)
- 过拟合就是模型对于训练数据拟合过于完美,方差大。(图3:high variance)
如何解决欠拟合
调整模型参数,增加样本数量
如何解决过拟合
减少特征数量,手动选择一些需要保留的特征,正则化(regularization)。常见正则化有L2正则(常用),L1正则
ps:所以正则化就是为了解决过拟合,why?
模型参数&超参数
- 模型参数就是模型内部的配置变量,可以用数据估计它的值
- 模型超参数是模型外部的配置,其值不能从数据估计得到
模型参数的一些例子包括:
- 神经网络中的权重
- 支持向量机中的支持向量
- 线性回归或逻辑回归中的系数
参数用来处理输入数据的系数,神经网络在学习过程中不断调整参数,直至能准确预测――此时就得到了一个比较准确的模型
模型超参数的一些例子包括:
- 训练神经网络的学习速率(learning rate)
- 支持向量机的C和sigma超参数
- k邻域中的k
每一项超参数就如同一道菜里的一种食材:取决于食材好坏,这道菜也许非常可口,也可能十分难吃……
神经网络的激活函数
为什么要有激活函数?加入激活函数是用来加入非线性因素的,解决线性模型所不能解决或者很难解决的问题。参考link
输出层的激活函数相当于逻辑回归函数,例如softmax。该层函数的选择具体取决于你更能容忍哪一类的错误:选择标准过低会增加取伪错误的数量,标准过高会增加弃真错误的数量
归一化
归一化方法:把数变为(0,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。加快收敛,把各个特征的尺度控制在相同的范围内,加快梯度下降
梯度下降
常见的为随机梯度下降(Stochastic Gradient Descent,SGD).是一种用于优化代价函数的常见方法. – 参考Andrew Ng的机器学习课程第2节
学习速率(learning rate)
即每次迭代时对于权重的调整幅度,亦称步幅。学习速率越高,神经网络“翻越”整个误差曲面的速度就越快,但也更容易错过误差极小点。学习速率较低时,网络更有可能找到极小值,但速度会变得非常慢,因为每次权重调整的幅度都比较小.
其实就是梯度下降每次下降的步幅
动量(Momentum)
动量是另一项决定优化算法向最优值收敛的速度的因素。
如果您想要加快定型速度,可以提高动量。但定型速度加快可能会降低模型的准确率。
更深入来看,动量是一个范围在0~1之间的变量,是矩阵变化速率的导数的因数。它会影响权重随时间变化的速率。
训练网络时,通常先对网络的初始权值按照某种分布进行初始化,如:高斯分布。初始化权值操作对最终网络的性能影响比较大,合适的网络初始权值能够使得损失函数在训练过程中的收敛速度更快,从而获得更好的优化结果。但是按照某类分布随机初始化网络权值时,存在一些不确定因素,并不能保证每一次初始化操作都能使得网络的初始权值处在一个合适的状态。不恰当的初始权值可
能使得网络的损失函数在训练过程中陷入局部最小值,达不到全局最优的状态。因此,如何消除这种不确定性,是训练深度网络是必须解决的一个问题。
momentum 动量能够在一定程度上解决这个问题。momentum 动量是依据物理学的势能与动能之间能量转换原理提出来的。当 momentum 动量越大时,其转换为势能的能量也就越大,就越有可能摆脱局部凹域的束缚,进入全局凹域。momentum 动量主要用在权重更新的时候。
一般,神经网络在更新权值时,采用如下公式: w = w - learning_rate * dw
,引入momentum后,采用如下公式:
v = mu * v - learning_rate * dw
w = w + v
其中,v初始化为0,mu是设定的一个超变量,最常见的设定值是0.9。可以这样理解上式:如果上次的momentum(v)与这次的负梯度方向是相同的,那这次下降的幅度就会加大,从而加速收敛。
什么是隐层(hidden layer)
隐藏层中的每个节点表示数据集中数据的一项特征。模型的系数按照重要性大小为这些特征赋予权重,随后在每个隐藏层中重新相加,帮助预测。节点的层数更多,网络就能处理更复杂的因素,捕捉更多细节,进而做出更准确的预测。
之所以将中间的层称为“隐藏”层,是因为人们可以看到数据输入神经网络、判定结果输出,但网络内部的数据处理方式和原理并非一目了然。神经网络模型的参数其实就是包含许多数字、计算机可以读取的长向量
如何选择神经网络
下表列出了各种不同的问题和每种问题最适用的神经网络:
数据类型 | 应用案例 | 输入 | 变换 | 神经网络 |
---|---|---|---|---|
文本 | 情感分析 | 词向量 | 高斯修正 | RNTN或DBN(采用移动窗口) |
文本 | 命名实体识别 | 词向量 | 高斯修正 | RNTN或DBN(采用移动窗口) |
文本 | 词性标注 | 词向量 | 高斯修正 | RNTN或DBN(采用移动窗口) |
文本 | 词性标注 | 词向量 | 高斯修正 | RNTN或DBN(采用移动窗口) |
文本 | 语义角色标记 | 词向量 | 高斯修正 | RNTN或DBN(采用移动窗口) |
文档 | 主题建模/语义哈希(无监督) | 词频概率 | 可为二进制 | 深度自动编码器(包装一个DBN或SDA) |
文档 | 文档分类(有监督) | TF-IDF(或词频概率) | 二进制 | 深度置信网络、堆叠式降噪自动编码器 |
图像 | 图像识别 | 二进制 | 二进制(可见及隐藏层) | 深度置信网络 |
图像 | 图像识别 | 连续 | 高斯修正 | 深度置信网络 |
图像 | 多对象识别 | N/A | 高斯修正 | 卷积网络、RNTN(图像向量化) |
图像 | 图像搜索/语义哈希 | N/A | 高斯修正 | 深度自动编码器(包装一个DBN) |
声音 | 语音识别 | N/A | 高斯修正 | 循环网络 |
声音 | 语音识别 | N/A | 高斯修正 | 移动窗口,DBN或卷积网络 |
时间序列 | 预测分析 | N/A | 高斯修正 | 循环网络 |
时间序列 | 预测分析 | N/A | 高斯修正 | 移动窗口,DBN或卷积网络 |
注:高斯修正 = Gaussian Rectified | 语义哈希 = Semantic Hashing