跳到主要内容

8 篇博文 含有标签「AI」

查看所有标签

YOLO(You Only Look Once)是一种广泛使用的目标检测模型,近年来也逐渐应用于图像分割和姿态估计任务。本篇文章将详细讲解YOLO模型在目标检测、图像分割及姿态估计中的应用,通过代码和预测结果分析帮助您更好地理解和使用YOLO模型。

Ultralytics库的所有预测结果都放在Result对象中,适用于目标检测、图像分割和姿态估计等任务,本文也将详细介绍如何处理不同任务的预测结果。

任务概述与对比

YOLO支持三种主要视觉任务,每个任务都有其独特的输出结构和应用场景:

  1. 目标检测(Object Detection)

    • 输出:边界框(boxes)和类别标签
    • 特点:定位物体位置并进行分类
    • 应用场景:物体识别、车辆检测、人脸检测等
  2. 图像分割(Image Segmentation)

    • 输出:像素级别掩码(masks)和类别标签
    • 特点:提供物体精确的轮廓信息
    • 应用场景:医学图像分析、场景理解等
  3. 姿态估计(Pose Estimation)

    • 输出:人体关键点坐标(keypoints)和骨架连接
    • 特点:识别人体姿态和动作
    • 应用场景:运动分析、姿态追踪、行为监控等

YOLO模型的预测结果对象结构

所有任务的预测结果都封装在Results对象中,Results对象包含以下通用属性:

- orig_img: 原始图像数据
- orig_shape: 原始图像尺寸(,)
- path: 输入图像路径
- save_dir: 结果保存路径
- speed: 预测耗时信息

这些属性帮助我们在不同任务中标准化处理预测结果。

目标检测

目标检测的代码实现

下面的代码演示了如何使用YOLO进行目标检测,识别图像中的物体,并将检测结果(包括边界框和类别标签)绘制在原始图像上。

import os
from ultralytics import YOLO
import cv2
import os
import glob
import shutil

OBJECT_DETECTION_MODEL_PATH = './models/object_detection.onnx'
TASK_NAME = 'detect'

def generate_colors(names):
colors = {}
for name in names:
hash_object = hashlib.md5(name.encode())
hash_int = int(hash_object.hexdigest(), 16)
b = (hash_int & 0xFF0000) >> 16
g = (hash_int & 0x00FF00) >> 8
r = hash_int & 0x0000FF
colors[name] = (b, g, r) # OpenCV 使用 BGR 顺序
return colors

# 单张图像目标检测预测
def predict_single_image_by_detect(image_path, out_image_file):
# 获取输出文件`out_image_path`文件所在的目录
out_dir = os.path.dirname(out_image_path)
os.makedirs(out_dir, exist_ok=True)

image_list = [image_path]
results = model(image_list)

for result in results:
boxes = result.boxes
if boxes is None:
cv2.imwrite(out_image_file, result.orig_img)
continue
boxes_data = boxes.data.cpu().numpy()
names = result.names
class_names = list(names.values())

color_map = generate_colors(class_names)

img = result.orig_img

for box in boxes_data:
x1, y1, x2, y2, score, class_id = box
x1, y1, x2, y2 = map(int, [x1, y1, x2, y2])
class_name = names[int(class_id)]
color = color_map[class_name]
cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
label = f'{class_name} {score:.2f}'
cv2.putText(img, label, (x1, max(y1 - 10, 0)),
cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)
print(f"图像写入路径: {out_image_file}")
cv2.imwrite(out_image_file, img)

if __name__ == '__main__':
# 预测单张图像
image_path = 'bus.jpg'
out_image_path = image_path + '_predicted.jpg'
predict_single_image_by_detect(image_path, out_image_path)

目标检测结果分析

在目标检测任务中,Results对象中最重要的字段是:

  • boxes:包含边界框的坐标、置信度和类别ID。
  • names:类别标签映射。
  • orig_img:原始图像数据。

每个边界框包含以下六个值:

[x1, y1, x2, y2, score, class_id]
# x1, y1: 左上角坐标
# x2, y2: 右下角坐标
# score: 检测置信度
# class_id: 类别ID

图像分割

图像分割的代码实现

图像分割任务比目标检测更加精细,它不仅需要识别物体的类别,还要提取每个物体的准确轮廓。

import os
import hashlib
import cv2
import numpy as np
from ultralytics import YOLO
import glob
import shutil

SEGMENT_MODEL_PATH = "./models/segmentation.onnx"
TASK_NAME = 'segment'
model = YOLO(SEGMENT_MODEL_PATH, task=TASK_NAME)

# 单张图像的分割模型预测函数
def predict_single_image_by_segment(image_path, out_image_path):
out_dir = os.path.dirname(out_image_path)
os.makedirs(out_dir, exist_ok=True)

results = model.predict(source=image_path)

for result in results:
if result.masks is None:
cv2.imwrite(out_image_path, result.orig_img)
continue
masks = result.masks.data.cpu().numpy()
boxes = result.boxes.data.cpu().numpy()
label_map = result.names
color_map = generate_colors(label_map.values())

img_with_masks = result.orig_img.copy()

for i, mask in enumerate(masks):
mask = mask.astype(np.uint8)
mask = cv2.resize(mask, (result.orig_shape[1], result.orig_shape[0]))

color = np.random.randint(0, 255, (3,), dtype=np.uint8)
colored_mask = np.zeros_like(result.orig_img, dtype=np.uint8)
colored_mask[mask > 0] = color

img_with_masks = cv2.addWeighted(img_with_masks, 1, colored_mask, 0.5, 0)

box_data = boxes[i]
x1, y1, x2, y2 = map(int, box_data[:4])
class_name = label_map[int(box_data[5])]
score = box_data[4]
cv2.rectangle(img_with_masks, (x1, y1), (x2, y2), color_map[class_name], 2)
label = f"{class_name}: {score:.4f}"
cv2.putText(img_with_masks, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)

cv2.imwrite(out_image_path, img_with_masks)
print(f"Prediction saved to {out_image_path}")

if __name__ == '__main__':
image_path = 'bus.jpg'
out_image_path = image_path + '_segmented.jpg'
predict_single_image_by_segment(image_path, out_image_path)

图像分割结果分析

Results对象的特有字段:

  • masks:实例分割掩码数据。
  • boxes:边界框信息。
  • names:类别标签映射。

掩码数据为二值化图像,需调整到与原图相同的尺寸,并与原图叠加进行可视化。

姿态估计

姿态估计的代码实现

姿态估计的目标是检测人体的关键点,并根据关键点绘制出人体骨架。

import cv2
from ultralytics import YOLO
import os

POSE_MODEL_PATH = './models/pose.onnx'
TASK_NAME = 'pose'
model = YOLO(POSE_MODEL_PATH, task=TASK_NAME)

def predict_single_image_by_pose(image_path, out_image_path):
out_dir = os.path.dirname(out_image_path)
os.makedirs(out_dir, exist_ok=True)

results = model.predict(source=image_path)

for result in results:
if result.keypoints is None:
continue
if result.boxes is None:
continue

orig_img = result.orig_img
keypoints = result.keypoints.data.cpu().numpy()
boxes = result.boxes.data.cpu().numpy()

for box_data, kpts in zip(boxes, keypoints):
for keypoint in kpts:
x, y, score = keypoint
cv2.circle(orig_img, (int(x), int(y)), 3, (255, 0, 0), -1)

for connection in skeleton:
part_a, part_b = connection
if kpts[part_a][2] > 0.5 and kpts[part_b][2] > 0.5:
x1, y1 = int(kpts[part_a][0]), int(kpts[part_a][1])
x2, y2 = int(kpts[part_b][0]), int(kpts[part_b][1])
cv2.line(orig_img, (x1, y1), (x2, y2), (0, 255, 255), 1)

cv2.imwrite(out_image_path, orig_img)

if __name__ == '__main__':
image_path = 'bus.jpg'
out_image_path = image_path + '_posed.jpg'
predict_single_image_by_pose(image_path, out_image_path)

