自监督SOTA框架 | BYOL(优雅而简洁) | 2020
- 文章原创自微信公众号「机器学习炼丹术」
- 作者:炼丹兄
- 联系方式:微信cyx645016617
本篇文章主要讲解两个无监督2020年比较新比较火的论文:
- 论文名称:“Bootstrap Your Own Latent: A New Approach to Self-Supervised Learning”
- 论文链接:https://arxiv.org/pdf/2006.07733.pdf
0 综述
BYOL是Boostrap Your Own Latent,这个无监督框架非常的优雅和简单,而且work。收到了很多人的称赞,上一个这样起名的在我认知中就是YOLO。两者都非常简单而优美。
1 数学符号
这个结构有两个网络,一个是online network,一个是target network。
- online network:用\(\theta\)来表示online network的参数,包含,encoder\(f_{\theta}\),projector\(g_{\theta}\)和predictor\(q_\theta\)
- target netowrk:使用\(\xi\)来表示参数,也有\(f_{\xi}\)和\(g_{\xi}\),但是没有predictor。
我们会更新online network,然后用滑动平均的方式,更新target network:
\(\xi\leftarrow \tau\xi + (1-\tau)\theta\)
现在我们有一个图像数据集D,其中获取一个图片\(x\in D\),然后我们对这个D做不同的图像增强,得到了两个新的分布\(\Tau\)和\(\Tau'\),然后从两个新分布中获取的图片,用\(v\)和\(v'\)标记。也就是说,如果用\(t()\)和\(t'()\)表示对图像做图像增强的过程,那么\(v=t(x),v'=t'(x)\)。
2 损失函数
我们现在有\(v\),经过encoder,得到\(y=f_{\theta}(v)\),经过prejector,得到\(z=g_{\theta}(y)\),经过predictor,得到\(q_{\theta}(z)\);同理,target network也是如此,只是没有最后的predictor,最终得到\(z'\)。
我们对\(z'\)和\(q_{\theta}(z)\)做l2-normalization,含义为取出这两个隐含变量的绝对大小,而保留其方向性,为后面要做的向量点乘做铺垫。
上图中,\(\bar{q_{\theta}}(z)=\frac{q_{\theta}(z)}{||q_{\theta}(z)||_2}\),损失函数不难,其实有点像是:\(2-2\cos\theta\)
上面,我们得到了损失\(L_{\theta,\xi}\),接下来,我们需要计算symmetric loss,这个是把v和v‘分别放入target network和online network计算,得到的\(\widetilde{L}_{\theta,\xi}\),然后论文中提到,通过SGD来最小化
\(L^{BYOL}_{\theta,\xi}=L_{\theta,\xi} + \widetilde{L}_{\theta,\xi}\)
需要注意的是,这个优化的过程,仅仅更新online network,target network的参数不变化,目的是让online network逐渐拥有target network的性能
因此,这个BYOL的整个训练过程可以浓缩成下面的两行:
3 细节部分
3.1 图像增强
3.2 结构
上图中的encoder\(f_{\theta},f_{\xi}\)使用的是resnet50和post activation,这里第一次看到post activation,就去看了一下发现,其实就是先卷积还是先激活层,如果relu放在conv后面就是post activation,relu放在conv前面就是pre activation。
经过encoder,一个图片会输出2048个features,然后经过MLP,特征扩展到4096个特征,最终输出256个特征,在SimCLR模型中,MLP后跟了一个BN层和Relu激活层,但是在BYOP中没有BN层。
3.3 优化器
使用的是LARS优化器,使用cosine 学习率衰减策略,训练1000epoch,其中包含10个warn-up epoch。学习率设置的为0.2。
至于online更新到target的参数\(\tau\),\(\tau_{base}=0.996\),
\(\tau=1-(1-\tau_{base})(\cos\frac{\pi k}{K}+1)\frac{1}{2}\)
k is current training step and K is maximum training steps.
3.4 财力
batchsize为4096,分布在512个TPU v3的核,训练encoder大约需要8个hour。
4 模型评估
在ImageNet上做监督学习,先用无监督训练好encoder后,然后用标准的resnet50进行监督微调:
前面同行,这里的监督训练也是获取ImageNet上的少部分数据集进行训练,所以叫做semi-supervised:
这样的方法在其他的分类数据集上的效果:
觉得笔记不错的,可以关注作者的微信公众号「机器学习炼丹术」。
自监督SOTA框架 | BYOL(优雅而简洁) | 2020的更多相关文章
- 我是SPI,我让框架更加优雅了!
文章首发于[陈树义的博客],点击跳转到原文<我是 SPI,我让框架更加优雅了!> 自从上次小黑进入公司的架构组之后,小黑就承担起整个公司底层框架的开发工作.就在刚刚,小黑又接到一个任务:做 ...
- 自监督图像论文复现 | BYOL(pytorch)| 2020
继续上一篇的内容,上一篇讲解了Bootstrap Your Onw Latent自监督模型的论文和结构: https://juejin.cn/post/6922347006144970760 现在我们 ...
- 跨平台移动开发 Xuijs超轻量级的框架 Dom与Event简洁代码实现文本展开收起
Dom与Event简洁代码实现文本展开收起 Xuijs超轻量级的框架 Dom与Event实现文本展开收起 效果图 示例代码 <!DOCTYPE html PUBLIC "-//W3C/ ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- IOC框架Ninject实践总结
原文地址:http://www.cnblogs.com/jeffwongishandsome/archive/2012/04/15/2450462.html IOC框架Ninject实践总结 一.控制 ...
- 百万级别QPS轻量级PHP框架Steeze介绍
系统简介 Steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现. 支持swoole模型运行,支持容器.模 ...
- Steeze框架之入门使用
一.介绍 steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现.支持swoole模型运行,支持容器.模型.依 ...
- Koa 框架常用知识点整理
简介 Koa 就是一种简单好用的 Web 框架.它的特点是优雅.简洁.表达力强.自由度高.本身代码只有1000多行,所有功能都通过插件实现. 学前准备 检查Nodejs版本 打开cmd命令行窗口nod ...
随机推荐
- NET 5 依赖注入多个服务实现类
依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来. 服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了 ...
- 01 . GitLab简介及环境部署
GitLab简介 最初,该产品名为GitLab,是完全免费的开源软件,按照MIT许可证分发. 2013年7月,产品被拆分为:GitLabCE(社区版)和GitLabEE(企业版),当时,GitLabC ...
- 超长JVM总结,面试必备
什么是JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的交互. ...
- [leetcode]79.Search Word 回溯法
/** * Given a 2D board and a word, find if the word exists in the grid. The word can be constructed ...
- Mapreduce实例--求平均值
求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,在数据输入到Reduce之前先经过shuffle,将map函数输出的key值相同的所有的value值形 ...
- informix部署安装
informix部署安装 一.环境准备 Linux版本:centos7.6 Linux主机名:localhost informix安装包:ibm.ids.14.10.FC4W1.LNX.tar inf ...
- Linux 网卡 bonding配置
网卡 bonding配置 目录 网卡 bonding配置 一.bonding技术 bonding的七种工作模式 总结: 二.Centos7配置bonding 1.关闭和停止NetworkManager ...
- 改进你的c#代码的5个技巧(一)
亲爱的读者,在这篇文章中,我提供了一些c#编程的最佳实践. 你是否在用户输入验证中使用异常处理机制? 如果是,那么你就是那个把你的项目执行速度降低了62倍的人.你不相信我吗?等几分钟;我来教你怎么做. ...
- Second_week_mofangzhen
第二周 奇数阶魔方阵 一.上节回顾 1.数组的基本操作 数组:若干个相同类型变量的集合. 声明:数据类型 数组名称[]; (在栈内存分配空间,存储的是数组的引用地址.数组首元素在堆内存 中的地址) 初 ...
- 【递归】P2386放苹果
题目相关 题目描述 把 m个同样的苹果放在 n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法.(5,1,1 和 1,1,5 是同一种方法) 输入格式 第一行是测试数据的数目 t,以下每行 ...