一、机器学习正则化
无论是机器学习还是深度学习,正则化都是一项关键的技术。其实现阶段,我们的模型都可以在训练集上去的比较好的效果,但我们的模型在测试集上的效果才是我们所关心的,因此正则化就显得尤为重要,正则化可以防止模型过拟合,增加鲁棒性。
总的来说,监督学习的核心原理就是如下公式 :
![损失函数](https://i-blog.csdnimg.cn/blog_migrate/342bf4d45a863b5dc6d0795fa6b7c458.png)
该公式分为两部分, 前一项是经验最小化,后一项为正则项。
经验最小化是为了极大程度的拟合训练数据,正则项则是为了防止过分拟合训练数据。机器学习中的正则项有L1正则和L2正则。
在聊这两个正则前,我们先说说L0正则。L0正则也就是矩阵中所有非0元素的个数,对于L0正则的理解就是希望参数矩阵W的大多数元素都为0,这样正则项就会很小。此时,可能会有人会说L1正则不就是在干这个事吗?这里面的原理,扯就一大堆,简答说:在机器学习中, L0和L1正则都可以实现矩阵的稀疏性,但在实践中,L1的泛化求解特征更好一些,所以人们大多使用L1正则而不是用L0正则。对于L1正则而言,L1范式就是矩阵中各个元素绝对值之和。至于为啥稀疏,稀疏的作用,主要是为了特征的选择和易于解释模型。
![L1正则化](https://i-blog.csdnimg.cn/blog_migrate/1e00236939684a7bd1abfd1a8223aeab.png)
![L2正则化](https://i-blog.csdnimg.cn/blog_migrate/28bd6d0ebf2e773e9ed437083b3c4f73.png)
此时就会出现经常会问到的问题,为什么L1相对于L2会得到稀疏解?
角度1:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f222239bb28366104e633ed33a1363f1.png)
L2正则化项约束的解空间是一个圆形,那么它和等高线相交的地方不太容易出现在坐标轴上(也就是很多项为0的解)。
L1正则则不一样,它的解是一个多边形,菱角比较多,那么它和等高线相交的地方很容易是菱角(即很多w为0的地方)
角度2
从贝叶斯的角度看,这些所谓的正则项不就是说模型的预测的参数W是一个不确定的变量(也就是最后W的结果不是一个定值),那么这些不定值存在一个扰动,也就是后面的正则项。L2正则化对应模型参数W引入高斯先验,L1正则对应的模型参数为拉普拉斯先验。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6f811a7a21b64c38a7002ac9a8b82172.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0518d6b7f929ef2a0f293cfc46d7dc3b.png)
对于 高斯分布,W取0的位置,图像是平滑的,也就是说取0附近的概率和0差不多;
对于 拉普拉斯分布,W取0的位置,图像十分陡峭,也就是说取0附近的概率比0要小一些,导致取0的情况要多一些。
二、droupout
Dropout是指在深度网络训练中,以一定概率随机的临时丢弃部分神经元。是‘临时丢弃’,不是代表‘永久性失活’。由于是‘临时丢弃’,那么也就是说可能这神经元在本轮丢弃掉,但下一轮又重新参与训练。那么按照这个逻辑,每一轮的训练相当于一个模型,然后将所有模型融合在一起,每一轮模型之间没有联系,这不就是bagging的思想吗?对,就是类似于bagging的思想。由于随机的失活,droupout也就起到了正则化的效果。其实droupout的原理很好懂,但就是理解起来很困难。还有就是代码实现感觉很抽象。
下面就是关于dropout使用numpy实现的部分代码
##dropout前项传播
def forward_propagation_with_dropout(X, parameters, keep_prob = 0.5):
np.random.seed(<