姿态估计结果分析

  • keypoints:包含人体关键点坐标和置信度。
  • boxes:人体检测框。
  • names:通常为'person'类别。

每个关键点包含以下数据结构:

[x, y, confidence]  # 每个关键点包含坐标和置信度

实践建议

  1. 数据预处理

    • 确保输入图像尺寸适合模型。
    • 检查图像格式(OpenCV通常使用BGR格式)。
    • 视需要进行图像增强。
  2. 结果处理注意事项

    • 始终进行空值检查。
    • 将tensor数据转换为numpy格式。
    • 坐标值转换为整数,确保OpenCV兼容性。
  3. 性能优化

    • 尽量批量处理图像以提高效率。
    • 使用GPU加速推理过程。
    • 根据实际需求选择合适的模型大小。
  4. 可视化建议

    • 为不同类别分配固定颜色,以便更好区分。
    • 调整线条的粗细和标签字体大小,保持预测结果可读性。

总结

YOLO在目标检测、图像分割和姿态估计三大任务中的表现令人印象深刻,模型的高度通用性使其成为计算机视觉领域中的热门选择。

  1. 数据结构差异

    • 目标检测:处理boxes数据。
    • 图像分割:同时处理masks和boxes。
    • 姿态估计:处理关键点(keypoints)和骨架结构。
  2. 应用场景

    • 目标检测:适用于物体定位和分类。
    • 图像分割:适用于精确轮廓分析。
    • 姿态估计:适用于人体动作追踪与行为分析。
  3. 通用处理流程

    • 模型加载与初始化。
    • 数据预处理。
    • 结果处理与可视化。
    • 错误与异常检查。
鱼雪

目录

  1. 引言
  2. 智能代理简介
  3. Milvus:代理记忆的支柱
  4. 结论
  5. 参考链接

引言

想象一下,如果你每说一句话后就忘记自己所学过的一切,你还愿意继续对话吗?这将是多么令人沮丧的体验!这正是缺乏强大记忆系统的 AI 代理所面临的挑战。 尽管它们能够执行从回答复杂问题到执行多步骤工作流程的各种任务,但如果无法保留和访问所需的大量信息,它们的表现将大打折扣。 就像我们人类一样,即便是最聪明的代理也需要强大的记忆系统才能有效运作。

在这里,像 Milvus 这样的向量数据库发挥了关键作用。 它为这些代理系统提供了必要的基础,通过强大的数据存储、管理和检索解决方案,使代理不再在每次交互后“遗忘”; 相反,它们可以即时回忆相关数据,从而提高效率和决策能力。

本文将探讨 Milvus 如何在增强代理系统中发挥关键作用,展示如何充分释放代理的潜力,并将 AI 交互提升到新的高度。

智能代理简介

智能代理不仅是先进的工具,它们具备自主思考和行动的能力,区别于传统系统。

以下是智能代理的核心能力:

  • 推理能力: 代理能够处理信息并理解情境,从而对输入做出有意义的响应。
  • 规划能力: 代理能够制定实现特定目标的策略,将复杂任务分解为更小、可管理的步骤,并优先排序以提高效率。
  • 学习能力: 代理能够适应新信息,并随着时间的推移优化其性能,提升应对复杂任务的能力。

智能代理工作流程

智能代理的工作流程通常包括以下几个步骤:

  1. 感知
    代理从环境中接收输入,例如用户查询、传感器数据或数据库信息。
  2. 推理
    利用大型语言模型(LLM),代理处理输入以理解任务或查询的背景,解析需求和限制,并分析相关信息。
  3. 规划
    基于理解,代理制定行动计划,包括分解任务、优先排序和考虑替代方案。
  4. 执行
    代理根据计划执行动作,如生成文本响应、调用外部 API、触发系统流程或做出决策。
  5. 学习
    代理根据执行结果更新知识库,优化未来的决策过程,实现持续改进。

这种感知推理规划执行学习的循环,使得智能代理能够不断进化,提升处理复杂任务的效率和效果。

代理记忆的支柱

尽管智能代理在理解和响应复杂提示方面表现出色,其真正潜力在于其学习和适应能力。 要实现这一点,代理需要一个强大的记忆系统,能够存储、组织和检索大量信息。 Milvus 在这方面表现出色,成为构建智能代理的理想选择。

长期记忆

Milvus 存储和检索语义信息,为代理提供可靠的长期记忆支持:

  • 高效索引:采用先进的 HNSW 索引技术,快速组织和导航高维空间中的向量嵌入。
  • 灵活模式:支持动态模式,允许在向量旁边存储额外的元数据,便于保存上下文或来源信息。

高效检索与上下文管理

Milvus 优化了信息检索,使代理交互过程中能够保持上下文的连贯:

  • 近似最近邻(ANN)搜索:快速找到与查询最相似的向量,确保获取最相关的信息。
  • 混合搜索能力:结合向量相似性搜索与标量过滤,使代理在检索信息时能够同时考虑语义和特定属性。
  • 实时搜索:支持实时数据插入和近实时搜索,确保代理始终访问最新的信息。

可扩展性与性能

随着代理处理的数据量增加,Milvus 的可扩展性和高性能成为关键优势:

  • 分布式架构:支持横向扩展,能在多个节点上处理海量数据而不牺牲性能。
  • 负载均衡:自动分配数据和查询负载,确保资源的最佳利用。
  • 分片:自动将大型数据集分片,支持并行处理查询。
  • 低延迟:即使处理数十亿个向量,Milvus 也能在毫秒级返回结果。
  • 高吞吐量:每秒可处理数千个查询(QPS),适用于高流量应用。

通过这些特性,Milvus 为智能代理提供了一个可靠且可扩展的记忆系统,使其能够高效地学习、适应并执行任务。

结论

AI 的未来充满了无限可能,智能代理的能力正在迅速扩展。 随着代理从简单的基于文本的交互向整合多种数据形式迈进,强大且可扩展的记忆系统显得尤为重要。

Milvus 站在这一转变的前沿,通过高效的存储、快速的向量检索和卓越的可扩展性,赋予代理以下能力:

  • 存储和检索海量数据:无论是文本、图像、音频还是视频,Milvus 都能轻松应对。
  • 做出更智能的决策:快速访问相关信息,使代理能够做出更具上下文意识的决策。
  • 学习和适应:高效存储和检索数据,助力代理从过去的交互中学习并持续改进。

随着智能代理的不断演进,向量数据库如 Milvus 将在塑造其能力方面发挥至关重要的作用,推动代理变得更加多才多艺、理解能力更强,并能够处理更加复杂的任务。

这只是一个开始,未来充满了创新的潜力。无论您是开发者、研究人员还是 AI 爱好者,探索 Milvus 等工具都可以解锁新的可能性,帮助您站在 AI 技术的前沿。

参考链接

鱼雪

近年来,检索增强生成(RAG)作为一种利用外部知识增强大型语言模型(LLM)的方法变得越来越流行。

原始RAG及其工作过程

RAG使得LLM可以在以前未见过的数据上使用,而无需进行微调。 此外,通过利用外部语料库的独立检索组件,自然语言形式的知识可以完全卸载LLM的参数化内存。

RAG 工作过程:

  • 查询编码器:将用户查询编码成适合搜索文本段落或文档数据库的数值表示。
  • 检索器:使用查询编码器生成的向量搜索索引文档的外部数据库。检索单据中基于所选搜索算法的前 K 个最相关文档。
  • 生成器:大型语言模型根据检索器选择的文档和输入查询生成输出。

LongRAG背后的直觉

在《LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs》一文中, 滑铁卢大学的研究人员通过对检索过程进行修改提出了以下建议:

  • 将每个文档的标记大小从原始RAG中的100个标记扩展到LongRAG中的4,000个标记。
  • 将焦点从在原始RAG中准确定位与用户查询相关的精确信息转移到在LongRAG中选择包含相关但未必精确信息的文档。

传统RAG与LongRAG

这样做的原因是从检索精确、小片段信息过渡到选择更大、上下文更丰富且语义完整的片段。 这种调整减轻了检索员的负担,并更均匀地分配了检索员和生成器之间的任务。 因此,LongRAG充分利用了最新LLM的扩展上下文能力,它们作为生成器, 从最近对处理长上下文的显著增强中受益。

LongRAG如何运作:架构

LongRAG 对原始 RAG 进行了三项架构更新:

  • 长检索单元LongRAG 使用了检索单元,其范围包括整个文档或一组文档, 而不是从大型文档中截取 100 个标记,这遵循了论文中提出的Group Documents Algorithm。 此次单元大小增加到 4K,将维基百科语料库从 22M 减少到 600K 的检索单元。
  • 长检索器:为进一步处理识别长检索单元。
  • 长读者(生成器):从长检索单元中提取答案。这是一个以用户查询及长检索单元为提示的 LLM。

LongRAG示例

这是 LongRAG 逐步运作的方式

  1. Retrieval(在原始论文中命名为Long Retriever):

    • 编码: 两个编码器将输入问题和检索单元分别映射到一个d维向量。
    • 形成长的检索单元: 分组文档算法涉及创建相关文档的组。每个文档基于连接性与相关文档分组,不超过指定的最大组大小。这种分组能够更有效地检索相关信息,因为相关文档一起处理。
    • 相似性搜索: 编码步骤中的向量用于计算问题和检索单元之间的相似性,当选择相关的长检索单元时。
    • 结果汇总: 最相关的顶部组被汇总,形成对查询的全面响应,根据其大小调整包括的组数量。
  2. 生成(原始论文中称为 Long Reader):LLM(长期记忆模型)使用用户查询和来自检索步骤的聚合结果生成最终输出。 长文阅读器中使用的LLM应能处理长文本,并且不展现出过度的位置偏见。

LongRAG的优势

LongRAG 通过将维基百科处理成 4,000 个令牌单位来优化检索,将数量从 2,200 万减少到 60 万。 单位大小的增加意味着减少了许多单位的召回需求,避免了截断,并保留了更多上下文。 更长的单位有助于通过整合全面信息直接回答复杂问题。

LongRAG 框架实现了令人印象深刻的提取分数,并且与最先进模型具有可比的结果, 无需额外训练,展示了将 RAG 与长上下文 LLMs 结合的效率和潜力。

以下是对LongRAG实施的一些关键结果:

  • Recall@1:在自然问题(NQ)数据集上提高至71%,而之前为52%
  • Recall@2:在HotpotQA数据集(完全维基)上提高至72%,而之前为47%
  • Exact Match(EM):在NQ上取得62.7%的EM得分,在HotpotQA(完全维基)上为64.3%, 表现与最先进模型不相上下。

资源

鱼雪

在其他新闻简报/帖子中(许多引人深思的文章)

  • 数学,大数据的局限性,以及对AGI的影响,AI Made Simple的Devansh认为, 由于数据处理和数学的固有限制,AGI是徒劳的,建议转而关注实际的AI应用。
  • Long Quan和中国计算机视觉研究的早期浪潮由ChinAI进行。
  • Vision-Language Models Booming - Data Machina对VLM领域的伟大概述。
  • 逐渐,突然:《在门槛之上》- Ethan Mollick著。
  • 逾越销售的安全性:Ada Lovelace Institute关于AI的投产后监控。
  • 新论文:作者关于AI agent的重要性(也是AI Snake Oil通讯的作者)。
  • 由Allen Institute of AI撰写的《扩大AI模型不遵守的范围:何时以及如何不遵守用户请求》的论文讨论了紧急实施全面的AI系统投产后监控, 以了解其对真实世界的影响并确保安全使用。
  • Thomas Wolf关于人工智能数学奥林匹克竞赛

最新的研究论文

优化与性能提升

MInference 1.0:通过动态稀疏注意加速长上下文LLM的预填充 利用动态稀疏注意模式加速长上下文LLM的预填充阶段,在保持准确性的同时显著降低推理延迟。 阅读论文

AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱 使用本地化和修复的两步过程简化基于LLM的软件开发,无需自主工具使用,实现高性能和低成本。 阅读论文

RouteLLM:使用偏好数据学习路由LLM 通过在强弱LLM之间动态选择来优化成本和性能,通过数据增强和人类偏好数据在保持响应质量的同时降低成本。 阅读论文

LiteSearch:高效的LLM树搜索 开发了一种新颖的树搜索算法,提高LLM在数学推理任务上的性能,同时降低计算成本并保持竞争性能。 阅读论文

让专家专注于他擅长的领域:稀疏架构大语言模型的专家专门微调 提出了稀疏专家混合架构(MoE)专家专门微调(ESFT),只对任务中最相关的专家进行微调,提高微调效率和性能。 阅读论文

基准和评估

TabReD:一个现实中的表格机器学习基准 提出了一个由行业级表格数据集组成的基准集合,具有时间分割,突出不同架构的性能和基于时间分割的影响。 阅读论文

Summary of a Haystack:对长上下文LLM和RAG系统的挑战 提出了SummHay任务,以评估LLM和RAG系统在长上下文摘要中的表现,强调模型在精确引用和全面覆盖方面的挑战。 阅读论文

MIRAI:评估事件预测中的LLM代理 开发了一个基准,用于评估LLM代理使用GDELT事件数据库预测国际事件的能力,突出了高级时间推理的需求。 阅读论文

WE-MATH:您的大规模多模态模型是否实现了类似人类的数学推理? 引入了一个评估LMM视觉数学推理的基准,揭示尽管在泛化方面取得了进展,但在知识不足方面仍存在显著困难。 阅读论文

内容调节、对齐和安全性

UnUnlearning:在高级生成AI中取消学习不足以进行内容调节 强调取消学习无法通过上下文学习防止移除的知识重新引入,强调需要强大的内容过滤机制。 阅读论文

ProgressGym:与千年道德进步的对齐 引入了一个框架,通过历史文本和LLM使LLM与人类道德进步对齐,提供基准以跟踪不断发展的价值观并解决AI中的价值锁定风险。 阅读论文

Safe Unlearning:防御越狱攻击的意外有效和普适的解决方案 提出了一种通过取消学习有害知识来防御越狱攻击的方法,显著降低了攻击成功率,并表现出显著的普适性。 阅读论文

A False Sense of Safety:‘安全’AI响应中的不安全信息泄漏 探索了当前AI安全措施的局限性,引入了“推理对手”来利用看似安全的输出,强调需要新的防御机制。 阅读论文

Self-Evaluation as a Defense Against Adversarial Attacks on LLMs 开发了一种利用自我评估减少攻击成功率的防御机制,在适应性攻击下仍保持鲁棒性,优于现有防御方法。 阅读论文

多模态模型及其应用

4M-21:一个适用于多任务和多模态的任意视觉模型 在二十多种多样的模态上训练了一个视觉模型,使其在不损失性能的情况下执行广泛的任务,增强了多模态生成和检索能力。 阅读论文

理解多模态LLM中的对齐:综合研究 探索多模态LLM响应与图像内容的对齐,提出偏见驱动的幻觉采样(BDHS),强调结合离线和在线方法的优势。 阅读论文

ROS-LLM:一个集成任务反馈和结构化推理的化身AI的ROS框架 将LLM与机器人操作系统(ROS)集成,以促进直观的机器人编程,结合反馈以完善任务,展示了鲁棒性和可扩展性。 阅读论文

STARK:具有常识知识的社交长期多模态对话 引入了一个大规模多模态对话数据集,包含多样的社交角色和图像,能够创建具有卓越视觉想象能力的高级对话模型。 阅读论文

高级技术与新模型

知识链:通过学习知识图谱将知识推理整合到大语言模型中 使用知识图谱和试错机制增强LLM的知识推理能力,提高通用推理能力并解决规则过拟合问题。 阅读论文

学习在测试时学习:具有表达性隐藏状态的RNN 提出了测试时训练(TTT)层,在测试序列期间更新隐藏状态,在长上下文场景中展示了优于Transformer和现代RNN基线的性能。 阅读论文

