优化算法基本原理

2023-11-01

优化算法基本原理


机器学习就两个问题,一个是model的定义,一个就是如何优化,model是战略,优化则是执行。

在Caffe现在的版本中,主要使用了三种优化算法SGD、AdaGrad、以及NAG,这三种算法快速、高效,缺点就是极容易收敛到局部极值点或者不容易收敛。

a.就个人理解来说,对于大数据的处理,算法的高效率要稍微优于精度。对于大规模的非线性优化来说,通过不断的调参可以有效的降低局部收敛或者不收敛的状况,从某种意义上说机器学习的本质就是调的一手好参:),是经验活也是体力活。
b.至于哪种算法好,可能要针对问题做选择。在几个月前,余凯老师在出门问问组织的一次学术活动中提到,目前工业界最为常用的算法就是mini-batchSGD,性价比最高,其他的一些算法更多的是学术上的目的。

1. 关于stochastic approximation

一般性的优化目标函数都由两部分组成,一个是loss term,一个是regularisationterm,如下所示,前者就是根据model的形式定义的energy function,后者则对于参数的解空间进行了限制。

其中D为数据集,最后的目标函数就是在数据集上的平均。当数据集小的时候,计算量不算很大,但是当数据量非常大的时候,这种策略就会使得计算效率下降,由此引出了stochasticapproximation的策略,也就是使用随机子集对于原函数近似的思路。

其中N<<D,这种策略成功的一个关键点就是大量的数据,主要原因有:

a.使用子集拟合出的函数只代表子集的特征,因此单一的子集不可避免会带来误差。
b.随着数据的增加,随机子集的数量越来越多,从概率上讲,其中接近真实函数的分布的的子集会占多数,因此总体上而言,拟合的函数会越来越接近全部数据拟合的函数。

2. Stochastic gradient decent(SGD)算法

优化算法就是看迭代公式,关键的就是步长和方向。

caffe中SGD权重迭代公式如下,W_{t}为t时刻的参数,V_{t}为t时刻的增量,a为learningrate,u为前一次更新的权重

通过调节a和u可以有效的改变迭代速度以及迭代的方向。可以看出W_{i}的更新是和上次增量以及梯度线性相关的的。

在Caffe的文档中给出了一个基本的调参规则

a. 初始的learning rate建议设置为0.01。
b. 在迭代过程中当loss到达了一个明显的“plateau”的时候,则以10倍的速度drop learningrate,相当于稍微减少步长,
c. u是一个调解参数,一般设置为0.9,这个参数起到一个平滑的作用,可以让SGD算法更加稳定和快速
d. u和a是一个反相关的,增加u,则降低a,反之亦然。

3. AdaGrad算法

迭代规则为

其中i是指的W中的每一个维度。这个迭代规则的意思是采用前面的所有时间的梯度生成一个归一化的因子,对当前的梯度进行一次尺度变换。这个尺度的含义就是如果前面函数梯度大,那么当前增量的加速度就小一点,反之则大一点;整个趋势还是随着迭代的次数增加,增量放缓。

4. Nesterov‘s accelerated Gradient (NAG)

这个算法严格的说来是凸优化中的算法,具有O(1/t^2)的收敛率,收敛速度比较快。因为DNN是一个non-convex的model,所以NAG方法并不能达到这个收敛速度。caffe文档中指出,这个方法对于某些deeplearning的 architecture是非常有效的。

这个公式和SGD方法很类似,不同之处在于其梯度项,不再是简单的当前位置的梯度,而是当前位置加上增量之后的新位置处的梯度。

5. 一点思考

