Hyena是什么?
Hyena是由斯坦福大学研究人员开发的一种开创性的神经网络架构。它作为主流Transformer模型的一种强大的、无注意力的替代方案而存在。Hyena的核心创新在于用隐式参数化的长卷积取代了计算密集型的注意力机制。这种设计选择直接解决了Transformer的主要局限性——其相对于序列长度的二次复杂度——使Hyena在处理从数千到数十万个令牌的极长数据序列时异常高效。
主要特点
- 无注意力架构: Hyena完全避免了自注意力机制,从而绕过了其O(n²)的计算和内存瓶颈。
- 隐式长卷积: Hyena不使用学习到的静态滤波器,而是使用一个小型前馈网络根据输入数据本身动态生成卷积滤波器。这使得模型能够以卓越的灵活性捕捉长程依赖关系。
- 亚二次复杂度: 该架构随序列长度的扩展呈近线性复杂度O(N log N),在长上下文任务上相比Transformer实现了巨大的性能提升。
- 数据控制门控: Hyena集成了控制信息在网络中流动的门控机制,增加了另一层动态的、特定于输入的自适应能力。
使用案例
- 基因组学: 处理和分析完整的DNA和蛋白质序列,这些序列通常对于标准Transformer来说太长了。
- 长篇自然语言处理: 如总结整本书、从大型文档中回答问题以及分析冗长的法律合同等任务。
- 高分辨率成像: 将展平的图像数据作为一维序列进行操作。
- 时间序列和音频: 建模高保真音频信号或大量时间序列数据中的长期依赖关系。
入门指南
虽然Hyena是一种架构而非即插即用的库,但其组件在HazyResearch的safari代码库中得以实现。以下是一个概念性示例,展示了如何在模型中定义一个Hyena算子层。
```python
注意:这是一个受官方代码库启发的概念性示例。
如需实际实现,请参考HazyResearch/safari的GitHub。
import torch import torch.nn as nn from safari.models.layers.hyena_operator import HyenaOperator
Hyena层的配置
config = { “d_model”: 128, # 模型维度 “l_max”: 2048, # 最大序列长度 “order”: 2, # Hyena算子的阶数(MLP的深度) “filter_order”: 64 # 滤波器生成MLP的维度 }
创建一个Hyena算子
hyena_layer = HyenaOperator( d_model=config[‘d_model’], l_max=config[‘l_max’], order=config[‘order’], filter_order=config[‘filter_order’] )
创建一个随机输入张量(批量大小, 序列长度, 模型维度)
x = torch.randn(1, 1024, config[‘d_model’])
将输入通过Hyena层
output = hyena_layer(x)
输出将具有与输入相同的形状
print(“输入形状:”, x.shape) print(“输出形状:”, output.shape)
预期输出:
输入形状: torch.Size([1, 1024, 128])
输出形状: torch.Size([1, 1024, 128])
定价
Hyena是一个在MIT许可下发布的开源研究项目。它完全免费,可用于学术和商业用途。主要的“成本”是训练和运行基于该架构的模型所需的计算资源。
工作原理:Hyena算子
Hyena的魔力在于其核心的“Hyena算子”。它包括三个主要步骤:
- 投影: 使用前馈网络将输入序列投影成多个表示。
- 卷积: 一个小型神经网络参数化一组长卷积滤波器。这些滤波器是“隐式”的,因为它们的权重是为每个输入即时生成的。
- 门控: 卷积的输出被逐元素调制(相乘),类似于LSTM中的门控机制,以控制信息流。
这种数据控制的卷积和门控的结合,使得Hyena能够有效地建模复杂、长程的依赖关系,而没有注意力的二次成本。