E2 TTS:令人尴尬的简单全非自回归零样本TTS 引入了一个非自回归零样本文本到语音系统,具有简单的架构,实现了人类级的自然度和最先进的说话者相似度和可理解性。 阅读论文

长上下文和检索能力

这真的算长上下文吗?如果您只需要检索?迈向真正困难的长上下文NLP 认为通过输入长度定义长上下文NLP任务是不够的,提出了一种分类法,以更好地评估和开发在真正困难的长上下文场景中的LLM能力。 阅读论文

少展示,多指示:通过定义和指南丰富提示以实现零样本NER 使用包含定义和指南的指示调优显著提高了模型在NER任务中对未见实体类型的泛化能力。 阅读论文

新颖的架构和技术

一致性流匹配:通过速度一致性定义直流 通过在生成模型中强制速度场自一致性,增强流匹配,提高训练效率和样本质量。 阅读论文

DotaMath:通过代码辅助和自我纠正进行数学推理的思想分解 通过将问题分解为逻辑子任务并结合自我纠正,改善了LLM在复杂数学任务上的性能,展示了稳健的泛化能力。 阅读论文

MInference 1.0:通过动态稀疏注意加速长上下文LLM的预填充 利用动态稀疏注意模式加速长上下文LLM的预填充阶段,在保持准确性的同时显著降低推理延迟。 阅读论文

鱼雪

我们生活在一个变革和修订的时代,因为我们需要更好的算法、更强大的计算能力和新的人工智能水平。效率是人工智能世界中的一个新流行术语,它取代了之前对最大模型的争夺。在此背景下,一些基础方法正在被重新审视。

例如,多层感知器(MLP)可以说是深度学习历史上最重要的算法,最近才刚刚出现了一种替代方案。一组研究人员提出了Kolmogorov-Arnold网络(KANs),报告在某些任务中,其准确性和可解释性优于MLP。

什么是KAN?它如何改善MLP所取得的成果?让我们一探究竟。

在今天的内容中,我们将涵盖:

  • 首先,什么是MLP以及它的起源?
  • KAN的故事
  • KAN的架构
  • KAN是改进版的MLP吗?
  • KAN相对于MLP的优势
  • KAN的局限性
  • 结论
  • 附加资源

首先,什么是MLP以及它的起源?

多层感知器(MLPs)是人工智能中的核心前馈神经网络类型。 在不同类型的神经网络(NNs)中,前馈神经网络(FNNs)是最简单的。 信息仅以一种方向流动,从输入到输出,网络架构中没有循环或环路。

备注

神经网络受到人脑中发生的过程的启发,生物神经元共同工作以识别现象、权衡选择,并得出结论。

为了理解MLPs,让我们复习一些神经网络的基础知识。多层感知器由节点层(也称为神经元或感知器)组成:

  • 输入层:这是数据进入网络的初始点。这里的每个节点代表输入数据的不同特征,有效地将原始数据转换为网络可以处理的格式。
  • 隐藏层:位于输入层和输出层之间,这些层的数量和大小可以根据网络的复杂性而变化。 这些层中的每个神经元处理来自前一层所有神经元的输入,通过权重、偏置和激活函数进行转换,然后将结果传递到下一层。
  • 输出层:这是最后一层,输出网络的预测或分类。这里的神经元数量与手头具体任务的所需输出维度相符。

MLP

其他重要概念:

  • 权重和偏置:这些参数定义了神经元之间连接的强度。它们通过训练进行调整,对于确定网络的输出至关重要。
  • 激活函数:如ReLUsigmoid,这些函数根据输入决定神经元的输出。 这些函数对于引入非线性到网络中,使其能够建模复杂的模式非常重要。
  • 学习规则:一种算法方法,如反向传播,根据预测输出和实际输出之间的误差调整网络的权重和偏置,从而迭代地优化模型。

MLPs起源于20世纪60年代。 最初的概念是由Frank Rosenblatt提出的,他的感知器模型是一种简单的神经网络,展示了基本的模式识别任务。 但是,感知器的能力是有限的,正如Marvin Minsky和Seymour Papert所示,它无法解决非线性问题。 这一发现暂时中止了神经网络研究。

几乎二十年后,研究人员开始探索多层前馈网络的能力,以逼近从一个有限维空间到另一个空间的一般映射。 1989年,Kurt Hornik、Maxwell Stinchcombe和Halbert White证明了MLPs在给定足够数量的隐藏层和单元的情况下, 可以逼近任何连续函数——无论多么复杂。 他们的最终结果被称为通用逼近定理

这一特性,被称为通用逼近,确立了MLPs作为能够解决广泛任务的多才多艺工具, 从简单的回归到复杂的模式识别挑战,而无需为每个新问题设计定制算法。

根据《深度学习》教科书,MLPs是“典型的深度学习模型”。 今天,MLPs广泛应用于机器学习的各个领域,处理文本、图像和语音等。 它们在架构上的灵活性和逼近非线性函数的能力使其成为深度学习和神经网络研究中的基础构建块。

KAN的故事

与通用逼近定理并行存在的是由Vladimir ArnoldAndrey Kolmogorov在1957年证明的Kolmogorov-Arnold表示定理。

该定理指出,任何多变量连续函数都可以表示为单变量连续函数和加法运算的有限组合

换句话说,Kolmogorov-Arnold表示定理表明,多维函数可以分解为只有一个维度的函数的线性组合。

那么,为什么研究人员当初不使用它呢?问题在于,这些一维函数不一定具有被神经网络表示所需的性质。 因此,在20世纪90年代,研究人员重新审视了这个主题并指出“Kolmogorov定理是不相关的”,使得研究界对此沉默。

快进到2024年,KAN:Kolmogorov-Arnold网络的作者在当今的深度学习世界中重新审视和上下文化了这个定理。 他们建议将该定理适应于任意宽度和深度的网络,这将允许在机器学习模型中更灵活和鲁棒的应用。

此外,作者强调,科学和日常生活中遇到的许多函数具有平滑性和稀疏组合结构等特性。 这些特性有利于使用Kolmogorov-Arnold方法进行表示,这可能使该定理在实际场景中更具实用性。

KAN的架构

KANs的主要创新是用可学习的边上的激活函数替代节点上的固定激活函数,从而消除了线性权重矩阵。 相反,每个KAN中的“权重”都被建模为一个可学习的一维函数,特别是参数化为样条函数。 这一变化意味着网络中的每个连接可以根据数据调整其函数,提供了更灵活和定制的数据处理路径。

KAN

KAN的架构允许其处理输入并以与MLPs根本不同的方式执行计算

KANs的其他核心特征包括

  • 没有线性权重:在传统网络中,线性变换(权重)在通过网络层映射输入方面起着关键作用。 而KANs使用样条函数代替线性权重,允许每个连接执行复杂的非线性变换,以满足输入数据的特定需求。
  • 求和节点KANs中的节点主要功能是汇总来自传入边的输入。 这些输入不会在节点本身进行任何进一步的非线性变换,这与MLP节点中常用的ReLUsigmoid激活函数的使用不同。
  • 样条参数化KAN中的每个边函数都被参数化为样条,这为使用相对简单的数学构造建模非线性关系提供了强大的方法。 样条提供了形成平滑曲线的灵活性,可以拟合广泛的数据形状,使其非常适合KAN所需的多样化函数变换。

KAN是改进版的MLP吗?

KANs在理论和实践上都比传统的MLP具有若干优势。它们有效地集成了MLPs和样条的优点,利用各自的优势来解决各自的局限性

MLPs vs KANs

KAN中样条的优势

  • 低维精度:样条特别擅长在低维空间中准确建模函数。这种精度对于需要对函数形状进行细致控制的任务非常重要。
  • 局部可调性:样条的性质允许容易地进行局部调整,这意味着对样条参数的更改可以直接精确地影响函数的特定部分,而不会对其他部分产生意外影响。
  • 分辨率灵活性:样条可以在不同的分辨率之间切换,为函数逼近提供了一种多用途的工具,可以根据需要粗略或详细。

KAN中MLPs的优势

  • 处理高维数据:与样条不同,MLPs不太容易受到维度诅咒的影响,使其在高维输入空间中更有效。
  • 特征学习MLPs擅长从数据中学习复杂的特征层次,这对于需要从原始输入中提取和集成信息特征的任务非常有利。

KAN相对于MLP的优势

决定KANs是否优于MLPs在很大程度上取决于应用、数据的性质和模型的目标

KANs的主要优势包括

  • 函数逼近KANs可能提供更精确和灵活的函数逼近能力,特别是因为它们使用样条作为激活函数, 可以更紧密地调整以适应输入数据的特定特征,而不是MLPs中通常使用的固定激活函数。
  • 可解释性:使用样条可以提供潜在的更高可解释性。 由于每个连接的函数是直接可修改和可观察的,因此更容易理解输入在整个网络中的变换方式。
  • 灵活性KANs在适应各种分辨率和数据复杂性方面提供了灵活性, 可能在涉及复杂非线性关系的任务中表现更好,这些关系可以通过样条更好地建模。
  • 高维功能:虽然传统上样条在高维空间中表现较差, 但与MLP类似结构的集成使KANs可能比单独的样条更有效地处理高维数据。

KAN的潜在局限性

应当使用KANs还是MLPs

迄今为止,KANs的最大问题是训练速度慢。它比神经网络慢10倍,限制了主流采用。

KAN的作者建议:

KAN论文的作者说: 如果您关注可解释性和/或准确性,而训练速度不是主要问题,我们建议至少在小规模AI+科学问题上尝试KANs。

KANs在小规模问题上表现出改进,但它们在工业应用中典型的大规模、更复杂的数据集和问题上的可扩展性仍未得到验证。 KANs的独特之处——对每个连接使用样条函数——可能会在参数数量和学习这些参数所需的计算资源方面带来高成本, 特别是在网络深度和复杂性增加时。

此外,正如Devan的新闻通讯中所指出的,可能还存在其他缺点

  • 研究缺乏:与转换器和扩散模型相比,研究KAN的研究人员不多,这可能意味着潜在的未知障碍。
  • 市场适应性:硬件倾向于支持转换器/神经网络,这可能会阻碍KAN的采用。

结论

尽管LLMs(大型语言模型)占据主导地位,但大量研究探索了像KANs这样的替代方案。 通过独特的样条函数,KANs提供了精确、灵活的函数逼近和更高的可解释性。 尽管它们面临诸如训练速度慢和可扩展性等挑战, 但对KANs的持续探索强调了人工智能研究的多样性,确保了不断的进步和稳健的解决方案。

在注重AI效率的时代,重新评估诸如MLP的方法至关重要。 神经网络在经历了暂时的停滞后重新崛起,表明有前途的技术可以通过持续的研究克服最初的障碍。 同样,KANs可能会发展成为更高效和广泛应用的技术。

附加资源

文章中提到的论文:

鱼雪

Sébastien Bubeck 和 Ronen Eldan 谈论了 Phi-3 系列的快速进展及其将强大的语言模型引入日常设备的潜力

去年,微软通过论文《教科书即一切》引入了小型语言模型(SLM)Phi,打破了现有的缩放规律,展示了高质量数据本身足以构建可与更大型模型竞争的模型。在不到一年的时间里,在 Build 2024 大会上,他们推出了额外的 Phi-3 模型,包括 Phi-3-small、Phi-3-medium 和 Phi-3-vision。进展如此迅速!我们邀请了 Sébastien Bubeck 和 Ronen Eldan 讨论他们方法背后的直觉、数据集多样性对模型的意外影响、使用合成数据的挑战、小型语言模型的未来等。

您好,Sébastien 和 Ronen,很高兴能进行这次采访。“小型语言模型”是一个新术语,但已经被积极采用。你们在《教科书即一切》中采取的方法背后的直觉是什么?能否带我们回顾一下你们在研究阶段的思考过程?

Sébastien Bubeck:在《AGI 的火花》论文之后,我们决定要“理解” LLM 发生了什么,我们必须尝试构建自己的版本。当然,当时我们完全没有训练这些大型 Transformer 的经验,也没有很多数据可以使用。而且正如我们在《火花》中刚刚了解到的,评估我们训练的任何 LLM 可能会很困难(当时学术基准测试的种类繁多让人望而生畏……)。那么我们做了什么?我们决定尽可能缩小范围:我们选择了编程作为目标,因为有一个现有的大型数据集(The Stack),一个简单而合理的评估指标(OpenAI 的 HumanEval),并且已经证明,参数约为 10 亿的小型网络可以很好地完成这个任务。所以当时我们有一个明确的目标:在我们拥有的几打 GPU 的情况下,用一个 SLM 尽可能提高 HumanEval 分数。这个限制也是关键,它意味着我们必须以某种方式限制数据。然后自然地,我们想到了过滤 The Stack 以仅保留“教育内容”(由 GPT-4 进行过滤!)以及编写“合成教科书”以进一步丰富我们向模型展示的数据。整个项目仅用了一个月时间,每周我们都会在 HumanEval 上提高 10%!一个月后,我们达到了 50%,决定称此为胜利 😊。然后下一个问题变成:这种方法能否用于编程之外的领域?这时我们开始了 phi-1.5 的常识推理,然后是 phi-2 的一般认知能力,最终是 phi-3!

Phi 的创新方法是使用高质量、精心策划的数据集(TinyStories、CodeTextbook)而不是大量的网络数据。这种方法相比于传统的大规模数据收集有哪些挑战和优势?在模型性能或行为方面有没有什么意外的发现?

Ronen Eldan:创建一个从“无中生有”的集合,而不是使用现有资源,主要挑战在于如何使内容多样化。我的意思是:假设你想创建一个教模型常识事实的数据集。你不能只是告诉模型“给我一个所有常识事实的列表”——这行不通,就像你不能合理地期望一个人提供这样的列表一样。语言模型只会给你一个包含许多最常被认为是常识事实的重复列表,但它不会找到更晦涩的事实。因此,如何“跨越”所有事实,以及一般来说,如何让你的数据集覆盖人类知识,都是不明确的。当我们成功创建了一个多样化的数据集时,它对模型的影响让我们非常惊讶——在小规模(即模型在速度和成本方面都很高效)下,我们得到了比预期更强大的模型。

使用 LLM 生成 SLM 的合成训练数据引发了关于潜在偏见和安全问题的讨论,这些问题可能从 LLM 继承下来。应采取哪些措施来确保合成数据集的质量和安全性?

Ronen Eldan:首先,在安全性方面,数据集中的每一条目都是由一个已经过对齐以确保安全性的模型生成的,这是一个巨大的优势。根据我们的经验,“有机”数据集(例如来自网页的数据集)在安全性方面要差得多(经验上)。尽管如此,训练完模型后,始终需要对其进行安全性测试——在实际检查模型之前,永远不要信任它会做什么。在偏见方面,这确实是一个巨大的挑战。我推测,合成数据集将比大多数其他数据集更好,并且有一些基准表明这一点。但是我认为社区在开发更可靠的测试偏见的基准方面仍然有些落后,因为这是一个非常具有挑战性的事情(就像测试人类的偏见一样)。有相当多的工作在进行中,我认为我们正在慢慢但稳步地朝着更安全和更少偏见的模型前进。

Phi-3 模型是根据微软的负责任 AI 标准开发的,这是一套基于六项原则的公司要求:问责制、透明度、公平性、可靠性和安全性、隐私和安全性、包容性。Phi-3 模型经过了严格的安全测量和评估、红队测试、敏感用途审查,并遵循安全指导,以确保这些模型的开发、测试和部署符合微软的标准和最佳实践。

我们在技术论文中详细介绍了我们的安全培训和评估方法,并在模型卡中概述了推荐的用途和限制。请参阅模型卡集合。

最近,在 Microsoft Build 大会上,你们团队推出了全新的 Phi-3 系列模型。从 2023 年 6 月以来,在不到一年的时间里(进展如此迅速!),取得了哪些成果?

