调参技巧

一、参数和超参数

参数即是我们在过程中想要模型学习到的信息(模型自己能计算出来的),例如 $W^{[l]}$,$b^{[l]}$。

超参数(hyper parameters)即为控制参数的输出值的一些网络信息(需要人经验判断)。超参数的改变会导致最终得到的参数 $W^{[l]}$,$b^{[l]}$ 的改变。

典型的超参数有:
(1)学习速率:α
(2)迭代次数:N
(3)隐藏层的层数:L
(4)每一层的神经元个数:$n^{[1]}$,$n^{[2]}$,…
(5)激活函数 g(z) 的选择

当开发新应用时,预先很难准确知道超参数的最优值应该是什么。因此,通常需要尝试很多不同的值。应用深度学习领域是一个很大程度基于经验的过程。

比如常见的梯度下降问题,好的超参数能使你尽快收敛:

sgd_good
sgd_bad

深度学习笔记

神经网络初始化权重为什么不能初始化为0

将所有权重初始化为零将无法破坏网络的对称性。这意味着每一层的每个神经元都会学到相同的东西,这样的神经元网络并不比线性分类器如逻辑回归更强大。

需要注意的是,需要初始化去破坏网络对称性(symmetry)的只有W,b可以全部初始化为0。

模型评估指标

分类模型评估指标

常见的分类模型评估指标有:准确率/召回率/精准率/F值
1)准确率(Accuracy) = 预测正确的样本数/总样本数
2)召回率(Recall) = 预测正确的正例样本数/样本中的全部正例样本数
3)精准率(Precision) = 预测正确的正例样本数/预测为正例的样本数
4)F值 = PrecisionRecall2 / (Precision+Recall) (即F值为正确率和召回率的调和平均值)

激活函数

什么是激活函数,为什么要用非线性激活函数

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

不用激活函数或使用线性激活函数,和直接使用 Logistic 回归没有区别,因为无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,就成了最原始的感知器了。

非线性激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。非线性激励函数最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入。

梯度消失与梯度爆炸

什么是梯度消失和梯度爆炸,分别会引发什么问题

我们知道神经网络在训练过程中会利用梯度对网络的权重进行更新迭代。
当梯度出现指数级递减或指数递增时,称为梯度消失或者梯度爆炸。

假定激活函数 $g(z) = z$, 令 $b^{[l]} = 0$,对于目标输出有:
$\hat{y} = W^{[L]}W^{[L-1]}…W^{[2]}W^{[1]}X$
1)对于 W[l]的值小于 1 的情况,激活函数的值将以指数级递减
2)对于 W[l]的值大于 1 的情况,激活函数的值将以指数级递增
同理的情况会出现在反向求导。

梯度消失时,权重更新缓慢,训练难度大大增加。梯度消失相对梯度爆炸更常见。
梯度爆炸时,权重大幅更新,网络变得不稳定。较好的情况是网络无法利用训练数据学习,最差的情况是权值增大溢出,变成网络无法更新的 NaN 值。

特征工程

特征工程是什么

数据和特征决定机器学习上限,而模型和算法只是逼近这个上限
特征工程目的:最大限度地从原始数据中提取特征以供算法和模型使用


数据清洗

数据清洗的结果直接关系到模型效果以及最终的结论。在实际的工作中,数据清洗通常占开发过程的 50%-80% 的时间。

在数据预处理过程主要考虑两个方面,如下:

  • 选择数据处理工具:关系型数据库戒者Python
  • 查看数据的元数据以及数据特征:一是查看元数据,包括字段解释、数据来源等一切可以描述数据的信息;另外是抽取一部分数据,通过人工查看的方式,对数据本身做一个比较直观的了解,并且初步发现一些问题,为之后的数据处理做准备。

缺省值清洗

缺省值是数据中最常见的一个问题,处理缺省值有很多方式,主要包括以下四个步骤进行缺省值处理:

  • 确定缺省值范围
  • 去除不需要的字段
  • 填充缺省值内容
  • 重新获取数据

注意:最重要的是 缺省值内容填充。

特征选择

待整理,需要合并指”特征工程文档中”。。。

机器学习中,有哪些特征选择的工程方法

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已

  • 计算每一个特征与响应变量的相关性
    工程上常用的手段有计算皮尔逊系数互信息系数皮尔逊系数只能衡量线性相关性,而**互信息系数能够很好地度量各种相关性,但是计算相对复杂一些,好在很多toolkit里边都包含了这个工具(如sklearn的MINE),得到相关性之后就可以排序选择特征了;

  • 构建单个特征的模型,通过模型的准确性为特征排序,借此来选择特征;

  • 通过L1正则项来选择特征
    L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验;

  • 训练能够对特征打分的预选模型
    RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型;

  • 通过特征组合后再来选择特征
    如对用户id和用户特征最组合来获得较大的特征集再来选择特征,这种做法在推荐系统和广告系统中比较常见,这也是所谓亿级甚至十亿级特征的主要来源,原因是用户数据比较稀疏,组合特征能够同时兼顾全局模型和个性化模型。

  • 通过深度学习来进行特征选择
    目前这种手段正在随着深度学习的流行而成为一种手段,尤其是在计算机视觉领域,原因是深度学习具有自动学习特征的能力,这也是深度学习又叫unsupervised feature learning的原因。从深度学习模型中选择某一神经层的特征后就可以用来进行最终目标模型的训练了。

卷积层、池化层和全连接层详解

为什么使用卷积

相比标准神经网络,对于大量的输入数据,卷积过程有效地减少了 CNN 的参数数量,原因有以下两点:

  • 参数共享(Parameter sharing):特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。即在卷积过程中,不管输入有多大,一个特征探测器(滤波器)就能对整个输入的某一特征进行探测。

  • 稀疏连接(Sparsity of connections):在每一层中,由于滤波器的尺寸限制,输入和输出之间的连接是稀疏的,每个输出值只取决于输入在局部的一小部分值。
    池化过程则在卷积后很好地聚合了特征,通过降维来减少运算量。

由于 CNN 参数数量较小,所需的训练样本就相对较少,因此在一定程度上不容易发生过拟合现象。并且 CNN 比较擅长捕捉区域位置偏移。即进行物体检测时,不太受物体在图片中位置的影响,增加检测的准确性和系统的健壮性。

然后这篇文章, 从感受视野的角度出发,解释了参数共享、稀疏连接、平移不变性等

然后卷积层可以看做全连接的一种简化形式:不全连接+不参数共享。所以全连接层的参数才如此之多。

过拟合与欠拟合

什么是过拟合和欠拟合

欠拟合:算法不太符合样本的数据特征
过拟合:算法太符合样本的数据特征,对实际生产中的数据特征却无法拟合

过拟合(overfitting)具体现象体现为,随着训练过程的进行,模型复杂度增加,在训练集上的错误率渐渐减小,但是在验证集上的错误率却渐渐增大。

特征过多,特征数量级过大,训练数据过少,都可能导致过度拟合。过拟合会让模型泛化能力变差。