2018年4月27日

[TF.6]正则化Regularization

模型选择的典型方法是正则化(Regularization),正则化是结构风险最小化策略的视线,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term),正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。 —————《统计学习方法》李航

L0正则化

L0范数是指向量中非0的元素的个数,很难优化求解(NP难问题)

L1正则化

L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。
L1正则化根据权重的绝对值的总和来惩罚权重。在依赖稀疏特征的模型中,L1 正则化有助于使不相关或几乎不相关的特征的权重正好为 0,从而将这些特征从模型中移除,有助于减小模型。但如果正则化率过高,该模型便不能收敛,损失也会很高。

L2正则化

L2正则化根据权重的平方和来惩罚权重。L2 正则化有助于使离群值(具有较大正值或较小负值)权重接近于 0,但又不正好为 0。在线性模型中,L2 正则化始终可以改进泛化,有助于防止过拟合

工程化

正则化代码

正则化会降低训练速度

# FtrlOptimizer 是一种使用L1正则化的方法,能比标准梯度下降法得到更好结果
my_optimizer = tf.train.FtrlOptimizer(learning_rate=learning_rate, **l1_regularization_strength=regularization_strength**)
my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)

计算模型大小

#该函数深入使用了 Estimator API
def model_size(estimator):
  variables = estimator.get_variable_names()
  size = 0
  for variable in variables:
    if not any(x in variable
               for x in ['global_step',
                         'centered_bias_weight',
                         'bias_weight',
                         'Ftrl']
              ):
      size += np.count_nonzero(estimator.get_variable_value(variable))
  return size
Share

You may also like...

发表评论

您的电子邮箱地址不会被公开。