Ronen Eldan:确实,我们在一年内取得了惊人的进展:2024 年 4 月,我们通过在 Azure 上发布 Phi-3-mini 向世界展示了 Phi-3 系列模型。在 Build 2024 上,我们将更多 Phi-3 模型引入了 Azure AI 模型目录,包括 Phi-3-small、Phi-3-medium 和 Phi-3-vision(一种结合语言和视觉功能的多模态模型)。但 SLM 和 LLM 之间仍然存在差距。

我们继续通过提出更多技术来推动边界,包括生成合成数据、从外部来源收集高质量数据以及优化模型架构的其他方面。例如,一个关于如何过滤网页数据的小想法可能对模型性能产生重大影响。我认为我们还远未了解 SLM 的全部潜力。

你们如何设想像 Phi-3 这样的 SLM 集成到日常设备中(智能手机、相机、传感器等)?你们认为这种集成会带来哪些新可能性和潜在用例?有没有即将推出的功能或改进让你们特别兴奋?或者更广泛地说,Phi 系列的下一步是什么?

Sébastien Bubeck:我个人迫不及待地想看到像 Phi-3 这样的 SLM 无处不在。我们已经开始看到这种情况,例如 Phi Silica(一种专为运行 Copilot+ PC 而设计的 Phi-3-mini 衍生产品),我们在 2024 年 Build 大会之前的 5 月 20 日宣布。Windows 是第一个拥有专为 NPU 定制的最先进 SLM 的平台,并将于今年晚些时候预装。

最终,我希望在跑步时能与我的手表交谈并让它为我执行一些操作(Phi-3 可以轻松做到这一点)。或者在我去徒步旅行时在我的手机上安装 SLM,当我想问关于我所看到的各种事物的问题时能够提供帮助。这里的应用是无穷无尽的。

微软既注重大型语言模型也注重小型语言模型,既遵循又重塑缩放规律。这一策略背后的原因是什么?公司如何看待这些模型的共存?你们认为行业会转向更小、更高效的模型吗?

Sébastien Bubeck:我们认为小型和大型语言模型都有其用武之地。当我们关心高风险场景时,无论是在医疗保健领域,还是在你的 Copilot 尝试理解你的 GitHub 仓库时,我们愿意花费更多的能源和时间来获得最佳的响应。这时你会希望使用像 GPT-4 这样的前沿模型。但另一方面,也有一些情况,你可能会对模型进行数百万次调用,此时重要的是延迟和成本,因为你可能愿意在大规模情况下出现一些错误。这时 SLM 会大显身手。或者由于隐私和安全原因,你需要所有计算都在设备上完成,再次说明 SLM 是完美的选择。因此,在未来,我认为这两个方向(SLM 和 LLM)都非常

重要。这是关于成本与质量的帕累托前沿,任何特定应用都会落在这个前沿的不同位置!

像 FLUTE 这样的联邦学习技术显示出在分散设备上协同训练模型的前景,同时保护数据隐私。是否有任何联合研究将 FLUTE 或类似方法用于在联邦环境中训练和不断改进 SLM?

Ronen Eldan:我们目前没有研究这一点,因为我们的进展速度太快了。但这在我们的计划中……**

鱼雪

来自常见信息来源的有趣新闻和每周最佳研究论文列表

一场新的工业革命正在展开,由AI工厂的兴起所驱动。 这些设施正在改变各个层级的计算,从庞大的数据中心到日常使用的笔记本电脑,很可能很快就会转变为AI笔记本电脑。 在2024年Computex大会上,Jensen Huang强调了这种转变, 指出需要整个行业的合作:硬件供应商、软件开发商和企业需要共同努力,从数据中心转型为AI工厂。 Jensen Huang表示,这种转变不仅仅是技术上的,还涉及到重塑整个计算领域。他通常对自己的言论非常自信。

Nvidia的预先简报会上,高管们强调了AI PC的重大关注点,这项技术是Nvidia在六年前(2018年)引入的。 这个创新在游戏、内容创作和软件开发等领域引发了革命性变化。

AI PC在过去六年间并未广泛讨论,但现在——得益于微软和Nvidia——它们正在变得无处不在,并与关于新工业革命的对话一起进行。 尽管我们仍处在起步阶段,但确实需要回顾历史。 2018年和2019年初,另一重大事件震撼了机器学习社区。 这一事件促成了突破性的里程碑:ChatGPT。让我们一起回顾这一时间线:

  • 2018年,生成预训练变换模型(GPT)的创建引发了—>
  • 2019年2月,GPT-2——一个拥有15亿参数的大型语言模型。 由于担心滥用,GPT-2未完全公开,仅提供了一个小得多的模型供研究人员实验,并附有一篇技术论文,随后引发了—>
  • 2020年,GPT-3和论文《语言模型是少量样本学习者》,进而演变为—>
  • 2022年,GPT-3.5和其微调版本InstructGPT,并附有研究论文《通过人类反馈训练语言模型遵循指令》。
  • 2022年11月,ChatGPT。其训练方式与InstructGPT非常相似, 其背后的魔力基于研究论文《基于人类偏好的深度强化学习》,这种技术称为基于人类反馈的强化学习(RLHF)。

现为Anthropic联合创始人、前OpenAI政策主管的Jack Clark今天反思了GPT-2的发布,他形容这是“时光旅行的一个例子”。 2019年,OpenAI因担心滥用而决定不完全公开GPT-2,这一决定在AI社区引发了热烈辩论。这场辩论的核心在于平衡创新与伦理责任。 批评者认为,保留模型可能会减缓科学进步,而支持者赞扬OpenAI的谨慎态度。

Jack认为,偏离常规可能引发反作用。 通过逐步发布GPT-2OpenAI无意中激发了开发开源GPT-2级系统的兴趣,因为其他人希望填补这一空白。 如果GPT-2一开始就完全发布,可能会有更少的复制,因为更少的人会感到有必要证明OpenAI的错误。

在Clark对那段动荡时期的回忆中,有许多有趣的问题。虽然值得全文阅读,但以下是一些值得注意的引言:

  • “即使你能想象某事在技术上是可能的,你也不太可能正确预测它到来的时间或其严重性。”

  • “我逐渐相信在政策上‘一点点就能产生巨大影响’——比起对特定未来设计的想法进行自信的押注, 提倡那些在所有未来中你认为是稳健的好想法要好得多。”

  • “我们应该害怕这些监管思想所编码的权力结构,并且我们应该将它们视为本身具有危险性的东西。 我担心,与长期AI安全和AGI愿景一致的AI政策社区因为赋予未来AGI毁灭人类极高的概率, 就认为这可以证明当前的任何行动是正当的。”

  • “五年后,因为像GPT-2这样的事情,我们正处于AI部门的大规模工业化之中,以响应这些想法的规模化。 现在,有一种强烈的似曾相识感——人们(包括我)正在关注像Claude 3GPT-4这样的模型, 并对这些系统的技术含义以及进一步扩展它们的含义发表自信的言论,有些人正在利用这些含义来证明在当前实施越来越严格的政策制度的必要性。 我们是否在重复五年前犯下的错误?”

我们没有答案,但可以对这场由扩展定律推动、现在由AI工厂推动的新工业革命发表一些自信的言论。 像Jensen Huang这样的人认为,我们正处于重新定义技术可能性的时刻。 你怎么看?要看到未来的大局,我们——一如既往——鼓励你了解过去。

附加阅读: 甚至像Andrej Karpathy那样与过去玩耍:他刚刚发布了一种快速且成本效益高的方法来训练GPT-2模型。 使用8xA100 GPU训练一个小型GPT-2(124M参数)需要90分钟和20美元。 350M版本需要14小时和200美元,而完整的1.6B模型需要一周和2500美元。 该方法使用Karpathy的llm.c库,它利用纯C/CUDA进行高效LLM训练,无需大型框架。

来自常见信息来源的新闻

2024年初的AI现状

  • 根据麦肯锡的说法,生成式AI的采用正在激增,开始产生可观的价值。

