Fine Tuning

Fine Tuning

@Langs: python, torch
@reference: d2l-pytorch,transfer_torch

This Note focus on the code part.
模型微调和模型预训练,在Pytorch中的使用方式对比汇总。

How to Design the Fine Tune

这一部分主要集中于我们对于微调任务的拆解,有几种不同的预训练和微调的方式,在不同的情景下,对应的参数应该怎么设置和调整是问题的重点。

WorkFlow

基于这种Transfer的策略,我们能够学习到一个更通用,泛化能力更强,有助于识别边缘,色彩,等等有助于下游任务的通用特征提取。

在Transfer任务中,有几种不同的调整方式:

  • 固定Bakcbone,只训练Classifier
  • 同步微调网络
  • 区分学习率,微调Backbone,训练Classifirer

为了实现这几种不同的Transfer方式,需要用到以下的几种方式:梯度截断,lr区分设置等。

Code Part

不同lr设置

微调Backbone,训练Classifier作为最经典的Transfer设定,在Code上也较为复杂,所以我们首先举个这种例子。


IL Collection

IL Collection

@AikenHong 2022

[[Draft/IL 总结]]: Thx 2 wyz to provide some clus for learnning Incremental Learning.

In this Doc, we may add some related knowledge distill works which is used to design our Incremental Structure.
在这个文档中,我们可能还会添加一些知识蒸馏的相关工作的文献,这些实际上对于我的增量学习架构有一个比较大的启发

  • DER
  • SPPR 没有 get 到方法到底是怎么做的

Introduction 👿

在很多视觉应用中,需要在保留旧知识的基础上学习新知识,==举个例子==,理想的情况是,我们可以保留之前学习的参数,而不发生==灾难性遗忘==,或者我们基于之前的数据进行协同训练,灾难性遗忘是 IL 中最核心的问题。

Incremental 的基本过程可以表示如下[4]
dsa

我们将模型可以划分为以下的两个部分[1]:backbone 和 classifier
split

从 LWF 中我们可以知道经典的 Paradigm,主要有下面的三种来对$\theta _S$ 和$\theta_o$来进行更新:

  • 仅重新训练分类器:仅更新$\theta_o$
  • 微调特征提取器,重新训练分类器
  • 联合训练

基于蒸馏架构的方法


WYZ-IL-Collection

WYZ-IL-Collection

: hammer: 王耀智

Regularization 系列方法

这类方法旨在添加一些正则化损失来解决 catastrophic forgetting 的问题。

Weight Regularization

这类方法一般是对网络中每个参数的重要性进行评估,根据每个参数的重要性和梯度信息更新参数。

典型的文章为 EWC .

PS: 这类文章我也没有读过。

Data Regularization

这类方法专注于记住特征表示,通常是结合 Hinton 的知识蒸馏损失函数使得模型记住旧类别的知识,解决 catastrophic forgetting。

推荐以下几篇文章:

  • LwF(Learning without forgetting),这篇文章在我看来是增量学习的开山之作,第一次给增量学习找到了一个比较好的方向,也是第一次将知识蒸馏应用到增量学习上;
  • PODNet CVPR2020 ,这篇文章最大的贡献在我看来是设计了一个全新的蒸馏损失函数,最终结果也是达到了当时的sota,甚至目前也是几个榜单的sota。

Rehearsal 系列方法

这类方法主要的想法是使用一些旧类别的数据,在新类别到来时使用新旧数据一起训练模型,根据旧类别数据的真假分为以下两种方法。


LT Collection

LT Collection

LT-Collections

@AikenHong 2021

Code of must of those methods
We will analysis those tricks on LT situation, and Analysis why it works.
在进行LT矫正的任务中,有几种常见的trick在各种模型中被使用,我们会对这几种不同的trick进行介绍和分析。

其实在数据量少这一方面LT和Few-Shot是有一定的OverLap的,可以参考以下那边的思路perhaps

Introduction

LT
通常情况下这种严重的类别不平衡问题会使得模型严重过拟合于头部,而在尾部欠拟合

首先介绍 bag of tricks 这篇论文中总结了一些常用的Trick,并组合出了最佳的一套trick

经过该文实验总结,Trick组合应该是[1]`

  • 在前几个epoch应用input mixup数据增强,然后后面fine-tuning;
  • (基于CAM的)重采样来重新训练分类器;

实际上就是MixUp + Two-Stage的策略,后续对Mix-up这个策略带来的作用要进行补充了解一下

Rebalance


Loss-NCE

Loss-NCE

@AikenHong 2021

Noise Contrastive Estimation Loss = NCE Loss 噪声对比估计损失,这里的Noise实际上就是Negative Samples.
该损失被广泛的用于对比学习的任务,而对比学习广泛的作为自监督学习的无监督子任务用来训练一个良好的特征提取器,于是对于对比学习的目标和效用的理解十分关键。

What’s NCE Loss

在介绍NCE之前我们可以将其和CE进行一个简单的对比,虽然名称上不是同一个CE,但是在数学表达上却有很相近的地方(softmax-kind of loss)

首先softmax,他保证所有的值加起来为一,结合onehot的ce,实际上j==gt的情况下外层+log也就是ceLoss,也就是 $logSoftmax$

然后看infoNCE,基础的对比学习损失可以写成:

其中 $f_x^T f_y^T$ 为 $sim(x,y)$ 时即转化为带$T$的NCE,即InforNCE.

分子是正例对的相似度,分母是正例对+所有负例对的相似度,最小化infoNCE loss,就是去最大化分子的同时最小化分母,也就是最大化正例对的相似度,最小化负例对的相似度。

从该形式上看,和soft的CE形式上是统一的,当我们把分母看作概率和自身以及和其他的相似性,这样和NCE在形式上和简化后的CE实现了统一。

但是我不认为这和label smooth 后的CE有相关性,而是和原始的CE经由One-hot简化后结构上有相似性。

How it Works

NCE的思想是拉近相似的样本,推开不相近的样本,从而学习到一个好的语义表示空间,这一点上实际上和度量学习的思想是一样的,只是对比学习通常作用在无监督或者自监督的语境中,度量学习这是有监督的。

考虑之前人脸匹配的研究,使用 “Alignment and Uniformity on the Hypersphere”中的Alignment and Uniformity,就是一个更好理解他的角度


Loss-Smooth(Sharpen)

Loss-Smooth(Sharpen)

@AikenHong 2021
@topic

  • smooth label (inception v2)
  • when does label smoothing help (nips 2019)
  • sharpen in semi-supervised in the future
  • offical code github

不是一个通用的方法,在很多的任务上反而会导致掉点的现象,可以简单分析一下,汲取一下思想和Sharpen做对比,在这篇文章中,我们可以结合之前的人脸对比损失来进行分析。

What’s the smooth label

首先介绍在图像分类任务中对logits和Hard label做ce得到我们的损失,可以表现为如下的形式:

由于我们的标签是一个hard label,实际上可以转化成一个one-hot,即

而soft label实际上做的是将 1的位置变为$1-\alpha$,其他位置设置为$\alpha/(K-1)$,然后再去求CE,

Hinton论文中给出该损失对特征分布的作用测试图:


Training Strategy

Training Strategy

@Aiken 2020,

主要针对神经网络的训练过程中的一些基础策略的调整,比如当训练的曲线出现一定的问题的时候,我们应该怎么去调整我们训练过程中的策略。

参数调整过程中最重要的就是优化器(优化或者说是下降算法)和学习率(优化算法的核心参数),此外像是数据增强策略还是Normalization策略,都能极大的影响一个模型的好坏。

优化器

Some Material
实际上虽然有很多的优化算法,但是到最后最常用的还是 SGD+Mon 和 Adam两种:

Adam主要的有事在于自适应学习率,他对我们设计的学习率实际上没有那么敏感,但是在具体实验中往往不会有调的好的SGD那么好,只是在SGD的参数调整中会比较费劲。

但是有了根据patient调整lr的scheduler后,我们基本上可以使用SGD做一个较为简单的调整,只要设计好初始的lr的实验以及用来调整学习率的参数值。

学习率

$\omega^{n} \leftarrow \omega^{n}-\eta \frac{\partial L}{\partial \omega^{n}}$ 其中的权重就是学习率lr,

==Basic==

学习率大 学习率小
学习速度
使用情景 刚开始训练时 一定的次数过后
副作用 1. Loss爆炸 2.振荡 1.过拟合 2.收敛速度慢

学习率的基本设置


Loss-WhyZero

Loss-WhyZero

Loss :Why Zero Loss?

@Comments: ICML2020 《Do We Need Zero Training Loss After Achieving Zero Training Error》

@Noteby:AikenHong2021

如何解决训练损失下降,但是验证损失上升的问题(过拟合like)的问题,该文章实际上可以作为我们损失设计中的一个trick,只需要简单的一行代码,来提升代码的泛化能力;

img

这张图体现了本文的灵魂(思路),主要体现在我们在算法趋于稳定后继续训练可能验证损失会反而上升;

所以本文提出了一种flooding方法,当我们training loss 大于阈值的时候我们使其正常下降,当低于阈值的时候,flooding的设计会反过来使得梯度上升,让训练损失保持在flooding附近,让模型持续进行random walk,希望模型最终能优化到一个平坦的损失区域,这样发现test loss进一步的进行下降。

理解:

当我们的训练损失低到一定的程度,然后随着lr的下降,模型会很难跳出当前的极小值,这种情况下我们的泛化能力也会被限制住,采用这种方法在牺牲测试精度的同时能提升算法的泛化能力。

损失公式表示如下

v2-084a8f00d7349a94540fc7ad3a9433b0_r

具体的代码表示只需要添加一层:

1
2
3
4
5
b = the flood num 
new_loss = (loss - b).abs() + b
optimizer.zero_grad()
new_loss.backward()
optimizer.step()

UniFramework 01
FSL前期调研
Survey for Few-Shot Learning

Survey for Few-Shot Learning

@aikenhong 2020
@h.aiken.970@gmail.com

另一个综述文章:https://zhuanlan.zhihu.com/p/61215293
对该文中一些内容有一些补充,可以看看

FSL简介:https://blog.csdn.net/xhw205/article/details/79491649

GCN用于FSL:https://blog.csdn.net/qq_36022260/article/details/93753532

Abstract

FSL的根本目的就是弥合人工智能和人类之间的鸿沟,从少量带有监督信息的示例中学习。像人类一样有很高的泛化能力。这也能解决在实际应用场景中,数据难以收集或者大型数据难以建立的情景。

FSL的核心问题是:经验风险最小化器不可靠;那么如何使用先验知识去解决这个问题?

三个主要的角度:

  1. 数据:使用先验知识增强数据的监督经验
  2. 模型:使用先验知识来降低假设空间
  3. 算法:使用先验知识来改变搜索最佳假设(来进行搜索?)

现阶段针对FSL提出的一些相关的机器学习方法:
meta-learning; embedding learning; generative modeling etc.

本文的主要工作:


IL-MgSvF

IL-MgSvF

@Author & Paper:Arxiv
@Note:Aikenhong 2021/11/12

Other’s Note 1

Intro

旧知识的缓慢忘记和新知识的快速适应的困境:主要探讨Incremental中的Old和New的相互牵制和适应的问题,

旧知识的缓慢遗忘会导致对新任务的欠拟合,而快速适应会导致灾难性的遗忘,如何对这两种策略之间进行权衡,是一个重要的问题。

image-20211112110043089

多尺度混合的解决这个问题:

  • Intra-space: 新类别的特征在同一个特征空间中
  • inter-saoce:新旧类别的特征在不同的特征空间中

本文提出的多粒度策略

  1. 提出了一种频率感知的正则化操作,加速空间内的增量学习能力
  2. 新的特征空间组合操作,提升空间间的学习性能

SSL-MoCov3

SSL-MoCov3

@Aiken 2021

恺明大神对自监督学习+transformer的实证研究,针对Transformer再自监督学习学习框架中的训练不稳定问题提出了Random Patch Projection的解决方案。

ArticlePaper

Motivation

ViT的方法在自监督学习的任务中,精度下降的主要原因是由于算法的不稳定性,容易陷入局部的最优值,本文主要聚焦于采用视觉领域的自监督框架进行Transformer的训练,CNN的训练方法已经是一个比较明确约定俗称的方法,而Transformer的训练架构实际上还没有被完全的构建。


Data Augmentation

Data Augmentation

intergrate with those augmentation method.

this doc will

  • Record those theory and the effect after transformation
  • Show the codes for ez use

And the complete .py will be intergrate in my classification pipeline

reference below:arrow_down_small:, if use them,start it for respect for his work.

Principle

Principle 1 of coding: Don’t reinvent the wheel unless it’s needed

  • 具体而言,仅在函数的拓展性较差,无法对其定制化,满足我们的日常需求的时候,我们会自行编写函数从而满足我们的需求,否则我们直接引用已知的库,提升我们的实现效率。

MLFlow

MLFlow

MLFlow 机器学习系统的使用

@Aiken 2020

基于Python开发的DAG数据工作流系统,面向机器学习,支持Spark并行环境和K8S容器集群;

MLFlow主要解决了三个问题,也就是三个我们可能会需要使用的功能:

  1. Tracking:跟踪实验训练结果,记录算法参数,模型结果和运行效果等等;
  2. Projects:对所有的算法项目有一套标准的projects概念,记录下代码版本,参数和运行环境这些东西,并且projects是可以拟合所有的算法框架的;
  3. Models:解决的是打包和部署模型的这样一个行为,提供json接口给后续的flsk框架等等进行使用

基本部署

INSTALL:

DEPLOY:

Tracking 实验版本跟踪

Tracking为本次描述的重点,来做一个训练过程中的版本管理,记录每一次训练的参数和变量信息等等,这样便于后续的恢复和实验信息的整理。便于统计和管理。使用的时候好像也是需要代码嵌入的部分,就是需要在代码中调用MLFlow的API。

但是在Tracking的时候有一个比较重要的点在于,这个方法和Tensorboard对原模型的参数的嵌入和Logging记录中会不会产生冲突,同时两个方法之间是不是有什么overlap;关键的问题:

  • 这两个API能不能进行混合使用
  • 怎么统一和区分两个方法的应用情景

Reference


并行训练
MIM-V-simMIM

MIM-V-simMIM

@Author: MSRA Zhenda Xie
@Source:ArxivCode TBPBlog_CVer
@Read:AikenHong 2021.11.22

“What I cannot create, I do not understand.” — Richard Feynman

Intro & Simple Conclusion

Conclusion

继MAE和iBoT之后,MSRA也提出了一个图像掩码建模的新框架,SimMIM,该方法简化了最近这些提出的方法,不需要特殊设计,作者也验证了不需要那些特殊设计就已经能让模型展现出优秀的学习能力

  • 采用中等大小的掩码块(32),对输入图像进行随机掩码,能使其成为强大的代理任务(pretext task)
  • 直接回归预测原始像素的RGB值的效果并不比复杂设计的Patch分类方法差
  • Projector Head可以是轻量的Linear Layer,效果并不一定比MLP(多层)的差

Motivation

通过这种MIM方法可以实现在大量无标注的数据上得到一个表征能力up的通用特征模型,这种方式的backbone可以广泛的应用到图像上的各种子任务中(按照NLP)的经验来说,而为了类似的方式在图像上的大放异彩,我们首先需要分析Vision和Language的不同

  1. 图像有更强的局部关系:相互靠近的像素是高度相关和近似的,我们可以通过简单的copy padding复制一部分缺失
  2. 视觉信号是原始,低层次的,而文本分词是高级概念:对低层次信号的预测是否对高层次的视觉识别任务有用呢?
  3. 视觉信号是连续的,而文本的分词是离散的: 如何基于分类的掩码语言建模方法来处理连续的视觉信号

Theoretical Design

掩码选择:同样的掩码的策略还是基于Patch进行的,对于掩码的设计来说,太大的掩码快或者太密集的掩码快,可能会导致找不到附近的像素来预测,实验证明32是一个具有竞争力的size,和文本任务的信息冗余程度不同也带来了覆盖比的选择,NLP通常是0.15,而在V中,32size可以支持0.1-0.7的覆盖率。

任务选择:使用原始像素的回归任务,因为回归任务和具有有序性的视觉信号的连续性很好的吻合。

预测头选择:使用轻量的预测头如(linear),迁移性能与繁琐的预测头相似或者略好,同时训练上更加的块。虽然较大的头或更高的分辨率通常会导致更强的生成能力,但这种更强的能力不一定有利于下游的微调任务


Transformer

Transformer

@aikenhong 2021

References For Transformer:

  1. NLP The Transformer Family (lilianweng.github.io)
  2. VIT Transformer眼中世界 VS CNN眼中世界
  3. 李沐 NLP Transformer论文精读
  4. Suveys cver1cver2cver3

This blog will divided into several part : lil’s blog, the survey for ViT, we using those article to help us understand the transformer.

综述我们以最新的一篇为准进行阅读,其他的可能后续进行查缺补漏把,如无必要,勿增烦恼。

Intro导言

主要参考文章2来进行我们简单的导入

基本问题

Transformer原本是NLP中的重要模型, 作为LSTM的后继者, 用于处理Seq2Seq的数据类型和情景, 若是要将Transformer运用到Vision的领域中, 首要的问题就是如何:

将Image作为序列化的Token输入Transform中 , 而达成这个目的主要有三种典型的方法:

  • 像素点作为token,
  • 使用VAE离散化图片作为token再输入
  • ViT: 将图片切为一个个Patch在经过线性的projector之后组成一个embedding表示进行交互

图片

CNN的异同分析

差异分析和计算主要靠CKA向量相似度计算来计算模型和表征之间的差异,这里的理论分析暂且不赘述,后续有需求的话可参考论文Similarity of neural network representations revisited或当前文章.


MIM-V-iBOT

MIM-V-iBOT

@Read: AikenHong 2021

@Author: https://arxiv.org/abs/2111.07832

@解读:Machine Heart

基本思想

基于NLP中的MLM(Masked Language Model)的核心训练目标: 也就是遮住文本的一部分, 然后通过模型去预测和补全, 这一过程是模型学到泛化的特征, 使用这种方法来进行大规模的与训练范式.

在基本的思想上和MAE采用的是一样的设计, 但是本文中坐着认为visual tokenizer的设计才是其中的关键.

不同于 NLP 中 tokenization 通过离线的词频分析即可将语料编码为含高语义的分词,图像 patch 是连续分布的且存在大量冗余的底层细节信息。而作者认为一个能够提取图像 patch 中高层语义的 tokenizer 可帮助模型避免学习到冗余的这些细节信息。作者认为视觉的 tokenizer 应该具备两个属性:(a)具备完整表征连续图像内容的能力;(b) 像 NLP 中的 tokenizer 一样具备高层语义。

文中对tokenizer的设计为一个知识蒸馏的过程:

image-20211118151613545

文中使用这种在线tokenizer同时来监督这样的MIM过程, 也就是两部分协同学习, 能够较好的保证语义的同时并将图像内容转化为连续的特征分布, 具体的, tokenizer和目标网络狗狗想网络结构, 有移动平均来得到实际的tokenizer.

该形式近期在 DINO [3]中以自蒸馏被提出,并被用以针对同一张图片的两个不同视野在 [CLS] 标签上的优化:

在该损失函数的基础上, MIM同样也是用这种自蒸馏的方式去优化, 其中在线tokenizer的参数为目标网络历史参数的平均.

基于上述的这些训练目标,提出了一种自监督预训练框架iBOT, 同时优化两种损失函数。


MIM-V-MAE

MIM-V-MAE

@Author:Facebook AI Research-Kaiming He
Kaiming-MAE

Conclusion

总而言之这是一种大模型的训练方法, 通过在少量数据的基础上实现大模型的训练.

整体的架构上是参考了NLP中的AutoEncoder机制,将原图切分patch,用mask掩盖原图,通过少量可见的Patch进行Encoder后和Mask融合,再通过非对称的Decoder进行pixel的还原。

这种设计的有点在于mask的scala是可变的,同时这种mask能减少我们训练过程中对显存和计算复杂度的损耗,同时问题本身是一个比较复杂的问题,得以训练复杂的大模型,这种方式最终呈现的效果就是训练的效率高且效益好。

体现了自监督学习在这方面的优越性,同时这种方法得以实现也是由于ViT模型对于CNN模型的取代,才使得这种序列化切块的方式容易实现和验证。

这种方式在最终体现了自监督学习对于有监督与训练的优越性,使用这种方式能够更好的得到一个模型的通用表征。

在这里论文中也说明了和NLP的不同点以及这样的模型对于decoder的要求实际上是比NLP更高的

image-20211115113542074

experiment

Masking:对于输入的图像进行均匀的切分并均匀的随机采样

MAE encoder: 简单的ViT模型,对输入图像进行编码后和Mask进行混合得到一个完整的令牌集合,从而确保Decode能够得到对应的位置信息。

MAE decoder:轻量级的架构,可以独立于编码器进行设计,我们使用更窄更浅的网络,计算量比编码器10%更小,这样能够更快的进行训练。解码器的最后一层是先行投影,输出的数量==补丁中像素值的数量,最后会resize层原图的维度。


SS_OD_SoftTeacher

SS_OD_SoftTeacher

@ Article: ICML from Microsoft & Huazhong Keda
@ Code: Github
@ Noteby: Aikenhong
@ Time: 20210914

Abstrast and Intro

in the session we will using describe the main idea of this article.

这篇文章的重点在于Soft Teacher,也就是用pseudo label做为弱标注,逐步提高伪标签的可靠性。

不同于多阶段的方法,端到端的方法再训练中逐步的提升伪标签的质量从而再去benifit目标检测的质量。
这样E2E的框架主要依赖于两部分技术:

  • soft teacher: 每个未标记边界框的分类损失由教师网络产生的分类分数进行加权
  • box jitter 窗口抖动: 选择可靠的伪框来学习框回归

在目标检测上获得SOTA的效果;

Multi-Stage

在半监督的情况下,关注的主要是基于伪标签的方法,是目前的SOTA,以往的方法采用多阶段的方式。

  1. 使用标记数据训练初始检测器
  2. 未标记数据的伪标记,同时基于伪标签进行重新训练

局限:初始少量标注的局限,初始的检测器的伪标签质量

End to End

Soft Teacher基本思路:对未标记的图像进行标记,然后通过标记的几个伪标签训练检测器.


StyleGAN

StyleGAN

StyleGAN V1

@AikenHong 2020 10.8

《A Style-Based Generator Architecture for Generative Adversarial Networks》

继承的文献工作: ProGAN
参考解读:

Contribution(Problem):

  1. 解纠缠:Mapping Network
  2. Noise Generator
  3. AdaIN before all conv

Structure:

image-20210930135938114

image-20210930161258031

Part1:AdaIN


YOLOv4

YOLOv4

@AikenHong 20200726

基于YOLO v4 掌握一些CV方面训练的Trick,同时针对Typora的使用进行一个熟悉掌握。GITHUB CODE

一些相关的参考资料

⚡️https://zhuanlan.zhihu.com/p/150127712

机器之心YOLOv4

⚡️https://www.zhihu.com/question/390191723/answer/1177584901

本文中一些其他的收获

• 其他可替代的Object Detection的SOTA算法有哪些

• BoS,BoF方法

• 简直是一个Tricks的综述

Abstract

本文对近期再CNN上的一些Feature方法进行了尝试组合,并实现了新的SOTA,其实就是一些通用的**Trick**的组合尝试,包括

• 加权残差连接(WRC)

• Cross-Stage-Partial-connection,CSP

• Cross mini-Batch Normalization,CmBN


OW Object Detector

OW Object Detector

@Aiken 2021

框架撞车系列,主要看看这一篇论文中怎么解决如下的问题👇,并从中借鉴和优化的我框架设计

思路分析

Motivation

模型实现的主要的两个TASK:

  1. Open Set Learning : 在没有明确监督的时候,将尚未引入的目标类别识别为未知
  2. Incremental Learning:类别增量学习

实现这两个问题的主要思路:

  • 自动标注:借鉴RPN的class-agnostic,以及检测和分类的显著性指标的差异,找到并自动标注NewClass
  • 对比聚类:使用prototype feature来进行聚类,同时计算Distance损失
    it seems like contain a unknown prototype.
  • energy based:亥姆霍兹自由能公式?

image-20210412171723896

ENERGY BASED


Attention Mechanism
EfficientNet

EfficientNet

Tags: Paper
URL1: https://arxiv.org/pdf/1905.11946.pdf
URL2: https://arxiv.org/pdf/2104.00298.pdf

提出了一种模型缩放策略,如何更高效的平衡网络的深度、宽度、和图片分辨率
**1. Efficient Net: Rethinking Model Scaling for Convolutional Neural Networks

  1. EfficientNetV2: Smaller Models and Faster Training**

@Aiken H 2021 find detail to code his

Efficient Net V1

除了提出了缩放策略以外,还使用神经架构搜索还建立了一个新的baseline network,得到了一系列模型。

平衡网络宽度、深度、分辨率至关重要,这种平衡可以通过简单的恒定比率缩放维度来实现,于是我们提出了一种简单有效的复合缩放方法。

https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210610180603496.png

复合缩放的物理意义:输入图像更大的话就需要更多层来增加感受野和更多通道,从而能在更大的图像上捕获更多细粒度的图案,而宽度和深度(对于表达能力来说很重要)之间也存在着一定的关系,“我们”是第一个对此进行了建模的。

从各个维度单独的进行缩放能发现都存在着增益瓶颈,如何去得到这么一个合适的等比缩放增益


RL-DouZero

RL-DouZero

Desc: GAME, RL
Finished?: Yes
Tags: Paper
URL1: https://arxiv.org/abs/2106.06135
URL2: https://github.com/kwai/DouZero
URL3: https://github.com/datamllab/rlcard-showdown)

使用蒙特卡洛方法进行自我对弈不断更新预测模型的方法,这实际上也是普通人对于强化学习如何在self-play中实现自我更新的最基础的想法把:
自我对弈(记录动作序列)- 用最终的胜负(价值)更新网络。

算法的设计和思路

算法的目标是学习一个价值网路。网络的输入是当前状态和一个动作,输出是在当前状态做这个动作的期望收益(比如胜率)。简单来说,价值网络在每一步计算出哪种牌型赢的概率最大,然后选择最有可能赢的牌型。蒙特卡罗方法不断重复以下步骤来优化价值网络:

  • 用价值网络生成一场对局
  • 记录下该对局中所有的状态、动作和最后的收益(胜率)
  • 将每一对状态和动作作为网络输入,收益作为网络输出,用梯度下降对价值网络进行一次更新

其实,所谓的蒙特卡罗方法就是一种随机模拟,即通过不断的重复实验来估计真实价值。

如下图所示,斗零采用一个价值神经网络,其输入是状态和动作,输出是价值。首先,过去的出牌用 LSTM 神经网络进行编码。然后 LSTM 的输出以及其他的表征被送入了 6 层全连接网络,最后输出价值。


Pooling

Pooling

DownSampling:Pooling的全面调研

@Aiken 2021 笔记摘录:

深度神经网络中的池化方法:全面调研(1989-2020) - 知乎相同论文的简单中文Version

16页综述,共计67篇参考文献。网络千奇百怪,但基础元素却大致相同!本文全面调研了1989至2020年一些著名且有用的池化方法,并主要对20种池化方法进行了详细介绍(这些方法,你都知道么?) 注1:文末附【计算机视…

来自 https://zhuanlan.zhihu.com/p/341820742

原文:《Pooling Methods in Deep Neural Networks, a Review》

整合2

池化的根本目的(Motivation)

卷积神经网络是DNN的一种特殊类型,它由几个卷积层组成,每个卷积层后都有一个激活函数和一个池化层。

池化层是重要的层,它对来自上一层的特征图执行下采样,并生成具有简化分辨率的新feature maps 。该层极大地减小了输入的空间尺寸。 它有两个主要目的。 首先是减少参数或权重的数量,从而减少计算成本。 第二是控制网络的过拟合。

  • 池化可以增加网络对于平移(旋转,伸缩)的不变性,提升网络的泛化能力。
  • 增大感受野;
  • 降低优化难度和参数数目,

理想的池化方法应仅提取有用的信息,并丢弃无关的细节。

特征不变性、特征降维、在一定程度上防止过拟合,更方便优化


OW-openmix

OW-openmix

@Aiken 2021 究极万恶的撞车论文

Intro

Motivation :Tackle the problem of 发现无标注数据中与给定(已知)类别不相交的新类。

Related Research:

现有的方法通常1. 使用标记数据对模型进行预训练; 2. 无监督聚类在未标记的数据中识别新的类

作者认为label带来的essential knowledge在第二步中没有被充分学习利用到,这样模型就只能从第一步的现成知识中获益,而不能利用标记数据和未标记数据之间的潜在关系