博客

  • Ubuntu下用apt安装MySQL后root密码为空

    在Ubuntu下使用apt安装MySQL后,root用户的密码默认是空的。这是因为在安装过程中,MySQL会自动为root用户设置一个随机密码,并将其存储在/etc/mysql/debian.cnf文件中[1]

    要解决这个问题,你可以按照以下步骤操作:

    1. 使用以下命令查看MySQL自动设置的随机账户和密码:
       sudo cat /etc/mysql/debian.cnf

    这将显示默认的随机账户和密码,你可以使用这组账户和密码登录MySQL[1]

    1. 如果你想修改root用户的密码,可以按照以下步骤操作:
    • 登录MySQL: mysql -uroot -p 这将要求你输入密码,直接按回车键即可登录,因为默认密码为空。
    • 切换到mysql数据库: use mysql;
    • 修改root用户的密码: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';your_new_password替换为你想要设置的新密码。
    • 刷新权限: FLUSH PRIVILEGES;
    • 退出MySQL: exit; 现在你可以使用新密码登录root用户了。

    请注意,如果你使用的是MySQL 8.0版本,修改root用户密码的命令略有不同,请参考[1]


    Learn more:

    1. Ubunto20.04安装MySQL并修改root用户密码(Linux安装mysql root用户无法登陆)_ubuntu20.04安装mysql设置root账号密码-CSDN博客
    2. Ubuntu 20.4安装 mysql 8.0.20 以及解决root用户无法登录问题_ubuntu mysql 设置root密码后进不了-CSDN博客
    3. Ubunto20.04安装MySQL并修改root用户密码(Linux安装mysql root用户无法登陆) – 青山是谁 – 博客园
  • RTMP协议(Real-Time Messaging Protocol)

    RTMP协议(Real-Time Messaging Protocol)是一种用于在互联网上流式传输音频、视频和数据的通信协议[1]。最初由Macromedia开发为Flash Player和Flash Communication Server之间的流媒体传输的专有协议,后来被Adobe(收购了Macromedia)发布了该协议的不完整版本供公众使用[1]

    RTMP协议有多个变种:

    • RTMP:在Transmission Control Protocol(TCP)之上工作的“纯”协议,默认使用1935端口号。
    • RTMPS:在Transport Layer Security(TLS/SSL)连接上的RTMP。
    • RTMPE:使用Adobe自己的安全机制对RTMP进行加密。虽然实现的细节是专有的,但该机制使用行业标准的加密原语[1]
    • RTMPT:封装在HTTP请求中以穿越防火墙。RTMPT通常使用TCP端口80和443上的明文请求来绕过大多数企业流量过滤。封装的会话可以在内部携带纯RTMP、RTMPS或RTMPE数据包[1]
    • RTMFP:在User Datagram Protocol(UDP)上的RTMP,取代了RTMP Chunk Stream。Secure Real-Time Media Flow Protocol套件由Adobe Systems开发,使终端用户能够直接连接和通信(P2P)[1]

    RTMP的基本操作是基于TCP的,它维持持久连接并允许低延迟通信。为了平稳地传输流并尽可能多地传输信息,它将流分割成片段,并且片段的大小在客户端和服务器之间动态协商。有时,片段的大小保持不变;音频数据的默认片段大小为64字节,视频数据和大多数其他数据类型的默认片段大小为128字节。来自不同流的片段可以交错和多路复用到单个连接上。由于较长的数据块,该协议每个片段仅携带一个字节的头部,因此开销非常小。然而,在实践中,通常不会交错单个片段。相反,交错和多路复用是在数据包级别上完成的,以确保每个通道满足其带宽、延迟和其他服务质量要求。以这种方式交错的数据包被视为不可分割的,不会在片段级别上交错[1]

    RTMP定义了几个虚拟通道,可以在这些通道上发送和接收数据包,并且这些通道彼此独立运行。例如,有一个用于处理RPC请求和响应的通道,一个用于视频流数据的通道,一个用于音频流数据的通道,一个用于带外控制消息(片段大小协商等)的通道等。在典型的RTMP会话期间,多个通道可能同时处于活动状态。当对RTMP数据进行编码时,会生成一个数据包头部。数据包头部指定了要发送的通道的ID、生成时间戳(如果需要)以及数据包有效载荷的大小。然后,在将其发送到连接上之前,将其实际有效载荷内容(媒体数据)根据当前协商的片段大小进行分段。数据包头部本身永远不会被分段,其大小不计入数据包的第一个片段中的数据。换句话说,只有实际的数据包有效载荷(媒体数据)会被分段[1]

    在更高的层次上,RTMP封装了MP3或AAC音频和FLV1视频多媒体流,并可以使用Action Message Format进行远程过程调用(RPC)。所需的任何RPC服务都是异步进行的,使用单个客户端/服务器请求/响应模型,因此不需要实时通信[2]

    RTMP会话可以使用以下两种方法进行加密:

    • 使用行业标准的TLS/SSL机制。底层的RTMP会话只是包装在正常的TLS/SSL会话中。
    • 使用RTMPE,在RTMP会话中包装一个轻量级的加密层。

    在RTMP Tunneled(RTMPT)中,RTMP数据通过HTTP进行封装和交换,客户端(媒体播放器)的消息被发送到服务器上的80端口(HTTP的默认端口)[1]。RTMPT中的消息由于HTTP头部的原因比等效的非隧道化RTMP消息要大,但在客户端位于阻止非HTTP和非HTTPS出站流量的防火墙后,RTMPT可能有助于使用RTMP的场景,否则将无法使用非隧道化的RTMP。

    RTMP协议的数据包结构如下:

    • 数据包通过TCP连接发送,首先在客户端和服务器之间建立连接。
    • 数据包包含一个头部和一个主体,在连接和控制命令的情况下,主体使用Action Message Format(AMF)进行编码。
    • 头部分为基本头部(从图表中分离出来)和块消息头部。基本头部是数据包的唯一固定部分,通常由一个复合字节组成,其中最高的两个有效位是块类型(在规范中称为fmt),其余部分形成流ID。根据前者的值,可以省略消息头部的某些字段,并且可以从先前的数据包中派生它们的值,而根据后者的值,基本头部可以扩展为一个或两个额外的字节。如果基本头部的剩余六个位(最低有效位)的值为0,则基本头部为两个字节,表示从流ID 64到319(64+255);如果值为1,则基本头部为三个字节(最后两个字节编码为16位小端),表示从流ID 64到65599(64+65535);如果值为2,则基本头部为一个字节,保留用于低级协议控制消息和命令。块消息头部包含元数据信息,例如消息大小(以字节为单位)、时间戳增量和消息类型。最后一个值是一个字节,定义数据包是音频、视频、命令还是“低级”RTMP数据包,例如RTMP Ping[1]

    Learn more:

    1. Real-Time Messaging Protocol – Wikipedia
    2. RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术-阿里云开发者社区
    3. 实时消息协议 – 维基百科,自由的百科全书
  • RTP(Real-time Transport Protocol)是一种用于实时流媒体传输的协议

    RTP(Real-time Transport Protocol)是一种用于实时流媒体传输的协议。它是一种面向数据报的协议,用于在IP网络上传输音频和视频等实时数据。RTP协议通常与RTCP(Real-time Transport Control Protocol)一起使用,RTCP用于传输控制信息,例如流媒体的质量反馈和同步信息。

    RTP协议的特点和功能包括:

    1. 实时传输:RTP协议被设计用于实时传输,可以在网络上以实时的方式传输音频和视频数据。
    2. 分组传输:RTP将音频和视频数据分割成小的数据包进行传输,每个数据包都带有序列号和时间戳等信息,以便接收端可以正确地重建数据流。
    3. 时间同步:RTP协议使用时间戳来确保音频和视频数据在接收端能够按照正确的时间顺序播放。
    4. 负载类型:RTP协议支持多种不同的负载类型,例如音频编码(如G.711、AAC)和视频编码(如H.264、VP8)等。
    5. QoS支持:RTP协议可以通过设置不同的服务质量(QoS)参数来满足实时流媒体传输的要求,例如延迟、带宽和抖动等。

    RTP协议在实时流媒体传输中起着重要的作用,它可以与其他协议结合使用,例如RTSP(Real-time Streaming Protocol)用于控制流媒体的会话和传输。


    Learn more:

    1. 实时传输 Web 音频与视频 – Web 媒体技术 | MDN
    2. 【RTP 传输协议】实时视频传输的艺术:深入探索 RTP 协议及其在 C++ 中的实现-阿里云开发者社区
    3. RTP协议详解-CSDN博客
  • 外资撤离中国:我们面临的挑战与应对

    近年来,外资撤离中国的现象引起了广泛关注。外资的流动不仅影响着中国股市的表现,也对整个中国经济环境产生了深远的影响。本文将通过数据和事实,详细探讨外资撤离的现状、原因以及我们应对的策略。

    外资撤离的现状

    外资持有中资股规模下降

    根据中金的报告,2023年第三季度外资管理机构持有的中资股规模回落至6701亿美元,环比下滑3.9%。这一数据表明,外资对中国市场的信心正在减弱。事实上,2021年外资持有中资股规模达到高峰,但现在的情况显然不如当时。

    外国直接投资净流入首次下降

    根据中国外汇管理局的数据,自1998年以来,中国一直享有外国直接投资(FDI)净流入的优势。然而,如今这一趋势也发生了逆转。2023年,中国的FDI净流入首次出现了下降,甚至转为负值。这一变化无疑是一个警示信号。

    美元基金募资艰难

    美元募资的困难是另一个值得关注的问题。根据Preqin的数据显示,2023年聚焦于投资中国的风险投资和私募的外资仅筹集了57亿美元,而在2021年这一数字高达480亿美元,降幅几乎达到90%。

    外资撤离的原因

    政治与经济压力

    1. 政治压力:近年来,投资于中国的外资面临越来越大的政治压力。尤其是美国与中国之间的紧张关系,使得外资对中国市场的投资更加谨慎。
    2. 经济表现不佳:中国股市的表现令人失望。2023年流入中国股市的外资超过75%已经撤离,今年全球投资者抛售了中国股市价值超过250亿美元的股票,使得净买入量创下2015年来的最低纪录。

    产业升级与资本流向

    1. 产业转移:部分劳动密集型的低端产业正在向东南亚转移。这是产业升级的必经之路,但也导致了一部分外资的撤离。
    2. 资本流向变化:美债利率高位,新兴市场股市(如日韩、印度)上涨,吸引了部分资金的流向。

    我们能做些什么?

    释放积极信号

    企业家和投资人是最敏感的,他们需要看到明确的积极信号才会重新投入。以下是一些可能的积极信号:

    1. 宏观数据的改善:某次发布的宏观经济数据变好将是一个积极的信号。
    2. 财政政策的出台:有力的财政政策可以增强市场信心。
    3. 股市上行:股市的上行趋势将吸引更多的资金回流。
    4. 营商环境的改善:确实的营商环境改进将为企业家和投资人提供更大的信心。

    提高市场透明度和稳定性

    1. 回购股票:管理层愿意回购股票将展现对市场的信心。
    2. 保护私有产权:尊重市场的力量,保护私有产权,鼓励奋斗,尊重白手起家的企业家。

    结语

    外资撤离中国的现象虽然令人担忧,但我们也需要看到积极的一面。市场环境的改善和政策的调整有望吸引外资的回流。正如一位优秀群友所说:

    “一级市场是站在创新最前端的人,投资应当考虑行业和企业发展规律,和对应的合理的估值逻辑。不能因为秋天有霜降,春天就不种地了。”

    我们需要保持乐观,继续努力,等待春天的到来。


    参考文献

    • 中金报告
    • 中国外汇管理局数据
    • Preqin 数据
    • Rhodium Group智库报告
  • 微软中国员工迁移海外:背后的原因与影响

    近日,多位网友在社交媒体上爆料称,微软中国区Azure云平台的AI团队为主的数百名员工收到公司邮件,询问他们是否愿意迁移至其他地区工作。目的地包括美国、澳大利亚、爱尔兰等国家。公司将负责亲属签证问题,员工需要在6月7日前给出答复。本文将探讨这一消息背后的原因及其可能带来的影响。

    微软的回应与员工的困惑

    对于这一消息,微软方面回应称,公司有一小部分员工得到可以选择国际轮岗的机会。员工可以选择接受轮岗,或者继续在现在的岗位工作。微软在运营管理全球业务的过程中,一直有向员工提供内部轮岗机会的机制。

    然而,一些员工对此表示困惑。一位微软员工对记者表示,这是5月14日刚出的消息,一些员工突然收到有关征询迁移至海外工作邮件,要求在6月7日前回答去还是不去。“大家都很懵”,此前并没有感受到任何预兆,尤其是拖家带口的员工,“需要考虑的事情更多”。有同事认为这是一种“变相裁员”,虽然可以选择不去,但也因此对留在公司的未来产生了担忧。

    迁移计划的具体安排

    据了解,微软中国C+AI的ML团队可以转到美国西雅图,Azure团队转到澳洲,DevDiv(开发平台事业部)则维持现状。已经有员工的家属表示,家属所在的小组被整个迁至澳大利亚,线上开会时“会上有300多号人”,涉及北京、上海和苏州的员工。两个人商量一整晚到凌晨三点,也没得出什么结论。

    另有接近微软人士表示,Azure ML和Azure Core(基础设施)这两个组中与AI业务相关的数百人获得“打包”出国的机会,目的地包括美国、加拿大、澳大利亚和新西兰,是指定的(目的地),并不能随便挑选。

    背后的原因

    全球业务整合

    微软在全球范围内进行业务整合,尤其是AI和云计算业务。这种整合有助于公司在全球范围内更有效地配置资源,提升业务协同效应。

    国际轮岗机制

    微软一直以来都有向员工提供内部轮岗机会的机制。通过国际轮岗,员工可以获得更广泛的工作经验和视野,有助于个人职业发展。

    亚太市场竞争压力

    根据国际咨询机构Gartner发布的最新云计算市场追踪数据报告,2023年,微软Azure在亚太地区云计算IaaS市场排名第三,份额为16.1%。阿里云排名第一,市场份额为22.2%,亚马逊AWS排名第二,份额为16.5%。微软在亚太市场面临激烈的竞争压力,可能希望通过业务调整来应对市场挑战。

    可能带来的影响

    员工心理压力

    员工突然收到迁移通知,且需要在短时间内做出决定,这无疑会给员工带来巨大的心理压力。尤其是有家庭的员工,需要考虑更多因素,如孩子的教育、配偶的工作等。

    公司内部稳定性

    这种大规模的迁移计划可能会影响公司内部的稳定性。一些员工可能会选择离职,而不是接受迁移,导致团队的不稳定和人才流失。

    对亚太市场的影响

    微软在亚太地区的云计算市场份额已经处于劣势,此次迁移计划可能会进一步影响公司在这一地区的业务发展。如何平衡全球业务整合与区域市场竞争,是微软需要仔细考量的问题。

    结语

    微软中国员工迁移海外的消息引发了广泛关注和讨论。这一计划背后有多重原因,包括全球业务整合、国际轮岗机制以及应对亚太市场竞争压力等。然而,这一计划也给员工带来了巨大的心理压力,并可能影响公司内部的稳定性和区域市场的业务发展。在未来的执行过程中,如何平衡这些因素,将是微软面临的重要挑战。


    参考文献

    • 社交媒体爆料
    • 微软员工采访
    • Gartner云计算市场追踪数据报告,2023年
  • 探索大语言模型的最优架构:LLAMA-NAS的奇妙之旅

    引言

    在这个人工智能飞速发展的时代,大语言模型(LLMs)如同一位语言大师,解决了各种自然语言处理、复杂推理和情感分析任务。然而,这些“语言大师”往往需要极高的内存和计算资源,这让普通硬件平台望尘莫及。为了让更多人能使用LLMs,我们提出了一种基于LLaMA2-7B的高效神经架构搜索(NAS)方法,简称LLAMA-NAS。

    LLM的挑战和解决之道

    LLM如同巨兽

    大语言模型(LLMs)在处理自然语言和复杂推理任务上表现出了非凡的能力,但它们就像一头巨兽,消耗着大量的内存和计算资源。LLaMA2-7B,作为一款参数量达到7B的LLM,尽管功能强大,但其庞大的身躯让普通硬件平台难以承受。

    轻量化:从巨兽到精灵

    为了减轻LLMs的重量,我们提出了一种基于一击NAS(One-shot NAS)的方法。我们只对LLaMA2-7B进行一次微调,然后应用基于遗传算法的搜索,找到更小、更高效的网络架构。结果表明,在某些标准基准任务上,我们成功地将模型大小减少了1.5倍,并在几乎无损精度的情况下提升了1.3倍的吞吐量。

    方法:如何驯服LLMs

    InstaTune:一场架构的探险

    我们的优化方法借鉴了InstaTune,这是一种新颖的一击NAS方法。在微调LLaMA2-7B时,我们创建了一个超网络,并在微调阶段嵌入了NAS过程。这不仅节省了计算资源,还确保了子网络能够针对具体任务进行优化。

    我们使用了LINAS算法,这是一种结合NSGA-II搜索和网络性能预测器的方法,可以高效地识别Pareto最优的网络配置。通过在真实数据上迭代评估子网络,LINAS算法能够预测大量子网络的性能,并选择最有前途的进行进一步评估。

    搜索空间:在参数的海洋中航行

    在微调LLaMA2-7B后,我们定义了一组允许的参数值,并在搜索过程中使用这些参数。搜索空间包括了网络层数和每个MLP模块的中间大小。

    结果:轻量化的奇迹

    ARC:常识推理的挑战

    在AI2推理挑战(ARC)上,我们发现了几个比预训练的LLaMA2-7B更高效的子网络。例如,一个子网络在保持相同精度的情况下,体积减少了1.1倍,而另一个同等大小的子网络精度提升了1.9%。

    MMLU:多任务语言理解

    在大规模多任务语言理解(MMLU)任务中,我们的子网络不仅在模型大小上优于预训练的LLaMA2-7B,还在推理速度上有显著提升。例如,一个子网络在精度提升1.1%的同时,体积减少了1.5倍,速度提升了1.3倍。

    真相QA:真相的守护者

    在TruthfulQA任务上,我们的子网络表现更为出色。一个子网络在体积减少1.6倍的情况下,精度提升了3.6%。

    WinoGrande:常识推理的终极测试

    在WinoGrande任务上,我们的子网络也表现不俗。例如,一个子网络在保持相同精度的情况下,体积减少了1.1倍,而另一个同等大小的子网络精度提升了1.4%。

    总结:轻量化的未来

    我们的研究展示了一种高效的方法,通过一击NAS来减小和优化大语言模型的架构。我们的方法不仅在性能上优于剪枝和稀疏化技术,还能与量化技术结合,进一步减少模型的大小和复杂度。随着对大语言模型的兴趣不断增长,我们的工作为创建可在更便宜、更普及的硬件平台上使用的LLMs提供了一条可行之路。

    参考文献

    1. https://huggingface.co/meta-llama/Llama-2-7b
    2. LLM-Pruner: https://github.com/horseee/LLM-Pruner
    3. SliceGPT: https://github.com/microsoft/TransformerCompression

    希望这篇文章能够让您对LLAMA-NAS的方法和成果有一个清晰的了解,并在轻松愉快的阅读中学到新的知识。如果您有任何问题或需要进一步的信息,请随时联系我们。

  • LLAMA-NAS:让大语言模型不再“吃硬件”

    前言

    如果你觉得大语言模型(LLMs)像个贪吃的巨兽,那你就猜对了。这些能处理自然语言、复杂推理、情感分析等任务的模型,虽然能力非凡,但对内存和计算资源的“胃口”也惊人。以至于大部分硬件平台根本承受不起这顿“大餐”。为了让LLMs变得更“苗条”,我们提出了一种基于LLaMA2-7B的高效神经架构搜索方法——LLAMA-NAS。

    LLaMA2-7B的“减肥”计划

    一次性NAS:给模型做个“全身检查”

    我们的方法核心是一次性神经架构搜索(one-shot NAS),这个听起来就很酷对吧?具体来说,我们只对LLaMA2-7B模型进行一次微调,然后用遗传算法(genetic algorithm)来搜索更小、更高效的网络架构。结果显示,对于某些标准基准任务,预训练的LLaMA2-7B模型不仅“体型”庞大,而且“吃”得也多。通过我们的“减肥”计划,我们成功地将模型大小减少了1.5倍,处理速度提高了1.3倍,而准确度几乎没有损失。

    InstaTune:超级网络的“变形金刚”

    我们借鉴了InstaTune的方法,将NAS嵌入到微调阶段,使模型架构更具弹性,能够适应不同的任务、数据集和计算资源。在这过程中,我们并没有进行强教师或超级网络的知识蒸馏,主要是为了节省计算资源。

    搜索空间:模型参数的“百变金刚”

    在搜索过程中,我们使用了LINAS算法,这个名字听起来像某种神秘的武器。事实上,它确实很厉害,能够在多目标设置中优化模型大小和准确性。我们定义了一组允许的参数值,搜索空间包含了大约1.3 × 10^10种可能性。

    实验与结果

    AI2推理挑战

    首先,我们将方法应用于AI2推理挑战(ARC)任务,结果显示几个子网络架构在准确率和模型大小上都有明显提升。例如,一个子网络在准确率不变的情况下,模型大小减少了1.1倍。

    大规模多任务语言理解

    我们的方法在大规模多任务语言理解(MMLU)任务上也表现出色。多个子网络在准确率提升的同时,模型大小减少了1.5倍,处理速度提高了1.3倍。

    真诚QA和WinoGrande

    在真诚QA任务中,我们发现预训练的LLaMA2-7B模型明显过度参数化。通过我们的方法,找到的子网络在准确率提高3.6%的同时,模型大小减少了1.6倍。WinoGrande任务的结果也类似,我们的子网络在准确率不变的情况下,模型大小减少了1.1倍。

    比较与对比

    与剪枝和稀疏化技术的对比

    与LLM-Pruner和SliceGPT相比,我们的方法不仅在模型大小和准确率上更有优势,而且不需要额外的恢复微调步骤。

    量化:让模型“瘦上加瘦”

    我们还将INT8量化应用于搜索到的子网络,结果显示,量化后的子网络在准确率几乎不变的情况下,模型大小进一步减少。例如,一个子网络在量化后大小减少了2.5倍,准确率几乎没有损失。

    结论

    通过我们的LLAMA-NAS方法,我们不仅找到了更小、更高效的网络架构,还比剪枝和稀疏化技术更有效、更高效。而且,我们的方法不需要任何专用的软件内核或硬件,能够与其他量化方法无缝结合。随着对大语言模型的兴趣日益增加,我们的工作为自动创建能够在更便宜、更易获得的硬件平台上运行的网络提供了一条可行的道路。

    参考文献

    1. Anthony Sarah, Sharath Nittur Sridhar, Maciej Szankin, Sairam Sundaresan. “LLAMA-NAS: Efficient Neural Architecture Search for Large Language Models.”

    希望这篇文章能让你对我们的工作有更深入的了解,同时也希望你能像看完这篇文章一样开心。如果你对大语言模型的优化感兴趣,不妨试试我们的LLAMA-NAS方法,让你的模型也来次“瘦身”吧!

  • 不要忘记连接!用基于图的重排序提升RAG的表现

    认识一下RAG:文本生成的超级英雄

    Retrieval Augmented Generation,简称RAG,是一个能让大型语言模型(LLM)在回答问题时表现更佳的工具。RAG的工作原理是通过从现有文档中检索相关信息来为生成的文本提供背景支持。听起来是不是很厉害?但问题是,如果文档只提供部分信息或者与问题背景的连接不明显,那么RAG该怎么办?这篇文章就来回答这两个核心问题。

    G-RAG:图神经网络的魔力

    我们介绍一种基于图神经网络(GNN)的方法,叫做G-RAG。这个方法在RAG的检索器和阅读器之间引入了一个重排序器。G-RAG不仅考虑了文档之间的连接,还利用了语义信息(通过抽象意义表示图,AMR)来提供上下文感知的排序器。G-RAG不仅表现优异,还比最先进的方法更省计算资源。

    为什么重排序很重要?

    在开放领域问答(ODQA)中,RAG虽然能成功地检索到相关文档,但不能充分利用文档间的连接。这会导致模型忽视那些包含答案但与问题背景连接不明显的文档。通过重排序过程,我们能更有效地过滤检索到的文档,提高阅读过程的效果。

    现有方法的不足

    目前的重排序器虽然表现不错,但仍有一些问题。首先,大多数现有工作未能捕捉到不同检索文档之间的重要连接。其次,尽管AMR图提高了对复杂语义的理解,但将冗余的AMR信息集成到预训练语言模型中会导致过拟合和计算时间增加。最后,现有方法利用的预训练语言模型在快速发展的LLM时代显得不足。

    我们的解决方案

    为了应对这些挑战,我们提出了一种基于文档图的方法,每个节点代表一个文档,每条边代表两个文档之间存在共同概念。我们将不同文档之间的连接信息纳入边特征,并通过消息传递机制更新边特征。同时,我们在节点特征中加入了关键的AMR信息,避免了冗余信息的引入。

    实验结果

    我们在两个代表性的ODQA数据集上进行了实验:自然问题(NQ)和TriviaQA(TQA)。结果显示,基于图的策略(如GCN和G-RAG)在各种评估指标上表现出色。特别是G-RAG-RL模型,通过使用排序损失函数,进一步提升了识别正面文档的能力。

    结论与未来展望

    我们的G-RAG模型在现有ODQA方法中表现出色,通过利用文档之间的隐性连接和战略性地整合AMR信息,显著提高了识别有价值信息的能力。尽管预训练的LLM在重排序任务中的表现可能不尽如人意,但对其进行微调可能极大地提升RAG系统的表现。未来的研究方向包括设计更复杂的模型来更好地处理AMR信息,以及探索更高级的方法来解决LLM产生的排名分数中的平局问题。

    参考文献

    1. Wang, C., et al. (2023). “Graph as Tokens: Representing Text as Graphs for Neural Network Processing.” Retrieved from https://github.com/wangcunxiang/Graph-aS-Tokens/tree/main
    2. BERT: Bidirectional Encoder Representations from Transformers. (2019) Retrieved from https://arxiv.org/abs/1810.04805
    3. AMRBART: AMR Parsing with BART. (2020) Retrieved from https://arxiv.org/abs/2008.02759
    4. PaLM 2: A Next-Generation Language Model. (2022) Retrieved from https://arxiv.org/abs/2204.02311
  • 揭秘Caddy 2 + PHP-FPM 部署WordPress的卡顿谜团

    大家好,今天我将带您走进一个神秘的领域——Caddy 2 服务器与 PHP-FPM 部署的 WordPress 的卡顿现象。为什么我们辛辛苦苦搭建的网站会卡顿?让我们一探究竟。

    1. 初识Caddy 2与PHP-FPM

    首先,让我们简单介绍一下Caddy 2和PHP-FPM。Caddy 2 是一款现代化的开源Web服务器,因其自动HTTPS配置和简洁的配置文件赢得了广泛的好评。PHP-FPM(PHP FastCGI Process Manager)则是一个专为处理PHP请求优化的进程管理器,常用于提高网站性能。

    2. 卡顿现象的初步排查

    2.1 服务器资源不足

    当我们发现WordPress网站卡顿,首要怀疑的就是服务器资源不足。检查CPU使用率和内存占用情况是否过高。如果是的话,可能需要升级服务器配置。

    2.2 网络带宽问题

    网络带宽不足同样会造成网站卡顿。使用工具如 pingtraceroute 检查网络延迟和丢包率。如果网络状况不佳,可以尝试联系服务提供商解决。

    2.3 数据库性能

    WordPress的数据库性能也至关重要。使用 SHOW FULL PROCESSLIST; 命令检查MySQL数据库是否有慢查询,或者配置查询缓存来提高性能。

    3. 深入探讨Caddy 2与PHP-FPM的优化

    3.1 Caddy 2 的优化

    Caddy 2 默认的配置已经相当不错,但我们可以进一步优化:

    {
        auto_https off
        http_port 80
        https_port 443
    }
    
    example.com {
        root * /var/www/html
        php_fastcgi unix//run/php/php7.4-fpm.sock
        file_server
        encode gzip
    }
    • gzip压缩:启用gzip压缩可以减少传输数据量,提高加载速度。
    • 缓存:配置缓存以减少对服务器的压力。

    3.2 PHP-FPM 的优化

    PHP-FPM 的配置文件通常位于 /etc/php/7.4/fpm/pool.d/www.conf

    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    pm.max_requests = 500
    • pm.max_children:设置能够处理的最大并发请求数。
    • pm.max_requests:设置每个子进程在重启前处理的最大请求数,避免内存泄漏。

    4. WordPress的优化

    4.1 插件管理

    尽量减少并优化插件,特别是那些影响性能的插件。使用插件如 Query Monitor 来监控性能瓶颈。

    4.2 缓存插件

    使用缓存插件如 W3 Total Cache 或 WP Super Cache,可以显著提高页面加载速度。

    4.3 图像优化

    图像通常是页面加载时间的主要因素之一。使用插件如 Smush 来优化图像大小。

    5. CDN加速

    将静态资源(如图片、CSS、JS)托管到CDN(内容分发网络)上,可以显著提高加载速度,减轻服务器负担。

    结论

    通过以上措施,我们可以有效解决Caddy 2 + PHP-FPM 部署的WordPress网站卡顿问题。当然,实际情况可能千差万别,您需要根据具体情况进行调整和优化。希望这篇文章对您有所帮助!


    参考文献:

  • GPT-4在文档理解中的应用

    介绍

    各位读者,你们是否曾经因为无法快速翻阅一大堆文档而感到头痛?别担心,我们的好朋友GPT-4来了!最近,Lukasz Borchmann 和他的团队在一篇名为《Notes on Applicability of GPT-4 to Document Understanding》的论文中详细探讨了GPT-4在文档理解领域的表现。让我们一起来看看这位AI大将是如何在文档中大显神通的吧!

    文档理解:不仅仅是文字

    文档理解不仅仅是读取文字,还包括理解文档的版式、图像和各种视觉线索。这就像是要你在一堆报纸中找到一条特定的新闻,不仅要看文字,还要注意标题、图片和排版。GPT-4 Vision Turbo在这方面表现优异,特别是当输入包括OCR识别的文字和文档图像时,效果更佳。

    实验结果:GPT-4的表现如何?

    Borchmann团队选择了四个数据集进行测试:DocVQA, InfographicsVQA, SlideVQA和DUDE。每个数据集都代表了不同类型的文档挑战。结果显示,TURBO V和TURBO V + OCR模型在结合视觉和文字信息时表现最佳,尤其是对文本密集型文档效果显著。

    例如,在DocVQA数据集上,TURBO V + OCR模型取得了87.4的高分,而纯文字模型的表现则稍显逊色。看来,GPT-4不仅能看懂文字,还能“看图说话”!

    错误分析:GPT-4的难题

    当然,GPT-4也不是完美无缺的。在一些情况下,模型对文档的理解会受到输入信息的影响。例如,当需要从图表或图像中提取信息时,OCR文字的辅助效果不如在纯文本情况下明显。这就像是让一个学霸去解一道偏题,即使聪明如他,也难免会栽跟头。

    另外,研究还发现,模型在处理长文档时表现有所下降,这可能是因为模型对长文本的上下文信息利用不充分。就像是让你读一本厚厚的小说,然后问你某个细节,你可能也会一时找不到答案吧!

    限制与未来展望

    这项研究也指出了一些限制。例如,目前的分析仅限于模型在特定数据集上的表现,而没有考虑数据隐私、成本、法律合规等实际应用中的重要因素。此外,研究还没有对模型进行微调,这意味着实际应用中可能会有更好的表现。

    未来的研究方向包括如何更好地安排文本顺序、提高模型的置信度校准、以及探索多问答形式的问答系统。看来,GPT-4还有很大的进步空间,值得我们期待!

    总结

    总的来说,GPT-4在文档理解中的表现令人印象深刻。虽然在某些方面还有改进的空间,但它已经展示了强大的潜力。特别是在结合OCR文字和文档图像后,GPT-4 Vision Turbo模型的表现尤为出色。这为我们在文档处理和自动化方面提供了新的可能性。

    各位读者,下次再面对堆积如山的文档时,不妨试试GPT-4吧!


    参考文献:

    1. Borchmann, L. (2023). Notes on Applicability of GPT-4 to Document Understanding.
    2. Mathew, M. et al. (2020). Document Visual Question Answering Challenge 2020. arXiv preprint arXiv:2008.08899.
    3. Mathew, M. et al. (2022). InfographicVQA. In Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision.
    4. OpenAI. (2023). GPT-4. https://openai.com/research/gpt-4.

    Q: 这篇论文试图解决什么问题?

    A: 这篇论文主要针对的是文档理解(Document Understanding)领域中GPT-4系列模型的适用性和性能问题。文档理解是指将文档转换为有意义的信息,通常涉及到集成布局、非文本元素和文本样式所代表的线索。论文中提到,尽管文本只能模型在文档理解任务上难以取得令人满意的结果,但是GPT-4 Vision Turbo模型在输入中同时提供外部OCR引擎识别的文本和文档图像时表现良好。

    论文试图解决的具体问题包括:

    1. 评估GPT-4家族模型在文档理解领域的性能:作者对所有公开可用的GPT-4系列模型进行了评估,以了解它们在文档理解任务上的表现,并与专门为此目的开发的模型进行比较。
    2. 探索GPT-4模型在文档视觉问题回答(Document Visual Question Answering)上的表现:这是文档理解任务中的一种,作者选择这一任务进行评估,因为它既适合基于LLM的聊天助手,又可以通过自然语言提问或指定指令来请求文档中的每一条信息。
    3. 解决GPT-4模型在商业API中可实现的结果与报道结果之间的差异:作者提到,尽管GPT-4模型的新闻发布提到了在两个文档VQA数据集上的分数,但具体细节仍然未知,而且不清楚这些结果是否可以通过商业API实现。
    4. 分析GPT-4模型在处理长文档时的性能下降问题:论文中提到,对于长文档,GPT-4模型的性能显着下降。
    5. 探讨数据污染问题:作者还研究了GPT-4模型训练或测试数据集是否可能受到污染,这可能会影响模型性能的评估。
    6. 提出改进建议和未来研究方向:在论文的最后部分,作者提出了一些可能的改进领域,并对未来的研究提出了建议。

    总的来说,这篇论文试图提供一个详细的技术报告和可复现的评估程序,以填补现有知识与GPT-4模型在文档理解任务上性能之间的差距。

    Q: 有哪些相关研究?

    A: 论文中提到了多个与文档理解(Document Understanding)和视觉问题回答(Visual Question Answering, VQA)相关的研究和数据集。以下是一些主要的相关研究和数据集:

    1. DocVQA (Mathew et al., 2020): 这是一个文档视觉问题回答的数据集,专注于文本密集型文档。
    2. InfographicsVQA (Mathew et al., 2022): 专注于信息图表的视觉问题回答数据集。
    3. SlideVQA (Tanaka et al., 2023): 针对幻灯片文档的视觉问题回答数据集。
    4. DUDE (Van Landeghem et al., 2023): 文档理解数据集和评估,包含多种类型的问题和答案。
    5. Qwen-VL (Bai et al., 2023): 一个多模态视觉语言模型,用于理解、定位、文本阅读等任务。
    6. InternVL (Chen et al., 2023, 2024): 用于通用视觉语言任务的视觉基础模型。
    7. InstructDr (Tanaka et al., 2024): 针对文档理解的指令化数据集。
    8. GRAM (Blau et al., 2024): 用于多页文档视觉问题回答的全局推理模型。
    9. Tesseract OCR: 一个开源的光学字符识别引擎。
    10. Azure Cognitive Services: 微软提供的一系列认知服务,包括OCR功能。
    11. Amazon Textract: 亚马逊提供的文档文本检测和分析服务。

    这些研究和数据集为文档理解领域提供了丰富的资源,使得研究人员能够开发和评估处理文档图像和文本的模型。论文中对这些资源进行了评估和比较,以确定GPT-4系列模型在文档理解任务上的性能。

    Q: 论文如何解决这个问题?

    A: 论文通过以下步骤和方法解决文档理解领域中GPT-4模型的性能评估问题:

    1. 模型评估:作者对所有公开可用的GPT-4家族模型进行了评估,特别是关注了文档视觉问题回答(Document Visual Question Answering)这一子领域。
    2. 数据集选择:选择了DocVQA、InfographicsVQA、SlideVQA和DUDE等数据集,这些数据集覆盖了文档类型的全谱系,包括文本密集型和视觉密集型文档,以及多页文档。
    3. 实验设计:作者设计了一系列实验,包括最佳提示(prompt)的选择、图像分辨率的优化以及OCR(光学字符识别)引擎的比较。
    4. 性能比较:通过比较不同模型版本(如TURBO V、TURBO V + OCR、8K + OCR、32K + OCR等)在不同数据集上的性能,来评估它们在文档理解任务上的表现。
    5. 错误分析:利用数据集的诊断类别和元数据来分析模型性能,特别是根据输入和证据特征进行分析。
    6. 数据污染分析:研究了训练或测试数据集是否可能在GPT-4模型的训练数据中,从而影响性能评估的准确性。
    7. 局限性讨论:作者讨论了分析的局限性,如仅关注模型性能、数据集选择的合理性、未进行微调(finetuning)、OCR引擎的影响等。
    8. 未来研究方向:提出了未来研究的潜在领域,包括文本布局的重要性、置信度校准、多QA问题的处理等。
    9. 详细技术报告和复现性:与以往不公开的设置不同,作者提供了详细的技术报告和可复现的评估程序,确保了研究的透明度和可靠性。

    通过这些步骤,论文不仅评估了GPT-4模型在文档理解任务上的性能,还提供了深入的分析和对未来研究方向的建议。

    Q: 论文做了哪些实验?

    A: 论文中进行了一系列实验来评估GPT-4家族模型在文档理解领域的性能。以下是实验的主要步骤和内容:

    1. 数据集选择:选择了DocVQA、InfographicsVQA、SlideVQA和DUDE等数据集,以覆盖不同类型和特点的文档。
    2. 最佳提示(Prompt)确定:在验证集上对不同的提示进行了优化,以确定最佳的提示组合。这些提示旨在提高模型对问题的回答质量。
    3. 图像分辨率优化:研究了不同图像分辨率对模型性能的影响,以确定最佳的输入图像大小。
    4. OCR引擎比较:比较了Tesseract、Azure Cognitive Services和Amazon Textract等不同的OCR引擎,以确定哪个引擎在文本识别方面表现最佳。
    5. 模型版本比较:评估了不同版本的GPT-4模型,包括TURBO V、TURBO V + OCR、8K + OCR和32K + OCR等,以了解它们在文档理解任务上的表现。
    6. 错误分析:利用数据集的诊断类别和元数据,分析了模型在不同类型的输入和证据特征下的性能。
    7. 证据位置分析:研究了模型性能如何随着请求信息在文档中的位置而变化,以了解模型是否存在对输入文档开始或结束部分的偏好。
    8. 答案类型分析:分析了模型在处理不同类型的答案(如列表答案和不可回答问题)时的性能。
    9. 引导指令污染分析:通过在提示中加入特定数据集的名称,来检查模型性能是否因数据集名称的存在而受到影响,从而评估数据污染的可能性。
    10. 性能提升分析:研究了通过提供外部OCR引擎识别的文本作为输入的一部分,对GPT-4 Vision模型性能的影响。

    这些实验的目的是为了全面评估GPT-4模型在文档理解任务上的性能,并探索提高性能的不同方法和因素。通过这些实验,作者能够提供关于GPT-4模型在文档理解领域适用性的深入见解。

    Q: 有什么可以进一步探索的点?

    A: 根据论文内容,以下是一些可以进一步探索的点:

    1. 文本布局的重要性:研究不同OCR设置如何影响文本阅读顺序和完整性的保持,以及空间布局的理解。
    2. 置信度校准:评估和改进文档理解系统中置信度分数的校准,这对于业务流程自动化尤为重要。
    3. 多QA问题处理:探索如何同时从单个文档中提取多个值,这可能提高成本效率并潜在地提高答案质量。
    4. 不同输入文本表示和排列的影响:研究不同的文本输入表示和排列方式对模型性能的影响,特别是对于纯文本大型语言模型(LLMs)。
    5. 数据集选择的多样性:考虑不同的数据集选择对模型性能评估的影响,以及如何通过多样化的数据集来提高模型的泛化能力。
    6. 微调(Finetuning)的影响:研究在特定数据集上微调大型语言模型对性能的潜在提升。
    7. 零样本学习(Zero-shot learning)的优化:探索不同的提示(prompt)策略,以提高零样本性能。
    8. OCR质量对模型性能的影响:研究OCR引擎的不同输出如何影响模型的性能,并寻找提高OCR质量的方法。
    9. 第三方API的依赖性:研究如何减少对第三方API的依赖,以及如何确保模型在实际部署中的稳定性和一致性。
    10. 模型的“理解”能力:深入研究模型在文档处理中的“理解”能力,以及如何评估和提高这种能力。
    11. 模型的偏见和公平性:评估模型可能存在的偏见,并探索减少这些偏见的方法,以确保模型的公平性。
    12. 模型的可解释性和透明度:提高模型的可解释性,以便更好地理解其决策过程,并增加用户对模型输出的信任。

    这些探索点可以帮助研究者和开发者更好地理解和改进大型语言模型在文档理解任务上的性能,以及在实际应用中的可靠性和有效性。

    Q: 总结一下论文的主要内容

    A: 这篇论文的主要内容可以总结如下:

    1. 研究背景:论文探讨了GPT-4家族模型在文档理解领域的适用性,特别是在需要理解文本的空间布局和视觉线索的情况下。
    2. 文档理解定义:文档理解是指将文档转换成有意义的信息,通常需要集成布局、非文本元素和文本样式的线索。
    3. GPT-4家族模型:论文评估了不同版本的GPT-4模型,包括文本模型和能够处理图像输入的模型。
    4. 实验设计:作者选择了DocVQA、InfographicsVQA、SlideVQA和DUDE等数据集进行评估,并在验证集上对提示、图像分辨率和OCR引擎进行了优化。
    5. 性能评估:通过比较不同模型在各个数据集上的表现,发现结合视觉和文本信息的模型(如TURBO V + OCR)性能更优。
    6. 错误分析:分析了模型性能与输入文档表示信息的方式之间的关系,以及模型在不同证据位置和答案类型下的表现。
    7. 数据污染分析:探讨了训练或测试数据集可能在GPT-4模型训练数据中的情况,以及这可能对性能评估产生的影响。
    8. 局限性:论文讨论了研究的局限性,包括仅关注模型性能、数据集选择的合理性、未进行微调、OCR引擎的影响等。
    9. 未来研究方向:提出了未来研究的潜在领域,如文本布局的重要性、置信度校准、多QA问题处理等。
    10. 详细技术报告:与以往不公开的设置不同,作者提供了详细的技术报告和可复现的评估程序,确保了研究的透明度和可靠性。

    总的来说,这篇论文提供了对GPT-4家族模型在文档理解任务上性能的全面评估,并探讨了影响性能的多种因素,同时提出了未来研究的方向。

  • “闭门造车”之多模态模型方案浅谈

    前言

    大家好,今天我要和大家聊聊一个即便我闭门造车也能侃侃而谈的热门话题——多模态模型。近期Google的Gemini 1.5和OpenAI的Sora再次点燃了大家对多模态技术的热情。虽然我没有亲身实践过这些大模型,但凭借一些文本生成和图像生成的经验,我依然可以带大家一探究竟。

    问题背景

    多模态模型,简而言之,就是能同时处理图文混合的模型。有人可能会想,这不就是烧钱堆显卡,然后用Transformer“一把梭”搞定吗?其实没那么简单。文本生成一直有明确的方向——语言模型。而图像生成则没有这样清晰的路线,VAE、GAN、Flow、Diffusion等方法各显神通,原因就在于图像生成需要对连续变量进行概率建模,这比文本生成复杂得多。

    离散之路

    既然连续难搞,那能不能把图像离散化,套用文本生成的框架呢?答案是可以的,这也是目前的主流思路。图像本质上是离散的,比如一幅n \times n大小的RGB图像,就是3n^2个0~255的整数。我们可以通过VQ-VAE或者VQ-GAN这样的“图像Tokenizer”进行离散化,然后用文本生成的方式处理这些离散的图像Token。

    压缩损失

    虽然听起来很美好,但图像Tokenizer有一个大问题——信息损失。为了提高生成速度,通常会对图像进行高度压缩,这导致图像细节严重缺失。参考SEED的重构效果,虽然整体语义保持,但细节完全不同。无损压缩是理想状态,但目前的技术还达不到这个水平。

    扩散模型

    面对信息损失的问题,如果限定无损压缩,那么扩散模型是一个不错的选择。扩散模型通过将标准高斯分布映射为目标分布,有足够的熵源来保证生成效果。相比之下,Flow模型虽然设计上可逆,但效果上限不如扩散模型。因此,扩散模型成为了图像生成的首选。

    Patch输入

    一个大胆的想法是直接以原始图像的Patch作为输入,用Transformer进行处理。这样可以避免特征间的孤立问题。实验表明,这种做法是可行的,虽然训练步数较多,但在多模态大模型训练中的步数本身就很大,所以这不算大问题。

    文章小结

    本文介绍了一种多模态模型的设计构思,即直接以原始图像的Patch作为图像输入,文本部分常规预测下一个Token,图像部分用加噪图像重构原图。这种组合能够以最保真的方式实现多模态生成。虽然这只是我闭门造车的一些想法,但希望能给大家带来一些启发。

    参考文献

    苏剑林. (Feb. 21, 2024). 《“闭门造车”之多模态模型方案浅谈》[Blog post]. Retrieved from 科学空间


    希望大家喜欢这篇文章,欢迎分享和讨论!

  • 以蒸馏的名义:“从去噪自编码器到生成模型”重现江湖

    前言

    今天我们要聊的,是一篇名为《Score identity Distillation: Exponentially Fast Distillation of Pretrained Diffusion Models for One-Step Generation》的论文。顾名思义,这篇论文探讨了如何更快、更好地蒸馏扩散模型。即便你对蒸馏一无所知,看到这里也不必担心,咱们一步步来。

    蒸馏模型:从繁到简的艺术

    常规蒸馏步骤

    蒸馏的常规步骤是什么呢?简单来说,就是随机采样大量输入,然后用扩散模型生成相应的输出,用这些输入输出作为训练数据对,来监督训练一个新模型。但是,这种方法需要教师模型迭代多次(比如1000次)才能生成高质量输出,费时费力,还容易造成效果损失。有没有更高效的方法呢?

    Score Identity Distillation(SiD)

    这篇论文提出了一种名为“Score identity Distillation(SiD)”的方法。虽然名字高大上,但其实思路很简单:它利用了一些恒等式来设计和推导整个框架。不过,这些恒等式本身并不新,名字只是为了显得高端而已。

    重现江湖:从去噪自编码器到生成模型

    初级形式

    假设我们有一个训练好的教师扩散模型,它需要多步采样才能生成高质量图片。我们的目标是训练一个单步采样的学生模型,即一个类似GAN的生成器,只需输入噪声就能生成图像。如果我们有大量的输入输出对,那么直接监督训练就可以了,但如果没有呢?

    SiD采用了一个看似绕但很聪明的思路:如果学生模型生成的数据分布和目标分布很相似,那么用学生模型生成的数据集去训练一个扩散模型,它也应该和教师模型相似。

    点睛之笔

    谈到GAN,有些人可能会“闻之色变”,因为它们容易训崩。但SiD提出了一个有效的解决方案:通过恒等变换,尽量消除优化目标对某些变量的依赖,使得训练更加稳定。

    恒等变换

    具体来看,SiD通过一系列恒等变换,将优化目标简化为一个更易处理的形式。这些变换利用了概率密度定义和贝叶斯公式,使得训练过程更高效。

    实践中的挑战与解决方案

    训练中的坑

    虽然理论上SiD的方法看起来很美,但在实际操作中仍然存在一些挑战。例如,如何在不牺牲效果的前提下减少显存需求。论文提出了未来可以尝试对预训练模型加LoRA来进一步节省显存。

    延伸思考

    SiD的方法虽然已经很完善,但仍有改进空间。比如,是否可以进一步简化恒等变换,或者引入新的优化策略来提高训练效率。

    文章小结

    总的来说,SiD通过一系列精妙的恒等变换和优化策略,成功地将复杂的多步扩散模型蒸馏为单步生成模型。这不仅提高了生成效率,还减少了对训练数据和计算资源的需求。未来,随着更多改进和优化的引入,SiD有望在更加广泛的应用场景中展现其价值。


    参考文献

    苏剑林. (May. 01, 2024). 《以蒸馏的名义:“从去噪自编码器到生成模型”重现江湖 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/10085

  • 数字版“疯牛病”:生成模型的自噬之路

    引言

    众所周知,不管是文本还是视觉领域,各种生成模型正在以无法阻挡的势头“肆虐”互联网。虽然大家都明白,实现真正的通用人工智能(AGI)还有很长的路要走,但这并不妨碍人们越来越频繁地利用生成模型来创作和分享内容。君不见,很多网络文章已经配上了Stable Diffusion模型生成的插图;君不见,很多新闻风格已经越来越显现出ChatGPT的影子。看似无害的这种趋势,正悄然引发了一个问题:我们是否应该对互联网上充斥的生成模型数据保持警惕?

    近期发表的论文《Self-Consuming Generative Models Go MAD》揭示了一种令人担忧的可能性,那就是生成模型正在互联网上的无节制扩张,可能会导致一场数字版的“疯牛病”疫情。本文将带您一起学习这篇论文,探讨其可能带来的影响。

    “食自己”

    一方面,人们使用生成模型的频率越来越高,将会导致互联网上由生成模型创作的内容越来越多;另一方面,生成模型也在更新迭代,其所用的数据也是从互联网爬取的。可以想像,后续的训练集中由生成模型创作的部分占比将会越来越高。换句话说,后面的每一代模型迭代时可能都没有足够多的新鲜数据,纯粹是用自己生产的数据来训练,用广东话说就是“食自己”,这将导致模型的质量或者多样性越来越差,原论文称之为“模型自噬紊乱(Model Autophagy Disorder,MAD)”。

    无独有偶,生物学上也曾出现了类似的例子。牛是草食动物,然而,一些畜牧业者为了增强其营养供应,将其他牛的残骸(包括大脑)粉碎并混入饲料中。这在当时看起来是一个机智的做法,但未曾想到最后导致了“疯牛症”的出现和大规模传播。这一事例说明,长期的“食自己”可能会导致有害因素累积在生物体内,一旦达到一定程度,甚至可能触发灾难性的疾病。

    因此,我们同样需要反思生成模型的“肆虐”是否会在互联网上引发另一场“疯牛症”——这不仅可能导致信息的同质化,使得各种内容开始变得千篇一律,缺乏原创性和多样性,还有可能引发一系列无法预见的问题。

    降多样性

    可能有读者会产生疑问:生成模型不就是对真实数据分布的模拟吗?即便连续地使用生成模型的数据进行迭代训练,应该只是在重复呈现真实的数据分布,怎么会导致多样性的丧失呢?

    这其中的原因是多方面的。首先,训练生成模型的数据往往并非直接取自真实分布,而是经过人为的加工处理,比如去噪、规范化和对齐。经过加工后,训练集就已经丧失了部分多样性。例如,我们之所以能观察到很多新闻报道或知乎回答都有一股ChatGPT的味道,并非是因为内容本身,而是因为它们的格式与ChatGPT的相似性,这就说明ChatGPT的训练数据和输出结果的风格都比较明显且局限。再比如,为了降低图像生成模型的训练难度,我们通常需要对图像进行对齐处理,如在训练人脸生成模型时,常常需要将所有人脸的眼睛对齐到同一位置,这些操作也导致了多样性的丧失。

    此外,还有一个很关键的因素是,由于生成模型本身或者训练技巧等限制,每个生成模型都无法做到完美,此时我们通常会主动地引入一些牺牲多样性来提高生成质量的技巧。比如,对于GAN、Flow等生成模型,我们会选择降低采样噪声的方差,以获得质量更高的生成结果,这就是所谓的截断技巧或退火技巧。另外,如《生成扩散模型漫谈(九):条件控制生成结果》所述,在扩散模型中我们通常引入条件信息以控制输出结果,不管是Classifier-Guidance还是Classifier-Free方案,额外条件的引入也会限制生成结果的多样性。总而言之,在生成模型不尽完美时,我们在平衡质量与多样性过程中,就主动地放弃了部分多样性。

    正态分布:简单却深刻的例子

    为了更深刻地认识到这种现象,我们接下来将探讨一些具体的例子。作为开始,我们首先考虑的是正态分布,因为它足够简单,所以求解和分析都更加清晰。但后面我们可以观察到,结果已经足够有代表性了。

    假设真实分布是多元正态分布 N(μ0, Σ0),我们用来建模的分布也是正态分布 N(μ, Σ),那么训练模型的过程,就是从训练集里边估计均值向量 μ 和协方差矩阵 Σ。接下来我们假设每一代生成模型训练时,都只用到上一代生成模型创作的数据,这是比较极端的假设,但不可否认当生成模型进一步普及时,这个假设越来越接近成立。

    在这些假设下,我们从 t-1 代生成模型 N(μt-1, Σt-1) 中采样 n 个样本 x(1)t-1, x(2)t-1,⋯, x(n)t-1,来训练第 t 代的生成模型:

    μt = 1/n ∑_{i=1}^n x(i)t-1
    Σt = 1/(n-1) ∑_{i=1}^n (x(i)t-1 - μt)(x(i)t-1 - μt)^⊤

    注意,如果加上截断技巧,那么第 t 代的生成模型就是 N(μt, λΣt),其中 λ∈(0,1)。于是可以想象,每一代的方差(多样性)都将以 λ 的比率衰减下去,最后变成零(完全丧失多样性)。如果不使用截断技巧(即 λ=1)是不是就没事了?并不是。根据定义 μt = 1/n ∑_{i=1}^n x(i)t-1,由于 x(i)t-1 都是随机采样得到的,所以 μt 也是一个随机变量,根据正态分布的叠加性,它实际上服从:

    μt ∼ N(μt-1, 1/n Σt-1) ⇒ μt ∼ N(μ0, t/n Σ0)

    可以预见,当 t 足够大时,μt 本身就会明显偏离 μ0,这对应的是质量的崩溃,而不单单是多样性的降低。

    总的来说,截断技巧的引入,会大大加速多样性的丧失速度,而即便没有截断技巧,在长期有限样本的迭代训练中,生成分布也有可能明显偏离原始的真实分布。注意,正态分布这个例子所做的假设已经比一般的生成模型要弱得多,至少它的拟合能力是保证足够的,但这依然不可避免多样性衰减或者质量崩溃,而对于真实世界的数据和能力有限的生成模型来说,理论上只会更加糟糕。

    生成模型的实验验证

    对于实际的生成模型,理论分析难以进行,所以只能通过实验来探索结果了。原论文做了非常丰富的实验,结果基本上跟正态分布的结论一致,即如果加入截断技巧的话,多样性将会迅速丧失,即使没有截断技巧,经过反复迭代后的模型依然会不可避免地出现一些偏离。

    小结

    本文探讨了当各种生成模型大规模“肆虐”互联网时可能出现的后果。在生成模型反复用自己生成的数据进行更新迭代时,可能会导致信息严重同质化、丧失多样性的问题,类似于曾经因“牛吃牛”而出现的“疯牛病”。原论文通过理论分析和实验验证,揭示了生成模型在长期迭代中可能出现的“模型自噬紊乱(Model Autophagy Disorder,MAD)”现象。

    尽管生成模型为我们带来了许多便利和创新,但我们也需要警惕其潜在的风险。未来,我们或许需要更智能的数据筛选机制和更丰富的数据源来避免这种“食自己”的现象,从而确保生成模型的多样性和质量。

    参考文献

    希望本文能为您带来一些启发,帮助您更好地理解生成模型的潜在风险。如果您有任何疑问或建议,欢迎留言交流!


    生成模型的未来,或许不只是技术的进步,更是我们对其使用方式的深思熟虑。让我们共同期待一个更加多样化和创新的数字世界!

  • 梯度流:从数学到魔法的奇幻旅程

    导言:梯度流的神奇世界

    在数学和机器学习的广袤世界中,有一个神秘的概念被称为“梯度流(Gradient Flow)”。如果你对梯度下降法有一定了解,那么你应该知道它是寻找函数最小值的强大工具。而梯度流,则是将这个寻找最小值的过程中的各个点连接起来,形成一条随时间变化的轨迹。本文将带你深入探讨这个奇妙的概念,并进一步扩展到概率空间,揭示出“Wasserstein梯度流”的神秘面纱。

    梯度下降:从山顶到山谷的滑梯

    1.1 梯度下降的基本原理

    假设我们站在一座山顶,想要找到最低谷的那一点。为了实现这个目标,我们可以使用梯度下降法。这个方法的核心在于,我们总是沿着当前点的负梯度方向前进,因为负梯度方向是局部下降最快的方向。具体的迭代公式如下:

    xt+1 = xt − α∇xf(xt)

    在这个公式中,xt表示当前的位置,α是学习率,∇xf(xt)是函数在xt点的梯度。如果函数f(x)是凸的,梯度下降通常能够找到最小值。即使函数不是凸的,梯度下降也能让我们接近一个极小值点。

    1.2 梯度流的定义

    如果我们将学习率α记作Δt,并考虑当Δt趋近于0时的极限情况,那么梯度下降的迭代公式将变为一个常微分方程(ODE):

    dxt/dt = −∇xf(xt)

    求解这个ODE得到的轨迹,就是所谓的“梯度流”。换句话说,梯度流是梯度下降在寻找最小值过程中的轨迹。

    最速方向:为什么要选择梯度下降

    2.1 局部最快下降方向

    为什么梯度下降法如此受欢迎?一个常见的说法是“梯度的负方向是局部下降最快的方向”。这个说法虽然没错,但有些不够严谨。因为“最快”涉及到定量比较,只有先确定比较的指标,才能确定“最”的结果。

    2.2 约束优化视角

    在欧氏空间中,梯度的负方向是局部下降最快的方向。然而,如果我们换一个模长的定义,或者换一个约束条件,结果可能就会不同。因此,从优化的角度来看,梯度下降法对应的优化目标是:

    xt+1 = argminx ||x - xt||^2 / (2α) + f(x)

    这意味着我们将约束条件转化为一个惩罚项,从而简化了优化过程。

    泛函与概率空间:从函数到密度函数

    3.1 泛函的引入

    普通的多元函数输入一个向量,输出一个标量。而泛函则是输入一个函数,输出一个标量。例如,定积分运算:

    I[f] = ∫ba f(x) dx

    在这里,I[f]就是一个泛函。我们将关注的泛函定义域为全体概率密度函数的集合,即研究输入一个概率密度、输出一个标量的泛函。

    3.2 Wasserstein梯度流的引入

    假设我们有一个泛函F[q],想要计算它的最小值。模仿梯度下降的思路,我们可以沿着它的负方向进行迭代。对于概率分布来说,性态比较好的距离是Wasserstein距离。我们可以将欧氏距离替换为Wasserstein距离,最终得到:

    ∂qt(x)/∂t = ∇x ⋅ (qt(x) ∇x δF[qt(x)] / δqt(x))

    这就是“Wasserstein梯度流”,其中δF[q]/δqF[q]的变分导数。

    应用与示例:从理论到实践

    4.1 f散度的应用

    例如,对于f散度,我们可以得到:

    ∂qt(x)/∂t = ∇x ⋅ (qt(x) ∇x(f(rt(x)) − rt(x) f'(rt(x))))

    其中,rt(x) = p(x) / qt(x)。这一公式可以帮助我们通过ODE从分布qt中采样。

    4.2 逆KL散度的应用

    另一个简单的例子是逆KL散度,当我们使用负对数作为函数f时,得到:

    ∂qt(x)/∂t = -∇x ⋅ (qt(x) ∇x log(p(x) / qt(x)))

    这正好是一个Fokker-Planck方程,对应的随机微分方程(SDE)为:

    dx = ∇x log(p(x)) dt + √2 dw

    这意味着,如果我们知道log(p(x)),那么就可以用上式实现从p(x)中采样。

    文章小结

    本文介绍了从梯度下降法到梯度流的概念,并进一步扩展到概率空间,引入了Wasserstein梯度流的概念。我们讨论了这些概念与连续性方程、Fokker-Planck方程和ODE/SDE采样之间的联系。通过这些讨论,我们不仅揭示了数学优化中的一些核心原理,还展示了这些原理在概率密度函数优化中的应用。希望这次奇幻旅程让你对梯度流有了更深的理解!


    如果你对优化算法和深度学习有更多兴趣,可以参考以下资源:

    • 《从动力学角度看优化算法(一):从SGD到动量加速》
    • 《从动力学角度看优化算法(三):一个更整体的视角》
    • 《从Wasserstein距离、对偶理论到WGAN》

    愿你在数学与机器学习的世界中探索得愉快,发现更多的奇妙与乐趣!

  • 梯度流与Wasserstein梯度流:从山顶滑雪到概率风景线

    大家好!今天我们要聊一聊一个有趣的概念,叫做“梯度流(Gradient Flow)”。别紧张,这不是物理课,而是数学和机器学习的世界。简单来说,梯度流就是我们用梯度下降法寻找最小值的过程中,每个点连成的一条轨迹,就像你在山顶滑雪,每个滑下的轨迹都是梯度流。在这篇文章的后半部分,我们将探讨如何将梯度流的概念扩展到概率空间,变成“Wasserstein梯度流”。这将为我们理解连续性方程和Fokker-Planck方程等内容提供一个全新的视角。

    梯度下降:从山顶到山谷

    假设我们要寻找一个光滑函数的最小值。常见的做法是梯度下降(Gradient Descent),就像从山顶滑雪一样,沿着山坡的斜度(即梯度)往下滑。如果这个山坡是光滑且凹的(数学术语叫凸的),那么你通常能顺利滑到山谷;如果山坡崎岖不平,你可能会卡在某个小山谷里,但能下滑到某个低谷也算不错了。

    如果我们把滑雪的步长记为“Δt”,滑雪的轨迹记为“xt”,当步长趋近于0时,这个滑雪过程就变成了一条连续的轨迹,这条轨迹就是所谓的“梯度流”。这意味着,只要你沿着梯度方向滑动,即使步长很小,你总能往让目标函数值变小的方向前进。

    最速方向:滑雪的最佳路线

    为什么要用梯度下降?一个主流说法是“梯度的负方向是局部下降最快的方向”。这就好比在滑雪时,你选择坡度最大、速度最快的路线。然而,这个说法有点不严谨,因为没说明前提条件——在欧氏空间中,梯度的负方向才是局部下降最快的方向。如果换一种度量方式,结果可能就不一样了。

    优化视角:从滑雪到滑翔机

    我们还可以将梯度下降的目标推广到更复杂的优化场景中。比如,自然梯度下降(Natural Gradient Descent)使用的是KL散度作为正则项。想象一下,你不仅要从山顶滑到山谷,还要避开雪崩和岩石,这就需要更复杂的导航技巧。通过这种方式,我们可以得到更精确的轨迹。

    泛函入门:从滑雪到概率风景线

    “泛函”这个词听起来有点吓人,但其实它只是输入一个函数,输出一个标量的运算,比如定积分。我们可以将这个概念推广到概率密度函数的集合中,也就是说,输入一个概率密度函数,输出一个标量。

    概率之流:从滑雪到漂流

    假如我们有一个泛函F[q],想要计算它的最小值,那么可以模仿梯度下降的思路,沿着它的负方向进行迭代。在概率空间中,我们可以使用Wasserstein距离来替代欧氏距离,这样就得到了“Wasserstein梯度流”。

    尽管求解这些数学公式可能有点复杂,但最终的结果是,我们可以通过这种方法来理解和求解连续性方程和Fokker-Planck方程。这就像是从滑雪转换成漂流,通过水流的方向来找到最优的路径。

    总结:从山顶滑雪到概率漂流

    今天,我们探讨了梯度流和Wasserstein梯度流的概念,从简单的梯度下降到复杂的概率空间优化。通过这种视角,我们不仅更好地理解了连续性方程和Fokker-Planck方程,还为未来的研究提供了新的思路和方向。

    希望通过这篇文章,大家不仅学到了知识,还能感受到数学和机器学习的奇妙之处。就像滑雪和漂流一样,掌握了技巧,你就能在这片知识的海洋中自由穿梭。下次再见!

  • 朴素贝叶斯与注意力机制:一场“心有灵犀”的邂逅

    嘿,朋友们!今天我们要聊的可是AI界的两位“大明星”——朴素贝叶斯(Naive Bayes)和注意力机制(Attention)。这两位一个朴实无华,一个炫酷吊炸天,但你知道吗?它们之间其实有很多“不可告人”的秘密!

    朴素贝叶斯:老实人的自白

    先来认识一下朴素贝叶斯,这位老兄可是AI界的“老黄牛”,简简单单,踏踏实实。他的工作原理就像是你在餐厅点菜,完全按照菜单上的推荐组合来点。每道菜都有它自己的独立评分,然后你根据这些评分来决定哪道菜最可能是你喜欢的。

    一般化的朴素贝叶斯:变身超级英雄

    不过,老实人的日子久了,朴素贝叶斯也想来点儿新花样,于是他决定进行一次“大变身”。他学会了一种叫做“加权平均”的技术,不再是每道菜的评分都一样,而是根据餐厅老板的推荐来调整每道菜的权重。这样一来,他的推荐就显得更加聪明了。

    注意力机制:时尚界的弄潮儿

    接下来登场的是注意力机制,这位可是AI界的新锐潮人。他的理念是“要注意到每一个细节”。在他看来,每个词对当前词的影响力是不一样的,有的词可能只是打酱油的,有的词则是重头戏。于是,他发明了“注意力分数”,用来衡量每个词的重要性,然后根据这些分数进行加权平均。

    当朴素贝叶斯遇上注意力机制

    这时,朴素贝叶斯和注意力机制这两个大明星终于碰面了。朴素贝叶斯惊讶地发现,这个炫酷的注意力机制,竟然和自己有那么多相似之处!原来,注意力机制也是一种广义的朴素贝叶斯,只不过是通过更加灵活的加权平均,来捕捉词与词之间的复杂关系。

    深度模型:层叠与残差的魔法

    不过,单层的朴素贝叶斯和注意力机制能力有限,为了让自己变得更强大,他们决定学习一种叫做“层叠”的魔法。简单来说,就是把多个简单的模型叠加起来,形成一个超级复杂的模型。

    在这个过程中,他们还学会了一种叫做“残差连接”的技巧。这就像是你在写文章的时候,既要保持文章的连贯性,又要突出重点。通过这种方式,模型在捕捉复杂关系的同时,也能保留一些简单的、直接的关系。

    总结:一场“心有灵犀”的邂逅

    今天,我们见证了朴素贝叶斯与注意力机制这两位大明星的“心有灵犀”时刻。通过这种视角,我们不仅更好地理解了注意力机制中的层叠与残差,还为未来的研究提供了新的思路和方向。

    所以,朋友们,如果你对AI技术感兴趣,不妨多了解一下朴素贝叶斯和注意力机制这两位大明星。他们之间的“化学反应”一定会让你大开眼界!


    希望通过这篇文章,大家不仅学到了知识,还能会心一笑。AI的世界其实并不枯燥,关键是要找到对的方式去探索。下次我们再来聊聊其他有趣的话题吧!

  • Transformer升级之路:逆用Leaky ReRoPE解决推理成本问题

    在上周的文章《Transformer升级之路:12、无限外推的ReRoPE?》中,我们介绍了ReRoPE和Leaky ReRoPE的创新方法。实验结果表明,它们在几乎不损失训练效果的情况下能够扩展LLM的Context长度,并且实现了“longer context, lower loss”的理想特性。尤其是ReRoPE,似乎表现出了无限的Context处理能力。然而,这些方法也带来了推理阶段的成本增加问题。本文将探讨一种新的解决方案:逆用Leaky ReRoPE。

    回顾RoPE与Leaky ReRoPE

    RoPE与位置编码

    RoPE(Rotary Position Embedding)形式上是一种绝对位置编码,但实际上它实现了相对位置编码。其对应的相对位置矩阵为:

    *** QuickLaTeX cannot compile formula:
    [\left(\begin{array}{cccccccccc}0 & 1 & 2 & 3 & \cdots & L-2 & L-1\-1 & 0 & 1 & 2 & \cdots & L-3 & L-2\-2 & -1 & 0 & 1 & \cdots & L-4 & L-3\\vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots\2-L & 3-L & 4-L & \cdots & -2 & -1 & 0\1-L & 2-L & 3-L & \cdots & -3 & -2 & -1\\end{array}\right)]
    
    *** Error message:
    Extra alignment tab has been changed to \cr.
    leading text: ...2 & 3 & \cdots & L-2 & L-1\-1 & 0 & 1 & 2 &
    Undefined control sequence \2.
    leading text: ...vdots & \vdots & \ddots & \vdots & \vdots\2
    Extra alignment tab has been changed to \cr.
    leading text: ... \vdots & \vdots\2-L & 3-L & 4-L & \cdots &
    Undefined control sequence \1.
    leading text: ...ts\2-L & 3-L & 4-L & \cdots & -2 & -1 & 0\1
    Extra \right.
    leading text: ... & \cdots & -3 & -2 & -1\\end{array}\right)
    \begin{array} on input line 8 ended by \end{document}.
    leading text: \end{document}
    Improper \prevdepth.
    leading text: \end{document}
    Missing } inserted.
    leading text: \end{document}
    Missing \cr inserted.
    leading text: \end{document}
    Missing $ inserted.
    leading text: \end{document}
    
    

    Leaky ReRoPE与窗口化处理

    为了在保留局域性的同时避免Long Context导致位置越界问题,Leaky ReRoPE将推理阶段的相对位置矩阵改为:

    *** QuickLaTeX cannot compile formula:
    [\left(\begin{array}{cccccccccc}0 & 1 & 2 & \cdots & w-1 & w & \cdots & w+k & \cdots & w+L-1-wk\-1 & 0 & 1 & \cdots & w-2 & w-1 & \cdots & w+k-1 & \cdots & w+L-2-wk\\vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots\-w+1 & -w+2 & -w+3 & \cdots & -1 & 0 & \cdots & k-1 & \cdots & L-2-wk\\vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\end{array}\right)]
    
    *** Error message:
    Extra alignment tab has been changed to \cr.
    leading text: ...& w & \cdots & w+k & \cdots & w+L-1-wk\-1 &
    Extra alignment tab has been changed to \cr.
    leading text: ... & \ddots & \vdots & \vdots & \vdots\-w+1 &
    Extra \right.
    leading text: ...\vdots & \vdots & \vdots\\end{array}\right)
    \begin{array} on input line 8 ended by \end{document}.
    leading text: \end{document}
    Improper \prevdepth.
    leading text: \end{document}
    Missing } inserted.
    leading text: \end{document}
    Missing \cr inserted.
    leading text: \end{document}
    Missing $ inserted.
    leading text: \end{document}
    You can't use `\end' in internal vertical mode.
    leading text: \end{document}
    \begin{array} on input line 8 ended by \end{document}.
    leading text: \end{document}
    Missing } inserted.
    
    

    其中,( w ) 是窗口宽度,( k ) 用来调节可处理的最大长度。

    ReRoPE的无限扩展能力

    ReRoPE直接取了 ( k \to \infty ) 的极限:

    *** QuickLaTeX cannot compile formula:
    [\left(\begin{array}{cccccccccc}0 & 1 & 2 & \cdots & w-1 & w & \cdots & w & \cdots & w\-1 & 0 & 1 & \cdots & w-2 & w-1 & \cdots & w & \cdots & w\\vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots\-w+1 & -w+2 & -w+3 & \cdots & -1 & 0 & \cdots & w & \cdots & w\\vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\end{array}\right)]
    
    *** Error message:
    Extra alignment tab has been changed to \cr.
    leading text: ...ts & w-1 & w & \cdots & w & \cdots & w\-1 &
    Extra alignment tab has been changed to \cr.
    leading text: ... & \ddots & \vdots & \vdots & \vdots\-w+1 &
    Extra \right.
    leading text: ...\vdots & \vdots & \vdots\\end{array}\right)
    \begin{array} on input line 8 ended by \end{document}.
    leading text: \end{document}
    Improper \prevdepth.
    leading text: \end{document}
    Missing } inserted.
    leading text: \end{document}
    Missing \cr inserted.
    leading text: \end{document}
    Missing $ inserted.
    leading text: \end{document}
    You can't use `\end' in internal vertical mode.
    leading text: \end{document}
    \begin{array} on input line 8 ended by \end{document}.
    leading text: \end{document}
    Missing } inserted.
    
    

    逆用Leaky ReRoPE:让训练阶段变慢,推理阶段变快

    为什么逆用?

    原本的ReRoPE和Leaky ReRoPE在推理阶段增加了计算成本。如果我们反过来在训练阶段使用Leaky ReRoPE,而在推理阶段使用常规的RoPE,能否解决这一问题呢?

    实验与结果

    我们进行了以下实验组合:“GAU + Deep Norm + Tiger + 语言模型”。在训练阶段使用 ( k=1/16, w=128 ) 的Leaky ReRoPE,在推理阶段使用正常的RoPE。测试结果如下:

    测试长度BaselineBaseline-lognNTK-RoPE-fixedNTK-RoPE-logn†-fixedNTK-RoPE-logn-fixedNTK-RoPE-mixedNTK-RoPE-logn†-mixedNTK-RoPE-logn-mixedReRoPE-w256ReRoPE-w256-logn†ReRoPE-w256-lognInvLeaky ReRoPE-w128-lognInvLeaky ReRoPE-w128-b8-lognHFWA512 (训练)
    训练49.41%49.40%49.41%49.41%49.40%49.41%49.41%49.40%49.41%49.41%49.40%49.38%49.62%48.70%
    4096(重复)24.17%24.60%51.86%55.94%62.85%53.09%59.11%68.91%77.90%82.40%85.12%82.25%81.15%80.84%
    4096(不重复)23.16%24.02%39.61%41.11%44.14%40.12%42.38%45.41%48.48%48.85%49.07%48.32%48.85%48.15%

    其中,( b8 ) 是指RoPE的频率底数从10000换成了80000。可以看到,“Leaky ReRoPE → RoPE”的InvLeaky ReRoPE虽然效果上不如“RoPE → ReRoPE/Leaky ReRoPE”,但依然胜过了HFWA,并且由于推理阶段是常规的RoPE,可以套用现成的加速技术,因此依然是有相当竞争力的。

    我们对 ( k, w, b ) 等参数做了一些简单的调参,发现最优解基本上就是上述两个组合。具体来说:

    调参与训练速度

    • ( k ) 设置为“扩展倍数的2倍的倒数”
    • ( w ) 设置为训练长度的四分之一
    • ( b ) 可选乘以扩展倍数

    在上述实验中,模型参数量为1亿,训练长度为512,每1000步的训练时间从330秒增加到了350秒,增加不到10%。虽然这里有GAU的原因,因为GAU是单头的注意力,本身比多头注意力快。如果是多头注意力或者训练长度更长,增加幅度可能会更大,但估计不会超过50%,依然在可接受范围内。

    小结

    本文提出了Leaky ReRoPE的“逆用”方法,通过在训练阶段使用更大步长的Leaky ReRoPE,使得推理阶段可以退回常规的RoPE,从而保持推理速度不变。实验结果表明,这种方法依然具有相当的竞争力。未来的工作可以进一步优化参数设置,提升模型性能。


    希望这篇文章能够帮助您更好地理解逆用Leaky ReRoPE的方法及其优势。如果有任何疑问或建议,欢迎在评论区留言讨论。

  • 增大Tokenizer词表:LLM续写任务的新挑战与解决方案

    语言模型(LLM)在自然语言处理中的应用越来越广泛,而通过增大Tokenizer的词表来提高压缩率,从而缩短串行长度、降低解码成本,是大家都喜闻乐见的事情。然而,这种方法在带来诸多优点的同时,也可能产生一些问题。本文将探讨增大词表后语言模型在续写任务中遇到的问题,并提出解决方案。

    优劣分析

    优点

    1. 解码速度提升:由于LLM是自回归的,解码过程会随着序列长度的增加变得越来越慢。通过“增大词表 → 提高压缩率 → 缩短串行长度”,可以减少相同文本对应的tokens数量,从而减少解码步数,提升解码速度。
    2. 缓解Exposure Bias:语言模型的训练方式通常是Teacher Forcing,缩短串行长度能够缓解Teacher Forcing带来的Exposure Bias问题,从而可能提升模型效果。

    缺点

    1. 割裂字符联系:增大词表可能会割裂token与token之间在字符层面的联系,影响模型的泛化能力。例如,“太阳能”和“太阳”都是词表中的一个词时,模型可能不知道“太阳能”是由“太阳”和“能”组成,从而难以完成一些子词相关的任务。
    2. 续写问题:增大词表后,常见的命令或短语可能被视为单个token,导致模型在续写时无法正确生成。例如,“import numpy as np”被当作一个token,用户输入“import numpy”时,模型无法续写出“ as np”。

    续写问题

    Armen Aghajanyan分享了一个典型的例子:在训练代码模型时使用超大词表,导致“import numpy as np”变成了一个token。当用户输入“import numpy”时,模型无法续写出“ as np”。这种现象在自然语言模型中也很常见。例如,“太阳能”和“太阳”都是独立的token时,用户输入“太阳”后,模型续写出的内容可能不符合用户的期望。

    参考对策

    虽然Armen Aghajanyan提到的问题确实存在,但笔者认为通过适当的处理,这个问题不仅可以解决,还能转化为增大词表的优点。以下是一个可行的解决方案:

    基于词表的前缀搜索

    假设用户输入了“广州的白云”,Tokenizer将其分为“广州/的/白云”。此时,如果直接将这三个词转换为id输入模型,模型可能无法续写出“广州/的/白云机场”等结果。因此,我们可以进行以下步骤:

    1. 前缀搜索:对“白云”进行词表的前缀搜索,假设搜索结果为“白云”、“白云机场”、“白云山”、“白云路”四个词。
    2. 计算条件概率:用LLM计算以下条件概率:
      [p(\text{白云}|\text{广州, 的})p(\text{白云机场}|\text{广州, 的})p(\text{白云山}|\text{广州, 的})p(\text{白云路}|\text{广州, 的})]
    3. 归一化与采样:将条件概率归一化后进行采样,决定续写内容。例如,采样结果为“白云机场”,则输出“机场”,并按照“广州/的/白云机场”进行续写。

    这种方法不仅解决了Armen Aghajanyan所提到的问题,还能在词表压缩率高的情况下,一次性生成更多的字。特别地,回退操作只需在采样第一步进行,从第二步开始就不需要回退操作,计算量很少。

    文章小结

    本文介绍了增大词表后LLM在续写任务中可能出现的问题,并分享了参考的解决方案。通过结合基于LLM的续写和基于词表的前缀搜索,可以有效地解决续写问题,并将增大词表的缺点转化为优点。希望这些思路能为语言模型的进一步优化提供参考。

  • Viterbi Sampling算法的改进与完善

    在自然语言处理领域,分词是一个至关重要的步骤。最近,一篇名为《随机分词浅探:从Viterbi Decoding到Viterbi Sampling》的文章中,作者提出了一种名为“Viterbi Sampling”的随机分词算法。本文将详细讨论该算法的改进,并从数学上证明其效果可以与Subword Regularization等价。

    问题分析

    在知乎的评论中,用户 @鹤舞 指出,当前的采样算法可能会在多次二选一的过程中“稀释”了部分方案的出现概率,导致原本分数最高的切分并不是以最高概率出现。

    例如,假设有三种切分方案,每种方案的得分都一样,理应每种方案的出现概率都是1/3。然而,Viterbi Sampling算法将多选一的过程拆分成多步的二选一,从而导致概率分布发生偏移。

    示例分析

    以单词“watching”为例,有三种切分方案:watch ing, wat ching, 和 w atching。按照Viterbi Sampling的操作,先在前两种方案中选择,概率均为1/2;然后再与第三种方案比较,概率依然为1/2。最终,前两种方案的出现概率为1/4,而第三种方案的出现概率变为了1/2。

    解决办法

    为了解决上述问题,可以采用“水塘采样(Reservoir sampling)”的算法。具体来说,每次进行二选一后,同时缓存累积概率,并在后续的二选一过程中使用累积概率进行比较。

    具体实现

    假设前两种切分方案的概率均为1/3,选择其中一种后,总的累积概率为2/3。接下来,新方案被选中的概率为1/3,而不是1/2。这保证了每种方案的出现概率均保持为1/3。

    在实际计算时,为避免指数爆炸问题,可以缓存对数形式的概率,并利用logsumexp函数避免溢出。

    Zlogi = logsumexp(Zlogi-1, αsi)

    相应的实现已经内置在bytepiece>=0.5.0中。

    完美采样的证明

    为了证明改进后的Viterbi Sampling算法是“完美采样”,我们需要回顾Viterbi Decoding的基本原理。Viterbi Decoding通过动态规划找出最优的分词方案,其子串也必须是对应子字节串的最优切分方案。

    数学推导

    通过动态规划,可以计算出每个位置的最优切分方案及其得分。而在Viterbi Sampling中,我们需要对所有切分方案进行采样,其采样概率应与得分成正比。

    Z(c1, c2, ..., cl) = ∑ Z(c1, ..., ck) * e^(α * s(ck+1, ..., cl))

    通过逐步计算累积权重Z,可以实现对所有切分方案的完美采样。

    递归式转换

    在实际计算中,使用对数形式的累积权重Zlog,并通过logsumexp函数进行累积计算。

    Zlog(c1, c2, ..., cl) = logsumexp(Zlog(c1, ..., ck) + α * s(ck+1, ..., cl))

    这样可以避免直接计算指数导致的溢出问题。

    文章小结

    本文通过详细分析和数学推导,完善了之前提出的Viterbi Sampling算法。改进后的算法不仅解决了概率“稀释”问题,而且在效果上与Subword Regularization等价,同时在使用效率上更具优势。

    通过这些改进,Viterbi Sampling算法在实际应用中将具备更高的可靠性和效率,为自然语言处理领域的分词任务提供了更优的解决方案。

  • 探索线性Attention的局限性:从“集中注意力”角度出发

    近年来,Transformer架构在自然语言处理领域取得了显著的成果,而Attention机制则是其核心所在。然而,随着研究的深入,传统的标准Attention机制暴露出了一些计算复杂度和资源需求上的问题,这促使研究者们开始探索更高效的线性Attention。然而,线性Attention在实际效果上却一直不如标准Attention。本文将从“集中注意力”的角度,探讨线性Attention的局限性,并尝试给出一个合理的解释。

    Attention机制的稀疏性

    什么是稀疏性?

    在《从熵不变性看Attention的Scale操作》一文中,我们用信息熵来度量Attention的“集中注意力”程度。熵越低,Attention越有可能集中在某个token上。然而,信息熵只能用于归一化且非负的Attention矩阵,这限制了其适用范围。因此,我们引入了另一种稀疏性度量指标:S(x) = E[|x|] / sqrt(E[x^2])。这个指标与信息熵类似,S(x)越小,表示对应的随机矢量越稀疏,即越有可能“一家独大”。

    标准Attention的稀疏性

    对于标准Attention机制,f = exp,我们可以推导出其稀疏性:

    S(a) = exp(-1/2 * σ^2 * ||q||^2)

    σ||q||趋向无穷大时,S(a)趋向于0,这意味着标准Attention可以任意稀疏地“集中注意力”。

    GAU的稀疏性

    对于Gated Attention Unit (GAU)机制,f = relu2,其稀疏性较为复杂,但通过计算可以发现,只有当偏置项β小于0时,稀疏性才有机会趋于0。这表明,GAU在某些条件下也能实现较高的稀疏性。

    线性Attention的局限性

    极简线性Attention

    对于最简单的线性Attention,即不加任何激活函数f = identical,其稀疏性为:

    S(a) = sqrt(2/π * γ * exp(-β^2/(2γ^2)) + β * erf(β/(2√γ)) / (β^2 + γ^2))

    从图像可以看出,极简线性Attention的稀疏性存在一个较高的下限,这意味着它难以“集中注意力”到关键位置上。

    一般线性Attention

    线性Attention的一般形式为a_j ∝ g(q) ⋅ h(k_j),其稀疏性为:

    S(a) = 1 / sqrt(1 + (σ~ * μ~ * ||q~||_2 / ||q~||_1)^2)

    这表明,要想线性Attention变得稀疏,可以通过降低k~串行的信噪比或增大q的模长。然而,非负型线性Attention通常只能表示绝对位置的重要性,难以表达相对位置的重要性。

    线性衰减Attention

    对于带有显式递归的线性RNN模型,其稀疏性为:

    S(a) = 1 - λ^n / n(1 - λ) * sqrt(1 + λ / (1 + λ^n))

    λ < 1时,随着n趋向无穷大,S(a)趋向0。这意味着这种模型可以实现较高的稀疏性,但其注意力仅能表达固定不变的注意力衰减,难以自适应地关注到长距离的上下文。

    结论

    本文通过Attention矩阵的稀疏程度,考察了不同Attention机制的潜力,得出以下结论:

    1. 标准Attention可以实现任意稀疏的注意力矩阵。
    2. 线性Attention难以实现高稀疏性,尤其是在表示相对位置的重要性时。
    3. 带有显式衰减的线性Attention可以实现稀疏性,但其注意力固定,难以自适应。

    这些发现或许能够解释线性Attention在实际效果上略逊一筹的原因。线性Attention在“集中注意力”方面存在固有的局限性,这使得它在处理复杂上下文时表现不如标准Attention。未来的研究或许需要在如何提高线性Attention的稀疏性和灵活性上继续努力,以期实现更高效且性能优越的Transformer模型。

    参考文献

    1. 《Transformer升级之路:3、从Performer到线性Attention》
    2. 《为什么现在的LLM都是Decoder-only的架构?》
    3. 《从熵不变性看Attention的Scale操作》
    4. 《FLASH:可能是近来最有意思的高效Transformer设计》
    5. 《相对位置编码Transformer的一个理论缺陷与对策》
    6. 《如何度量数据的稀疏程度?》
    7. 《线性Attention的探索:Attention必须有个Softmax吗?》
    8. 《Google新作试图“复活”RNN:RNN能否再次辉煌?》

    通过上述分析,我们不仅理解了不同Attention机制的稀疏性差异,还揭示了线性Attention在实际应用中的局限性。希望本文的讨论能够为未来的研究提供一些新的思路和方向。