![](https://csdnimg.cn/release/download_crawler_static/88774709/bg7.jpg)
在我的实验中,通常情况下,函数的值域在 [0,1] 区间内,训练精度会保持与
正余弦函数相当的结果。而如果函数的值域范围变化大,会导致输入数据的动态范
围变大,碰到训练精度显著降低,无法学习到图像细节特征。我认为当值域变换大
时,会覆盖原有的图像块的信息,喧宾夺主。相比之下,位置编码的范围大小显著
影响着输入到 transformer 模型的序列范围。位置编码的目标是为不同位置提供独
特的表示形式,可以根据应用场景(数据集)选择最优的函数。我无法证明显性地
证明函数的好坏。我的结论是,有目的地修改位置编码方式,能够学习图像块的关
联,提高捕捉图像特征的能力。
在原始的模型中,仅使用了两层 transformer 层,我适当地增加了其层数,类
似于 CNN 中增加卷积层的个数,在个数为 5 时,可以显著提高模型的精度,对比
ViT 有 8% 的精度提升。transfomer 中残差连接是很关键的,由 Resnet18 的结果
也可以体现出这一点,无论是在 leaf 数据集还是在 cifar10 数据集中,Resnet18 表
现都是最好的。特别是在小数据集上,ViT 的表现不如优秀的卷积神经网络上,但
是就像论文中所说的,有理由相信在大数据集上也不比 CNN 差。
3.2 ViTCNN
受到学习的 conv 和残差连接的启发,我打算在引入位置编码和 transformer
前,先对原始图像进行一两次的卷积操作,也许可以先对图像整体特征进行初步学
习,帮助模型学习到图像的整体特征。卷积操作可以捕捉图像中局部特征和纹理
信息里,构建一些低级的特征表示,作为后续位置编码和 transformer 模块的输入。
但是从实验上看训练时间比原有的 ViT 模型更长,我认为其原因是通过卷积操作
引入的额外参数会增加整体模型的复杂度,输入到 transformer 的参数量显著增加
了,原始图像的特征维度从 3 增加到 64,相比于图像缩小到原来的四分之一,特
征维度是关键的变量。这意味着 transformer 模块中的每个位置和注意力头都会有
更多的权重参数需要进行学习。也许增加 transformer 模块中多头注意力头的个数
和使用更复杂的位置编码可能会提升模型在图像分类上的性能。这一点的估计是根
据 ViTCNN 在训练精度上会比 ViT 和 SimpleViT 高,但是验证精度更低了,出现
了过拟合的情况。
这不能说明我的改进是没有参考意义的。传统的思维下,深度学习是需要大量
的数据集,而我的每个数据集不超过 6 万张图像,不能匹配模型的复杂程度(验证
集精度下降)。