radam+lookahead optimizer

  • torch 中 optimizer的类
  • lookahead 源码解析
  • radams 源码解析

torch 中 optimizer的类

optimizer的类中的link optimizer详解

主要说明optimizer里面的param_groups这个属性,param_group是一个list,在里面存放着字典 dict,dict中的key包括下面的几个部分:

lookahead 源码解析

lookahead 使用的是向前k步,然后倒退一步,这可以理解为,向前探索的过程中可能会遇到死胡同,这时候有一个小伙伴站在了你俩中间某个位置等待,你找不到出路时可以回去找他。

class Lookahead(Optimizer):def __init__(self, optimizer, alpha=0.5, k=6):# alpha 控制小伙伴距离我有多远,1时紧跟我,0时在原点等待我if not 0.0 <= alpha <= 1.0:raise ValueError(f'Invalid slow update rate: {alpha}')if not 1 <= k:raise ValueError(f'Invalid lookahead steps: {k}')self.optimizer = optimizerself.param_groups = self.optimizer.param_groupsself.alpha = alphaself.k = kfor group in self.param_groups:group["step_counter"] = 0# 小伙伴对我的权重进行复制,保持requires_grad = False(detach就能完成)self.slow_weights = [[p.clone().detach() for p in group['params']]for group in self.param_groups]for w in it.chain(*self.slow_weights):w.requires_grad = Falseself.state = optimizer.statedef step(self, closure=None):loss = Noneif closure is not None:loss = closure()loss = self.optimizer.step()for group,slow_weights in zip(self.param_groups,self.slow_weights):group['step_counter'] += 1if group['step_counter'] % self.k != 0:continuefor p,q in zip(group['params'],slow_weights):if p.grad is None:continue# 小伙伴到达我和他距离的a山腰q.data.add_(p.data - q.data, alpha=self.alpha )# 我去寻找我的小伙伴p.data.copy_(q.data)return loss

radams 源码解析

比adams多了一个r,这里表示的是此时的方差,和最后的方差之间的差距,(adams的问题在于RAdam 指出在训练的初期 Adam 中 v的方差会非常大。而 v 起到修正更新方向的作用,因此 Adam 参数的更新量的方差也会很大。)radams知乎详解

loss = closure()for group in self.param_groups:for p in group['params']:if p.grad is None:continuegrad = p.grad.data.float()if grad.is_sparse:raise RuntimeError('RAdam does not support sparse gradients')p_data_fp32 = p.data.float()state = self.state[p]if len(state) == 0:state['step'] = 0state['exp_avg'] = torch.zeros_like(p_data_fp32)state['exp_avg_sq'] = torch.zeros_like(p_data_fp32)else:state['exp_avg'] = state['exp_avg'].type_as(p_data_fp32)state['exp_avg_sq'] = state['exp_avg_sq'].type_as(p_data_fp32)exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq']beta1, beta2 = group['betas']# 计算 vtexp_avg_sq.mul_(beta2).addcmul_(grad, grad, value = 1 - beta2)# 计算 mtexp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)state['step'] += 1buffered = self.buffer[int(state['step'] % 10)]if state['step'] == buffered[0]:N_sma, step_size = buffered[1], buffered[2]else:# 更新ρt的过程buffered[0] = state['step']beta2_t = beta2 ** state['step']N_sma_max = 2 / (1 - beta2) - 1N_sma = N_sma_max - 2 * state['step'] * beta2_t / (1 - beta2_t)buffered[1] = N_sma# more conservative since it's an approximated valueif N_sma >= 5:step_size = math.sqrt((1 - beta2_t) * (N_sma - 4) / (N_sma_max - 4) * (N_sma - 2) / N_sma * N_sma_max / (N_sma_max - 2)) / (1 - beta1 ** state['step'])else:step_size = 1.0 / (1 - beta1 ** state['step'])buffered[2] = step_sizeif group['weight_decay'] != 0:p_data_fp32.add_(-group['weight_decay'] * group['lr'], p_data_fp32)# more conservative since it's an approximated valueif N_sma >= 5:denom = exp_avg_sq.sqrt().add_(group['eps'])p_data_fp32.addcdiv_(exp_avg, denom, value=-step_size * group['lr'])else:p_data_fp32.add_(exp_avg, alpha=-step_size * group['lr'])p.data.copy_(p_data_fp32)return loss

radam+lookahead optimizer相关推荐

  1. 使用什么优化器_新的深度学习优化器Ranger:RAdam + LookAhead强强结合

    [导读]给大家介绍一个新的深度学习优化器,Ranger,同时具备RAdam和LookAhead的优点,一行代码提升你的模型能力. Ranger 优化器结合了两个非常新的发展(RAdam + Looka ...

  2. 新的深度学习优化器Ranger: RAdam + LookAhead的协同组合,两者兼得。

    Rectified Adam(RAdam) 新的state of the art优化器:Rectified Adam(RAdam),相比adam,可以稳定提高准确率,关键是,真的有用. Liu, Ji ...

  3. RAdam优化器又进化:与LookAhead强强结合,性能更优速度更快

    鱼羊 编译整理  量子位 报道 | 公众号 QbitAI 上周,来自UIUC的中国博士生Liyuan Liu提出了一种兼具Adam和SGD两者之美的新优化器RAdam,收敛速度快,还很鲁棒,一度登上了 ...

  4. Keras实现两个优化器:Lookahead和LazyOptimizer

    Keras实现两个优化器:Lookahead和LazyOptimizer By 苏剑林 | 2019-07-30 | 2232位读者 | 最近用Keras实现了两个优化器,也算是有点实现技巧,遂放在一 ...

  5. 【深度学习】超强优化器如何与网络有机结合

    [深度学习]超强优化器如何与网络有机结合 1 Ranger优化器 2 一个例子(基于CNN和pytorch) 3 剪枝(减小优化器压力) 1 Ranger优化器 RAdam + Lookahead + ...

  6. 【Pytorch神经网络实战案例】40 TextCNN模型分析IMDB数据集评论的积极与消极

    卷积神经网络不仅在图像视觉领域有很好的效果,而且在基于文本的NLP领域也有很好的效果.TextCN如模型是卷积神经网络用于文本处理方面的一个模型. 在TextCNN模型中,通过多分支卷积技术实现对文本 ...

  7. 【Pytorch神经网络实战案例】22 基于Cora数据集实现图注意力神经网络GAT的论文分类

    注意力机制的特点是,它的输入向量长度可变,通过将注意力集中在最相关的部分来做出决定.注意力机制结合RNN或者CNN的方法. 1 实战描述 [主要目的:将注意力机制用在图神经网络中,完成图注意力神经网络 ...

  8. 【Pytorch神经网络实战案例】20 基于Cora数据集实现图卷积神经网络论文分类

    1 案例说明(图卷积神经网络) CORA数据集里面含有每一篇论文的关键词以及分类信息,同时还有论文间互相引用的信息.搭建AI模型,对数据集中的论文信息进行分析,根据已有论文的分类特征,从而预测出未知分 ...

  9. 华为云杯”2020人工智能创新应用大赛总结与分析

    华为云杯"2020人工智能创新应用大赛总结与分析 目录 赛题背景 数据简介与评判指标 数据分析 数据概览与初步分析 数据增强 模型设计与训练 基本结构 BackBone选取 Loss选取 优 ...

  10. NeurIPS 2019揭榜!华人作者贡献42%,谷歌170篇屠榜;国内清华第一,腾讯领衔产业界(附链接)...

    本文经AI新媒体量子位(公众号 ID: QbitAI)授权转载,转载请联系出处 本文约2900字,建议阅读6分钟. AI科研决战揭榜! 一年一度,AI科研华山论剑. 只是2019年NeurIPS,决战 ...

最新文章

  1. 深入理解 Android Https
  2. 与内存对齐,字符数组求sizeof相关的一些问题
  3. 哈希函数的原理及应用
  4. sketch生成android代码,java – 从Android Processing Sketch保存图像
  5. sqlbulkcopy mysql_c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中
  6. c语言三目运算符_C语言中的三目运算符是啥?有何用处?
  7. conda安装tensorflow-gpu简洁版_【DP系列教程02】DeePMDkit:conda安装 amp; 离线安装
  8. pytorch 与numpy 部分操作的对应关系
  9. SQL 查看SQL语句的执行时间 直接有效的方法
  10. Cocos2dx ParticleEditor粒子编辑器
  11. CC2430 CC2530 AD转换分辨率之“争”
  12. pyltp的基本用法和语义角色标注
  13. 中国可调节麦克风支架行业销售状况与盈利前景预测报告(2022-2027)
  14. 解决 联想小新pro16 更换硬盘 重装系统后FN + Q 等命令失效
  15. Mybatis操作Oracle中的Clob和Blob字段
  16. java对象的内存分配流程
  17. 安全基因赋能物流市场,智加科技打磨L4级自动驾驶重塑高速运输 | 2018 全球智能驾驶峰会...
  18. 计算机网络实验一:验证性实验
  19. python里的map是什么意思_map在python中什么意思
  20. 至强服务器性能视频,英特尔至强E5-2600服务器到底有多强?

热门文章

  1. 应届生拿到offer之后的流程_应届生雷区:拿到offer不想去了怎么办?小心登上HR黑名单!...
  2. 在python中datetime使用中如何识别上月同期日期
  3. 几种常见的4K高清视频信号传输方案对比
  4. Boost电路小信号建模分析
  5. 谷歌浏览器如何设置兼容
  6. 利用Nginx反向代理解决服务器80端口被封
  7. ubuntu服务器系统卸载重装,双系统卸载和安装-及ubuntu配置
  8. 一元三次方程求解matlab_用Matlab ode45函数解常微分方程
  9. 如何用手机修改证件照尺寸大小
  10. EXCEL VBA 二维表转换成一维表