从随机数值到特征检测器的学习与更新
(1)一张图片的特征千千万,卷积核也有千千万,我们是怎样来确定卷积核的数值是可以提取我们想要的特征,或者说能提取使得最后分类正确的特征呢?
(2)卷积核里面的权值是如何更新的呢?
(1) 卷积核的数值是如何确定/学习到有效特征的?
卷积核的数值不是人工预设的,而是通过反向传播算法和梯度下降,在训练过程中从数据中自动学习得到的。 初始值是随机的,网络通过不断试错和调整,逐渐让卷积核学会提取对最终任务(如分类)有用的特征。
详细过程:
随机初始化:
训练开始时,所有卷积核的权重(数值)被设置为小的随机值(如从高斯分布中采样)。这相当于给网络一堆“随机的特征检测器”。
前向传播:
输入一张训练图片。
图片经过这些随机卷积核的卷积操作、激活函数(如ReLU)、池化等,逐层计算。
最终到达输出层(通常是全连接层+Softmax),得到一个预测结果(比如预测图片是“猫”的概率)。
计算损失:
将网络的预测结果与该图片的真实标签进行比较。
使用损失函数计算预测值与真实值之间的误差。常见的损失函数如交叉熵损失。这个损失值量化了网络当前预测的“糟糕程度”。
反向传播:
这是最关键的一步!目标是将计算出的损失值,从网络的输出层逐层反向传递到输入层,并计算出损失函数相对于网络中每一个权重(包括所有卷积核的每一个数值)的梯度。
梯度
∂Loss / ∂W
指明了:如果稍微增大这个权重,损失函数的值会增大还是减小?以及变化的幅度有多大? 梯度是一个向量,指向损失函数增长最快的方向。
梯度下降更新权重:
拿到梯度后,网络的目标是最小化损失函数。因此,它需要沿着梯度相反的方向调整权重。
更新公式(简化):
新权重 = 旧权重 - 学习率 * 梯度
学习率: 一个超参数,控制每次更新的步长。太小则学习慢,太大可能跳过最优解。
核心作用: 对于某个卷积核中的某个权重
W
:如果梯度
∂Loss / ∂W
是正的,说明增大W
会增加损失(预测更差),那么我们就需要减小W
(新W = 旧W - 正数
)。如果梯度
∂Loss / ∂W
是负的,说明增大W
会减少损失(预测更好),那么我们就需要增大W
(新W = 旧W - 负数 = 旧W + 正数
)。
通过这种方式,卷积核中的每个数值都被调整,使得整个网络在该训练样本上的预测损失能够减小一点点。
迭代优化:
对训练数据集中的大量样本重复步骤 2-5(通常分批进行,称为 mini-batch)。
在遍历整个数据集多次(称为 epoch)的过程中,网络持续接收反馈(损失),并根据反馈不断调整所有卷积核的数值。
逐渐地,这些初始随机的卷积核会演变成能够检测特定模式的滤波器:
低层卷积核:学习检测简单的边缘、角点、颜色斑点等基础特征。
中层卷积核:组合基础特征,学习检测纹理、部件(如车轮、眼睛)等更复杂的模式。
高层卷积核:组合中层特征,学习检测接近目标类别的整体结构或显著模式(如整个猫脸、汽车轮廓)。
总结 (1): 卷积核的数值不是我们预先设定的“正确答案”,而是网络在训练过程中,为了最小化预测任务(如分类)的损失函数,通过反向传播计算梯度并利用梯度下降算法,在大量数据上反复迭代调整而自动学习得到的。学习的目标就是找到那些能帮助网络最终做出正确预测的特征。
(2) 卷积核里面的权值是如何更新的呢?
核心答案:卷积核权重的更新是通过反向传播计算出损失函数对该权重的梯度 (∂Loss / ∂W
),然后使用梯度下降规则 (W_new = W_old - learning_rate * ∂Loss/∂W
) 来完成的。 这个过程与网络中其他层(如全连接层)的权重更新原理相同。
详细解释 (结合问题1):
梯度计算 (
∂Loss / ∂W
):这是反向传播的核心任务。反向传播算法高效地利用链式法则,从输出层逐层回传误差。
假设我们有一个位于第
l
层的卷积核K
中的一个特定权重W
(位于核的第i
行,第j
列,连接到第k
个输入通道,输出第m
个特征图)。反向传播会计算损失
Loss
对W
的偏导数∂Loss / ∂W
。这个导数具体怎么算?它依赖于
Loss
对卷积层l
输出的第m
个特征图的梯度 (∂Loss / ∂Z^l_m
)。再依赖于该特征图在卷积计算时,
W
所作用的那一小块输入区域(第k
个输入通道上,对应卷积核当前位置(i, j)
滑过的区域)。
简化理解:
∂Loss / ∂W
大致等于(∂Loss / ∂Z^l_m)
与W
在卷积操作中对应的那块输入区域值 的乘积的累加和(还需要考虑具体卷积计算的数学形式)。它衡量了W
对最终误差的“贡献”大小和方向。
更新规则 (
W_new = W_old - learning_rate * ∂Loss/∂W
):一旦计算出梯度
∂Loss / ∂W
,更新就非常简单直接了。学习率
learning_rate
(η): 这是一个非常重要的超参数。它决定了每次更新的步长。更新方向:
- ∂Loss/∂W
。负号表示我们要沿着梯度下降的方向(即减小损失的方向)移动权重。更新量:
learning_rate * ∂Loss/∂W
。学习率控制了移动的幅度,梯度的大小决定了移动的幅度(误差贡献大的权重更新幅度大)。批量更新 (Mini-batch): 实践中很少对单个样本更新一次权重(效率低,噪声大)。通常将一批样本(如 32, 64, 128 张图)一起前向传播,计算这批样本的平均损失,然后计算这个平均损失对权重的平均梯度,最后用这个平均梯度来更新权重。这提高了稳定性和效率。
共享权重的特殊性:
卷积神经网络的一个关键特性是权值共享:同一个卷积核会滑过输入特征图的所有位置。
这意味着: 在计算
∂Loss / ∂W
(对于卷积核K
中的某个权重W
) 时:反向传播过程中,所有该卷积核
K
在输入特征图上所有滑动位置产生的误差,都会汇总到这个权重W
的梯度计算中。因此,
∂Loss / ∂W
实际上是在该卷积核滑动的所有空间位置上,损失函数对W
的梯度的总和(或平均值,取决于具体实现)。
更新影响: 当用这个梯度更新
W
时,这个更新会影响该卷积核在所有位置的卷积计算结果。这正是权值共享的意义——同一个特征检测器(卷积核)应用于整个输入空间,并且它的学习基于所有位置上的综合反馈。
总结 (2): 每个卷积核中的每个权重 W
的更新遵循标准的梯度下降规则:
通过反向传播算法计算出损失函数
Loss
对W
的梯度∂Loss / ∂W
。这个计算利用了链式法则,并考虑了卷积操作的具体数学形式以及权值共享的特性(梯度是共享核在所有位置贡献的汇总)。使用公式
W_new = W_old - learning_rate * ∂Loss/∂W
来更新权重。学习率控制步长,负号确保向减小损失的方向更新。这个过程在训练数据集上反复迭代进行,直到网络性能收敛或达到停止条件。
示意图:
输入图片 -> [随机卷积核]卷积 -> ... -> 输出预测|V计算损失(Loss)|V(反向传播) <----- 计算梯度(∂Loss/∂W)|V(梯度下降) -----> 更新卷积核权重(W)