基于Theano的深度学习(Deep Learning)框架Keras学习随笔-08-规则化(规格化)

时间:2021-07-28 13:54:32

        原地址:http://blog.csdn.net/niuwei22007/article/details/49228095可以查看更多文章

通过前几篇的介绍,网络已经选择好了优化器、目标函数、模型以及激活函数。并且给权值选择了初始化方法。那么接下来就是训练。训练过程后会出现什么问题呢?过拟合!而有效解决过拟合的方法就是加入规则项。具体的规则化请见http://blog.csdn.net/niuwei22007/article/details/48929935中对于规则化的介绍。

一、如何使用规则化项

        规则化项是一个对于权值参数的惩罚项。它包含在代价函数中。

        在Keras的Dense LayerTimeDistributedDense LayerMaxoutDense LayerConvolution1D LayerConvolution2D Layer中有一个统一的API用来应用规则化项。

        上面这些层有3个关键的参数:

  • W_regularizer:实例化于 keras.regularizers.WeightRegularizer(对权值规则化)
  • b_regularizer:实例化于keras.regularizers.WeightRegularizer (对偏置规则化)
  • activity_regularizer:实例化于keras.regularizers.ActivityRegularizer  (对激活值规则化,也就是权值与矩阵点乘以后的输出规则化)

        这里对W和b的规则化用的同一个类,因为他们的实现方式基本差不多。然而日常使用的时候,很少对b进行规则化。即使对b规则化了,结果只有一点点的改善。因此经常使用的是对W的规则化。

        使用示例代码如下:

from keras.regularizers import l2, activity_l2
model.add(Dense(64, input_dim=64, W_regularizer=l2(0.01), activity_regularizer=activity_l2(0.01)))

二、可用的规则化项

        可用的规则化项类有2个,一个是WeightRegularizer,可以实例化W和b规则化项;另外一个是ActivityRegularizer,可以实例化activity_regularizer。

keras.regularizers.WeightRegularizer(l1=0., l2=0.)
keras.regularizers.ActivityRegularizer(l1=0., l2=0.)

        其中,这里的预置了l1和l2两种规则化项,也是最常用的两种。L1和 l2代表什么意思呢?如何推导计算的?移步这里

三、快捷函数

        在keras.regularizers中有几个快捷函数可以使用:

  • l1(l=0.01):只使用L1权值规则化,比如LASSO算法
  • l2(l=0.02):只使用L2 权值规则化,比如常用的权值衰减算法和Ridge算法。
  • l1l2(l1=0.01, l2=0.02):同时使用 L1L2规则化项,比如ElasticNet
  • activity_l1(l = 0.01):L1activity规则化
  • activity_l2(l = 0.02):L2activity 规则化
  • activity_l1l2(l1=0.01,l2=0.02):L1+L2activity规则化 

参考资料: