aiken's blog
  • home
  • archives
  • search
  • Aiken's Blog
  • home
  • posts
  • tags
  • categories
  • archives
  • about
  • search
  • linklog
Home » Categories

Machine_Learning

Fine Tuning

@Langs: python, torch @reference: d2l-pytorch,transfer_torch This Note focus on the code part. 模型微调和模型预训练,在Pytorch中的使用方式对比汇总。 How to Design the Fine Tune 这一部分主要集中于我们对于微调任务的拆解,有几种不同的预训练和微调的方式,在不同的情景下,对应的参数应该怎么设置和调整是问题的重点。 基于这种Transfer的策略,我们能够学习到一个更通用,泛化能力更强,有助于识别边缘,色彩,等等有助于下游任务的通用特征提取。 在Transfer任务中,有几种不同的调整方式: 固定Bakcbone,只训练Classifier 同步微调网络 区分学习率,微调Backbone,训练Classifirer 为了实现这几种不同的Transfer方式,需要用到以下的几种方式:梯度截断,lr区分设置等。 Code Part 不同lr设置 微调Backbone,训练Classifier作为最经典的Transfer设定,在Code上也较为复杂,所以我们首先举个这种例子。 相关的文档可以参考:torch.optim python # get dataset train_img = torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train')) # get new model pretrained_new = model.expand_dim(dim=out_dim,re_init=True) # pre train it 定义一个用于微调的函数 # pytorch可以通过字典的形式来区分对设置lr def train_fine_tuning(net, learning_rate, batch_size=128, num_epoch=5, diff_lr=True): # set dataloader train_iter = torch.utils.Dataloader(train_img, batch_size=batch_size, shuffle=True) test_iter = ... # set loss loss = nn.CrossEntropyLoss(reduction='none') # set diff lr for diff part of it if diff_lr: params_1x = [param for name, param in net.name_parameters() if name not in ["fc.weight", "fc.bias"]] trainer = torch.optim.SGD([{'params': params_1x}, {'params': net.fc.parameters(), 'lr': learning_rate *10}], lr=learning_rate, weight_decay=0.001 ) else: trainer = torch.optim.SGD(net.parameters(), lr=learning_rate, weight_decay=0.001) 同时不用担心,scheduler可以将我们的两组lr同时进行更新,可以基于下面的代码进行测试 ...

February 8, 2022 · 2 min · 235 words · aikenhong ·  Fine-Tune ·  ML-Training
#Fine-Tune #ML-Training

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 通常情况下这种严重的类别不平衡问题会使得模型严重过拟合于头部,而在尾部欠拟合 首先介绍 bag of tricks 这篇论文中总结了一些常用的Trick,并组合出了最佳的一套trick 经过该文实验总结,Trick组合应该是[1]`: 在前几个epoch应用input mixup数据增强,然后后面fine-tuning; (基于CAM的)重采样来重新训练分类器; 实际上就是MixUp + Two-Stage的策略,后续对Mix-up这个策略带来的作用要进行补充了解一下 Rebalance 对于ReBalance的方法,实际上就是从 data和 update两个角度来缓解Unbalance本身,通过从数据量上达到重新均衡,或者基于Loss使得bp过程中赋予Tail更高的权重来达到优化过程的平衡。 前者称为rebalance,后者则为reweight. ...

December 22, 2021 · 4 min · 690 words · aikenhong ·  Survey ·  Long-Tailed Learning
#Survey #Long-Tailed Learning

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$ $$ S_j = \frac{e^{a_j}}{\sum_{k=1}^N e^{a_k}} $$ 然后看infoNCE,基础的对比学习损失可以写成: $$ L_{contrast} = \mathbb{E}[-\log\frac{e^{f_x^T f_y/T}}{e^{f_x^T f_y/T} + \sum_i e^{f_x^T f_{y_-^i}/T}}] $$ 其中 $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,就是一个更好理解他的角度 $$ \begin{gathered} L_{\text {contrast }}=\mathbb{E}\left[-\log \frac{e^{f_{x}^{T} f_{y} / \tau}}{e^{f_{x}^{T} f_{y} / \tau}+\sum_{i} e^{T_{x}^{T} f_{y_{i}}^{-} / \tau}}\right] \\ =\mathbb{E}\left[-f_{x}^{T} f_{y} / \tau\right]+\mathbb{E}\left[\log \left(e^{f_{x}^{T} f_{y} / \tau}+\sum_{i} e^{f_{x}^{T} f_{y_{i}^{-} / \tau}}\right)\right] \\ \mathbb{P}\left[\left(f_{x}=f_{y}\right)\right]=1 \underbrace{\mathbb{E}\left[-f_{x}^{T} f_{y} / \tau\right]}_{\text {positive alignment }}+\underbrace{\mathbb{E}\left[\log \left(e^{1 / \tau}+\sum_{i} e^{f_{x}^{T} f_{y_{i}}-/ \tau}\right)\right]}_{\text {uniformity }} \end{gathered} $$ 公式经过上面的推导就可以看成下的两个部分,其中alignment只与positive pair有关,相反Uniformity只与negative pair相关,希望所有的点都能尽可能的分布在uni hypersphere上。 ...

December 22, 2021 · 3 min · 565 words · aikenhong ·  Loss
#Loss

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得到我们的损失,可以表现为如下的形式: $$ Loss = -\sum^{K}_{i=1}p_i \log(q_i) $$ 由于我们的标签是一个hard label,实际上可以转化成一个one-hot,即 $$ \begin{equation} p_i = \left\{ \begin{array}{c1} 1 & i==gt \\ 0 & i!=gt \\ \end{array} \right. \end{equation} $$ 而soft label实际上做的是将 1的位置变为 $1-\alpha$ ,其他位置设置为 $\alpha/(K-1)$ ,然后再去求CE, Hinton论文中给出该损失对特征分布的作用测试图: ...

December 17, 2021 · 1 min · 144 words · aikenhong ·  Loss
#Loss

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.收敛速度慢 学习率的基本设置 在训练过程中,一般根据训练轮数设置动态变化的学习率。 刚开始训练时:学习率以 0.01 ~ 0.001 为宜。 一定轮数过后:逐渐减缓。 接近训练结束:学习速率的衰减应该在100倍以上。 Note: 如果是 迁移学习 ,由于模型已在原始数据上收敛,此时应设置较小学习率 (≤10−4) 在新数据上进行 微调 。 学习率变化方法 ==warm up== warm up为什么有用 warm up衰减策略与上述的策略有些不同,它是先从一个极低的学习率开始增加,增加到某一个值后再逐渐减少, 这点上倒是和Cosine Anneal LR有一定的相似之处,将这两种结合起来是一种常见的训练策略: 这样训练模型更加稳定,因为在刚开始时模型的参数都是随机初始化的,此时如果学习率应该取小一点,这样就不会使模型一下子跑偏。 而这样的跑偏对于大模型而言,可能是导致很严重的影响,后面收敛了也可能不会达到最佳的效果,一开始的跑偏,可能会造成准确率在后面的严重结果。 ...

December 16, 2021 · 5 min · 922 words · aikenhong ·  ML-Training
#ML-Training

Loss-WhyZero

Loss :Why Zero Loss? @Comments: ICML2020 《Do We Need Zero Training Loss After Achieving Zero Training Error》 @Noteby:AikenHong2021 如何解决训练损失下降,但是验证损失上升的问题(过拟合like)的问题,该文章实际上可以作为我们损失设计中的一个trick,只需要简单的一行代码,来提升代码的泛化能力; 这张图体现了本文的灵魂(思路),主要体现在我们在算法趋于稳定后继续训练可能验证损失会反而上升; 所以本文提出了一种flooding方法,当我们training loss 大于阈值的时候我们使其正常下降,当低于阈值的时候,flooding的设计会反过来使得梯度上升,让训练损失保持在flooding附近,让模型持续进行random walk,希望模型最终能优化到一个平坦的损失区域,这样发现test loss进一步的进行下降。 理解: 当我们的训练损失低到一定的程度,然后随着lr的下降,模型会很难跳出当前的极小值,这种情况下我们的泛化能力也会被限制住,采用这种方法在牺牲测试精度的同时能提升算法的泛化能力。 损失公式表示如下 $$ \widetilde{J}(\theta) = |J(\theta) - b| +b $$ ...

December 10, 2021 · 1 min · 62 words · aikenhong ·  Loss
#Loss

UniFramework 01

文章的部分内容被密码保护: --- DON'T MODIFY THIS LINE --- @aiken 2021 Framework Abstract Try To make structure universal,编写一个自己的通用的架构,框架化,满足通过不同的model文件和特殊配置文件就能实现不同的模型的一个架构。 只是一个初步的框架集成,还有很多没有完善的地方,目前测试了ResNet18 跑Cifar10,没有什么问题,如果有什么可以改进的地方,或者你实现了一些Feature,*欢迎进行交流*!(私下联系我最好啦!) 感谢帮助 还有一些可以参数化或者可视化的地方,由于时间关系目前还没有修改,有兴趣的可以自己先添加一下 暂时只集成了分类的模块,后续可能会随缘扩展 本框架主要希望实现的是:易读性,可拓展性,以及简洁; 希望将重要的,可变的参数都尽量的分离出来,通过配置文件和命令行参数去定义和运行我们的网络,在这种情况下实现一个较好的工作流程。 Final Project Design PURPOSE:新类发现和模型自主更新;同时希望能够解决长尾分布的数据情景; **ANALYSIS:**为了实现这种模型的自主更新过程,将整体的流程分成两个部分 启动(start): self supervissed 等方法无监督的学习特征提取网络(这种方式是否会对Unbalance产生增益) 初始化预测模型: 基于Unbalance的数据训练一个基础的分类模型,在输出分类结果的同时需要输出对应的预测置信度,这两个其实都是一些简单的Trick,而最重要的是Backbone的分类效果需要得到保证,同时Backbone需要支撑后续的模型蒸馏更新。 模型的自主更新和迭代: Online:在线运行推断模型,通过置信度输出筛选出新类样本,将样本在样本池中收集 Offline:基于样本池的规模和评估触发离线更新:伪标签生成模型;模型蒸馏和更新 创新点:自主新类发现和学习 ...

December 4, 2021 · 3 min · 526 words · aikenhong ·  Machine Learning
#Machine Learning

FSL前期调研

文章的部分内容被密码保护: --- DON'T MODIFY THIS LINE --- 主要是limited labels & Few Samples & Data programing Weakly supervised learning semi-supervised in video field if we can recoding this work? 多指标下降(LOSS的耦合或者循环的选择)、相关的CV最新论文等等会在后续关注 元学习、浅层神经网络的概念等等 semi-supervised PART1 Limited Labels (base on LiFeiFei‘s reference) in this part we may list the paper which is useful for my recoding. 还有一些其他重要的可能在对论文进行重新精读的时候要记得注意reference:就比如说在loss变换和决策树生成那一块。 distant supervision(it’s kind of early) can be another baseline for our method, we need to understand how this method work for that situation distant supervisor到底是什么机制可以去CSDN什么的看一下 ...

November 29, 2021 · 3 min · 549 words · aikenhong ·  Survey ·  FSL
#Survey #FSL

SSL-MoCov3

@Aiken 2021 恺明大神对自监督学习+transformer的实证研究,针对Transformer再自监督学习学习框架中的训练不稳定问题提出了Random Patch Projection的解决方案。 Article ;Paper ; Motivation ViT的方法在自监督学习的任务中,精度下降的主要原因是由于算法的不稳定性,容易陷入局部的最优值,本文主要聚焦于采用视觉领域的自监督框架进行Transformer的训练,CNN的训练方法已经是一个比较明确约定俗称的方法,而Transformer的训练架构实际上还没有被完全的构建。

November 29, 2021 · 1 min · 10 words · aikenhong ·  SSL
#SSL

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的核心问题是:经验风险最小化器不可靠;那么如何使用先验知识去解决这个问题? 三个主要的角度: 数据:使用先验知识增强数据的监督经验 模型:使用先验知识来降低假设空间 算法:使用先验知识来改变搜索最佳假设(来进行搜索?) 现阶段针对FSL提出的一些相关的机器学习方法: meta-learning; embedding learning; generative modeling etc. 本文的主要工作: 基于FSL的原有设定,在现阶段的FSL发展上给出正式定义,同时阐明具体目标以及解决方式 通过具体示例列举和FSL的相关学习问题,比较了相关性和差异性,更好的区分问题 指出核心问题:经验风险最小化器不可靠,这提供了更系统有组织的改进FSL的方向。 经验风险最小化器👉:基于ML中的错误分解来分析的 整理,更好的理解 未来方向 Notation and Terminology 一般基于参数方法(因为非参数方法需要大量数据),在假设空间中搜索最优假设,并基于基于标签的Loss Function 来衡量效果。 Main Body Overview 2.1:具体定义&示例 2.2:相关问题和FSL的相关性和差异 2.3:核心问题 2.4:现有的方法如何处理这个问题 ...

November 29, 2021 · 5 min · 912 words · aikenhong ·  Survey ·  FSL
#Survey #FSL
Next 2/4 » >>
© 2025 aiken's blog Licensed under CC BY-NC 4.0 · Powered by Hugo & PaperMod Visitors: Views: