🦖
Wii
  • 原码补码反码
  • Archive
    • Job
      • Learn
      • 算法
      • Company
        • HundunDaxue
      • Company
      • 基础
        • 原码补码反码
      • 项目经验
      • require
    • Hobbies
      • Physics
        • 上帝粒子
        • 概述
        • 时间
      • Movie
        • MovieList
      • Psychology
        • Psychology
        • Chenli
          • ChenliLivingRoom
      • Philosophy
        • Philosophy
        • Conceptions
        • 导言
      • Travel
        • City
          • 昆明
          • 沈阳
        • articles-check-list
      • Sports
        • Swimming
        • Skiing
      • Earth
        • Ocean
          • Biology
      • Read
        • BookList
        • 道德经
        • BookToRead
      • Music
        • sort
      • PickUp
        • SoldiersSortie
    • Care
      • Illness
        • cold
        • 腹泻
        • acne
        • EmotionalControl
        • 咽炎
        • Anemia
      • Foods
        • 破壁机
          • 食谱
      • I
      • WishList
      • WithL
        • MF
          • LY
    • Wfw
      • QA
    • Mac
      • Brew
        • 软件安装目录
      • Usage
        • RunScriptAsRootOnBoot
        • Mac-Config
      • 制作启动U盘
      • Software
        • IntelliJIDEALicenseServer
          • run-license-server
    • PlantUML
      • plantuml
    • Windows
      • Windows常用命令
      • PowerShell
        • powershell 命令
      • Cmder
      • MTP服务驱动无法安装
    • English
      • 英语阅读2016-07-29
      • 英语阅读2016-08-11
    • Tools
      • Plantuml
        • Setup
      • Eclipse
        • Eclipse
        • Eclipse常见问题
      • CommonHotkey
      • Jetbrain
        • JetbrainIDEs
      • VSCode
      • SublimeText
        • 格式化代码
    • I
      • WHATIAM
    • Device
      • Netgear
        • Astrill
      • RPi
        • Hardware
    • AwesomeSoftware
    • RESTful
    • Course
      • 自然辩证法
        • 我国在生态文明建设中存在的困境及解决对策
        • 工程师应该具有的基本道德素养
        • 科学文化与人文文化的关系
      • 英语写作
        • Description
      • 分布式系统
        • 分布式系统概论
      • 英语口语
        • 辩论赛
    • CloudLib
      • 推荐0.1
    • Project
      • README
        • emq
          • Emq架构
        • 启动
        • Hikvision
          • TimeSetting
    • Efficient
    • Neu
      • IpCamera
        • live
        • ffmpeg
    • Matlab
      • Matlab 2016b 破解
    • SchoolWork
      • 学术道德与学术规范
    • git-push
  • Coding
    • Design Pattern
      • 设计模式笔记_四_工厂模式
      • 设计模式笔记_六_命令模式
      • 设计模式笔记_三_装饰者模式
      • 设计模式入门
      • 设计模式笔记_八_模板方法模式
      • 设计模式笔记_一_策略模式
      • 设计模式笔记_五_单件模式
      • 设计模式笔记_七_适配器模式与外观模式
      • 设计模式笔记_二_观察者模式
      • 设计模式笔记_十_状态模式
      • 设计模式笔记_九_迭代器与组合模式
    • C++
      • Notes
        • Practice
          • Logger
        • Thread
          • PosixThreadPrograming
          • ThreadNote
        • Features
          • FuturePromise
          • Lambda
        • STL
          • STLPractice
          • 迭代器
          • UnorderedMapSet
          • Containor
          • STL
          • Vector
        • CMake
          • Startup
          • CMakeExample
          • CMake
          • CMakeUsage
          • CMakeKnowledge
        • Mutex
        • Gdb
          • Gdb
        • LanguageNotes
          • Pointer
          • String
          • Functions
          • 友元
          • IO
          • OOP
          • Exceptions
          • Basic
          • 初始化
          • Random
          • 模板函数
        • Glog
          • glog
        • Thrift
          • Thrift
        • Valgrind
          • valgrind
        • 动态库 & 静态库
        • BookNotes
          • AboutC++
        • LRvalues
      • map
      • protobuf
      • Build
      • Seastar
        • Notes
          • std::move
          • Introduce
          • Install
            • BuildAndInstall
          • Steps
          • cmd
      • Tricks
      • Map
      • CommonOperation
      • FreqAlgorithm
    • Tools
      • Git
        • GitExamples
        • GitUsage
        • GitKnowledge
        • GitIgnoreExample
        • DeleteBigFileFromHistory
      • Vim
        • VimTips
        • 安装
        • Vim-Usage
        • Plugins
        • Vim-Config
      • SVN
        • svn服务器搭建
        • svn
    • Scala
      • Notes
        • Scala-模式匹配
        • Scala: 隐式
        • Scala-符号语法
        • Scala-函数
        • Scala面向对象编程
        • Scala 函数式编程
        • Scala:zipWithIndex
        • Future
        • Scala-语法
        • Scala-基础
      • DateTime
      • 规范
    • Python
      • Notes
        • BookNotes
          • 生成器
          • 垃圾回收机制
          • 数据结构
          • 数据类型
          • RegularExpression
          • 迭代器
          • NetworkProgramming
          • 函数式编程
          • 上下文管理器
          • PythonDataModel
          • 运算符
          • 魔术方法
          • 面向对象
          • 装饰器
          • 模块
          • MultithreadProgramming
          • 异常
          • 函数
        • Modules
          • stack
          • Datetime
          • shutil:文件操作
          • logging
          • urllib
          • Re
          • 容器数据类型
          • TypeError
          • str
          • queue
          • urllib-and-requests
          • Exception
          • path
          • os
        • Others
          • PythonSerialization
          • Python函数的docstring
          • PIL
          • type-cast
          • operations
          • Python-类
          • 组及命名组匹配
          • Package
          • jieba分词
          • logging模块
          • Python
          • print
        • Examples
          • 文件读取写入
          • 命名
          • 递归更改文件为windows合法名称
          • 定制命令行运行方式
          • Python处理Excel文件(xlsx文件格式)
          • 读取ini配置文件
          • tor代理
          • 添加父目录到Path
        • CommonTips
        • CodingStandards
          • python注释
          • PEP-8
      • Django
        • DjangoDocs
          • making queries
          • 设置media路径
          • models
          • manage.py使用
          • template
          • view
          • forms
          • setting.py 文件配置说明
          • nginx-deploy
          • 使用pymysql
          • 自定义tags和filters
          • admin-interface
        • DjangoRestFramework
          • Customer Permissions
          • Serializers
          • FileField绝对路径问题
          • DjangoRestFrameworkNotes
          • ViewSet
        • DjangoNotes
          • Model对象转化为Dict
          • QuerySet
      • Scrapy
        • Scrapy
        • Spider
        • Scrapy安装出错
        • Selector
        • Scrapy模拟登陆
      • Job
        • 字典
      • Pandas
        • pandas
        • PandasExamples
      • VirtualEnv
        • virtualenv
      • Numpy
        • NumpyUsage
        • numpy
      • Matplotlib
        • MatplotlibNotes
        • MatplotlibUsage
      • Database
        • 获取表字段
      • Pip
        • 更改源
      • Scipy
        • scipy
    • Web
      • 插件
        • bootstrap-table
          • bootstrap-table
        • bootstrap
          • 模态框
        • requirejs
          • requirejs
        • toastr
          • toastor
      • Koa
        • Notes
          • KoaNotes
      • SCSS
        • 常用标签
        • Watch
      • Vue
        • Notes
          • 路由
          • 参考
          • 组件
          • Plugins
          • Vuex
          • StartUp
      • 样式
      • CSS
        • CSS
      • 排版
      • Notes
        • 跨域访问
      • Hexo
        • HexoUsage
      • Nodejs
        • Koa
          • jest
          • ParamValidate
        • 仓库镜像
      • Express
        • Express
        • Jade
          • Jade
      • Canvas
        • Canvas
    • Basic
      • Data Structure
        • Heap
          • Heap
        • Tree
          • Tree
        • Benchmark
          • map
      • Boolean
      • MultithreadProgramming
      • Software Engineering
        • UML
          • UML
      • OOP
      • 介绍
    • Antlr
      • Example
      • Grammar
      • Antlr
    • Java
      • Library
        • MyBatis
          • generator
            • mybatis配置详解
          • mybatis-获取自增ID
          • mybatis
          • problems
        • log4j
          • Usage
      • Maven
        • MavenUsage
        • Maven
        • MavenProject
        • 项目RUL路径问题
        • MavenPom
        • Settings
        • PomCommon
        • PomExample
      • Notes
        • Features
          • Reflect
          • Java函数式编程
          • toMap
          • Closeable & AutoCloseable & Flushable
          • Annotations
        • Common
        • ThinkingInJava
          • 控制执行流程
          • 接口
          • 复用类
          • 内部类
          • 操作符
          • 访问权限控制
          • 一切都是对象
          • 多态
          • 初始化与清理
          • 对象导论
        • SwordToOffer
        • Network
        • Thread
          • ThreadPool
        • Basic Library
        • Collections
          • List Interface
        • CommandLine
        • Project Common
        • JavaLang
      • JVM
        • Monitor
          • Jmap
          • mat
          • Jstat
          • Monitor
        • Notes
          • JVM
        • GC
          • GC
          • Shenandoah
            • Shenandoah
        • JVM
    • Algorithm
      • Code
        • LeetCode
          • Python
            • 0000-0050
              • 0005
              • 0030
        • SwordToOffer
          • SwordToOffer
      • AlgorithmSummary
      • Classics
        • string
          • KMP
        • Other
          • FullPermutation
        • 链表
        • Sort
          • Sort
      • Other
        • README
      • Notes
        • Math
          • 两点计算直线方程
    • Go
      • Notes
        • Go Project Layout
        • Install
        • Startup
      • Basic
        • Startup
        • Types
    • JavaScript
      • MasonryLayouts
      • jquery
      • Notes
        • Promise
      • js
    • Android
      • SDK
        • 打开SDK Manager
    • C#
      • WebBrowser
      • c#图片
      • 跨线程访问控件
    • Knowledge
      • 函数式编程
      • 设计框架
    • Rules
      • Rules
    • React
      • ReactNative
        • React Native Navigation
        • 打包Apk
        • ReactNative
      • React
        • README
    • RegExp
      • 正则表达式
    • WeChatApp
      • 登陆
    • Node
      • Notes
        • StartUp
  • Computer Science
    • ICS Security
      • 工控网络
      • 工业控制系统
      • HoneyPot
        • 蜜罐软件
          • Honeyd
      • 工业以太网
      • CNVD
        • 环境及依赖
      • 现有蜜罐系统及工具
      • 工控系统安全措施
      • 蜜网
      • 蜜罐
      • 工控安全相关概念
    • Data Analysis
      • Data Mining
        • Notes
          • Data_Preprocessing
          • 数据预处理
          • 认识数据
          • Mining_Modeling
          • 数据探索
          • Python_Data_Mining_Functions
          • Python数据分析平台搭建
          • Reference_Books
          • 数据分析与挖掘基础
        • Jupyter
          • show
            • mean
      • Hadoop
        • Hadoop权威指南:数据完整性
        • Hadoop权威指南: I/O操作序 - 列化
        • Hadoop权威指南-从Hadoop URL读取数据
        • Hadoop权威指南:FSDataInputStream对象
        • HDFS常用命令
        • Hadoop权威指南:HDFS-数据流
        • Hadoop权威指南:通过distcp并行复制
        • Hadoop权威指南:压缩
        • Hadoop权威指南:HDFS-Hadoop存档
        • 解决使用Idea/Eclipse编写Hadoop程序包依赖问题
        • HDFS
        • Hadoop-命令
        • 简单javaHadoop应用程序从打包到提交运行
        • Hadoop权威指南:HDFS-写入数据
        • Hadoop权威指南:HDFS-目录,查询文件系统,删除文件
        • HadoopInputFormat-OutputFormart
        • Hadoop-HDFS命令行接口
        • Hadoop权威指南-MapReduce应用开发
        • Linux下使用javac编译Hadoop程序
        • Hadoop权威指南:通过FileSystem API读取数据
        • Hadoop专有数据类型
      • Spark
        • Spark计算模型
        • Spark-入门二
        • 安装Hadoop及Spark(Ubuntu 16.04)
        • Spark:核心概念简介
        • Spark:控制日志输入
        • Spark - RDD编程
        • Spark工作机制
        • Spark-一个独立应用
        • Spark
        • Spark:使用Spark Shell的两个示例
    • Linux
      • Notes
        • BuildInCommand
          • ls
          • ip
          • ftp
          • 目录栈操作
          • scp
          • expect
            • expect示例
            • expect手册
            • expect笔记
          • ps
          • vsftpd
          • wget
          • 压缩程序
            • zip_unzip
            • tar
            • p7zip
          • 部署web服务
          • avidemux
          • cat
          • Awk
          • find
          • pssh使用
          • grep
          • sed
          • 路径
          • 通用命令
          • 安装JDK
          • 进程管理
          • network
          • rsync
          • cron
          • 示例
          • 用户管理
          • supervisor
        • Common
        • TestFileProcess
          • 替换文件内容
        • Commonds
        • Permissions
      • Ubuntu
        • Ubuntu 服务器配置部署
        • Ubuntu笔记
        • Ubuntu网络配置
        • Ubuntu 16.04 几个国内源
      • Script
        • ShellProgramming
        • ShellExamples
        • ShellCommands
      • CentOS
        • Centos笔记
        • 源
        • CentOS-Network-Config
        • CentOS-Security
      • Squid
        • BuildByDocker
        • Squid
      • Problem
        • 常见错误
      • Linux
        • Linux-c-cpp
        • Linux
        • Linux-NetworkProgramming
      • Codes
        • cron-test-01
      • Software
        • Shortcut key
        • Anaconda
      • Make
        • tricks
      • Deepin
        • 安装docker
      • SRE
        • CommonCommand
    • Cloud Computing
      • OpenStack
        • Fuel离线安装OpenStack
        • 验证网络
        • OpenStackNotes
    • Network
      • TCP/IP
      • 套接字
      • OSI模型
    • Data mining
      • StartUp
    • Machine Learning
      • Notes
        • 决策树学习-周志华
        • 神经网络-周志华
        • 概念学习和一般到特殊序
        • MachineLearningProblems
        • Math
          • 概率论与数理统计
          • 数学概念
          • KKT条件
          • 最优化问题
          • 优化算法
          • 最小二乘
        • 模型评估与选择
        • 引言
        • 过拟合处理
        • StatisticalLearningMethod
          • 统计学习方法概论
          • 感知机
        • 评估假设
        • Code
          • FeatureEngineering
            • Iris
        • 概念
        • SVM
        • FeatureEngineering
        • 神经网络
        • 决策树学习
        • MachineLearningKnowledge
        • 线性模型
        • 术语概念
        • 拉格朗日乘子法
      • route
      • Jupyter
        • JupyterUsage
      • Anaconda
        • AnacondaUsage
      • Coursera
        • Week01
      • ScikitLearn
        • FitTransform
        • Preprocessing
      • Octave
        • Octave
    • Search
      • Lucene
        • Api
        • Concepts
    • Virtualization Tech
      • Docker
        • dockerNetwork
        • Ubuntu
        • DockerUsage
        • Mac OS
    • Database
      • MySQL
        • Mysql Cluster
        • mysql-cluster
        • mysql
      • 部署phpmyadmin
      • SQL
      • SQL
        • SQLStatement
    • Concepts
      • Other
      • Mohout
      • LDA
    • Distributed System
      • Concepts
        • TODO
        • TODO
    • Recommend System
      • DataPipline
        • DataBus
        • 系统
    • OS
      • OS-Code
      • Notes
        • Introduce
        • ProcessManagement
        • Kernel
    • Deep Learning
      • Code
        • README
      • Notes
        • Conceptions
        • 神经网络
        • LeNet5
        • CNN
      • Tensorflow
        • Notes
          • Tensorflow
          • tensorflow开始
        • Anaconda
    • Media
      • FFmpeg
        • LiveStream
          • run
    • Spider
      • Selenium
        • Selenium
    • IoT
      • emq
        • Authentication
    • Big Data
      • Hadoop
        • MR 作业
  • Architecture
    • Storage
      • Mongodb
        • Mongodb
        • Failed to unlink socket file
      • Pegasus
        • Pegasus
        • ShellTools
      • Rocksdb
        • RocksJava
        • RocksDB
        • 本地缓存
      • Redis
        • Install
        • RedisUsage
      • 基本要素
      • HBase
        • HBase
    • MQ
      • Kafka
        • VersionCompare
        • Deploy
        • cppkafka
        • CommandLineTools
        • OffsetManage
        • Attentions
        • Notes
        • QA
    • Framework
      • Java
        • Dubbo
          • Annotation
          • 简介
        • Spring
          • SpringTest
          • 常见错误
          • TransactionRollback
          • FileUpload
          • SpringMVCNote
          • IoC
          • Start
          • Notes
            • Config
          • Spring
          • springmvc
          • Modules
        • Rose
          • Get request body
        • Netty
          • Netty
        • SpringBoot
          • SpringBoot
      • Esper
        • Documents
          • Keyed Segmented Context
          • 01 - Getting Started
          • 02 - Event Representations
          • 03 - Processing Modal
      • Swagger
        • Swagger
    • RPC
      • Thrift
        • Notes
          • Set fields
          • ThriftTyps
        • BuildFromSource
        • ThriftUsage
        • Install
      • ProtocolBuffer
        • 减少内存拷贝
        • UsageExample
        • Arena
        • ProtocolBuffer
    • Distribution
      • CAP
    • Streaming
      • Spark
        • Init
      • MapReduce
      • Spark
    • Nginx
      • Nginx knowledge
      • nginx-configurtion
      • 403
      • nginx解析php文件时502
    • Governance
      • Consul
      • Zookeeper
        • Zookeeper
      • MicroServiceArchitecture
      • 依赖
    • Conceptions
      • CloudNative
    • Kibana
      • Query
    • Performance Optimizaition
      • Notes
        • Conceptions
        • CPUAffinity
  • Math
    • Probability Theory
      • 一些概率分布
    • Statistics
      • 统计量与估计量
    • Other
      • 排列组合
  • Tools
    • Markdown
      • syntax
    • Jetbrains
      • Jetbrains
    • Zsh
      • Install
  • TODO