OpenAI的:威胁行为者、安全委员会和回归机器人学

  • OpenAI发布了一份详细报告,强调其AI模型在俄罗斯、中国、伊朗和以色列威胁行为者的隐蔽影响行动中被使用。 这些行动旨在操纵公众舆论和政治结果,但尽管内容生成增加,但在吸引真实受众方面效果不佳。 作为回应,OpenAI实施了诸如禁止账户、分享威胁指标和加强安全协议等措施。 值得注意的活动包括“Bad Grammar”(俄罗斯)、“Doppelganger”(俄罗斯)、“Spamouflage”(中国)、“IUVM”(伊朗)和“Zero Zeno”(以色列)。 这强调了AI在进行和防御隐蔽信息操作中的双重角色,突显了全面防御策略的必要性。

  • 他们还成立了一个安全和安保委员会,以解决关键的安全问题。 该委员会由Bret Taylor、Adam D’Angelo、Nicole Seligman和Sam Altman领导, 负责在90天内提出安全建议,并咨询网络安全专家。 这些建议将公开分享,以确保OpenAI项目的强健安全和安保措施。

  • 其他新闻中,OpenAI重新启动了其机器人团队,并正在招聘。 回顾过去(也是2018年):学习灵巧的手部操作。 当时,他们开发了一个名为Dactyl的系统,该系统完全在模拟中训练, 但已被证明能够解决不依赖物理精确建模的现实任务。

Claude 3增强工具集成

  • Claude 3模型系列现在支持工具使用, 能够与Anthropic Messages API、Amazon Bedrock和Google Cloud的Vertex AI上的外部工具和API进行交互。

NVIDIA的新AI芯片:Vera Rubin

  • 在Computex大会上,NVIDIA CEO Jensen Huang在主题演讲中宣布了名为Vera Rubin的AI芯片(以发现暗物质的美国天文学家命名),计划于2026年推出。 该新芯片将配备为AI应用设计的最先进的GPU和CPU。 NVIDIA计划每年升级其AI加速器,从2025年的Blackwell Ultra开始,重点在于成本和能源效率。

  • 他们还推出了地球气候数字双胞胎,能够不仅预测而且了解我们的星球及其气候的现状。

Mistral AI推出Codestral

  • Mistral AI的研究人员推出了Codestral,一个22B开源权重的生成式AI模型,专为代码生成而设计。 支持超过80种编程语言,Codestral在代码补全和测试编写等任务中表现优异,在长距离代码库级别代码补全方面优于其他模型。 通过HuggingFace提供用于研究和测试的访问,Codestral还与VSCode和JetBrains等流行工具集成,提升开发者生产力。

最新的研究论文,按类别分类以便查阅

我们的前三名

法国人了解他们的醒酒 → Hugging Face推出🍷 FineWeb

在博文“🍷 FineWeb:醒酒网络以获取最优质的文本数据规模”中, 研究人员介绍了一个从CommonCrawl快照中提取的15万亿标记的大型数据集。 FineWeb专为LLM预训练设计,通过细致的去重和过滤,强调高质量数据。 他们还开发了FineWeb-Edu,一个优化教育内容的子集,在教育基准

上表现优于现有数据集。他们还使这篇博文成为病毒式传播! 一如既往,向Hugging Face致敬,感谢他们对开放、透明方法的关心, 创建大规模高质量数据集用于LLM训练,以及对葡萄酒的热爱(但这只是一个假设)。

Mamba-2来了!变压器是SSM**:通过结构化状态空间对偶性实现通用模型和高效算法**

来自普林斯顿大学和卡内基梅隆大学的研究人员揭示了变压器和状态空间模型(SSM)之间的深层理论联系。 他们引入了一个名为结构化状态空间对偶性(SSD)的框架,表明SSM可以像变压器一样高效。 他们设计了Mamba-2,一个精细的SSM架构,其速度是前身Mamba的2-8倍(了解Mamba)。 Mamba-2在语言建模任务中仍与变压器竞争,同时优化了内存和计算效率。

视觉语言模型(VLMs)简介

来自Meta、Mila、MIT等知名机构的研究人员介绍了VLMs,解释了它们的功能、训练和评估。 他们强调了在对齐视觉和语言方面的挑战,例如理解空间关系和属性。 论文将VLMs分类为不同的家族,基于对比、掩蔽和生成技术等训练方法。 它还讨论了使用预训练的骨干来增强模型性能,并探索了将VLMs扩展到视频数据以改善时间理解。

AI模型增强

  • 变压器可以通过正确的嵌入进行算术 - 使用新颖的嵌入技术提高变压器的算术能力 →阅读论文

  • Trans-LoRA:数据无关的可迁移参数高效微调 - 提高参数高效模型的可迁移性,无需原始数据 →阅读论文

  • LOGAH:使用图超网络以1/100参数预测774百万参数变压器 - 利用图网络高效预测大型模型参数 →阅读论文

  • 2BP:两阶段反向传播 - 提出一个两阶段的反向传播过程,以提高计算效率 →阅读论文

  • LLAMA-NAS:用于大型语言模型的高效神经架构搜索 - 使用神经架构搜索找到高效的模型配置 →阅读论文

  • VeLoRA:使用秩-1子标记投影进行内存高效训练 - 通过创新的数据投影技术减少训练期间的内存需求 →阅读论文

  • Zipper:融合模态的多塔解码器架构 - 使用多塔架构在生成任务中高效集成不同模态 →阅读论文

  • NV-Embed:用于通用嵌入模型训练的改进技术 - 提高嵌入训练的质量,以增强检索和分类任务 →阅读论文

  • JINA CLIP:你的CLIP模型也是你的文本检索器 - 使用对比训练提高CLIP模型在文本-图像和文本-文本检索任务中的表现 →阅读论文

AI在多模态和专门任务中的应用

  • Matryoshka多模态模型 - 通过嵌套视觉标记提高多模态模型的效率 →阅读论文

  • Zamba:一个紧凑的7B SSM混合模型 - 结合状态空间和变压器模型,创建一个紧凑高效的混合模型 →阅读论文

  • 相似性不是全部:赋予检索增强生成系统多层次思维 - 在检索增强生成系统中整合更深的上下文理解 →阅读论文

AI伦理、隐私和对齐

  • 离线正则化强化学习用于LLM对齐 - 通过强化学习对齐AI行为与人类意图 →阅读论文

  • 价值激励偏好优化:统一的在线和离线RLHF方法 - 提出一种适用于在线和离线环境的人类反馈学习新方法 →阅读论文

  • 鹦鹉:使用语义变量高效提供LLM应用服务 - 利用应用级信息优化语言模型应用服务 →阅读论文

  • 创新与隐私的交叉点:生成式AI的私有合成数据 - 探索在AI训练中维护隐私的技术 →阅读论文

AI的认知能力

  • LLMs在高级心理理论任务中达到成人水平 - 评估大型语言模型执行复杂认知任务的能力,比较其与人类的表现 →阅读论文
鱼雪

对象及其关系在我们周围是无处不在的,关系对于理解对象的重要性可以与对象本身的属性一样重要,例如: 交通网络、生产网络、知识图谱或社交网络。离散数学和计算机科学长期以来一直在将这些网络形式化为图, 由节点以各种不规则方式连接的边组成。然而,大多数机器学习(ML)算法只允许输入对象之间的规则和统 一关系,比如像素网格、单词序列或根本没有关系。

图神经网络(GNN)作为一种强大的技术,利用了图的连接性(类似于旧算法DeepWalkNode2Vec)以及各 个节点和边上的输入特征。GNN可以对整个图进行预测(这种分子会以某种方式发生反应吗?)、对单个节点 进行预测(根据其引用,这个文档的主题是什么?)或对潜在边进行预测(这个产品是否可能与那个产品一起 购买?)。除了对图进行预测外,GNN还是一个强大的工具,用于弥合更典型的神经网络用例之间的鸿沟。它 以连续方式编码图的离散关系信息,从而可以自然地包含到另一个深度学习系统中。

