- 莫烦机器学习教程
- 有趣的机器学习
- 机器学习 (Machine Learning)
- 神经网络 (Neural Network)
- 卷积神经网络 CNN (Convolutional Neural Network)
- 循环神经网络 RNN (Recurrent Neural Network)
- LSTM RNN 循环神经网络 (LSTM)
- 自编码 (Autoencoder)
- 检验神经网络 (Evaluation)
- 特征标准化 (Feature Normalization)
- 选择好特征 (Good Features)
- 激励函数 (Activation Function)
- 过拟合 (Overfitting)
- 加速神经网络训练 (Speed Up Training)
- 处理不均衡数据 (Imbalanced data)
- 批标准化 (Batch Normalization)
- L1 / L2 正规化 (Regularization)
- 强化学习 (Reinforcement Learning)
- 强化学习方法汇总 (Reinforcement Learning)
- Q Leaning
- Sarsa
- Sarsa(lambda)
- DQN
- Policy Gradients
- Actor Critic
- Deep Deterministic Policy Gradient (DDPG)
- Asynchronous Advantage Actor-Critic (A3C)
- 强化学习教程
- Why?
- 课程要求
- 小例子
- Q-learning 算法更新
- Q-learning 思维决策
- Sarsa 算法更新
- Sarsa 思维决策
- Sarsa-lambda
- DQN 算法更新 (Tensorflow)
- DQN 神经网络 (Tensorflow)
- DQN 思维决策 (Tensorflow)
- OpenAI gym 环境库 (Tensorflow)
- Double DQN (Tensorflow)
- Prioritized Experience Replay (DQN) (Tensorflow)
- Dueling DQN (Tensorflow)
- Policy Gradients 算法更新 (Tensorflow)
- Policy Gradients 思维决策 (Tensorflow)
- Actor Critic (Tensorflow)
- Deep Deterministic Policy Gradient (DDPG) (Tensorflow)
- Asynchronous Advantage Actor-Critic (A3C) (Tensorflow)
- TensorFlow 教程
- 为什么选 Tensorflow
- 安装
- 神经网络在干嘛
- 处理结构
- 例子 2
- Session 会话控制
- Variable 变量
- Placeholder 传入值
- 激励函数 Activation Function
- 例子 3 添加层 def add_layer()
- 例子 3 建造神经网络
- 例子 3 结果可视化
- 优化器 optimizer
- Tensorboard 可视化好帮手 1
- Tensorboard 可视化好帮手 2
- Classification 分类学习
- Dropout 解决 overfitting
- CNN 卷积神经网络 1
- CNN 卷积神经网络 2
- CNN 卷积神经网络 3
- Saver 保存读取
- RNN 循环神经网络
- RNN LSTM 循环神经网络 (分类例子)
- RNN LSTM (回归例子)
- RNN LSTM (回归例子可视化)
- 自编码 Autoencoder (非监督学习)
- scope 命名方法
- Batch Normalization 批标准化
- PyTorch 教程
- Why?
- 安装
- Torch 或 Numpy
- 变量 (Variable)
- 激励函数 (Activation)
- 关系拟合 (回归)
- 区分类型 (分类)
- 快速搭建法
- 保存提取
- 批训练
- Optimizer 优化器
- CNN 卷积神经网络
- RNN 循环神经网络 (分类)
- RNN 循环神经网络 (回归)
- AutoEncoder (自编码/非监督学习)
- DQN 强化学习
- GAN (Generative Adversarial Nets 生成对抗网络)
- 为什么 Torch 是动态的
- GPU 加速运算
- Dropout 缓解过拟合
- Batch Normalization 批标准化
- Theano 教程
- Why?
- 安装
- 神经网络在做什么
- 基本用法
- Function 用法
- Shared 变量
- Activation function 激励函数
- 定义 Layer 类
- Regression 回归例子
- 可视化结果 回归例子
- Classification 分类学习
- Regularization 正规化
- Save 保存 提取
- 总结和更多
- Keras 教程
- Why?
- 安装
- 兼容 backend
- Regressor 回归
- Classifier 分类
- CNN 卷积神经网络
- RNN Classifier 循环神经网络
- RNN Regressor 循环神经网络
- Autoencoder 自编码
- Save & reload 保存提取
- Scikit learn 教程
- Why?
- 安装
- 选择学习方法
- 通用学习模式
- sklearn 强大数据库
- sklearn 常用属性与功能
- 正规化 Normalization
- 交叉验证 1 Cross-validation
- 交叉验证 2 Cross-validation
- 交叉验证 3 Cross-validation
- 保存模型
过拟合 (Overfitting)
作者: Morvan 编辑: Morvan
今天我们会来聊聊机器学习中的过拟合 overfitting 现象,和解决过拟合的方法。
注: 本文不会涉及数学推导. 大家可以在很多其他地方找到优秀的数学推导文章。
在细说之前,我们先用实际生活中的一个例子来比喻一下过拟合现象. 说白了,就是机器学习模型于自信. 已经到了自负的阶段了. 那自负的坏处,大家也知道,就是在自己的小圈子里表现非凡,不过在现实的大圈子里却往往处处碰壁. 所以在这个简介里,我们把自负和过拟合画上等号。
机器学习模型的自负又表现在哪些方面呢. 这里是一些数据. 如果要你画一条线来描述这些数据,大多数人都会这么画. 对,这条线也是我们希望机器也能学出来的一条用来总结这些数据的线. 这时蓝线与数据的总误差可能是 10. 可是有时候,机器过于纠结这误差值,他想把误差减到更小,来完成他对这一批数据的学习使命. 所以,他学到的可能会变成这样 . 它几乎经过了每一个数据点,这样,误差值会更小 . 可是误差越小就真的好吗? 看来我们的模型还是太天真了. 当我拿这个模型运用在现实中的时候,他的自负就体现出来. 小二,来一打现实数据 . 这时,之前误差大的蓝线误差基本保持不变 .误差小的 红线误差值突然飙高 , 自负的红线再也骄傲不起来,因为他不能成功的表达除了训练数据以外的其他数据. 这就叫做过拟合. Overfitting.
那么在分类问题当中 . 过拟合的分割线可能是这样 , 小二,再上一打数据 . 我们明显看出,有两个黄色的数据并没有被很好的分隔开来. 这也是过拟合在作怪.好了,既然我们时不时会遇到过拟合问题,那解决的方法有那些呢。
方法一: 增加数据量,大部分过拟合产生的原因是因为数据量太少了. 如果我们有成千上万的数据,红线也会慢慢被拉直,变得没那么扭曲 . 方法二:
运用正规化. L1, l2 regularization 等等,这些方法适用于大多数的机器学习,包括神经网络. 他们的做法大同小异,我们简化机器学习的关键公式为 y=Wx . W 为机器需要学习到的各种参数. 在过拟合中, W 往往变化率比较大. 为了不让 W 一次性变化太大,我们在计算误差上做些手脚. 原始的 cost 误差是这样计算 , cost = 预测值-真实值的平方. 如果 W 变得太大,我们就让 cost 也跟着变大,变成一种惩罚机制. 所以我们把 W 自己考虑进来 . 这里 abs 是绝对值. 这一种形式的 正规化,叫做 l1 正规化. L2 正规化和 l1 类似, , 只是绝对值换成了平方. 其他的 l3.l4 也都是换成了立方和 4 次方等等. 形式类似. 用这些方法,我们就能保证让学出来的线条不会过于扭曲。
还有一种专门用在神经网络的正规化的方法,叫作 dropout. 在训练的时候,我们随机忽略掉一些神经元和神经联结 , 是这个神经网络变得”不完整”. 用一个不完整的神经网络训练一次。
到第二次再随机忽略另一些 , 变成另一个不完整的神经网络. 有了这些随机 drop 掉的规则,我们可以想象其实每次训练的时候,我们都让每一次预测结果都不会依赖于其中某部分特定的神经元. 像 l1, l2 正规化一样,过度依赖的 W , 也就是训练参数的数值会很大, l1, l2 会惩罚这些大的 参数. Dropout 的做法是从根本上让神经网络没机会过度依赖。
如果你觉得这篇文章或视频对你的学习很有帮助,请你也分享它,让它能再次帮助到更多的需要学习的人。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论