由 GitBook 提供支持
在本页
  • 过拟合
  • 原因
  • 处理方法
  • 早结束
  • 数据集扩增
  • 正则化
  • Dropout
  • 问题
  • L1和L2正则对比
  • 附录
  • 机器学习中的范数规则化
  • 参考

这有帮助吗?

  1. Computer Science
  2. Machine Learning
  3. Notes

过拟合处理

过拟合

定义

给定一个假设空间 $H$ ,对于假设 $h \in H, \exists h' \in H$ 使得在训练样例上 $h$ 的误差要比 $h'$ 小,但在整个实例分布上, $h'$ 比 $h$ 的误差率小,那么就说假设 $h$ 过度拟合训练数据。

原因

  • 数据问题

    • 训练样本过少,不足以对整个样本空间进行分布估计

    • 通常会假设样本空间中全体样本服从一个未知的分布,训练样本数据是独立地从这个分布上采样获得的,即独立同分布,训练样本数据可以很好地反映出样本空间的特性。但是,实际训练数据,独立同分布条件可能不成立,即训练数据的分布可能发生变化

  • 模型问题

    • 模型学习能力过于强大,学习到了训练样本中的非一般特性

  • 交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重

处理方法

早结束

模型训练过程中常用到迭代的思路,例如梯度下降算法。Early stopping是在迭代收敛之前,就通过一定标准提前终止迭代来防止过拟合。