我们很高兴地宣布推出 TensorFlow GNN 1.0(TF-GNN),这是一个经过实际测试的用于大规模构 建GNN的库。它支持在TensorFlow中进行建模和训练,以及从庞大的数据存储中提取输入图。TF-GNN是从头开 始为异构图构建的,其中类型和关系由不同的节点和边集表示。现实世界中的对象及其关系以不同类型出现,TF-GNN 的异构重点使其自然地表示这些对象及其关系。

TensorFlow内部,这些图由类型为tfgnn.GraphTensor的对象表示。这是一种复合张量类型(在一个Python 类中包含多个张量),可以作为tf.data.Datasettf.function等中的一等公民被接受。它存储了图结构以及 附加到节点、边和整个图上的特征。可以将GraphTensors的可训练变换定义为高级Keras API中的Layers对象, 也可以直接使用tfgnn.GraphTensor原语。

GNNs:在上下文中对对象进行预测

为了说明问题,让我们来看看TF-GNN的一个典型应用:在由交叉引用大型数据库的表定义的图中,预测某种类型节点的属性。 例如,计算机科学(CS)arXiv论文的引用数据库,具有一对多的引用关系和多对一的被引关系,我们希望预测每篇论文的主题领域。

与大多数神经网络一样,GNN是在许多带标签的示例数据集(约数百万个)上进行训练的,但每个训练步骤只包括一个更小的批处理 训练示例(比如说,数百个)。为了扩展到数百万个,GNN在基础图中的一系列相对较小的子图上进行训练。每个子图包含足够的原始数据, 以计算标记节点的GNN结果并训练模型。这个过程——通常称为子图采样——对于GNN的训练非常重要。大多数现有的工具都是以批处理方式进 行采样,生成静态子图进行训练。TF-GNN提供了改进这一点的工具,通过动态和交互式采样。

如图所示,子图采样的过程,其中从较大的图中采样小的、易于处理的子图,以创建用于 GNN 训练的输入示例

TF-GNN 1.0 首次推出了灵活的 Python API,用于配置所有相关规模的动态或批量子图采样:在 Colab 笔记本(如本笔记本)中交互式采样, 用于对存储在单个训练主机主内存中的小型数据集进行高效采样,或通过 Apache Beam 对存储在网络文件系统中的庞大数据集(多达数亿节点和 数十亿条边)进行分布式采样。详情请分别参阅我们的内存采样和基于束的采样用户指南。

在这些相同的采样子图上,GNN 的任务是计算根节点的隐藏(或潜在)状态;隐藏状态聚合并编码根节点邻域的相关信息。一种经典的方法是消息 传递神经网络。在每一轮消息传递中,节点会沿着传入边接收来自邻居的消息,并根据这些消息更新自己的隐藏状态。经过 n 轮后,根节点的隐藏 状态就会反映出 n 条边上所有节点的总信息(如下图 n = 2)。信息和新的隐藏状态由神经网络的隐藏层计算。在异构图中,对不同类型的节点 和边使用单独训练的隐藏层通常是有意义的。

如图所示,这是一个简单的消息传递神经网络,在每个步骤中,节点状态从外部节点传播到内部节点,并在内部节点中进行池化以计算新的节点状态。一旦到达根节点,就可以做出最终的预测。

与其他神经网络训练一样,在 GNN 的隐藏状态上为标注节点设置一个输出层,计算损失(衡量预测误差),并通过反向传播更新模型权重,训练设置就完成了。

除了有监督的训练(即最小化由标签定义的损失),GNN 还可以无监督的方式(即不带标签)进行训练。这样,我们就能计算出节点离散图结构及其特征的 连续表示(或嵌入)。这些表示通常用于其他 ML 系统。这样,由图编码的离散关系信息就能被纳入更典型的神经网络用例中。TF-GNN 支持对异构图的无 监督目标进行细粒度规范。

构建 GNN 架构

TF-GNN 库支持构建和训练不同抽象层次的 GNN

在最高级别,用户可以使用该库捆绑的任何预定义模型,这些模型以 Keras 层表达。除了一小部分研究文献中的模型之外,TF-GNN 还附带了一个高度可配置 的模型模板,该模板提供了经过精心挑选的建模选择,我们发现这些选择为我们的许多内部问题提供了强有力的基准。模板实现了 GNN 层;用户只需初始化 Keras 层即可。

import tensorflow_gnn as tfgnn
from tensorflow_gnn.models import mt_albis

def model_fn(graph_tensor_spec: tfgnn.GraphTensorSpec):
"""Builds a GNN as a Keras model."""
graph = inputs = tf.keras.Input(type_spec=graph_tensor_spec)

# Encode input features (callback omitted for brevity).
graph = tfgnn.keras.layers.MapFeatures(
node_sets_fn=set_initial_node_states)(graph)

# For each round of message passing...
for _ in range(2):
# ... create and apply a Keras layer.
graph = mt_albis.MtAlbisGraphUpdate(
units=128, message_dim=64,
attention_type="none", simple_conv_reduce_type="mean",
normalization_type="layer", next_state_type="residual",
state_dropout_rate=0.2, l2_regularization=1e-5,
)(graph)

return tf.keras.Model(inputs, graph)

在最底层,用户可以根据在图中传递数据的原语,从头开始编写 GNN 模型,例如将数据从一个节点广播到它的所有传出边,或将数据从它的所有传入边汇集到一个节点(例 如计算传入信息的总和)。当涉及特征或隐藏状态时,TF-GNN 的图数据模型对节点、边和整个输入图一视同仁,因此不仅能直接表达以节点为中心的模型(如上文讨论的 MPNN),还能表达更一般形式的图网络。在核心 TensorFlow 的基础上,可以使用 Keras 作为建模框架,但没有必要这样做。有关更多细节和建模的中间层次, 请参阅 TF-GNN 用户指南和模型集。

训练编排

虽然高级用户可以自由地进行自定义模型训练,但 TF-GNN Runner 还提供了一种简洁的方法来协调常见情况下 Keras 模型的训练。 一个简单的调用可能如下所示:

from tensorflow_gnn import runner

runner.run(
task=runner.RootNodeBinaryClassification("papers", ...),
model_fn=model_fn,
trainer=runner.KerasTrainer(tf.distribute.MirroredStrategy(), model_dir="/tmp/model"),
optimizer_fn=tf.keras.optimizers.Adam,
epochs=10,
global_batch_size=128,
train_ds_provider=runner.TFRecordDatasetProvider("/tmp/train*"),
valid_ds_provider=runner.TFRecordDatasetProvider("/tmp/validation*"),
gtspec=...,
)

The RunnerML问题提供了现成的解决方案,如分布式训练和在Cloud TPUs上对tfgnn.GraphTensor进行固定形状填充。除了对单个任务进行训练(如上所示), 它还支持同时对多个(两个或更多)任务进行联合训练。例如,无监督任务可以与监督任务混合,以提供特定应用的归纳偏差的最终连续表示(或嵌入)。调用者只需 要用任务映射替换任务参数即可:

from tensorflow_gnn import runner
from tensorflow_gnn.models import contrastive_losses

runner.run(
task={
"classification": runner.RootNodeBinaryClassification("papers", ...),
"dgi": contrastive_losses.DeepGraphInfomaxTask("papers"),
},
...
)

此外,TF-GNN Runner 还包括用于模型归因的集成梯度实现。集成梯度输出是一个 GraphTensor,其连接性与观察到的 GraphTensor 相同,但其特征用梯度值代替, 在 GNN 预测中,较大的梯度值比较小的梯度值贡献更多。用户可以检查梯度值,查看其 GNN 使用最多的特征。

结论

总之,我们希望 TF-GNN 能够推动 GNNTensorFlow 中的大规模应用,并促进该领域的进一步创新。如果您想了解更多信息,请尝试我们使用流行的 OGBN-MAG 基准进行的 Colab 演示(在浏览器中进行,无需安装),浏览我们的其他用户指南和 Colab,或阅读我们的论文。

文章出处

鱼雪