• 文章原创自微信公众号「机器学习炼丹术」
  • 作者:炼丹兄
  • 联系方式:微信cyx645016617

本篇文章主要讲解两个无监督2020年比较新比较火的论文:

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的更多相关文章

  1. 我是SPI,我让框架更加优雅了!

    文章首发于[陈树义的博客],点击跳转到原文<我是 SPI,我让框架更加优雅了!> 自从上次小黑进入公司的架构组之后,小黑就承担起整个公司底层框架的开发工作.就在刚刚,小黑又接到一个任务:做 ...

  2. 自监督图像论文复现 | BYOL(pytorch)| 2020

    继续上一篇的内容,上一篇讲解了Bootstrap Your Onw Latent自监督模型的论文和结构: https://juejin.cn/post/6922347006144970760 现在我们 ...

  3. 跨平台移动开发 Xuijs超轻量级的框架 Dom与Event简洁代码实现文本展开收起

    Dom与Event简洁代码实现文本展开收起 Xuijs超轻量级的框架 Dom与Event实现文本展开收起 效果图 示例代码 <!DOCTYPE html PUBLIC "-//W3C/ ...

  4. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  5. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  6. IOC框架Ninject实践总结

    原文地址:http://www.cnblogs.com/jeffwongishandsome/archive/2012/04/15/2450462.html IOC框架Ninject实践总结 一.控制 ...

  7. 百万级别QPS轻量级PHP框架Steeze介绍

    系统简介   Steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现. 支持swoole模型运行,支持容器.模 ...

  8. Steeze框架之入门使用

    一.介绍 steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现.支持swoole模型运行,支持容器.模型.依 ...

  9. Koa 框架常用知识点整理

    简介 Koa 就是一种简单好用的 Web 框架.它的特点是优雅.简洁.表达力强.自由度高.本身代码只有1000多行,所有功能都通过插件实现. 学前准备 检查Nodejs版本 打开cmd命令行窗口nod ...

随机推荐

  1. Docker部署tomcat+nginx+mysql,创建一个tomcat集群

    Docker的部署可以选择虚拟机或者云服务器,我自己选择的是本机安装centos7虚拟机: 1.虚拟机安装登录成功后开始部署docker: 首先了解docker是一个开源应用容器引擎,基于Go语言遵循 ...

  2. MQTT协议 局域网和广域网 云服务器和虚拟主机、VPS SSH和FTP、SFTP

     MQTT协议 MQTT协议就很好的解决了coap存在的问题.MQTT协议是由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议.MQTT协议采用发布/订阅模式,所有的物联网终端都通过TC ...

  3. flowable 任务多实例

    项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base*业务场景:收集每个员工的绩效考核信息:收集一次组织活动的信息:一个合同需要三个经理审批, ...

  4. Flowable 简介

    一.Flowable 入门介绍 官网地址:https://www.flowable.org/ Flowable6.3中文教程:https://tkjohn.github.io/flowable-use ...

  5. tcp上传学习二--文本文件上传

    //暮雪超霸.加油!!!package tcp文本上传; import java.io.BufferedReader; import java.io.FileReader; import java.i ...

  6. .NET Core学习笔记(8)——Entity Framework Core之Database First

    曾经我以为再也不会去弄啥Database First,然鹅我错了.这个世界上就是有啪啪打脸和真香的时候.当小伙伴拿着做好的DB表结构和SQL脚本递过来的时候,我知道我没法拒绝.望着他突起的肱二头肌和充 ...

  7. Go-Zero 短链项目 DevOps 实战,利用 Drone CI/CD 打通上云(Kubernetes)迭代流程

    Go-Zero 官方短链项目教程:快速构建高并发微服务 关于 go-zero,大家可以看文档.为少认为它是中国目前最好用的 golang 微服务框架. 完整的 Go-Zero ShortUrl Dev ...

  8. 使用ThreadLocal

    使用ThreadLocal 阅读: 135212 多线程是Java实现多任务的基础,Thread对象代表一个线程,我们可以在代码中调用Thread.currentThread()获取当前线程.例如,打 ...

  9. 美团关于分布式ID实践方案细节

    摘自https://tech.meituan.com/2019/03/07/open-source-project-leaf.html Leaf是美团基础研发平台推出的一个分布式ID生成服务,名字取自 ...

  10. IT 界那些朗朗上口的“名言

    中国有很多古代警世名言,朗朗上口,凝聚了很多故事与哲理.硅谷的互联网公司里头也有一些这样的名言,凝聚了很多公司价值观和做事的方法,对于很多程序员来说,其影响潜移默化.这里收集了一些,如下. Stay ...