原地址:http://blog.csdn.net/niuwei22007/article/details/49228095可以查看更多文章
通过前几篇的介绍,网络已经选择好了优化器、目标函数、模型以及激活函数。并且给权值选择了初始化方法。那么接下来就是训练。训练过程后会出现什么问题呢?过拟合!而有效解决过拟合的方法就是加入规则项。具体的规则化请见http://blog.csdn.net/niuwei22007/article/details/48929935中对于规则化的介绍。
一、如何使用规则化项
规则化项是一个对于权值参数的惩罚项。它包含在代价函数中。
在Keras的Dense Layer、TimeDistributedDense Layer、MaxoutDense Layer、Convolution1D Layer和Convolution2D 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规则化