【无监督】6、SimSiam | 基于孪生网络的对比学习的成功源于梯度截断!

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
    • 三、效果

论文:Exploring Simple Siamese Representation Learning

出处:FAIR | 何恺明大佬

本文作者抛出了两个爆炸💥性结论:

  • 结论一:基于孪生网络的对比的学习的成功,不源于 predictor、BN、l2-norm,而是源于一个分支梯度截断(但作者最终也没有给出一个很好的解释,只是证明了这个结论)

  • 结论二:孪生网络其实是在学习输入不变性,也就是对同一输入经过不同的数据增强,输出保持不变的能力(类似于 CNN 中的平移不变性,但孪生网络学习的不变性更复杂更难)

一、背景

在这里插入图片描述

无监督学习算是被孪生网络玩明白了,典型的方法如 MOCO、SimCLR、BYOL 等都是孪生网络的结构,其训练模型的主要目的就是最大化来自同一图片的两个 augmentation views 的相似度。

但是,孪生网络有一个最大的问题就是模态坍塌,也就是所以输出都坍塌成一个常数,这样 loss 永远为零,模型找到了一个捷径,不用学习。

为了在使用孪生网络的同时避免模型坍塌,很多方法提出了一些限制条件:

  • SimCLR 中使用超大的 batch size (4096)引入负样本来提升对比学习的难度
  • SwAV 引入了在线聚合方式
  • BYOL 舍弃了负样本,使用了不对称的孪生网络结构和 momentum encoder 的方式,也避免了模型坍塌

SimSiam 的特点:

  • SimSiam 作者证明在不使用负样本、large batch、momentum encoder 的情况下,孪生网络也能学习的很好,而且通过实验证明了这个结论

  • SimSiam 作者证明避免模型坍塌最重要的一点是使用梯度截断,而不在于对 loss 或模型结构的限制

SimSiam 的结构可以看做:

  • “BYOL without the momentum encoder”
  • “SimCLR without negative pairs”
  • “SimCLR without negative pairs”

图 1 展示了 SimSiam 的结构,又一次证明了打败恺明大佬的只有他自己,完全拿掉了 MOCO 他亲自提出的 momentum encoder 和 queue 的模块,两个蓝色的 encoder 模块参数完全相同,左边多了一个 predictor,这个 predictor 是经过前面几个大佬的方法(SimCLR、BYOL等)证明的一个非常有用的模块,右边不进行梯度回传,直接使用左边的参数来更新自己即可。

在这里插入图片描述

看到这里我们不禁怀疑了,为什么之前各种的负样本、大 batch、momentum encoder 在这里都舍弃了,模型却还能很好的工作

作者在这里提出一个新的观点(但没有得到很好的证明):

  • 梯度截断的方法既然有效,那就说明梯度截断问题是一个新的未被解决的隐藏的问题

  • 作者假设这里隐藏了两组变量,而且 SimSiam 的行为看起来是在这两组参数中进行有选择的优化

孪生网络的隐藏任务:学习不变性(一个图像经过复杂数据增强后,输出不变)

  • 作者用简单的 baseline 表明,孪生网络这个结构是对比对比学习成功的关键所在,其原因在于孪生网络可以为模型不变性引入归纳偏置,这里的不变性就是说同一输入的两个不同视角经过处理后应该有相同的输出

  • 哎呀这不和 CNN 中的归纳偏置联系起来了吗,这不很像 CNN 中的平移不变性嘛

  • 所以,参数共享的孪生网络能够根据更复杂的变化(平移、缩放、随机抠图等)构建模型的不变性

看到这里,悟了!佩服大佬的总结升华能力!膜拜!

二、方法

在这里插入图片描述

SimSiam 的总体结构如图 1 所示:

  • 将输入图片经过随机数据增强得到两个视角的图片 x1 和 x2

  • 这两个视角的图片都经过 encoder network f f f( 由 backbone + projection MLP head 组成),两个分支的 f f f 的参数是共享的

  • 在左边分支上, f f f 后面还加了一个 prediction MLP head h h h,用于将一个视角的输出进行再次转换

  • 将两个分支的结果进行相似度计算,最小化 negative cosine similarity

    在这里插入图片描述
    在这里插入图片描述

  • 最后,计算对称 loss,这里 loss 的最小值为 -1,因为 cos 0=1。这里计算对称 loss 的原因是两个视角的图都会分别经过左边的分支和右边的分支,上图 1 中标红的第一种情况,就是 x1 经过左边得到 p1,x2 经过右边的分支得到 z2。还有一种情况就是 x1 经过右边的分支得到 z1,x2 经过左边的分支得到 p2。

    在这里插入图片描述