5年前随着Sparserepresentation的热潮的兴起,做很多老的凸优化的算法在新的计算机视觉任务中显示出了巨大的能力,比如APG、NAG、ADMM等,人们发现了有趣的现象,效率高优化算法往往都是老算法,越老效率越高,主要原因是早些时候,计算能力非常有限,早期的数学家只好真正从算法中挤水分;随着时代的发展,计算能力强了,算法效率差不多就行了;现在到了大数据时代,效率终于又成为了瓶颈,所以老算法又焕发了第二春。另外一些二阶段方法Newton,LBFGS等因为数据存储量以及计算量大,在大规模的数据中可能不如最简单的SGD类方法好用,当然选用什么算法,要视计算资源以及计算任务而定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化算法基本原理 的相关文章

  • 英文论文如何看?转自知乎

    SoniaYang 因为去年年中刚完成了我的硕士论文 就来谈点个人经验 不知道你指的文献指的是 期刊论文 or 学术原著 如果是 期刊论文 那就得首先看Abstract 摘要 一般Abstract包括了这篇文章最基本最全面的几个要素 就是整
  • SQL 统计表 b 对应表a个数,并赋值给表a的一个字段

    最近遇到这么个问题 表a 歌单表 music list 表b 歌曲详情表 music detail 一个歌单对应多个歌曲详情 但在表的设计时 没有考虑到在 music list 设置一个字段标记对应的 music detail数据条数 在数
  • 悄悄分享 60 个相见恨晚的神器工具

    让 WebP 图片下载为 PNG 格式 从 Github 批量下载表情包 一键滚动截屏整个网页 助你快速成为 B 站老司机 一键分析网站技术栈 翻录网页视频神器等等 这些功能 都能在 Chrome 中使用件简单实现 不信 你往下看就行了 最
  • Spring Boot集成Swagger3.0,Knife4j导出文档

    文章目录 Spring Boot集成Swagger3 0 Knife4j导出文档 效果展示 如何使用 简要说明 添加依赖 添加配置类 测试接口 token配置位置 问题1 多文件上传 方法一 配置全局参数 方法二 开启动态参数 自定义多个文
  • Callable日常使用

    Callable日常使用 前言 之前在项目中有个多线程校验导入数据的额需求 就想到了callable 既有返回值又可以抛出异常 岂不美哉 工作之余总结下callable的使用 方便后期CV 目录 Callable日常使用 一 自定义call
  • 360安全卫士添加信任区

    系列文章目录 文章目录 系列文章目录 前言 一 添加信任区 二 步骤 1 木马查杀 2 信任区 3 添加信任的文件 总结 前言 360安全卫士经常会误报 虽然有想过卸载360 但他的有些小工具还挺实用 哎 鸡肋啊 一 添加信任区 打开360
  • 上一个说软件测试简单的,已经被面试官问emo了···

    现在已经过了 不会但我会学 就能感动面试官的时代 随着供需关系的变化 不论是对于面试官还是面试者 面试的成本越来越高 为了筛选到更优秀的程序员 面试官们可谓是绞尽了脑汁 面试造火箭 工作拧螺丝 的传言也不是空穴来风 那些面试官最喜欢的就是你
  • oracle碎片小结

    author skate time 2010 05 31 我们在使用windows的时候 都知道要定期整理磁盘碎片 因为磁盘碎片会影响性能 给管理上带来额外的负担 那oracle更是如此 当随着数据增加 oracle处理海量数据本身就已经很
  • 2021-11-08

    https learnku com docs the way to go 104 tag structure 3642 https mp weixin qq com s 3sjlDFSthVK3 E54TqqUqw
  • faster-rcnn(pytorch)参数配置修改

    修改模型配置文件 train prototxt文件 input data层的num class数值由21改为类别数目 roi data层的num class数值由21改为类别数目 cls score层的num output数值由21改为类别
  • 通过Python2.7访问Oracle

    环境 Python 2 7 cx Oracle 7 3 0 instantclient basic linux x64 version zip unzip instantclient basic zip unzip d cx Oracle
  • 6.Docker Desktop 安装使用教程

    本文目录 1 前言 2 下载 Docker Desktop 3 安装 Docker Desktop 1 配置 Docker Desktop 环境 2 安装 wsl2 2 下载并安装 3 打开 Docker Desktop 的问题 1 问题一
  • 【高级CSS属性】那些年轰动一时的5个CSS高级属性(附源码)

    文章目录 写在前面 涉及知识点 1 empty选择器 1 1 应用场景及效果 1 2 代码实现 2 gap属性 2 1 应用场景及效果 2 2 代码实现 3 伪类 invalid 应用 3 1 应用场景及效果 3 2 代码实现 4 back
  • Es java分页查询列表数据

    Autowired private RestHighLevelClient client public List
  • Android 计算View的深度

    这次遇到一个需求 需要计算当前View的深度 基本上就是大学时候数据结构里求二叉树的解法 记录一下 理论上也可以用于性能优化和性能监控 private int maxDeep View view view不会有子view所以就返回0 if
  • 4.2 线性方程组有解判断

    文章目录 系数矩阵 增广系数矩阵 方程组的矩阵与向量表示形式 结论 判断方程组有无解的步骤 求线性方程组的一般思路 例题 参考 系数矩阵 增广系数矩阵 方程组的矩阵与向量表示形式 求解方程组就是对增广矩阵做初等行变换将系数矩阵化为行简化阶梯
  • Python——算法

    文章目录 算法 1 世界末日 2 马虎的算式 3 振兴中华 4 斐波那契数列 5 武功秘籍 6 切面条 7 立方变自身 8 圆的面积 9 字母图形 10 Huffuman树 算法 1 世界末日 曾有邪教称1999年12月31日是世界末日 当
  • 游戏开发unity插件DoTween:实现人物向目标方向旋转

    已知世界坐标下目标对象的朝向向量B 当前人物朝向向量A transform forward 如何用DoTween实现人物旋转动画呢 Vector3 forwardWorldVector B float duration 0 5f trans
  • 产品研发流程

    需求管理流程介绍 1 1需求管理流程 产品研发的生命周期 一般需要以下几个环节 1 2常用的调研方法 1 3如何进行访谈 访谈注意事项 1 列调研大纲 根据大纲去调研 2 调研顺序 先流程后细节 1 流程从哪里开始 由谁发起 什么事情触发的
  • 想入手抖音定制生日祝福短视频,没有创意思路怎么办?几个方面带你了解整个流程

    项目 定制派大星生日祝福视频 原理 从抖音引流到微信转为私域流量 成本 一部手机 一个微信小号 需要的资源 配音声优 视频素材 一个抖音号 剪辑工具 剪映 这是一个淘宝商品改造成抖音的玩法项目 一 需求思路 儿童喜欢看的动画片人物 比如 派

