如我们所见,使用全连接(密集)层构建的传统自动编码器在应用于图像数据时面临显著问题。当图像被展平为一维向量时,像素之间重要的空间关系,即它们在二维中的排列方式,大部分会丢失。这使得编码器难以学习到有意义的局部模式和结构,而这些是理解图像内容的根本。卷积自动编码器(ConvAE)在其编码器中采用卷积层(并在其解码器中采用相应的反卷积层或转置卷积层),以有效处理图像数据。这些层借鉴自卷积神经网络(CNN),已被证明在图像相关任务中非常有效。在卷积自动编码器的编码器部分,卷积层负责处理输入图像并生成一系列特征图,这些特征图捕捉日益复杂的视觉模式。卷积层在编码器中的作用核心上,编码器的任务是将输入图像转换为压缩的、低维表示。卷积层通过对输入图像应用一组可学习的滤波器(也称作核)来实现这一点。它们在编码器中通常是这样运作的:滤波器检测特征:每个滤波器都是一个小型权重矩阵(例如,3x3或5x5像素)。这些滤波器旨在检测输入图像中的特定局部模式,例如边缘、角点、纹理或更复杂的形状。在训练期间,自动编码器会学习这些滤波器权重的最佳值。卷积操作:滤波器在输入图像上区域接区域地“滑动”或“卷积”。在每个位置,滤波器权重与输入图像重叠块之间执行逐元素乘法,并将结果累加。这个总和,通常会加上一个偏置项,在输出特征图中生成一个值。特征图作为输出:每个滤波器生成一个二维特征图。此图突出显示了输入图像中存在该滤波器检测到的特定特征的区域。如果编码器层使用例如32个不同的滤波器,它将生成32个特征图。这些特征图共同构成该卷积层的输出体。激活函数:在卷积操作之后,激活函数(通常是修正线性单元 (ReLU) 或其变体之一,如 Leaky ReLU)被逐元素应用于特征图。这为模型引入非线性,使其能够学习比简单线性变换更复杂的模式。digraph G { rankdir=LR; graph [splines=ortho, nodesep=0.6, ranksep=0.8, fontname="sans-serif"]; node [shape=record, style="filled,rounded", color="#495057", fontname="sans-serif", fontsize=10]; edge [color="#495057", fontname="sans-serif", fontsize=9]; input_vol [label="{输入体 | (例如,图像 H x W x D_in)}", fillcolor="#a5d8ff"]; conv_filter [label="{单个滤波器 | (核 KxKxD_in) | 学习特定模式}", fillcolor="#fab005", shape=box3d, style="filled,rounded", width=1.2, height=0.6, fixedsize=false]; output_fmap [label="{输出特征图 | (H' x W' x 1) | 突出模式的存在}", fillcolor="#74c0fc"]; input_vol -> conv_filter [label=" 与...卷积", dir=none]; conv_filter -> output_fmap [label=" 生成"]; note_N_filters [label="此过程用 N 个不同滤波器重复,\n得到 N 个输出特征图 (H' x W' x N)。", shape=plaintext, fontsize=9, fontcolor="#495057", width=3.5, align=left]; {rank=max; output_fmap;} output_fmap -> note_N_filters [style=invis, minlen=2]; }编码器中的卷积层对输入体应用一组可学习的滤波器。每个滤波器旨在检测特定模式,生成相应的特征图,表明这些模式在输入中的位置。对图像使用卷积层的优势在编码器中采用卷积层,相对于全连接层,为图像数据带来了多项显著优势:空间结构保持:卷积层对输入的局部二维块进行操作。这本质上保持了临近像素之间的空间关系,使得网络能够学习依赖这些局部排列的特征,如边缘、纹理和图案。参数共享:单个滤波器(及其权重集)应用于整个输入图像。这意味着相同的特征检测器用于图像中的所有位置。这显著减少了可学习参数的总数,相比于全连接层(其中每个输入单元都会有一个唯一的权重连接到每个输出单元)。更少的参数使模型更高效,训练更快,并更不容易过拟合,特别是对于高分辨率图像。分层特征学习:当多个卷积层在编码器中堆叠在一起时,它们自然地学习特征的分层结构。最初几层可能学习简单的特征,如边缘和角点。后续层可以将这些简单特征组合起来,检测更复杂的模式,如纹理、物体局部,并最终是整个物体或其显著特点。这种分层抽象对于CNN(和ConvAE)在图像任务上取得良好性能非常重要。设计编码器卷积层的参数在设计卷积自动编码器的编码器时,您需要对每个卷积层的几个参数做出决定:滤波器数量(或核数量):这决定了输出体的深度(即特征图的数量)。例如,如果一个层有16个滤波器,它将生成16个特征图。更多的滤波器数量使该层能学习更多样化的特征,但也会增加参数数量和计算成本。通常,在编码器较深的层中,滤波器数量会增加。核大小(或滤波器大小):这定义了卷积滤波器的尺寸(高和宽)。常见选择是3x3或5x5。较小的核捕获非常局部的资讯,而较大的核能捕获更广范围的模式。核的深度始终与该层的输入体的深度相匹配。步长:这指定滤波器在输入上滑动时每步移动的像素数量。步长为1表示滤波器每次移动一个像素。步长为2表示它每次移动两个像素。使用大于1的步长会导致特征图的空间下采样,减少其高和宽。这是编码器降低维度的一种方式。填充:填充指在卷积之前,在输入体的边界周围添加像素(通常是零)。valid 填充:不添加任何填充。如果核大小大于1x1或步长大于1,则输出特征图会小于输入。same 填充:添加足够的零填充,使输出特征图与输入体具有相同的高和宽(假定步长为1)。这对于在多层中保持空间维度很有用。例如,编码器中初始卷积层的常见设置可能是:32个滤波器,3x3的核大小,步长为1,same填充,然后是一个ReLU激活函数。该层的输出将是32个特征图的集合,每个特征图与输入图像具有相同的高和宽。这些特征图随后作为编码器中下一层的输入,它可以是另一个卷积层,或者,如我们将在下一节中看到的那样,一个旨在更明确进行空间下采样的池化层。通过策略性地堆叠这些卷积层,编码器逐步将原始像素数据转换为一组日益抽象和信息丰富的特征图,最终形成紧凑的潜在表示。