本页面概述了本代码库中实现的各种神经网络架构,它们不属于 Transformers、GANs、扩散模型、循环网络或微调技术等主要类别。这些实现展示了专门的架构方法,旨在解决深度学习中的特定挑战。
Sketch RNN 是一种序列到序列的变分自编码器,旨在生成基于笔画的绘画。它通过预测一系列笔画来学习重建和生成草图。
来源: labml_nn/sketch_rnn/__init__.py197-238 labml_nn/sketch_rnn/__init__.py241-309
模型通过从这些分布中采样来生成草图
来源: labml_nn/sketch_rnn/__init__.py363-455
SketchRNN 处理笔画数据,其中每个笔画是 5 维向量
模型使用结合了以下内容的自定义损失函数
来源: labml_nn/sketch_rnn/__init__.py312-360
胶囊网络是一种神经网络,通过将神经元分组为代表实体及其属性的胶囊来模拟层次关系。
传统的 CNN 在理解空间层次方面存在局限性。胶囊网络通过以下方式解决这个问题:
来源: labml_nn/capsule_networks/__init__.py39-135 labml_nn/capsule_networks/mnist.py29-97
挤压函数: 一种非线性激活函数,在保持方向的同时归一化向量
路由模块: 实现动态路由算法
边际损失: 用于类别存在性的损失函数
该实现包含一个使用胶囊网络进行 MNIST 分类的完整模型
来源: labml_nn/capsule_networks/mnist.py29-97
图注意力网络(GAT)旨在处理图结构数据,使用注意力机制从相邻节点聚合信息。
该代码库实现了两种变体
来源: labml_nn/graphs/gat/__init__.py34-198 labml_nn/graphs/gatv2/__init__.py63-237
GAT 和 GATv2 的主要区别在于它们计算注意力的方式
| 模型 | 注意力机制 | 特征 |
|---|---|---|
| GAT | eᵢⱼ = LeakyReLU(aᵀ[Whᵢ ‖ Whⱼ]) | 对所有查询的静态注意力排序 |
| GATv2 | eᵢⱼ = aᵀLeakyReLU(W[hᵢ ‖ hⱼ]) | 动态注意力排序 |
来源: labml_nn/graphs/gat/__init__.py86-179 labml_nn/graphs/gatv2/__init__.py122-221
两种实现都包含用于 Cora 引文网络数据集上的节点分类模型
来源: labml_nn/graphs/gat/experiment.py109-150 labml_nn/graphs/gatv2/experiment.py21-66
超网络是为另一个网络(目标网络)生成权重的神经网络。它们提供了一种创建动态网络架构的方法,其中参数是上下文相关的。
来源: labml_nn/hypernetworks/experiment.py13-30
该实现使用一个 HyperLSTM 作为自回归模型进行下一个令牌预测
虽然完整的超网络实现未在提供的文件中显示,但该实验展示了如何在 Tiny Shakespeare 数据集上使用 HyperLSTM 进行语言建模。
来源: labml_nn/hypernetworks/experiment.py13-30
PonderNet 是一种自适应计算模型,它根据输入动态决定要应用多少计算步骤。
来源: labml_nn/adaptive_computation/ponder_net/__init__.py71-177
步进函数: 在每一步生成预测、下一个状态和停止概率
停止机制: 计算在每一步停止的概率
损失函数:
来源: labml_nn/adaptive_computation/ponder_net/__init__.py180-268
PonderNet 针对奇偶校验任务实现,模型在该任务中学习计算二进制序列中 1 的数量并判断其是奇数还是偶数。
这些多样化的模型架构展示了解决各种深度学习挑战的专门方法
| 模型 | 目的 | 关键创新 |
|---|---|---|
| SketchRNN | 草图生成 | 带有混合密度网络的 Seq2seq VAE |
| 胶囊网络 | 对象识别 | 基于向量的胶囊与动态路由 |
| GAT/GATv2 | 图节点分类 | 图的自注意力 |
| 超网络 | 动态权重生成 | 为另一个网络生成权重的网络 |
| PonderNet | 自适应计算 | 动态计算步骤数量 |
每个模型都代表了神经网络设计的一种独特方法,解决了传统架构的特定局限性或处理专门任务。