随机推荐

  • ubuntu16.04开起wifi热点

    1 首先保证电脑连接有线网络 2 点击电脑屏幕右上方联网图标 选择最后一个选项 编辑连接 3 进入如下页面 选中选中wifi选项 点击添加 4 进入如下页面 选择连接类型为wifi 点击新建 5 进入如下页面 填写连接名称与SSID 这两项
  • java深度克隆工具类——支持对象和对象集合

    正经学徒 佛系记录 不搞事情 第一步 创建工具类 直接使用commons beanutils实现对象拷贝 引入pom
  • mysql数据库存储逻辑_MySQL逻辑架构及存储引擎简介

    MySQL逻辑架构 并发控制 由锁实现 读锁 也叫共享锁 读锁互相不阻塞 A加锁表后A b c d都能读该表但不能写该表 写锁 也叫排他锁 写锁相互阻塞 A加排他锁后 其他线程不能读写该表 锁粒度 表锁 锁一个表 并发粒度小 代表存储引擎M
  • Blazor 模板化组件开发指南

    翻译自 Waqas Anwar 2021年4月15日的文章 A Developer s Guide To Blazor Templated Components 1 在我之前的一篇文章 Blazor 组件入门指南中 我介绍了组件参数 并向您
  • javascript 转数字:javascript数字相加

    var a 3 var b 98 c a b 想得到c 101 确变成了字符串拼接 得到了398 我该则么做呢 c parseInt a parseInt b
  • #pragma once 与 #ifndef

    在C C 中 使用 include 包含文件的时候 经常使用方法去防止重复引用 产生二义性 通常有两种方式 第一种 ifndef指令方式代码被重复引用 比如说 ifndef CODE BLOCK define CODE BLOCK code
  • 谈文本分类

    本文来自对 文本分类研究综述 汪岿的阅读 文章目录 1 为什么要进行文本分类 2 文本分类的分类 应用 3 当前文本分类面临的挑战 4 文本分类的前景 1 为什么要进行文本分类 在大数据时代 网络上的文本数据日益增长 采用文本分类技术对海量
  • 04-Java框架-MyBatis

    一 MyBatis的介绍 1 1 回顾一下JDBC 下面这个代码是使用JDBC实现基于id查询员工信息 我们来分析分析有什么弊端 public Employee selectById Long id Connection conn null
  • 【解决】pytorch单机多卡问题:ERROR: torch.distributed.elastic.multiprocessing.api:failed

    最近在使用单机多卡进行分布式 DDP 训练时遇到一个错误 ERROR torch distributed elastic multiprocessing api failed 而实际报错的内容是 ValueError sampler opt
  • LeetCode·每日一题·722. 删除注释·模拟

    题目 示例 思路 题意 gt 给定一段代码 将代码中的注释删除并返回 由于注释只有两种类型 字符串 表示行注释 表示 和其右侧的其余字符应该被忽略 字符串 表示一个块注释 它表示直到下一个 非重叠 出现的 之间的所有字符都应该被忽略 阅读顺
  • Vuforia AR学习

    传送门 1 搜索 Vuforia 下载相关 SDK 和 Samples 2 这个就有点坑了 想运行 sample demo 需要把下载好的sample拷贝至sdk目录下的sample文件夹下 如图 3 也可以修改修改 Samples dem
  • Linux中nginx配置ssl证书实现https访问(nginx-1.16.1为例)

    配置ssl证书之前 先准备好SSL证书 至于获取的途径很多 不清楚的可以自行搜索 也可以留言 准备好证书后 找到nginx的安装目录 我的安装位置为 usr local nginx 1 16 1 进入 conf nginx conf 编辑n
  • 数据结构:哈夫曼树算法(内含Select函数算法解析)全网最全解释

    引言 学习数据结构的都应该清楚 哈夫曼树是书章节的最后一个内容 也是相对重要的一个知识 他可以应用在生活的各个例子中 如下图所示 假设有ABCD 四个货物架D货架物品被人购买的概率是20 C货架是 35 B货架是 60 D货架是80 那么显
  • python 数组-(列表遍历)(元素互换)

    lisName 张三丰 李四 王麻子 饭桶 遍历列表中所有元素 print 20 for obj in lisName print obj print 20 通过 下标 索引获取值 for i in range 0 len lisName
  • blender快捷键

    tab 模式切换 可以shift多物体切换 主键盘 1点 2线 3面 按住shift 点击点面 可以多选 或者shift 1 2 3多选 ctrl alt q 四象视图 小键盘1前 3右 7顶 9切换前后 也可以按crl 1后视图 小键盘
  • STL系列之十 全排列(百度迅雷笔试题)

    转载自 http blog csdn net morewindows article details 7370155 全排列在笔试面试中很热门 因为它难度适中 既可以考察递归实现 又能进一步考察非递归的实现 便于区分出考生的水平 所以在百度
  • GlidedShy 第一题 实现自动登录和数据爬取

    python 自动登录 控制以及接管浏览器 爬取信息练习 GlidedShy官网 爬虫练习网站 代码仅供学习参考 功能实现步骤 自动登录 输入账号密码 选择题目 爬取数据 自动提交后返回 验证邮箱 注册时已人工验证 框架 Seleium控制
  • spdlog和fork冲突问题

    遇到个问题 使用spdlog的async logger打印日志 一直都是正常的 但是调用了fork之后就不打印了 先使用打印TODO大法 使用的spdlog的default logger打印 走的console打印 结果发现console打
  • win10 WSL2 Docker 与 Linux Docker

    项目场景 项目场景 用win10 wsl2 docker开发使用GPU tensorflow onnx TensorRT 的镜像 然后部署到Linux生产环境进行使用 发现不识别cuda驱动 问题描述 在Linux上运行wsl2 save
  • 优化算法基本原理

    优化算法基本原理 机器学习就两个问题 一个是model的定义 一个就是如何优化 model是战略 优化则是执行 在Caffe现在的版本中 主要使用了三种优化算法SGD AdaGrad 以及NAG 这三种算法快速 高效 缺点就是极容易收敛到局