具体做法是在每个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历),查看模型性能评价指标的变化情况,如果模型性能不再提高,就停止训练。这里的重点就是如何确认模型性能不再提高了。以准确率为例,并不是说一旦准确率发生下降就是不再提高了,因为可能经过这个Epoch后,准确率降低了,但是随后的Epoch又让准确率又上去了,所以不能根据一两次的连续降低就判断不再提高。

判断准确率是否提高的做法是,在训练过程中记录到目前为止最好的准确率,当连续10次Epoch(或若干次)没有达到这个最佳准确率时,就认为不会再提高,停止迭代。

数据集扩增

根据独立同分布假设,更多的数据往往对样本空间的整体分布估计更准确,不过实际应用中由于种种原因,并不一定总能获得足够的数据,例如成本问题。

通俗得讲,数据机扩增即需要得到更多的符合要求的数据,即和已有的数据是独立同分布的,或者近似独立同分布的。

一般有以下方法:

  • 从数据源头采集更多数据

  • 人工合成数据

    • 复制原有数据并加上随机噪声,产生新数据

    • 根据当前数据集估计数据分布参数,使用该分布产生更多数据等

  • 重采样

正则化

正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项。

  • L1正则

    • L1正则是基于L1范数,即在目标函数后面加上参数的L1范数和项,即参数绝对值和与参数的积项,即:

    • C=C0+λn∑ω∣ω∣C= C_0+\frac{\lambda}{n} \sum\limits_{\omega}|\omega|C=C0​+nλ​ω∑​∣ω∣
    • 其中$C_0$代表原始的代价函数,$n$ 是样本的个数,$\lambda$ 就是正则项系数,权衡正则项与 $C_0$ 项的比重。后面那一项即为L1正则项。

    • 在计算梯度时,$\omega$ 梯度变为

      ∂C∂ω=∂C0∂ω+λnsgn⁡(ω)\frac{\partial C}{\partial \omega} = \frac{\partial C_0}{\partial \omega} + \frac{\lambda}{n} \operatorname{sgn}(\omega)∂ω∂C​=∂ω∂C0​​+nλ​sgn(ω)
    • 其中,$\operatorname{sgn}$ 是符号函数,那么便使用下式对参数进行更新

    • ω:=ω+α∂C0∂ω+βλnsgn⁡(ω)\omega := \omega + \alpha\frac{\partial C_0}{\partial\omega} + \beta\frac{\lambda}{n} \operatorname{sgn}(\omega)ω:=ω+α∂ω∂C0​​+βnλ​sgn(ω)
      • 对于有些模型,如线性回归中(L1正则线性回归即为Lasso回归),常数项 $b$ 的更新方程不包括正则项,即:

    • b:=b+α∂C0∂bb := b + \alpha \frac{\partial C_0}{\partial b}b:=b+α∂b∂C0​​
      • 在梯度下降中,$\alpha < 0,\beta < 0$ ,在梯度上升中则相反

    • 从上式可以看出,当 $\omega$ 为正时,更新后 $\omega$ 会变小;当 $\omega$ 为负时,更新后 $\omega$ 会变大

    • 因此L1正则项是为了使得那些原先处于零(即$\omega \thickapprox 0$)附近的参数 $\omega$ 往零移动,使得部分参数为零,从而降低模型的复杂度(模型的复杂度由参数决定),从而防止过拟合,提高模型的泛化能力。

    • 其中,L1正则中有个问题,便是L1范数在0处不可导,即 $|\omega|$ 在0处不可导,因此在 $\omega$ 为0时,使用原来的未经正则化的更新方程来对 $\omega$ 进行更新,即令 $\operatorname{sgn}(0) = 0$,这样即:

    • sgn⁡(ω)∣ω>0=1,sgn⁡(ω)∣ω<0=−1,sgn⁡(ω)∣ω=0=0\operatorname{sgn}(\omega)|_{\omega>0} = 1,\operatorname{sgn}(\omega)|_{\omega<0} = -1,\operatorname{sgn}(\omega)|_{\omega=0} = 0sgn(ω)∣ω>0​=1,sgn(ω)∣ω<0​=−1,sgn(ω)∣ω=0​=0
  • L2正则

    • L2正则是基于L2范数,即在目标函数后面加上参数的L2范数和项,即参数的平方和与参数的积项,即:

    • C=C0+λ2n∑ωω2C = C_0+ \frac{\lambda}{2n} \sum_\omega \omega^2C=C0​+2nλ​ω∑​ω2
    • 其中 $C_0$ 代表原始的代价函数,$n$ 是样本的个数,与L1正则化项前面的参数不同的是,L2项的参数乘了$\frac{1}{2}$,是为了便于计算以及公式的美感性,因为平方项求导有个2,$\lambda$ 就是正则项系数,权衡正则项与 $C_0$ 项的比重。后面那一项即为L2正则项。

    • L2正则化中则使用下式对模型参数进行更新

    • ω:=ω+α∂C0∂ω+βλnω\omega := \omega + \alpha \frac{\partial C_0}{\partial \omega} + \beta \frac{\lambda}{n}\omegaω:=ω+α∂ω∂C0​​+βnλ​ω
      • 对于有些模型,如线性回归中(L2正则线性回归即为Ridge回归,岭回归),常数项bb的更新方程不包括正则项,即:

    • b:=b+α∂C0∂bb := b + \alpha \frac{\partial C_0}{\partial b}b:=b+α∂b∂C0​​
      • 梯度下降算法中,$\alpha < 0,\beta < 0$,梯度上升算法中则相反

    • 从上式可以看出,L2正则项起到使得参数 $\omega$ 变小加剧的效果,但是为什么可以防止过拟合呢?一个通俗的理解便是:更小的参数值 $\omega$ 意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。

