[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