梯度截断到底起到了什么作用:为网络提供了可选择的优化路径(但没得到很好的证明)

我们知道本文最重要的一点就在于右边分支进行了梯度截断,也就是 loss 计算的时候计算的如下内容:

在这里插入图片描述

这就说明 z 2 z_2 z2 一直被当做常数,所以上面的 L 公式在本文的前提下被重写如下:

在这里插入图片描述

所以,梯度截断的效果在于:

  • x 2 x_2 x2 的 encoder 不会从 z 2 z_2 z2 获得任何梯度,但能从 p 2 p_2 p2 中获得梯度( p 2 p_2 p2 就是 x 2 x_2 x2 输入 f f f 后得到的输出)
  • x 1 x_1 x1 的 encoder 不会从 z 1 z_1 z1 获得任何梯度,但能从 p 1 p_1 p1 中获得梯度( p 1 p_1 p1 就是 x 1 x_1 x1 输入 f f f 后得到的输出)

图 2 展示了梯度截断对模型的影响:

  • 如最左侧所示,没有梯度截断时(橘色),模型能很快的找到一个捷径解, loss 被优化为 -1
  • 为了探索这种捷径解是不是源于模型坍塌,作者对输出求了标准差,如果输出坍塌为了一个常数,则所有通道的总体的标准差就会变为 0,如中间图橘色所示
  • 如果模型正常迭代,输出是一个均值为 0 的高斯分布,那么标准差就是 1 / d 1/\sqrt d 1/d ,如中间图蓝色所示,也就是有梯度截断的时候,输出是正常的
  • 如最右侧所示,展示了 KNN 分类器的验证集的效果,有梯度截断的时候,KNN 分类器的效果是逐步上升的
    在这里插入图片描述

作者用这个实验证明了,尽管有 BN、predictor、l2-norm,模型也会坍塌,因为在模型的设置中唯一改变的就是是否进行了模型梯度截断。

为了证明这个结果,作者进行了一系列的推断,但还是没有一个很好的结论

最后作者给出了自己的一个理解:

  • 孪生网络是交替优化的,就是两个样本会分别送入左边分支和右边分支,而只有左边的分支是进行梯度更新的,所以,这种选择交替的优化模型提供了一个不同的优化轨迹,而且这个轨迹很大程度上依赖于初始化的好坏
  • 如果随机初始化一个网络,那么输出可能就是常数,从这种参数上来开始优化的话, 那么所有输入对应的输出都有可能是常数

三、效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/99730.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊云科技 云技能孵化营——机器学习心得

亚马逊云科技 云技能孵化营机器学习心得 前言什么是机器学习?机器学习如何解决业务问题?什么时候适合使用机器学习模型?总结 前言 很荣幸参加了本次亚马逊云科技云技能孵化营,再本期的《亚马逊云科技云技能孵化营》中&#xff0c…

Leetcode-每日一题【剑指 Offer 33. 二叉搜索树的后序遍历序列】

