1.随机初始化参数(w和b):根据对称性原理,如果不随机初始化,一层神经网络几个神经元进行计算都是一样的,无论训练多长时间。所以需要随机初始化,一般初始化的w值比较小,因为对于sigmod,tanh这样的激活函数,一开始值太大,会导致收敛速度很慢。
1.1梯度爆炸与梯度消失:神经网络输出值与w存在指数关系。W > 1时梯度会以指数关系上升;w < 1时以指数关系下降。
1.2神经网络权重初始化:权重w初始化在1附近能减轻梯度爆炸与梯度消失。Z = w1 * x1 + w2 * x2 +…+ wn * xn。所以n(注意这里n指的是该层特征数,即上一层行数nl-1 ,而非该层神经元个数,神经元个数是此层输出行数nl )越大,希望w越小。不同激活函数有不同常用初始化方式,X表示服从N(0,1)的随机数:
Relu:X * np.sqrt(2 / nl-1 )
Tanh:X * np.sqrt(1 / nl-1 )或X * np.sqrt(2 / (nl-1 + nl )
2.1欠拟合和过拟合:
2.1.1欠拟合:会导致偏差高
2.1.2过拟合:会导致方差大
2.2测试集、验证集和训练集:尽量选取自同一分布,否则出现数据不匹配问题:模型在你希望表现好的分布的数据上表现得不好。数据量很大时测试集和验证集所占比例可以很小(数量够多就可以)。
验证集和测试集一定来自同一分布,其为模型学习确定方向。数据不足时,为了保证方向正确,可以牺牲训练集与验证集分布的一致性(如果验证集、测试集数据足够,可以把多出的一部分放入训练集),方向正确是第一位的。
3.偏差和方差:
3.1偏差:模型在训练集上的表现和自然界最优之间差距
可避免偏差:模型在训练集表现与贝叶斯误差(理论最低误差,人类水平的上限)之间的差距。
降低偏差的方法:
3.1.1训练更大的模型;
3.1.2使用更好的优化算法;
3.1.3改变神经网络的结构、找更好的超参数。
3.2方差:模型在训练集和验证集表现的差异
降低方差的方法:
3.2.1训练更多的数据;
3.2.2正则化(减小过拟合):L2正则化,dropout,数据扩增。
3.2.3改变神经网络的结构、找更好的超参数。
3.3模型在验证集和测试集表现有较大差异说明过拟合比较严重。
4.减轻过拟合的方法:
4.1 L2正则化:在成本函数最后加上L2范数(弗罗贝尼乌斯范数):
(λ/2m) * w的平方和,以减轻过拟合现象。λ为0时很容易出现过拟合现象;λ为无穷大时,削减了很多隐藏单元的作用,使得神经网络变得简单,容易欠拟合。
4.2 Dropout正则化:设置神经元失效的概率(keep-prob),训练过程神经元随机失效。从而减轻对神经元w权重的依赖,减轻过拟合。Mini-batch选取越大,dropout正则化效果越小。
4.3其他方法:
4.3.1数据扩增:图片镜像、随机裁剪、色彩转换等方式扩大训练集(训练集小,容易发生过拟合)。
4.3.2 Early-stop:训练过程训练集效果会梯度下降,但验证集会先下降后上升。Early-stop会提前结束梯度下降,防止过拟合、方差增大。但是这个不符合正交化思想——它让偏差和方差同时改变。优点在于不用像L2正则化训练超参数λ。
5.评估指标:设置评估指标相当于给模型学习确定了方向。如果后期发现方向需要修改,就要修改评估指标。
5.1单实数评估指标:综合不同评估指标,进行一维比较。
5.2优化指标和满足指标:满足指标是个阈值,必须要达到,达到后不再比较;优化指标尽量优化。一般达到满足指标的模型,谁在优化指标做得好,可以说谁更适用于该场景。
6.误差分析:找到使模型出错样本,对它们进行分类,从而可知导致模型出错的各种特征所占百分比,评估某种错误纠正后模型正确率能提高多少。