总结

正则项是为了降低模型的复杂度,从而避免模型区过分拟合训练数据,包括噪声与异常点(outliers)。

正则化可以避免过拟合的解释

  • 从另一个角度上来讲,正则化即是假设模型参数服从先验概率,即为模型参数添加先验,只是不同的正则化方式的先验分布是不一样的。这样就规定了参数的分布,使得模型的复杂度降低(试想一下,限定条件多了,是不是模型的复杂度降低了呢),这样模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。

  • 还有个解释便是,从贝叶斯学派来看:加了先验,在数据少的时候,先验知识可以防止过拟合;从频率学派来看:正则项限定了参数的取值,从而提高了模型的稳定性,而稳定性强的模型不会过拟合,即控制模型空间。

  • 另外一个角度,过拟合从直观上理解便是,在对训练数据进行拟合时,需要照顾到每个点,从而使得拟合函数波动性非常大,即方差大。在某些小区间里,函数值的变化性很剧烈,意味着函数在某些小区间里的导数值的绝对值非常大,由于自变量的值在给定的训练数据集中的一定的,因此只有系数足够大,才能保证导数的绝对值足够大。

  • 另外一个解释,规则化项的引入,在训练(最小化cost)的过程中,当某一维的特征所对应的权重过大时,而此时模型的预测和真实数据之间距离很小,通过规则化项就可以使整体的cost取较大的值,从而,在训练的过程中避免了去选择那些某一维(或几维)特征的权重过大的情况,即过分依赖某一维(或几维)的特征(引用知乎)。

  • 正则化是假设模型的参数服从先验概率,即为模型参数添加先验分布,不同的正则化方式的先验分布不一样(L1正则是拉普拉斯先验,而L2正则则是高斯先验)。规定了参数的分布,降低了模型的复杂度,增强对噪声和异常点的抗干扰能力。

  • L2与L1的区别在于,L1正则是拉普拉斯先验,而L2正则则是高斯先验。

    • 它们都是服从均值为0,协方差为 $\frac{1}{\lambda}$ 。

    • 当$\lambda=0$时,即没有先验。没有正则项,则相当于先验分布具有无穷大的协方差,那么这个先验约束则会非常弱,模型为了拟合所有的训练集数据, 参数$\omega$可以变得任意大从而使得模型不稳定,即方差大而偏差小。

    • $\lambda$越大,标明先验分布协方差越小,偏差越大,模型越稳定。

    • 即,加入正则项是在偏差bias与方差variance之间做平衡tradeoff。

    • 上图中的模型是线性回归,有两个特征,要优化的参数分别是$\omega_1$和$\omega_2$,左图的正则化是 $L2$,右图是$L1$。蓝色线就是优化过程中遇到的等高线,一圈代表一个目标函数值,圆心就是样本观测值(假设一个样本),半径就是误差值,受限条件就是红色边界(就是正则化那部分,我的理解是这个红色边界就是限定了先验分布),二者相交处,才是最优参数。可见右边的最优参数只可能在坐标轴上,所以就会出现0权重参数,使得模型稀疏。

Dropout

Dropout方法在神经网络里面很常用,通俗讲就是在训练的时候让神经元以一定的概率不工作。

具体做法是在每次迭代中,随机选取一定数量的隐藏层神经元,使其不工作,同时保持输入输出层神经元的个数不变。

问题

L1和L2正则对比

  • L1正则是拉普拉斯先验,而L2正则则是高斯先验

  • L1正则更加容易产生稀疏解,L2正则倾向于让参数 $\omega$ 趋向于0

  • 下降速度及模型空间限制对比见附录

附录

机器学习中的范数规则化

监督学习的过程可以概括为:最小化误差的同时规则化参数。最小化误差是为了让模型拟合训练数据,规则化参数是为了防止过拟合。参数过多会导致模型复杂度上升,产生过拟合,即训练误差很小,但测试误差很大,这和监督学习的目标是相违背的。所以需要采取措施,保证模型尽量简单的基础上,最小化训练误差,使模型具有更好的泛化能力(即测试误差也很小)。

范数规则化有两个作用:

  • 保证模型尽可能的简单,避免过拟合

  • 约束模型特性,加入一些先验知识,例如稀疏、低秩等

$L0$ 范数和 $L1$范数

  • $L0$ 范数是指向量中非零元素的个数。如果用$L0$规则化一个参数矩阵$\omega$,就是希望$\omega$中大部分元素是零,实现稀疏。

  • $L1$ 范数是指向量中各个元素的绝对值之和,也叫系数规则算子(Lasso regularization)。$L1$范数也可以实现稀疏,通过将无用特征对应的参数 $\omega$ 置为零实现。

  • 两者都可以实现稀疏化,但往往选择 $L1$,因为:

    • $L0$ 范数很难优化求解(NP难)

    • $L1$ 是 $L0$ 的最优凸近似,比 $L0$ 更容易优化求解

  • 稀疏化的好处

    • 特征选择

      实现特征的自动选择,去除无用特征。稀疏化可以去掉这些无用特征,将特征对应的权重置为零。

    • 可解释性

      例如判断某种病的患病率时,最初有1000个特征,建模后参数经过稀疏化,最终只有5个特征的参数是非零的,那么就可以说影响患病率的主要就是这5个特征。

