损失函数结果不理想解决方案——机器学习
Tips for training
- 如何得到更好的训练结果
- Model bias
- Optimization
- Hessian 矩阵法优化
- Small Batch
- Gradient Descent + Momentum
- Adaptive Learning Rate
- Root Mean Square
- RMSProp
- Adam
- Learning Rate Scheduling
- Loss
- Summary of Optimization
- Overfitting
- More training data——最有效的解决方案
- 减少模型的弹性
- Mismatch
如何得到更好的训练结果
Tips for training.
Model bias
The model is too simple.
Solution: redesign your model to make it more flexible.
Optimization
Optimization fails because of critical point(微分为0的点,包括 local minama 和 saddle point 马鞍面的鞍点)
说明:
每多一个参数,维度就会升高一个,就更容易产生 saddle point,而不是 local minima。
从经验上看起来,local minima 并没有那么常见,因此很多情况下,是可以使用 saddle point 来对 less 做优化的。
下面通过 saddle point 继续减少 Less 的值。
Hessian 矩阵法优化
当走到 critical point 时,梯度为0,则绿的的这一项为0。
H 可以告诉我们参数更新的方向:
如果遇到了 Saddle point,可以使用 Hessian 矩阵中为负的特征值,找出它对应的特征矩阵 μ,θ - θ’ = μ,则 θ’ = θ - μ,就可以降低 L(θ) 的值。
但是这种方法需要计算 Hessian 矩阵,涉及二阶导数,还需要求出矩阵的特征值,特征矩阵,计算量是很大的,所以一般实际操作中不使用这种方法。
Small Batch
小的 batch 往往会得到比大的 batch 更好的结果。
- 当一次梯度下降被卡住时,换一个 batch,可能就不会被卡住了,避免了掉入 local minama 跳不出来的问题,这就是 batch 比较多的优势。
Gradient Descent + Momentum
模拟物理中的惯性的思想:使运动的方向不仅仅取决于梯度的方向,还取决于上一步运动的方向。
Movement = movement of last step minus gradient at present.
- 这样可以一定程度上避免掉入 local minama 跳不出来的问题。
根据迭代,每次的 movement mi 可以用前 i - 1 次的梯度来表示:
Adaptive Learning Rate
当 loss 不再下降时,gradient 不一定真的变得很小。
因此需要对每个参数有特制化的 learning rate 。
可能是卡在 误差曲面 如左图所示的山谷中,由于 learning rate 固定,所以 less 无法再下降。
因此,直接把 learning rate 调小一点不就可以解决问题了吗?
但是,直接把 learning rate 调小一点,或许可以使训练进入“山谷”里面,但是在较平滑的地方,由于 learning rate 太小了,就难以使训练前进。
因此希望:
- 在较平滑的地方 learning rate 大。
- 在较陡峭的地方 learning rate 小。
解决方案:
在原来的 learning rate 上除以一个 σ。
一般有两种计算 σ 的方法
- Root Mean Square
- RMSProp
- Adam
Root Mean Square
σ 为之前训练得到的 gradient 平方和开根号。
之前的每个 gradient 对 σ 贡献度相同。
假设了同一个参数的 learning rate 就是差不多同样的一个值,但是同一个参数的 learning rate 也会随时间而改变。使用 RMSProp 方法就可以避免这个弊端。
RMSProp
σ 受最近的 gradient 影响大,受过去的 gradient 影响小。
Adam
RMSProp + Momentum
最常使用的 optimization 的方法,Pytorch 中有实现好的套件。
Learning Rate Scheduling
当训练在比较平滑的地方不断积累时, σ 的值会比较小,使得一次的移动的步幅较大,所以一旦出现误差,就容易出现以下情形:
可以通过 Learning Rate Scheduling 来使 Learning Rate 的大小也随时间变化,从而消除这种误差:
有两种 Learning Rate Scheduling 的方法:
- Learning Rate Decay
- Warm Up:在一些远古的论文中经常会看到 Warm Up 的方法,由于 σ 是一个统计得来的数据量,所以一开始是不精准的。所以开始时,令 learning rate 比较小,等 σ 统计的更精准之后,再增大 learning rate 。
Loss
Loss function 的选择会影响 Optimization 的难度。
例如:在分类问题中,Cross-entropy 比 Mean Square Error(MSE)效果更好,因此更常用。
由上图可以看出,Mean Square Error 在 Loss 比较大的地方,梯度较小,因此训练可能会停在里面出不来。而 Cross-entropy 在 Loss 比较大的地方,梯度也较大,方便训练。
Summary of Optimization
Overfitting
在 training data 上效果好,在 testing data 上效果差。
More training data——最有效的解决方案
收集新的资料。
Data augmentation:根据自己对资料的理解,对原始资料做变换,增加训练资料数量(对图片左右翻转、放大缩小)
减少模型的弹性
Less parameters, sharing parameters
Less features
Early stopping
Regularization
Dropout
Mismatch
Your training and testing data have different distributipns.
Be aware of how data is generated.
损失函数结果不理想解决方案——机器学习相关推荐
- Zigbee电动智能窗帘系统理想解决方案
随着社会经济结构.家庭人口结构以及信息技术的发展变化以及人类对家居环境的安全性.舒适性.效率性要求的提高,造成家居智能化的需求大大增加,同时越来越多的家庭要求智能家居产品不仅要满足一些基本的需求,更要 ...
- Sklearn 损失函数如何应用到_机器学习大牛最常用的5个回归损失函数,你知道几个?...
"损失函数"是机器学习优化中至关重要的一部分.L1.L2损失函数相信大多数人都早已不陌生.那你了解Huber损失.Log-Cosh损失.以及常用于计算预测区间的分位数损失么?这些可 ...
- 了解机器学习回归的3种最常见的损失函数
机器学习中的损失函数是衡量你的ML模型的预测结果准确性的一个指标. 损失函数将以两项作为输入:模型的输出值和标准答案的期望值.损失函数的输出称为损失,它是衡量我们的模型在预测结果方面做得有多好. 损失 ...
- 【机器学习入门】(7) 线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降
各位同学好,今天我和大家分享一下python机器学习中的线性回归算法.内容有: (1) 线性回归方程.(2) 损失函数推导.(3) 似然函数.(4) 三种梯度下降方法 1. 概念简述 线性回归是通过一 ...
- 机器学习-损失函数 (转)
作者:刘帝伟 原文地址:http://www.csuldw.com/ 损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y ...
- 机器学习中的损失函数
机器学习中的损失函数 目录(?)[-] 一log对数损失函数逻辑回归 二平方损失函数最小二乘法 Ordinary Least Squares 三指数损失函数Adaboost 四Hinge损失函数SVM ...
- 确定不收藏?机器学习必备的分类损失函数速查手册
点击上方"AI有道",选择"置顶公众号" 关键时刻,第一时间送达! 阅读本文需要 10 分钟 在监督式机器学习中,无论是回归问题还是分类问题,都少不了使用损失函 ...
- 机器学习--LR逻辑回归与损失函数理解
损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好.损失函数是经验 ...
- 【深度学习】一文读懂机器学习常用损失函数(Loss Function)
[深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...
最新文章
- mysql建立联合索引,mysql建立唯一键,mysql如何解决重复记录联合索引
- Open vSwitch(OVS)源码编译Ubuntu16.04,Linux内核版本4.15
- C++设计模式:Template Method
- R: ggplot2(1)
- linux运行多个c文件路径,linux c的连接库和怎么同时编译多个源程序
- Linux基础操作及命令管理
- 计算机三维技术在影视广告设计中应用的研究 罗晋,计算机三维技术在影视广告设计中应用的研究...
- python 进程池pool
- ABP源码分析五:ABP初始化全过程
- 久其报表大厅_久其报表是什么?
- 《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...
- Linux代理配置_wuli大世界_新浪博客
- 实现Typora多端同步
- 【转】Android屏幕适配全攻略(最权威的官方适配指导)
- 有哪些手机赚钱的副业?
- 经典车间生产调度问题模型及其算法 目录
- PS橡皮擦魔棒设置图片的背景为透明
- 网站安全之几种常见的网络攻击方式
- 计算机类大学生可以参加的5个比赛
- 张柠评新“三国”:“卧龙吊丧”看得人想吐(转载者痛处:历史什么时候成了中国人的信仰)...