NaVit

Title: Patch n’ Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution 作者: Mostafa Dehghani 发表日期: 2023.7 一、Introduction 1.1 该论文试图解决什么问题? 对于视觉模型而言,resize图片到一个固定的分辨率,不是最优的。ViT具有灵活的序列建模能力,该文利用Vit的这一优势,在训练的时候使用训练打包(sequence packing)去处理任意分辨率和长宽比的图片。在训练效率和最终的效果,都取得了比较好的效果。 注:在卷积网络时代,resize图片或者padding图片到固定大小是标准做法,但是基于Transformer架构的模型,这一做法其实不是必须的。resize图片损害性能,padding损耗效率。 1.2 Key Contributions Method preliminary(个人补充,非论文中的信息) 背景:在NLP处理变长序列的做法是将多个样本组合成一个序列,步骤如下(以pytorc中的方法举例): pad_sequence:通过pad方式对齐多个序列,使得多个序列长度一样 pack_padded_sequence:将多个序列打包为一个序列,返回对象PackedSequence pad_packed_sequence:将PackedSequence对象解压回来 将pad后的序列(等长的)输入模型计算会浪费计算资源,因为pad也参与计算了。PackedSequence避免这一缺点。 Architectural changes 借鉴NLP中处理思路,将其用在图像上,作者称为Patch n’ Pack操作。 整体思路如下: Masked self attention and masked pooling:使用mask机制,使得每个样本只能注意到自已。 Factorized & fractional positional embeddings:使用二维位置编码,x,y两个方向独立。使用的时候,可以x,y相加,stack,相乘,论文中实验对比。 这里的说讲位置编码使用小数表示(fractional)没有理解该含义??? Training changes Continuous Token dropping:drop连续的token Resolution sampling:原始的ViT存在一个矛盾点,高吞吐量(在小的图片上训练)和高性能之间(在大的图片上训练)。NaViT在保证长宽比同时做分辨率采样。 Experiments 固定分辨率和可变分辨率对结果的影响 分解的位置编码由于传统的ViT的位置编码和可学习的2d位置编码(Pix2Struct) 参考资料 NaVit实现(非官方):https://github.com/kyegomez/NaViT/tree/main

十月 4, 2024 · 1 分钟 · pan

MLLM调研报告

篇幅较大,在飞书文档上编辑文档快一点,见: MLLM调研报告

十月 3, 2024 · 1 分钟 · pan

对比学习总览

见飞书文档: 对比学习总览

八月 27, 2024 · 1 分钟 · pan

位置编码

引言 最近在看相对位置编码的知识,本文算是对位置编码的总结吧。本文简单回顾绝对位置,然后介绍相对位置编码和PoRE(Rotary Position Embedding) preliminary 绝对位置编码 由于Transformer(Attention Is All You Need)的attention机制本身是没有引入位置信息的,例如,Sequence 1: ABC, Sequence 2: CBA, 两个Sequence中单词A经过Transformer的encode后,编码是一样的。但是在真实世界中,句子中单词的顺序对应语义理解是非常重要的。所以Transformer在计算MHA之前会将输入序列的词嵌入(embedding)加上一个位置信息,由于这个位置信息是直接加在embedding上的,所以也被称为绝对位置编码。在Transformer中的绝对位置编码实现是Sinusoidal位置编码,在BERT和GPT位置编码则当成是可学习参数。 Sinusoidal位置编码 $$\begin{cases} p_{k,2i} = sin(k/10000^{2i/d})\\ p_{k,2i+1} = cos(k/10000^{2i/d}) \end{cases}$$ $p_{k,2i}, p_{k,2i+1}$是位置k的位置编码向量的第$2i,2i+1$个分量,d是位置编码向量的维度(与输入embedding的维度相同)。 绝对位置编码的Attention 对于输入序列的$X = (x_1, x_2, …,x_i,…,x_j, …, x_n)$, 经过attention计算后的输出为$Z=(z_1, z_2, …,z_i,…,z_j,…,z_n)$, 其中$x_i \in R^d, z_i \in R^d$。 attention计算如下: $$\begin{cases} q_i = (x_i+pi)W_Q \\ k_j = (x_j+pj)W_K \\ v_j = (x_j+pj)W_V \\ a_{i,j} = softmax(\frac{q_ik_j^T}{\sqrt d }) \\ z_i = \sum_j a_{i,j}v_j \end{cases} $$...