题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3 示例 1: 输入: […

基于樽海鞘群算法优化的BP神经网络(预测应用) - 附代码

基于樽海鞘群算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于樽海鞘群算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.樽海鞘群优化BP神经网络2.1 BP神经网络参数设置2.2 樽海鞘群算法应用 4.测试结果:5…

Flink内核源码解析--Flink中重要的工作组件和机制

Flink内核源码 1、掌握Flink应用程序抽象2、掌握Flink核心组件整体架构抽象3、掌握Flink Job三种运行模式4、理解Flink RPC网络通信框架Akka详解5、理解TaskManager为例子,分析Flink封装Akka Actor的方法和整个调用流程6、理解Flink高可用服务HighAvailabilityServ…

初识网络原理(笔记)

目录 ​编辑局域网 网络通信基础 IP 地址 端口号 协议 协议分层 TCP / IP 五层网络模型 网络数据传输的基本流程 发送方的情况: 接收方的情况 局域网 搭建网络的时候,需要用到 交换机 和 路由器 路由器上,有 lan 口 和 wan 口 虽…

基础恢复1-c语言

用书:c primer plus 学习时间:21-25 重点知识: 1.编译-链接-运行 编译:编译器将源码转换为可执行代码 链接:编译器从c库中获取标准例程放入源码中一同编译 运行:运行可执行文件 2.关键字 数据类型&…

Android oaid

官方GitHub地址 https://github.com/gzu-liyujiang/Android_CN_OAID 生成和用途介绍 https://www.jianshu.com/p/1c7ef27d6db4 图片来源于上述网站 其他关于id的介绍 https://www.cnblogs.com/chenKnowledgeConllection/p/17380960.html https://zhuanlan.zhihu.com/p/55…

分享图片 | 快速浏览网页资源,批量保存、一键分享图片

前言 小伙伴学习吉他,有时需要在互联网搜索曲谱资源,而多数曲谱均为图片,并且为多页,在电脑上显示练习很不方便,需要停下来点击鼠标进行翻页,影响练习的连贯性。 为了解决上述问题,通常把图片…

博客系统之单元测试

对博客系统进行单元测试 1、测试查找已存在的用户 测试名称 selectByUsernameTest01 测试源码 //查找用户,存在 Test public void selectByUsernameTest01 () { UserDao userDao new UserDao(); String ret1 userDao.selectByUsername("张三").toStr…

MYSQL完全卸载、安装与账号创建、权限控制

一、卸载mysql CentOS 卸载 MySQL 1. 查看安装情况 使用以下命令查看当前安装mysql情况,查找以前是否装有mysql rpm -qa|grep -i mysql这里显示我安装的 MySQL 服务有有: 2. 停止 mysql 服务、删除之前安装的 mysql 删除命令:rpm -e –n…

Eslint error, configuration for rule “import/no-cycle“ is invalid

可以参考stackoverflow.comEslint error, configuration for rule "import/no-cycle" is invalid他的意思是有个∞符号不支持,解决方案,把 eslint-plugin-import 的版本增加到 ^2.22.1,重新下载依赖包如:

学习笔记230804---restful风格的接口,delete的传参方式问题

如果后端提供的删除接口是restful风格,那么使用地址栏拼接的方式发送请求,数据放在主体中,后端接受不到,当然也还有一种可能,后端在这个接口的接参设置上是req.query接参。 问题描述 今天遇到的问题是,de…

(二)结构型模式:7、享元模式(Flyweight Pattern)(C++实例)

目录 1、享元模式(Flyweight Pattern)含义 2、享元模式的UML图学习 3、享元模式的应用场景 4、享元模式的优缺点 5、C实现享元模式的简单实例 1、享元模式(Flyweight Pattern)含义 享元模式(Flyweight&#xff09…

常用系统命令

重定向 cat aa.txt > bbb.txt 将输出定向到bbb.txt cat aaa.txt >> bbb.txt 输出并追加查看进程 ps ps -ef 显示所有进程 例⼦:ps -ef | grep mysql |:管道符 kill pid 结束进程, 如 kill 3732;根据进程名结束进程可以先…

20英镑以上免费吗?英国亚马逊上调当日达订单免配送费门槛!

据外媒报道,英国亚马逊向Prime会员发送了一封电子邮件,通知他们从下个月开始必须为小额当日达订单支付运费。 亚马逊在向Prime用户发送的电子邮件中称,目前,其向符合条件的邮政编码内的Prime会员提供免费当日送达服务。 不过&am…

vue 实现图片懒加载

一:懒加载的目的 有些页面可能展示的是大量的图片,如果我们一次性加载所有图片就会浪费性能,影响用户体验,所以我们就会懒加载这些图片。即可视区域之外的图片不加载,随着页面的滚动,图片进入可视区域&…

Appium Desktop安装

【提示:官方已不再维护,建议命令行方式安装,但可以学习了解一下】 Appium Desktop是一款适用于Mac、Windows和Linux的应用程序,它以漂亮灵活的UI为您提供Appium自动化服务器的强大功能。它基本上是Appium Server的图形界面。您可…

Day8 智慧商城

项目演示 项目收获 创建项目 调整初始化目录 1.删components里的所有文件 2.删views里的所有文件 3.router/index.js 删路由 删规则 import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({routes: [] })export default route…

【Git】本地搭建Gitee、Github环境

本地 (Local) 1、使用命令生成公钥(pub文件) 1. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "github_id_rsa" 2. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "gitee_id_rsa" …

Rides分布式缓存

分布式缓存 -- 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题: 1.Redis持久化 Redis有两种持久化方案: RDB持久化 AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件)&#x…