admin

  • 标题:阿里云发布RDS AI助手,集成DuckDB;向量数据库VexDB发布;火山veDB/MongoDB新增向量检索;AlloyDB AI支持NL2SQL

    重要更新

    新的向量数据库 VexDB 正式发布,该数据库由清华研发团队,能够支持百亿千维向量数据毫秒级查询,召回准确度高,并在国际权威的 DABSTEP 非结构化数据分析测试中,VexDB 的数据代理系统以领先第二名超 10 个百分点的成绩夺冠[1]

    阿里云 RDS MySQL 深入集成 DuckDB ,一方面可以支持独立的DuckDB分析主实例,另一方面也可以通过数据库代理实现HTAP自动行列分流的方式使用DuckDB分析只读实例[134][135]。(注:RDS PostgreSQL亦支持 DuckDB)

    阿里云RDS产品推出全新智能运维助手“RDS AI助手”,其基于大语言模型与专家知识库,集成智能问答、性能诊断、个性化Agent与安全控制四大能力。只需简单提问即可自动获取异常诊断分析、性能优化建议与全局资源洞察,实现高效排查与规模化管理,显著提升RDS运维效率[137]

    云数据库 PostgreSQL 提供了 tencentdb_ai 插件,方便您在云数据库 PostgreSQL 实例中轻松调用网络可通的大模型 API,完成各种场景的应用开发。[225]

    更新详情

    阿里云
    • RDS MySQL HTAP自动行列分流,该功能可以通过数据库代理实现HTAP自动行列分流,将OLAP查询请求路由至DuckDB分析只读实例[134]
    • RDS MySQL蓝绿部署功能支持MySQL 5.6升级至MySQL 5.7及8.0。[135]
    • RDS新增DuckDB分析主实例,通过在MySQL内核中深度集成DuckDB引擎,将分析查询的性能提升至MySQL InnoDB引擎的百倍以上[136]
    • 阿里云RDS产品推出全新智能运维助手“RDS AI助手”,其基于大语言模型与专家知识库,集成智能问答、性能诊断、个性化Agent与安全控制四大能力。您只需简单提问即可自动获取异常诊断分析、性能优化建议与全局资源洞察,实现高效排查与规模化管理,显著提升RDS运维效率。[137]
    • RDS MySQL高性能本地盘部分独享型实例提升了默认最大连接数和最大IOPS。[138]
    • RDS MySQL支持数据库代理跨可用区部署,并新增就近访问功能。可通过新功能实现应用程序、代理节点、只读节点均在同一可用区,最大程度降低延迟。[139]
    • RDS MySQL标准版(原X86)集群系列增加64核 128GB(mysql.x2.8xlarge.xc)和64核 256GB(mysql.x4.8xlarge.xc)规格。[140]
    • RDS MySQL集群系列实例支持库表恢复功能,可用于误操作后的快速订正,以及分析历史数据等场景。[142]
    • RDS MySQL全面升级了全球多活数据库(简称GAD)产品,GAD基于RDS与DTS产品打造,融合了灾备与多活两大能力,作为一站式、高性价比的灾备与多活解决方案,为用户提供全面的灾备和多活数据库服务。[143]
    • RDS MySQL新增支持通过控制台设置列加密规则及相关用户角色权限,而不仅限于通过SQL进行设置。[144]
    • 创建或配置RDS MySQL Serverless实例时,RCU的选择范围从原来的[0.5,16]变更为[0.5,32],最大可支持32RCU。[149]
    • RAG Agent 检索增强生成解决方案发布,通过与Supabase生态的深度集成,该解决方案能够自动化处理来自云存储的文档,并支持多模态解析、知识图谱构建等高级功能[153]
    • RDS PostgreSQL推出DuckDB分析实例,该实例专门用于处理分析类工作负载[154]
    • RDS SQL Server 异地容灾功能新增支持更多能力:支持更多海内外地域。[175]
    • RDS SQL Server支持将Serverless实例转换为按量付费实例[176]
    • PolarDB支持共享备份集。该功能基于阿里云资源共享服务,允许您安全地将指定备份集授权给其他阿里云账号使用,以用于集群恢复。[190]
    腾讯云
    • TDSQL-C MySQL 、云数据库 MySQL 分析引擎(LibraDB)发布了全新的内核版本3.2503.7.0和2.2410.13.0,支持了诸多全新的内核特性,并对系统问题进行了修复和优化。[192][205]
    • 数据库代理支持配置只读分析引擎故障转发至只读或读写实例。同时支持 SQL 通过读权重转发至只读分析引擎。[197]
    • 支持在控制台中查看只读分析引擎实例的慢 SQL 明细与 SQL 分析报告。[198]
    • TDSQL-C MySQL 版实例形态为 Serverless 的集群支持二级存储功能,开启二级存储可帮助用户实现存储资源的动态分配和高效利用,节省存储成本开销。[209]
    • 云数据库 PostgreSQL 正式支持 PostgreSQL 18.0[221]
    • 云数据库 PostgreSQL 支持更多常用插件如 age 、orafce [222]
    • 云数据库 PostgreSQL 提供了 tencentdb_ai 插件,方便您在云数据库 PostgreSQL 实例中轻松调用网络可通的大模型 API,完成各种场景的应用开发。[225]
    • 云数据库 SQL Server 支持通过数据库传输服务 DTS 进行 SQL Server 到 SQL Server 链路的数据同步[226]
    AWS(亚马逊云)
    • Aurora PostgreSQL Zero-ETL 与 Amazon SageMaker 集成支持更多区域[10]
    • Aurora PostgreSQL Limitless 数据库已在其他 AWS 区域推出[11]
    • RDS for Db2 支持备份单个 Db2 数据库[15]
    • RDS 支持 Amazon RDS for Db2 的预留数据库实例[16]
    • Amazon RDS 在数据库预览环境中支持 MySQL 9.4[18]
    • RDS for Oracle 和 RDS Custom for Oracle 支持裸机实例类[22]
    • Amazon RDS 支持 MariaDB 11.8[23]
    • Amazon DocumentDB(兼容 MongoDB)现在支持基于 Graviton4 的 R8g 数据库实例[45]
    • Amazon Timestream 现已支持 InfluxDB 3 [51]
    Azure(微软云)
    • PgBouncer 1.23.1 正式支持 Azure Database for PostgreSQL – Flexible Server [52]
    • 高可用性 Azure Database for PostgreSQL 支持“近乎零停机时间扩展” [56]
    • Azure Redis Enterprise 将于 2027 年 3 月 30 日停用[59]
    • Azure Redis 缓存将于 2028 年 9 月 30 日停用[60]
    • Azure Database for PostgreSQL 支持机密计算[63]
    • Azure MySQL 发布“自愈”Self Heal功能 [67]
    • Azure Database for MySQL 8.4 正式发布 [69]
    • Azure Database for MySQL 近乎零停机维护(Near-zero-downtime)[71]
    GCP(谷歌云)
    • 现在您可以在BigQuery Studio中通过自然语言编写SQL[76]
    • AlloyDB 支持tds_fdw扩展,该扩展提供了一个外部数据包装器
    • Cloud SQL for PostgreSQL 现在支持 PostgreSQL 版本 18(预览版)。[104]
    • Spanner CLI 现已正式发布。它与 gcloud 捆绑在一起,您可以使用 Spanner 命令行界面打开交互式会话,或从 shell 或输入文件自动执行 SQL 语句 [107]
    • 现在您可以使用 Gemini 的功能来修复 Cloud SQL Studio 中的查询错误[113]
    • Cloud SQL 托管连接池现已正式发布 [121]
    • 您可以使用专为 Cloud SQL for MySQL, PostgreSQL, SQL Server, AlloyDB 设计的 Gemini CLI 扩展程序来配置、管理和查询数据库。该扩展程序提供对数据库的完整生命周期控制,包括配置实例、探索模式和排查问题,所有操作均可通过命令行界面完成。 [132]
    • AlloyDB AI 支持自然语言转SQL功能[133]
    火山云
    • 云数据库 MySQL 版提供的在线扩展 varchar 字段长度功能,支持在扩展期间执行 Online DDL[228]
    • 云数据库 MySQL 版提供的 IN 谓词性能优化特性在优化阶段可以对包含 IN 谓词的查询进行改写,消除 IN 谓词,改为和一张临时表进行 JOIN,进而提升查询性能[229]
    • 支持创建云盘版的单节点实例类型,满足更多业务场景需要[230]
    • 支持为实例的代理读写终端配置 SQL 转发规则,将匹配到的 SQL 语句转发到规则所指定的节点[231]
    • 支持 veDB-Search 混合检索:基于云数据库 veDB MySQL 版和云搜索服务(Cloud Search),用户可以基于 AI 向量检索等能力,构建智能推荐、RAG 知识库、Agent 记忆库等 AI 基础设施[232]
    • 云数据库 PostgreSQL 支持为实例开启 SSL 加密,并支持更新 SSL 证书[233]
    • 文档数据 MongoDB 版提供了向量检索(Vector Search)能力,Vector Search 支持依据语义而非仅依靠关键字匹配来查询数据,有助于获取相关性更强的搜索结果。
    百度云
    • RDS MySQL 支持数据库大版本升级[234]
    • MySQL 5.7版本支持线程池
    • 支持手动切换主备实例,手动切换可用于容灾演练或多可用区场景下的就近连接等需求。[236]
    • 创建GaiaDB集群时,代理规格支持随集群规格自适应;GaiaDB代理支持配置读权重
    • Redis 集群版支持升级代理节点版本,高版本的代理节点通常具备更好的性能、更高的稳定性。[238]
    • Redis 跨可用区部署,开启就近访问之后,主可用区的读请求仅会路由至主可用区的主节点或只读节点,备可用区的读请求也仅会路由至备可用区的只读节点,降低读延迟。
    华为云
    • TaurusDB Serverless服务优化升级:实例起步规格调整为0.5TCU,同时开放弹性策略自定义[239]

    参考链接

  • This content is password protected. To view it please enter your password below:

  • LLM 强大的语言、知识与推理能力在改变很多领域,也将持续、深入的改变更多领域。在软件领域,“Agent” 的编程模型已经是一种新的编程模式,通过这种“模式”可以将 LLM 的能力,软件提供商的领域知识,以及外部工具的能力很好的结合起来,形成“新的”软件产品。

    (more…)

  • 在 \( \text{Attention} \) 机制(或 \( \text{Multi-Head Attention} \) )中我们会看到这样的变换:\( \text{Attention} = softmax(\frac{Q_iK_i^{T}}{\sqrt{d}}) \),其中这里 \( Q_i = XW_i^Q \) 那么如何理解这里的 \( XW_i^Q \) 呢? 该变换是向量空间内一个典型的线性变换,而这里的 \( W_i^Q \) 就是对应的线性变换矩阵,在早期 GPT 模型中该矩阵是一个\( 768 \times 64\) 的矩阵,研究该矩阵的典型方法就可以使用 \( \text{SVD} \) 分解,本文展示了简单的二维空间中 \( \text{SVD} \) 分解以及对应的几何意义,从而可以较好的帮助理解上述计算的深层次含义。

    关于奇异值分解(\( \text{SVD} \))能够解决的问题这里不再详述。本文通过展示对于平面空间中的线性变换进行奇异值分解,从而观察该分解如何通过“几何”的方式描述一个线性变换,从而建立对线性变换的直观理解。本文的示例是一个\( 2 \times 2\)的矩阵,所以还补充了对该矩阵的特征值/特征向量的计算,从而对比这两种方法在处理“方阵”时的异同。

    1. 概述

    本文通过对二维空间中的一个线性变换(满秩方阵) \( A = \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix} \) 进行 \( \text{SVD} \) 分析、特征值/特征向量分析,从而建立在平面空间中对于线性变换的直觉理解,更进一步的理解\( \text{SVD} \)和特征值/特征向量分别是如何描述一个线性变换的。具体的,这里观察了在该线性变换的作用下,一个点 \( (1,0) \) 是如何在两种矩阵变换下,映射到目标点的。

    2. 奇异值分解

    2.1 矩阵A的两种 SVD 分解

    奇异值分解并不是唯一的。从几何的角度理解,一个二维空间的线性变换,是由旋转、反射、缩放组成,而先旋转、或先反射都是可以的,而这对应的就是不同的奇异值分解。考虑上述的矩阵 \( A = \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix} \) 进行 \( \text{SVD} \),我们有如下两种分解(关于具体的分解方法,本文并不详述)。

    第一种分解:

    $$ A = \begin{bmatrix}
    1 & 2 \\
    2 & 1
    \end{bmatrix} = UΣV^T =\begin{bmatrix}
    \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
    \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}
    \end{bmatrix}\begin{bmatrix}
    3 & 0 \\
    0 & 1
    \end{bmatrix}\begin{bmatrix}
    \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\
    \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}
    \end{bmatrix}
    $$

    第二种分解如下:

    $$ A = \begin{bmatrix}
    1 & 2 \\
    2 & 1
    \end{bmatrix} = UΣV^T =\begin{bmatrix}
    -\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
    -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}
    \end{bmatrix}\begin{bmatrix}
    3 & 0 \\
    0 & 1
    \end{bmatrix}\begin{bmatrix}
    -\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
    \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}
    \end{bmatrix} $$

    2.2 分解1的几何意义与图示

    $$ A = \begin{bmatrix}
    1 & 2 \\
    2 & 1
    \end{bmatrix} = U\Sigma V^T = \begin{bmatrix}
    \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
    \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}
    \end{bmatrix}\begin{bmatrix}
    3 & 0 \\
    0 & 1
    \end{bmatrix}\begin{bmatrix}
    \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\
    \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}
    \end{bmatrix}
    $$

    考虑:

    \( V^T = \begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}\end{bmatrix} \) 形式与 \( \begin{bmatrix} \cos \varphi & \sin\varphi \\ \sin\varphi & -\cos \varphi \end{bmatrix} \) 相同,故,此为关于直线 \( y = (\tan\frac{\varphi}{2})x \) 的反射[附录1]

    \( \Sigma = \begin{bmatrix} 3 & 0 \\ 0 & 1 \end{bmatrix} \) 表示将点、向量的坐标进行缩放。

    \( U = \begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix} \) 形式与 \( \begin{bmatrix} \cos \varphi & -\sin\varphi \\ \sin\varphi & \cos \varphi \end{bmatrix} \) 相同,故,此为一个逆时针 \( \varphi \) 度的旋转[附录1]

    即,上述的线性变换可以做这样的理解:

    • 先将点以\( y=\tan\frac{45}{2}x = (\sqrt{2}-1)x \)为轴进行反射
    • 然后将坐标第一个分量放大3倍
    • 最后再逆时针旋转\( 45^{\circ} \)

    考虑坐标上的点\( \alpha = \begin{pmatrix} 1 \\ 0 \end{pmatrix} \),我们看看如何经过该线性变换,映射到目标点:

    右图反映了完整的过程:

    • \( (1,0) \) 先经过按图中虚线为轴进行反射,到红点
    • 然后,进行拉伸,第一个分量拉伸3倍,到绿色点
    • 最后,再逆时针旋转\( 45^{\circ} \) 到黄色点

    对应的矩阵计算如下:

    \( \text{red} = V^T \alpha = \begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}\end{bmatrix} \begin{pmatrix} 1 \\ 0 \end{pmatrix} = \begin{pmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{pmatrix} \)

    \( \text{green} = \Sigma V^T \alpha = \Sigma \, \text{red} = \begin{bmatrix} 3 & 0 \\ 0 & 1 \end{bmatrix} \begin{pmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} \frac{3}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{pmatrix} \)

    \( \text{yellow} = U\Sigma V^T \alpha = U \, \text{green} = \begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix} \begin{pmatrix} \frac{3}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} 1 \\ 2 \end{pmatrix} \)

    2.3 分解2的几何意义与图示

    $$ A = \begin{bmatrix}
    1 & 2 \\
    2 & 1
    \end{bmatrix} = UΣV^T =\begin{bmatrix}
    -\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
    -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}
    \end{bmatrix}\begin{bmatrix}
    3 & 0 \\
    0 & 1
    \end{bmatrix}\begin{bmatrix}
    -\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
    \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}
    \end{bmatrix} $$

    考虑:

    \( V^T = \begin{bmatrix}-\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{bmatrix} \) 形式与 \( \begin{bmatrix} \cos \varphi & -\sin\varphi \\ \sin\varphi & \cos \varphi \end{bmatrix} \)相同,故,此为一个逆时针 \( \varphi = 135^{\circ} \) 度的旋转[附录1]

    \( \Sigma = \begin{bmatrix} 3 & 0 \\ 0 & 1 \end{bmatrix} \) 表示将点、向量的坐标进行缩放。

    \( U = \begin{bmatrix} -\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix} \) 形式与 \( \begin{bmatrix} \cos \varphi & \sin\varphi \\ \sin\varphi & -\cos \varphi \end{bmatrix} \) 相同,故,此为关于直线 \( y = (\tan\frac{\varphi}{2})x \) 的反射[附录1]

    即,上述的线性变换可以做这样的理解:

    • 点\( (1,0) \) 先逆时针旋转\( \varphi = 135^{\circ} \)到达红色点
    • 然后将坐标第一个分量放大3倍,成为绿色点
    • 最后将点以\( y=\tan\frac{-135^{\circ}}{2}x \)为轴进行反射,到黄色点

    具体可以参考右图,详细的计算这里不再给出。

    3. 特征值与特征向量

    因为这里的\( A \)是一个 \( 2 \times 2 \) 的方阵,故可以使用特征值与特征向量来洞察这个线性变换的本质。

    对于该矩阵的特征值、对应的特征向量计算结果如下:

    • 对于特征值 \( \lambda_1 = 3 \) 时,特征向量为 \( (\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}) \)
    • 对于特征值 \( \lambda_2 = -1 \) 时,特征向量为 \( (\frac{1}{\sqrt{2}}, -\frac{1}{\sqrt{2}}) \)

    依旧,这里我们来考虑向量 \( \alpha = \begin{pmatrix} 1 \\ 0 \end{pmatrix} \) 在这两个特征向量方向上作用后的效果。

    右图已经比较直观的反应了如何从特征向量和特征值的角度去理解线性变换:

    • 首先,先将向量 \( \alpha \) 在两个特征向量上进行分解,分解后的向量分别为 \( \alpha_1 \, \alpha_2 \)
    • 然后再按照特征值进行缩放:
      • \( \lambda_1 = 3 \) 故将 \( \alpha_1\)拉伸为 \( \beta_1 \)
      • \( \lambda_2 = -1 \) 故将 \( \alpha_2\)反向为 \( \beta_2 \)
    • 最后,\( \beta_1 \) 和 \( \beta_2 \) 合并为 \( \beta \)

    4. 小结

    在这种情况下(注:线性变换矩阵为一个 \( 2 \times 2 \)的满秩矩阵), 我们可以使用奇异值分解\( \text{SVD} \)、特征值计算的方式来洞察这个线性变换的“本质”。两种方法各有一些优缺点,大家可以自己去体会,这里小结一下我的理解。

    奇异值分解\( \text{SVD} \)是一种“动态”的展示线性变换的方法,可以让你很清晰的了解这个线性变换是如何将空间中的“一个点”映射到“另一个点”的。例如在上述的例子中,则是先进行旋转、然后进行缩放、最后进行反射。

    特征值/特征向量计算则是对线性变换的“静态”解释,使用静态的方式展现了线性变换如何将“一个点”映射到“另一个点”的。

    5. 补充说明

    • 实际应用中的奇异值分解通常是用于处理更高维的向量空间,所以通常没有这么直观的几何意义,但是依旧可以使用类比的“反射”、“旋转”、“拉伸/压缩”等概念去扩展的理解。
    • 特征值/特征向量仅适用于处理方阵的场景,所以场景比较受限。
    • 关于特特征值/特征向量计算,在实际中可能会更加复杂,例如,重根、复数根等情况,要想进一步理解,则需要做更深入的研究。
    • 要进一步加深理解,则可以考虑,观察一个三维空间中变换的实例,有一些相同,也有一些不同:
      • 反射,通常是基于某个平面(两个基张成的平面)的
      • 选择,则是绕着某个直线(某个向量的方向上)

    附录1 二维空间的正交变换

    二维空间中,有两种正交变换,即旋转或反射。其对应的线性变换矩阵分别有如下的形式:\( \begin{bmatrix} \cos \varphi & \sin\varphi \\ \sin\varphi & -\cos \varphi \end{bmatrix} \) 与 \( \begin{bmatrix} \cos \varphi & -\sin\varphi \\ \sin\varphi & \cos \varphi \end{bmatrix} \) 。

    附录2 三维空间的正交变换

    在三维空间内,对于一组规范正交基 \( \{ \alpha_1,\alpha_2,\alpha_3 \} \) ,该空间下的正交变换矩阵总有如下形式:

    $$
    \begin{bmatrix}
    \pm 1 & 0 & 0 \\
    0 & a & b \\
    0 & c & c
    \end{bmatrix}
    $$

    更为具体的为如下三种形态之一:

    $$
    A = \begin{bmatrix}
    1 & 0 & 0 \\
    0 & \cos\varphi & -\sin\varphi \\
    0 & \sin\varphi & \cos\varphi
    \end{bmatrix}
    \quad
    B = \begin{bmatrix}
    -1 & 0 & 0 \\
    0 & 1 & 0 \\
    0 & 0 & 1
    \end{bmatrix}
    \\
    \begin{aligned}
    C & = \begin{bmatrix}
    -1 & 0 & 0 \\
    0 & \cos\varphi & -\sin\varphi \\
    0 & \sin\varphi & \cos\varphi
    \end{bmatrix} \\
    & =
    \begin{bmatrix}
    1 & 0 & 0 \\
    0 & \cos\varphi & -\sin\varphi \\
    0 & \sin\varphi & \cos\varphi
    \end{bmatrix}
    \begin{bmatrix}
    -1 & 0 & 0 \\
    0 & 1 & 0 \\
    0 & 0 & 1
    \end{bmatrix}
    \end{aligned}
    $$

    这里的:

    • 变换 \( A \) 为一个旋转,旋转轴为 \( \alpha_1 \) 所在的直线
    • 变换 \( B \) 是一个反射,反射轴平面为 \( \mathscr{L}(\alpha_2,\alpha_3) \)
    • 变换 \( C \) 是上述两个变换的组合
  • 大概是在朋友圈看到的这个会议 GOSIM(Global Open-Source Innovation Meetup),注意到有来自HuggingFace、vLLM、SGLang、BAAI 、字节等开发者来分享,果断报名去学习。大会是周六、日两天大概有接近10个分会场同时并发分享,于是只能选择一些自己感兴趣的部分主题听听,本文是部分见闻记录与分享。

    推理优化与推理框架

    这次关于大模型“推理优化”相关的话题特别多,包括 vLLM、Llama.cpp、SGLang、🤗 Optimum、Chitu、kTransformers、llm-d 等。大模型要能够向企业或组织提供服务,除了通过 API (SaaS)的方式之外,最为常见的则可能是需要搭建一套具备高并发服务能力的平台,而这些平台则需要满足高并发、底层本、易运维等要求,这就是上述这些框架、工具所解决的问题。相关的研究和发展方向则集中在KVCache优化、网络优化、PD分离、容器化管理、量化效率提升、多硬件适配、国产化适配(Chitu)、expert deferral等。

    如果用数据库类比的话,这大概相当于各种 DBPaaS 平台如何通过调度、CPU硬件、网络设备去提升整理的数据库资源利用率。但是,LLM/VLM等所面临的问题,则更多的关注在 GPU (或与CPU协同等)层面。

    赤兔”定位是开源的「生产级大模型推理引擎」,面向于国产硬件环境做了很多适配,是一家“清华”背景的计算机专家推出的产品,背后的公司是:清程极智

    SGLang 是一个被比较广泛使用的大模型 大语言模型(LLMs)及多模态语言模型(VLMs)推理平台。该项目是LMSYS的一部分,目前似乎是以非盈利组织的模式在运作。该组织,最初是源自美国多所大学协作的项目(参考)。LMSYS 开发的其他著名项目包括:Chatbot Arena 、SGLang、FastChat、Vicuna LLM等。

    🤗 Optimum 是对 Transformer 库的扩展,目标是能够让模型能够更加高效在多种不同的硬件平台上高效的运行,包括训练和推理等。目前适配的硬件包括了NVIDIA、AMD、Intel、AWS Trainiu/Inferentia、Google TPUs、Habana、FuriosaAI,此外也可以非常方便与多个开源模型优化矿建进行集成,例如ONNX、ExecuTorch、Exporters、Torch FX。

    Second Me

    现在的大模型学习能力确实非常强,也许真的可以虚拟出一个“人”完整的“影子”。这个项目非常有意思,也获得了非常多个关注,项目的强调 “AI that amplifies, not erases, YOU.” 。项目的构想在于使用本地模型和存储,基于个人的数据、事件等构建一个数字的自己。也许现在的 AI 技术让这个设想有了某种可能性,这个项目则是对这种可能性的探索。感兴趣的可以关注:Second-ME

    Agents

    因为时间所限仅选择了部分 Agents 场次去听,包括“扣子空间”、“Google Agents”等。

    来自Google的开发者则非常系统的介绍了面向Agent,Google为整个生态提供了哪些能力,其实是几乎覆盖了整个Agent生命周期的,包括了 Agent 构建SDK、Agent之间通信、Agent托管等一系列完整的服务。Google 对于 AI 各个方向都是非常大的,并且整体都很成功,这大概也能够顺利的帮助 Google 从搜索时代过渡到 AI 对话时代。

    字节跳动的大模型(Seed)似乎还在“蓄力”阶段,但是上层的应用迭代和发展比较快。面相普通用户有“豆包”,面相开发者则有“扣子”,基于“扣子”,最近则退出了类似的“deep research”产品“扣子空间”。这次大会上,来自字节的工程师则分享了Agent、多Agent构建过程中的一些经验。此外也分享了一些有意思的“事实”:目前Agent领域发展非常快,在2024年初Agent基本上仅限于对话、陪伴机器人等少数方向;2024年底,智能客服则逐渐走向较为成熟的阶段;而现在则百花齐放,各个领域都在做大量探索,最为典型的就是“Manus”模式。

    OpenSeek

    OpenSeek 是一个比较新的、由 BAAI 发起的一个开源大模型项目,该项目致力于构建一个更加完整开源大模型项目,而不是仅仅开源模型架构和参数,而是提供更加完整模型构建过程的代码,从而向开发者提供更加“开放”的模型。此外,这次分享中,也介绍了一些 OpenSeek 的一些基础实现,例如mid/post training,此外特别提到了 OpenSeek 的 DMA 机制(Dynamic Mask Attention 通过动态计算部分Token的Attention,降低计算复杂度)去实现更高性价比的模型训练与推理。感兴趣的可以访问 GitHub 地址:OpenSeek@GitHub

    MemTensor

    随着 AI 技术的继续发展,预训练和后训练对于模型能力的增强的加速度是在下降的。那么,为了提升自然语言与模型的交互的效果,演讲者认为“记忆体”可能会成为增强大模型体验的关键组件。MemTensor团队则尝试通过将模型与“记忆”更加紧密的链接起来,从而增强模型的使用体验。

    关注的议题:

    最后

    GOSIM 大会大概有超过十个分论坛在并行分享,还有很多关于具身智能、Rust等相关的技术。

  • 这大概是一个有趣、也略深刻的发现。

    Word Embedding是比较抽象的,但是这些抽象背后是一些“具象”的含义的,本文通过一些简单的计算(变换)来将Embedding的某些维度/属性具象化。具体的,本文展示了在Embedding空间中,找到一个代表“动物”属性的方向。感兴趣的话,可以通过这个简单的方法,找到你感兴趣的属性方向。

    TL;DR

    通常,在某个具体的Word Embedding实现中,先给出一组具有“共同属性”的词语,然后计算这组词语Embedding向量的平均方向,就可以代表这个“共同属性”。

    例如,找到一组“动物”,然后对这些词语的Embedding向量计算平均方向,那么这个方向就是“动物”这个属性的方向。

    概述

    如果你也尝试过去理解 Embedding 各个维度的含义的话,大概都听过这样一种说法:Embedding每个维度可以理解为这个词语的某种属性,例如,“性别属性”、“皇室相关度”等,这是最为经典的man - woman = king - queue的例子中的一些解释。

    当你真的拿到一个词语的 Embedding 的时候,它可能有768维,但是,似乎没有一个维度有上述的清晰的属性含义。而实际上,这些属性含义是确实存在的,只是这些属性方向并不存在于“标准基”的方向上。

    那如果存在,我们应该如何找到这个方向呢?本文展示并验证了一个非常简单的方法,让你快速找到某种属性的方向,并且进行一些验证。从而可以大大加深对于 Embedding 的理解。

    寻找某个关心的方向

    这里展示了以寻找“动物”属性方向为例,展示如何寻找并验证该方向。

    列出最具代表性的词语

    我们这样考虑这个问题,如果有一个方向表示一个词语的“动物”属性,那么这个方向会是哪个方向?这里以all-MiniLM-L6-v2模型提供的Sentence Embedding为例,我看看如何找到该Embedding所处的向量空间中最可能代表“动物”属性的方向是哪个?具体的方法描述如下:

    • 首先,找到被认为最典型的与“动物”属性相关的词语\( n \)个,这里取\( n=50 \)
    • 然后计算上述\( n \)个词语的平均方向 avg_vector,该方向则认为要寻找的方向

    这里,给出的50个动物如下:

    animals = [
        "tiger", "lion", "elephant", "giraffe", "zebra",
        "rhinoceros", "hippopotamus","crocodile", "monkey",
        "panda", "koala", "kangaroo","whale", "dolphin",
        "seal", "penguin", "shark", "snake", "lizard",
        "turtle", "frog", "butterfly", "bee", "ant", "eagle",
        "sparrow", "pigeon", "parrot", "owl", "duck", "chicken",
        "dog", "cat", "pig", "cow", "sheep", "horse", "donkey",
        "rabbit", "squirrel", "fox", "wolf", "bear", "deer",
        "hedgehog", "bat", "mouse", "chameleon", "snail", "jellyfish"
    ]

    计算Embedding的平均方向

    该平均方向,即为我们要寻找的“动物”属性方向。

    animals_embeddings = model.encode(animals)
    avg_animals_embeddings = np.mean(animals_embeddings, axis=0)

    验证该方向

    再选取两组词,一组认为是与“动物”非常相关的词,另一组则是与动物无关的词语。然后分别计算这两组词语在上述方向avg_vector的投影值。观察投影值,是否符合预期。

    这里选择的两组词语分别是:

    • 与动物非常相关的:”Camel”, “Gorilla”, “Cheetah”
    • 与动物无关的:”Dream”, “Chair”, “Mathematics”

    计算投影并可视化

    具体的程序如下:

    animals_words    = ["Camel", "Gorilla", "Cheetah"]
    un_animals_words = ["Dream", "Chair", "Mathematics"]
    
    for word_list in (animals_words,un_animals_words):
        projection_scores = np.dot(model.encode(word_list),
                                  avg_animals_embeddings)
        results.update({word: score for word,
                        score in zip(word_list, projection_scores)})
    
    for word, score in results.items():
        print(f"'{word}': {score:.4f}")
    print(np.round(avg_animals_embeddings[:10], 4))

    投影结果为:

    'Camel': 0.3887
    'Gorilla': 0.4186
    'Cheetah': 0.3797
    'Dream': 0.2450
    'Chair': 0.2823
    'Mathematics': 0.1972

    在实数轴上绘制上述两组词语的投影:

    非常明显的可以看到,上述的avg_vector方向某种程度上代表了一个词语的“动物”属性:即与动物属性相关的词语在该方向的投影大,无关的词语在该方向的投影小。

    原理解释

    概述

    事实上,一组词语Embedding的“平均向量”(centroids of word embeddings),则某种程度的代表这组词语的“语义中心”。如果这组词有某些共性,那么这个平均向量,则可能就是这个共性的代表。

    在上述的例子中,刻意地给出的一组词语都是“动物”名称。那么,这个“平均向量”则比较有可能代表了这个向量空间中的“动物”属性。

    数学推导

    这样考虑这个问题:现在给出的 \( n \) 个向量 \( \alpha_1, \dots , \alpha_n \),找出一个单位向量 \( \xi \) 使得 \( n \) 个向量在 \( \xi \) 向量方向上的投影值的和最大。

    这里取 \( \bar{\alpha} = \frac{\sum\limits_{i=1}^{n}\alpha_i}{n} \)

    目标函数 \( S = \sum\limits_{i=1}^{n}(\alpha_i \cdot \xi ) = \sum\limits_{i=1}^{n}(\alpha_i) \cdot \xi = n \bar{\alpha} \cdot \xi = n \| \bar{\alpha}\| \| \xi \| \cos\theta \)

    这里 \( n \)、\( \bar{\alpha} \)都是给定值,而 \( \| \xi \| = 1 \),所以这里 \( \cos\theta \) 取最大值时,上述的目标函数 \( S \) 取最大值。

    即:\( \theta = 0 \) 时, \( S \) 取最大值。即当 \( \xi \) 与 \( \bar{\alpha} \) 方向相同时,即 \( \xi = \frac{\bar{\alpha}}{\|\bar{\alpha}\|} \) ,所有向量的投影值的和最大。

    投影计算

    太久不碰线性代数了,对于基本运算都不是很熟悉了。向量 \( \alpha \) 在 \( \beta \) 方向上的投影长度,计算公式如下:

    $$ proj = \frac{\alpha \cdot \beta}{\|\beta\|} $$

    证明比较简单,这里不再赘述。

    向量的平均方向与主成分方向

    当给出一组向量,面对上述问题,比较容易联想到这组向量的“主成分分析”的第一个维度。那么,上述的平均向量和主成分分析的第一个维度有什么关系呢?回答是:没有太大的关系。

    可以看下面三个图:

    上述三个二维平面中的点的平均方向均为红色,即(1,1);但是PCA的第一方向则各有不同,有时候与平均向量相同、有时候垂直,有时候相交。总之是没什么关系。

    可以看到,平均向量时在当前的“基”下计算获得。而主方向分析的方向,则首先就与原点没有关系。

    更深层次的理解

    现在的Embedding算法,都是基于现实世界语料库训练而来,反应了人类认知中“语言”与现实世界的对应关系。而在人类的认知中,这个世界是有“维度”的,最为直白的例子就是:我们会将词语划分“褒义词”、“贬义词”。此外,可能还有:动物性、情感强烈度、词性等。那么,在人类认知中这种“认知”有多少个维度呢?这其实是未知的,而各种Embedding算法则是在尝试使用量化的方式描述这些维度。

    但是,在实际训练出的各种Embedding实现,例如一个768维的Embedding,其单位向量方向,不太可能是上述的人类“认知”维度。如果把训练出来的Embedding的单位向量记为:\( \alpha_1, \dots , \alpha_n \),而把人类认知的维度记为: \( \beta_1, \dots , \beta_n \) 。

    那么,则存在一个过渡矩阵 $T$,可以实现上述向量空间的变换。

    可是,现实世界没有那么理想。Embedding空间确实给出了一组正交基,但是人类认识却很难寻找这样的正交基,例如“动物”属性的词语,可能会带有“情感”属性,例如,“虎狼之词”等,都带有某种情感属性。

    虽然,认知很难找到正交的“基”,但是找到某个具体的属性方向,则可以使用本书的方法。这正是本文所描述方法的局限性和价值所在。

    补充说明

    • 本文中,所说的Word Embedding,通常是指Sentence Embedding中的Token Embedding。在这里,无需区分两者。
    • 实际的情况更加复杂,例如本文中的“动物”属性,只是这些词所代表的“动物”属性。什么是真正的“动物”属性,并不存在这样的精确概念。人类语言中的“动物”是一个抽象的,并没有数字化、数学化的精确定义。
    • 完整的实现代码,参考:embedding_research_01.py