$L2$ 范数

$L2$ 范数是指向量各元素的平方和然后开方,用在回归模型中也称为岭回归(Ridge regression)。

  • $L2$ 避免过拟合的原理是:让 $L2$ 范数的规则项 $\omega^2$ 尽可能小,可以使得 $\omega$ 每个元素都很小,接近于零,但是与 $L1$ 不同的是,不会等于0;这样得到的模型抗干扰能力强,参数很小时,即使样本数据 $x$ 发生很大的变化,模型预测值 $y$ 的变化也会很有限。

  • $L2$范数除了避免过拟合问题,还有一个优点是有助于处理condition number不好的情况下,矩阵求解困难的问题。condition number是对系统ill-condition程度的一个衡量标准。假设有方程组$Ax=b$,需要求解$x$。如果$A$或者$b$发生轻微改变,就会使得x的解发生很大变化,那么这个方程组系统就是ill-condition的,反之就是well-condition的。下图为例说明:

    • 第一行是两个原始的方程序系统;

    • 第二行对系统的 $b$ 做出轻微修改,左侧方程组的解发生较大变化,右侧的变化不明显;

    • 第三行对系统的 $A$ 做出轻微修改,同样左侧系统的解发生较大变化,右侧的变化不明显。这说明左侧的系统是ill-condition的,右侧的是well-condition的。

    • 具体到通过训练数据建立的模型中时,ill-condition可以说就是不稳定的,当输入的样本数据发生变化时,预测结果就会不准确。condition number就是用来对系统的ill-condition程度进行衡量的,condition number值小的就是well-condition,反之为ill-condition。

