“闭门造车”之多模态思路浅谈(三):位置编码
By 苏剑林 | 2024-09-06 | 30915位读者 | 引用在前面的文章中,我们曾表达过这样的观点:多模态LLM相比纯文本LLM的主要差异在于,前者甚至还没有形成一个公认为标准的方法论。这里的方法论,不仅包括之前讨论的生成和训练策略,还包括一些基础架构的设计,比如本文要谈的“多模态位置编码”。
对于这个主题,我们之前在《Transformer升级之路:17、多模态位置编码的简单思考》就已经讨论过一遍,并且提出了一个方案(RoPE-Tie)。然而,当时笔者对这个问题的思考仅处于起步阶段,存在细节考虑不周全、认识不够到位等问题,所以站在现在的角度回看,当时所提的方案与完美答案还有明显的距离。
因此,本文我们将自上而下地再次梳理这个问题,并且给出一个自认为更加理想的结果。
多模位置
多模态模型居然连位置编码都没有形成共识,这一点可能会让很多读者意外,但事实上确实如此。对于文本LLM,目前主流的位置编码是RoPE(RoPE就不展开介绍了,假设读者已经熟知),更准确来说是RoPE-1D,因为原始设计只适用于1D序列。后来我们推导了RoPE-2D,这可以用于图像等2D序列,按照RoPE-2D的思路我们可以平行地推广到RoPE-3D,用于视频等3D序列。
浅谈神经网络中激活函数的设计
By 苏剑林 | 2017-10-26 | 45985位读者 | 引用激活函数是神经网络中非线性的来源,因为如果去掉这些函数,那么整个网络就只剩下线性运算,线性运算的复合还是线性运算的,最终的效果只相当于单层的线性模型。
那么,常见的激活函数有哪些呢?或者说,激活函数的选择有哪些指导原则呢?是不是任意的非线性函数都可以做激活函数呢?
这里探究的激活函数是中间层的激活函数,而不是输出的激活函数。最后的输出一般会有特定的激活函数,不能随意改变,比如二分类一般用sigmoid函数激活,多分类一般用softmax激活,等等;相比之下,中间层的激活函数选择余地更大一些。
浮点误差都行!
理论上来说,只要是非线性函数,都有做激活函数的可能性,一个很有说服力的例子是,最近OpenAI成功地利用了浮点误差来做激活函数,其中的细节,请阅读OpenAI的博客:
https://blog.openai.com/nonlinear-computation-in-linear-networks/
或者阅读机器之心的介绍:
https://mp.weixin.qq.com/s/PBRzS4Ol_Zst35XKrEpxdw
《向量》系列——5.平面向量微分方程与复数
By 苏剑林 | 2010-10-03 | 20359位读者 | 引用这个星期对微分方程的认识
By 苏剑林 | 2010-11-06 | 34874位读者 | 引用这个星期研究了两道微分方程问题:“导弹跟踪”以及“太阳炉”问题。从中我加深了对微分方程的理解,也熟悉了微分方程的相关运算。仅此记录,权当抛砖引玉。
一、微分方程的本质
很多读者都知道,自从牛顿和莱布尼兹发明微积分之后,微积分就迅速地渗透到了几乎所有的学科,后来发展出许多出色的分支,如变分、微分方程等。众所周知,微分方程是解决很多重要问题的工具。不知道各位读者对微分及微分方程的认识如何?其实对于常微分方程而言,它的本质和我们已经学习过的代数方程一样,只不过相互之间的对应运算关系除了常规的加减乘除幂等之外,还多了两个相互关系:微分和积分。例如对于一阶微分方程$\dot{y}=f(x,y)$,也许大家都认为它是一个二元方程,其实不然,这是一个“四个未知数、三道方程”所组成的方程组,我们可以将它写成
$$dy=f(x,y)dx,y=\int dy,x=\int dx$$
费曼积分法——积分符号内取微分(1)
By 苏剑林 | 2012-06-10 | 78596位读者 | 引用费曼积分法——积分符号内取微分(2)
By 苏剑林 | 2012-06-12 | 93367位读者 | 引用上一篇文章我对“费曼积分法”做了一个简单的介绍,并通过举例来初步展示了它的操作步骤。但是,要了解一个方法,除了知道它能够干什么之外,还必须了解它的原理和方法,这样我们才能够更好地掌握它。因此,我们需要建立“积分符号内取微分”的一般理论,为进一步的应用奠基。
一般原理
我们记
$$G(a)=\int_{m(a)}^{n(a)} f(x,a)dx$$
在这里,f(x,a)是带有参数a的关于x的函数,而积分区间是关于参数a的两个函数,这样的积分也叫变限积分,可以理解为是普通定积分的推广。我们记F(x,a)为f(x,a)的原函数,也就是说$\frac{\partial F(x,a)}{\partial x}=f(x,a)$,那么按照微积分基本定理,我们就有:
$$G(a)=F(n(a),a)-F(m(a),a)$$
复分析学习1:揭示微分与积分的联系
By 苏剑林 | 2012-08-02 | 34442位读者 | 引用笔者这段时间对复数尤其感兴趣,当然,严格来讲应该是复变函数内容,其中一个原因是通过它,我们可以把一些看似毫不相关的内容联系了起来,体现了数学的简洁美和统一美。我相当有兴趣的其中一个内容是实分析中的泰勒级数和傅里叶级数。这两者都是关于某个函数的级数展开式,其中泰勒级数是用于一般函数展开的,其各项系数通过求n阶导数得到;傅里叶级数的对象是周期函数,其各项系数是通过定积分求得的。在实数世界里,两者毫不相关,但是,复分析却告诉我们:它们只是同一个东西!只是将其在不同的角度“投影”到实数世界里,就产生了不同的“物像”,以至于我们认为它们是不同东西而已。
我们直接来看一个变魔术般的运算:
我们知道,在实数世界里头,我们有
$ln(1+x)=x-\frac{x^2}{2}+\frac{x^3}{3}-\frac{x^4}{4}+...$,其中$|x| < 1$
算子与线性常微分方程(下)
By 苏剑林 | 2012-11-30 | 21262位读者 | 引用不可交换
很自然会想到把这种方法延伸到变系数微分方程的求解,也许有读者回去自己摆弄了一下却总得不到合适的解而感到困惑。在这里群的非Abel性就体现出来了,首先用一个例子来说明一下,我们考虑算子的复合
$$(D-x)(D+x)=D^2-x^2+(Dx-xD)$$
我们要谨慎使用交换律,我们记$[P,Q]=PQ-QP$
其中P和Q是两个算子,此即量子力学中的“对易式”,用来衡量算子P和算子Q的可交换程度,当然,它本身也是一个算子。我们先来求出$[D,x]$给出了什么(要是它是0的话,那就表明运算可以交换了)。究竟它等于什么呢?直接看是看不出的,我们把它作用于一个函数:
$$[D,x]y=(Dx-xD)y=D(xy)-xDy=yDx+xDy-xDy=y$$
由于“近水楼台先得月”,所以$Dxy$表示x先作用于y,然后D再作用于(xy);而$xDy$表示D先作用于y,然后x再作用于Dy。最终我们得到了
最近评论