返回

对抗视觉 Transformer 过拟合的正则化方法:美图&国科大联合推出的 DropKey

人工智能

视觉 Transformer 和过拟合问题的挑战

近年来,视觉 Transformer(ViT)已成为计算机视觉领域的重要突破,其强大的表征能力使其在图像分类、目标检测和分割等任务中取得了令人印象深刻的结果。然而,ViT 也容易发生过拟合,这会损害其泛化能力,导致在未见数据集上表现不佳。

过拟合的成因

过拟合的发生是因为 ViT 模型可以学习记住训练集中的具体模式,这导致模型对训练集表现良好,但对新数据却无法泛化。过拟合通常是由于模型过于复杂,拥有过多的参数和层,从而过分拟合了训练数据的噪音和异常值。

DropKey:缓解过拟合的正则化方法

为了解决 ViT 的过拟合问题,美图影像研究院和中国科学院大学联合提出了正则化方法 DropKey。DropKey 的理念很简单:在训练过程中随机丢弃一部分 Transformer 层中的 Key。这迫使模型学习如何利用剩余的 Key 来补偿被丢弃的 Key,从而专注于更重要的特征,减少过拟合。

DropKey 的代码实现

import torch
import torch.nn as nn
from transformers import BertModel, BertConfig

class DropKey(nn.Module):
    def __init__(self, config: BertConfig):
        super(DropKey, self).__init__()
        self.dropout = nn.Dropout(config.attention_probs_dropout_prob)

    def forward(self, hidden_states: torch.Tensor, attention_mask: torch.Tensor = None):
        key = self.dropout(hidden_states)
        return key, attention_mask

DropKey 的效果

在 ImageNet 图像分类任务上,DropKey 可以将 ViT 的 top-1 分类准确率从 81.3% 提高到 82.4%,这证明了 DropKey 确实可以有效缓解过拟合,从而提升模型性能。

DropKey 的意义

DropKey 是一种简单有效的正则化方法,可以缓解 ViT 的过拟合问题,提升其泛化能力。DropKey 的提出为 ViT 的研究和应用开辟了新的道路,也为其他深度学习模型的正则化研究提供了新的思路。

常见问题解答

1. 为什么 DropKey 可以缓解过拟合?

DropKey 通过迫使模型专注于更重要的特征来减少过拟合。当丢弃 Key 时,模型必须学习如何利用剩余的 Key 来补偿被丢弃的 Key,从而减少对训练数据噪音和异常值的依赖。

2. DropKey 的 hyperparameter 如何设置?

DropKey 的 dropout 率是一个重要的 hyperparameter。较高的 dropout 率可以减少过拟合,但也会损害模型性能。通常情况下,dropout 率在 0.1 到 0.3 之间。

3. DropKey 可以应用于其他 Transformer 模型吗?

是的,DropKey 可以应用于其他 Transformer 模型,例如 BERT 和 GPT。DropKey 的原理是通用的,可以有效减少各种 Transformer 模型的过拟合。

4. DropKey 是否会增加训练时间?

DropKey 会增加一些训练时间,因为模型需要学习如何利用剩余的 Key。然而,由于 DropKey 可以减少过拟合,它通常可以提高模型的训练效率,从而抵消训练时间的增加。

5. DropKey 的适用场景有哪些?

DropKey 适用于容易发生过拟合的大型数据集和复杂模型。它在计算机视觉、自然语言处理和语音识别等领域有着广泛的应用。