偏差和方差以及正则化处理
在构建完成神经网络后,我们会对数据进行处理,使得算法在合理的时间进行训练。但是如何在验证和训练数据集的过程中做出决策,以及训练过程中的偏差和方差,和如何处理这些问题而出现的正则化处理。
1、训练 / 开发 / 测试集
- 在一般的开发过程中,我们会将数据分为训练集,验证集和测试集,接着我们对训练集进行训练,然后通过验证集进行简单的验证,最后通过测试机进行无偏差的预测,在小数据时代,通常是将数据进行7/3分,70%的训练数据,30%的测试数据,或者 6/2/2,60%的训练数据,20%的验证数据,20%的测试数据,但是在大数据时代,我们的数据可能是百万级别的,那么验证集和测试集占数据的总量就会趋于更小的值,我们可能不需要20%的数据作为测试数据,比如说我们有100W条数据,我们可能只需要1w条数据就可以估计单个分类器的性能,需要1w条数据作为测试集,即,训练集占98%,验证数据1%,测试数据1%,如果数据量更大,训练数据可会达到99%。在现在的开发过程中,这样的数据划分是比较准确的。
- 在如今的深度学习过程中,很多人选择测试数据和训练数据不是统同一分布,假如你要构建一个对猫进行分类的平台,有的人将训练数据从网上进行爬取,而通过你的平台用户进行上传图片作为训练数据,你从网上爬取的数据可能比较精良,经过了后期处理。但是,用户上传的图片却可能是模糊的,分辨率不是很高,这样可能会导致模型训练时间比较长,准确率降低。
- 但是只要你遵循一个规则,就是增大自己的训练的数据,无论这个数是从什么渠道得到的,这样的话,你的机器学习的算法会变得很快。
2、偏差和方差
- 数据的分布情况可能会影响算法的偏差和方差,从而帮助我们更好的选择更优的算法模型,偏差和方差这两个概念是易懂难精的计量单位。
- 在对数据进行分类时,如上图所示,图1,是没有对数据进行很好的划分,也就是我们所说的欠拟合,此时训练数据的误差可能是15%,测试数据的误差可能能是18%,这就是高偏差,和高方差,图3,是对训练数据进行了过拟合,在次模型中,训练数据的误差可能是1%,测试数据的误差则可能是15%,此时就是出现了低偏差,高方差,而在图2中,算法训练的误差率不是很高越是很低,训练数据的误差率可能是1%,而测试数据的误差率可能是2%,则次算法是我们期望得到的。
- 假设人的辨别的错误率接近0%,一般来说最优误差也被称为贝叶斯误差,最优值为0%,如果最有误差很高,比如说15%,现在有一个分类器的训练数据的误差率也为15%,测试数据的误差率为16%,则这个分类器也是低偏差,低误差的,因为误差出现的原因是数据的模糊造成的,在人的辨别误差率都为15%,更不要说机器了。
3、正则化
- 如果你发现了数据发生了过拟合行为,也就是高方差,那么你最先想到的方法可能是正则化,另一个解决高方差的方法就是准备更多的数据,这也是非常可靠的方法,但是在实际的分析过程中,数据的获取可能是很难的情况,所以我们不得不对我们的算法进行正则化优化操作,以逻辑斯蒂回归为例,成本函数为: m i n w , b J ( w , b ) min_{w, b}J(w, b) minw,bJ(w,b) J ( w , b ) = 1 m ∑ i = 1 m ξ ( y ^ i , y i ) + λ 2 m ∣ ∣ w ∣ ∣ 2 2 J(w, b) = \frac{1}{m}\sum_{i=1}{m}\xi(\hat{y}^i, y^i) + \frac{\lambda}{2m}||w||_2^2 J(w,b)=m1i=1∑mξ(y^i,yi)+2mλ∣∣w∣∣22 ∣ ∣ w ∣ ∣ 2 2 = ∑ j = 1 n w j 2 = w T w ||w||_2^2 = \sum_{j=1}^n w_j^2 = w^Tw ∣∣w∣∣22=j=1∑nwj2=wTw也就是向量参数w的欧几里得范数平方,此方法也称为L2正则化,因为这里使用了欧几里得法线,这里只正则化了w,添加b的正则也是可以的,因为b只是一个数字而w则是一个高维的变量,所以一般b忽略不计。
- L1正则化加的不是L2范数,KaTeX parse error: Undefined control sequence: \lamdba at position 51: …_i}|w| = \frac{\̲l̲a̲m̲d̲b̲a̲}{2m}||w||_1,如果使用L1正则化,w最终是稀疏的,也就是w向量中有很多的0,有人数是利于压缩数据,可能会减少内存的使用,但是即使向量中存在很多的0,也没有降低太多的内存,所以降低内存不是L1的目的。
- λ \lambda λ是正则化参数,我们通常使用验证集或者交叉验证来配置这个参数,尝试各种各样的数据,寻找最好的参数,我们要考虑训练集之间的权衡,将参数的正常值设置维较小的值,这样可以避免过拟合
- 以上是逻辑斯蒂回归总正则化的实现,那么在神经网络中的正则化的实现是这样的: J ( w [ 1 ] , b [ 1 ] , . . . . . . w [ l ] , b [ l ] ) = 1 m ∑ i = 1 m ξ ( y ^ i , y i ) + λ 2 m ∣ ∣ w [ l ] ∣ ∣ F 2 J(w^{[1]}, b^{[1]}, ...... w^{[l]}, b^{[l]}) = \frac{1}{m}\sum_{i=1}{m}\xi(\hat{y}^{i}, y^i) + \frac{\lambda}{2m}||w^{[l]}||_F^2 J(w[1],b[1],......w[l],b[l])=m1i=1∑mξ(y^i,yi)+2mλ∣∣w[l]∣∣F2,我们称||w1||2为范数平方,这个矩阵范数通常被定义为, ∣ ∣ w [ i ] ∣ ∣ 2 = ∑ i = 1 n [ l − 1 ] ∑ j = 1 n [ l ] ( w i j [ l ] ) 2 ||w^{[i]}||^2 = \sum_{i=1}^{n^[l-1]}\sum_{j=1}^{n^[l]}(w_{ij}^{[l]})^2 ∣∣w[i]∣∣2=i=1∑n[l−1]j=1∑n[l](wij[l])2,w是一个n[l-1][l]的多维矩阵,n[l-1]表示隐藏单元的数量,n[l]表示l层单元的数量
d w [ l ] = 反 向 传 播 的 计 算 结 果 + d j d w [ l ] dw^[l] = 反向传播的计算结果+ \frac{dj}{dw^{[l]}} dw[l]=反向传播的计算结果+dw[l]dj w [ l ] = w [ l ] − a ( d w [ l ] + λ 2 m ∣ ∣ w [ l ] ∣ ∣ F 2 ) w^{[l]} = w^{[l]} - a(dw^{[l]} + \frac{\lambda}{2m}||w^{[l]}||_F^2) w[l]=w[l]−a(dw[l]+2mλ∣∣w[l]∣∣F2)增加了一个正则项,从而较少这个参数的权重,,这就是L2有时候也被称为权重衰减的原因。
望您:
“情深不寿,强极则辱,谦谦君子,温润如玉”。
i ↩︎