本文来解释一下深度学习训练过程训练的是什么,换句话说,训练生成的模型文件里记录的是什么。
先笼统回答一下,记录的是网络节点的权重、偏置等参数。不懂网络节点指的是什么的话接着看下文。
先看一个常见的卷积网络层:
layer {
name: "conv1"
type: "Convolution"
bottom: "conv1a"
top: "conv2a"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 1
decay_mult: 0
}
convolution_param {
num_output: 96
pad: 2
kernel_size: 5
stride: 2
weight_filler {
type: "msra"
}
bias_filler {
type: "constant"
}
engine: CUDNN
}
}
卷积层num_output为96,要生成96个map,每个map是不同卷积核在bottom的每个map上进行卷积,并将每个对应位置上的值相加然后再加上一个偏置项。
在反向传播过程中,若第x层的a节点通过权值W对x+1层的b节点有贡献,则在反向传播过程中,梯度通过权值W从b节点传播回a节点。其中a节点,就比如上述卷积网络中bottom conv1a中某个map上的某个像素,b节点就比如top conv2a中某个map上的某个像素。