深度学习: Regularization (正则化)

Introduction

正则化,regularization,也即 约束 。是防止过拟合的诸多手段之一,很常用。

通过 限制 参数值域空间,显式地 控制了 模型复杂度,从而避免了过拟合。

对应total loss中的 decay loss

正则化手段

正则化手段包括了: L1正则化、L2正则化、Elastic网络正则化、最大范数约束、随机失活、使用验证集。

L1正则化

假设待正则的网络层参数为 ωω\omega 。

l1=λ||ω||1=∑i|ωi|l1=λ||ω||1=∑i|ωi|

l_{1} = \lambda || \omega ||_{1} = \sum_{i} | \omega_{i} |

λλ\lambda :取值越大,则对模型复杂度的 约束程度 越大。

L2正则化

深度学习中

机器学习中

L2正则化 的 别名

权重衰减 (weight decay)

岭回归 (ridge regression)

l2=12λ||ω||22l2=12λ||ω||22

l_{2} = \frac{1}{2} \lambda || \omega ||_{2}^{2}

Note

  • 现在正则化一般用L2正则化,因为其便于求导,从而方便优化;
  • L1正则化求导不易,大家一般不用。

Elastic网络正则化

Elastic网络正则化 = L1正则化 + L2正则化

功效

L1正则化

约束参数量级 + 稀疏化参数(可以造就更多的0值)

L2正则化

(只能)约束参数量级

lElastic=l1+l2=λ1||ω||1+λ2||ω||22lElastic=l1+l2=λ1||ω||1+λ2||ω||22

l_{Elastic} = l_{1} + l_{2} = \lambda_{1} || \omega ||_{1} + \lambda_{2} || \omega ||_{2}^{2}

最大范数约束

最大范数约束,max norm constraints,通过 向 参数量级的范数 设置上限,从而正则化 (即 约束) 模型复杂度。

||ω||2<c||ω||2<c

|| \omega ||_{2} < c

ccc:一般取 103∼104103∼10410^3 \sim 10^4 数量级。

随机失活

随机失活,dropout,2012年于AlexNet中被提出。

Note : - 只针对 全连接层 进行操作; - 训练阶段和测试阶段的操作不同。

训练阶段

按概率p 随机 将神经元 置 0 [如下(b)图],以 缓解 神经元之间 隐形的协同适应,从而达到降低模型复杂度的目的:

别看dropout之后的网络只是原网络的一个 子网络 ,复杂度不比原网络。但由于每个神经元的dropout是 随机dropout,因此每一轮都相当于在一个 新的 子网络上训练。那么最终得到的模型便是 无数个 子网络 共同训练 的成果,效果自然会更好。

然后麻烦也来了,训练阶段的每个神经元要事先添加一道概率流程:

对应的公式变化如下如下:

  • 没有dropout的神经网络:
  • 有dropout的神经网络:

Tensorflow 中的 dropout API 如下:

tf.nn.dropout

其中,根据 keep_prob参数项 随机进行 dropout 。

# coding=utf-8

import tensorflow as tf
import numpy as np

inputs = np.random.uniform(-10, 10, size=[3, 3])
features = tf.placeholder_with_default(input=inputs, shape=[3, 3])

# 随机失活
output_dropout = tf.nn.dropout(features, keep_prob=0.5)

with tf.Session() as sess:
    print '\nfeatures :\n', sess.run(features)
    print '\n----------\n'
    print '\ndropout :\n', sess.run(output_dropout)
features :
[[ 0.53874537 -3.09047282 -2.88714205]
 [-1.92602402 -1.56025457  3.64309646]
 [-9.13147387  8.37367913 -7.9849204 ]]

----------

dropout :
[[  0.          -6.18094565  -5.77428411]
 [ -0.          -3.12050914   7.28619293]
 [-18.26294775  16.74735827  -0.        ]]

测试阶段

所有 神经元均呈 激活态,但其权重 需乘上 ppp 以保证各权重能有和 训练阶段 相同的 期望值

使用验证集

具体见:深度学习: 验证集 & 测试集 区别


[1] 解析卷积神经网络—深度学习实践手册 [2] 理解dropout

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

增加检测类别?这是一份目标检测的基础指南

14750
来自专栏机器之心

入门 | 如何通过梯度检验帮助实现反向传播

14050
来自专栏null的专栏

可扩展机器学习——梯度下降(Gradient Descent)

注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图...

40670
来自专栏专知

【最新TensorFlow1.4.0教程03】利用Eager Execution构建和训练卷积神经网络(CNN)

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

42050
来自专栏AI研习社

基于 Keras 对深度学习模型进行微调的全面指南 Part 2

本部分属该两部系列中的第二部分,该系列涵盖了基于 Keras 对深度学习模型的微调。第一部分阐述微调背后的动机和原理,并简要介绍常用的做法和技巧。本部分将详细地...

15330
来自专栏计算机视觉战队

分割算法——可以分割一切目标(各种分割总结)

周末应该是一个好好休息的时间,但是一定会有在默默努力科研的你,由于最近是开学季,很多关注的朋友一直会问“计算机视觉战队平台有基础性的内容吗?”,今天我和大家说一...

75840
来自专栏ATYUN订阅号

Python中的白噪声时间训练

白噪声是时间序列预测中的一个重要概念。如果一个时间序列是白噪声,它是一个随机数序列,不能预测。如果预测误差不是白噪声,它暗示了预测模型仍有改进空间。 在本教程中...

89560
来自专栏郭耀华‘s Blog

MaxPooling的作用

13820
来自专栏大数据挖掘DT机器学习

Python实现:KNN分类算法

1、KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优...

512130
来自专栏AI研习社

Inception Network 各版本演进史

Inception 网络是卷积神经网络 (CNN) 分类器发展中的一个重要里程碑。在 inception 之前, 大多数流行的 CNN 只是将卷积层堆叠得越来越...

15130

扫码关注云+社区

领取腾讯云代金券