$L1$和$L2$对比

  • 下降速度对比

    • 建立模型的过程中,会尝试最小化损失函数,这个过程就像一个下坡的过程,L1和L2的差别在于坡的斜率,如下图所示。

  • 模型空间的限制

    • 使用L1,L2范式建立模型时,损失函数可以写成如下形式:

      Lasso:min⁡ω1n∣∣y−Xω∣∣2,s.t.∣∣ω∣∣1⩽CRidge:min⁡ω1n∣∣y−Xω∣∣2,s.t.∣∣ω∣∣2⩽CLasso: \min\limits_{\omega} \frac{1}{n}||y-X\omega||^2,s.t.||\omega||_1 \leqslant C \\ Ridge: \min\limits_{\omega} \frac{1}{n}||y-X\omega||^2,s.t.||\omega||_2 \leqslant C \\Lasso:ωmin​n1​∣∣y−Xω∣∣2,s.t.∣∣ω∣∣1​⩽CRidge:ωmin​n1​∣∣y−Xω∣∣2,s.t.∣∣ω∣∣2​⩽C
    • 可以说成是将模型空间限制在 $\omega$ 的某个范围内,如下图所示,在 $(\omega_1,\omega_2)$ 空间上可以画出目标函数的等高线,约束条件则是平面上半径为 $C$ 的一个norm ball,等高线与norm ball首次相交的地方就是最优解。

    • 通过对比可以看出,L1-ball和L2-ball的不同在于 $L1$ 在和每个坐标轴相交的地方都有”角“出现,与目标函数相交的地方也是在角的位置。角的位置就容易产生稀疏性,例如图中的交点处 $\omega_1=0$。$L2$就没有这样的性质,因为没有角,相交的位置有稀疏性的概率就非常低,从直观上解释了为什么 $L1$ 能够产生稀疏性而 $L2$ 就不行。

    • $L1$ 范式会趋向于产生较少的特征,在特征选择时很有用;$L2$ 会选择更多特征,但对应权值接近零。

参考

上一页引言下一页StatisticalLearningMethod

最后更新于4年前

这有帮助吗?

参考一
参考二