六月 30, 2024 · 3 分钟 · pan

ELBO

ELBO(Evidence Lower Bound)是变分贝叶斯推断(Variational Bayesian Inference)中的重要概念。其将推断问题转化为优化问题。那什么是变分推断呢?先补充一些概念(不了解不影响本文的阅读,大致知道就行)。 泛函(functional):通常是指定义域为函数集,而值域为实数或者复数的映射。换而言之,泛函是从由函数组成的一个向量空间到标量域的映射。 变分:变分与函数的微分类似,变分为定义在泛函上的微分。g(x)和新函数g(x)+m$\eta(x)$的差导致泛函的变化就叫变分。即 $$\delta J = J[g(x)+m\eta(x)]-J(g(x))$$ ,其中$\delta J$就是变分。 推断(inference):利用已知变量推测未知变量的分布,即求后验分布$p(y|x)$,但这个后验分布往往很难求得,所以实际中往往使用近似推断去求解。典型代表就是变分推断 变分推断:用一个简单分布区近似一个复杂分布,求解推断(inference)问题的方法的统称。 变分贝叶斯方法:通过将复杂的后验分布用一个更简单的分布来近似,并通过优化让它们尽可能接近。 preliminary 当给定一些观测数据x时,我们希望获得x的真实分布p(x)。但是p(x)是一个非常复杂的分布,我们很难直接获得或者优化。所以对于复杂问题,我们通常采用化烦为简的思路求解。p(x)难求解,我们就用简单的分别去拟合。即可以引入一些简单分布, 将p(x)转化为如下形式去求解。 $$ \begin{align} p(x) = \int_z p(x|z)p(z)dz \end{align} $$ 其中p(z)是先验分布(先验分布的意思就是我们假设是已知的分布,比如我们就假设p(x)是标准正太分布),p(x|z)为条件概率。 我们这么理解上面的式子呢?我们借用ELBO中的例子(补充一句,强烈大家阅读这篇blog, 对ELBO的研究动机、原理都有比较清楚的解释,不想网上的很多文章上来给证明,完全不知道为什么要这么做,特别是对像我这种不理解前因后果就难受的人,是一种折磨)。 比如p(x)的分布是下面这个样子。 我们希望p(x)可以由一些简单分布变换而来。比如假设p(z)是一个简单高斯分布。 现在我们试着用p(z)加一些变换f(.)去拟合p(x)。 我们的出发点是好的,但是$p(x) = \int_z p(x|z)p(z)dz$依然是不可求解的。尽管我们把复杂分布解耦为简单高斯分布和高斯条件分布的乘积 原因有二。 这里有积分,在整个隐变量空间(且是连续的)进行积分是困难的。 p(x|z)我们同样不知道。 对于问题2,容易解决,因为我们有神经网络啊,我们用参数为$\theta$的神经网络去估计p(x|z), 记为$p_\theta(x|z)$, 但是积分如何解决呢? 公式1中是对整个隐空间进行积分,搜索空间太大,而且我们还需要对个隐空间进行积分。因为我们对z不是一无所知。因为给定样本x,我们是可以获取一些z的信息的,即可以用$q_i(z)$去估计$p(z|x_i)$,但是对每一个观测数据都对应一个$q_i(z)$需要大量的参数(there is an obvious drawback behind this intuition. The number of parameters of qi(z) will scale up with the size of the set of observations because we build individual distribution after observing each data, 参考:ELBO)。所以再次引入神经网络$q_\phi(z|x)\simeq q_i(z) \forall x_i \in X$。$q_i(z)$的真实分布为$p(z|x)$。...

六月 20, 2024 · 2 分钟 · pan