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

Posts

Linux 文件传输和同步

@aikenhong 2022 当我们需要在Server之间进行,或者Server和WSL之间进行文件的传输,以及文件夹的同步的时候,如果要打开Xftp之类的软件进行,有繁琐的操作中转,或者说目录较为庞杂的时候,也显得有些麻烦。 于是我们可能希望使用脚本,来实现更便捷,同时也能设置定时功能,使得操作简单便捷,经过简单的调研,我们目前尝试使用以下几种方法,并取得了成功。 Rsync 同步目录 rsync是借助ssh服务进行的文件传输,为了使用起来方便,我们首先需要配置免密登录,在服务器之间传输SSH密钥,参考[[Envs/SSH]] 此后我们便可以编写同步脚本来同步远程的目录和本地目录,当然也可以执行反向的命令, bash rsync -azP --delete -e 'ssh -p port' --progress --stats --exclude "big Files or sth" user@ip:source_path target_path >transfer.log 根据 -progress 和 -stats 选项记录传输过程中的日志,并输出到 transfer.log(如果加入计划任务 crontab 记得使用绝对路径),同时使用 exclude 排除大文件,避免传输过慢。 -a: 归档文件模式(保留文件的时间戳等),保括了 r 的递归 -z: 使用压缩文件传输 -P: 支持断点续传 –delete: 会删除目标文件中多出来的东西,保持同步,使得成为远程的镜像,但是有时候我们可能不需要这点,避免同步损毁 ...

January 17, 2022 · 1 min · 127 words · aikenhong ·  SSH ·  Sync Files ·  Linux
#SSH #Sync Files #Linux

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]: ...

January 4, 2022 · 5 min · 984 words · aikenhong ·  Incremental Learning ·  Survey
#Incremental Learning #Survey

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 系列方法 这类方法主要的想法是使用一些旧类别的数据,在新类别到来时使用新旧数据一起训练模型,根据旧类别数据的真假分为以下两种方法。 Pseudo rehearsal 这类方法通常是在学习旧类别的同时,训练一个生成模型,可以生成旧的类别数据,在新类别数据到来时,生成相当数量的旧类别数据,一起训练新模型。 这里推荐一篇文章:Continual learning with deep generative replay。 PS:这个小类别的论文我也没有太关注,个人不是很推荐这类方法。 Save real data 这类方法是开辟一个内存空间,空间中保存旧类别的少部分训练数据,在新类别到来时,使用内存空间的数据与新数据共同学习,按照对空间的使用方法不同可分为: Exemplar Rehearsal 这类方法是将新旧数据混合,共同作为训练数据,一起训练模型,使得模型能够保持旧类别的知识。 但是在训练过程中新旧数据的类别数量是不均衡的,这也催生了我下面会说到的一大类解决方法。 这种方法推荐的论文是 iCaRL,这篇论文是 exemplar rehearsal 的开山之作,第一次提出了内存空间这个概念,也提出了一个非常有效的内存选择策略(herb),并且也是第一个使用特征作为分类依据的方法,我个人认为是继 LwF 之后又一个将 IL 推到一个新的高度的方法。 Gradient Rectification 这类方法我称之为 Gradient Rectification,其主要思路是模型每次更新的梯度由 shared gradient 和 task-specific gradient 组成。分别代表所有类别的共性信息和某一个类别的特性信息,在新类别学习时借助内存空间中的数据获得旧类别的两项梯度,在更新时对梯度进行修正,力求做到不增加共享梯度代表的损失,尽量减少类别特定梯度代表的损失。 ...

January 3, 2022 · 1 min · 154 words · aikenhong ·  Incremental Learning ·  Survey
#Incremental Learning #Survey

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

PyTorch Handbook 00 (Archive)

Basic Part基础设定部分 @AikenH 2020 + 2021 this part is about pytorch basic unit, help me to code deep learning better. Tensor张量计算 两个tensor的数乘 计算两个tensor的矩阵乘法,注意其中的batch要相互对应,如果不考虑batch,就是另一个函数 python # 简单的分析一下算法的逻辑 # 这是割裂出来batch的矩阵相乘形式 batch1 = torch.randn(10,3,4) batch2 = torch.randn(10,4,5) out = torch.bmm(batch1, batch2) out.size() '''output ans is torch.size([10,3,5])''' # 按位相乘 res = torch.mul(batch1,batch2) view和permute的使用实际上都是不改变原值,要用赋值的方式去做,主要是使用方式要对,一个是按照顺序去做。 ...

December 15, 2021 · 10 min · 2015 words · aikenhong ·  Pytorch
#Pytorch

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

Algorithm Sort

记录各种排序操作,暂时不补充最基础的排序方式和理论,只记录排序算法的拓展应用。 在理论分析的部分主要使用cpp进行撰写,而在具体使用的时候,目前会主要按照python来进行编写,这主要是面向的场景不同决定的。 基础的排序理论,包括快排等等算法的分析在另一篇文章中记录(当初实习准备的时候有整理过,后续重新整理出来) 排序算法和理论 placeholder 排序算法应用 placeholder 同步排序 常用于Machine Learning中,将数据集中的数据和标签进行同步排序,避免打乱其中的对应关系。 使用numpy的 argsort功能来进行排序: python idx = np.argsort(labels) labels = labels[idx] datas = datas[idx,...] 使用sort中的args: key来进行同步排序,选出一个作为依据, 但是这种方式不支持存在np的情况,因为np无法建立hash,除非我们转化成tuple再转回来。 python # 默认按照第0维度进行排序 lables, datas = [list(x) for x in zip(*sorted(zip(labels, datas)))] # 若要指定特定维度 from operator import itemgetter datas, labels = [list(x) for x in zip(*sorted(zip(datas, labels), key=itemgetter(1)))] 额外介绍我的愚蠢实现思路: ...

December 6, 2021 · 1 min · 165 words · aikenhong ·  Algorithm ·  Sort
#Algorithm #Sort
<< « Prev 10/17 Next 12/17 » >>
© 2025 aiken's blog Licensed under CC BY-NC 4.0 · Powered by Hugo & PaperMod Visitors: Views: