卷积神经网路 Convolutional Neural Network CNN
CNN的结构
- 卷积层 Convolution
- 池化层(下采样) Polling
- 全连接层 Full connection
卷积层
最基础的2D卷积操作,涉及到一个2D的过滤器(filter),或者说是核(kernel)。filter实际上是一个2D的权重矩阵。
z_{i,j} = \Sigma_m \Sigma_n w_{(m,n)} x_{i+m,j+n} +b
对于单个卷积层在 layer l 的输出:
z_{i,j,k}^{(l)} = \Sigma_c \Sigma_m \Sigma_n w_{(m,n,c,k)}^{)(l)} x_{i+m,j+n,c}^{(l-1)} +b_k^{(l)}
m和n是filter的行和列的数量,c代表filter的深度,k代表filter的数量。
卷积层的超参数
-
Filter 尺寸 W_F H_F
宽 \times 高,一般假设宽和高一样。
- Filter 数量 N_F
- 步长 Stride N_S 指的是filter在滑动时,每次滑动的格子数
- 填充 Padding 指的是在输入端周围引入的零填充量。0填充可以避免在layer中出现的萎缩现象。
池化层
池化层将输出替换为附近的输出,有助于使输出对输入的小规模转化更加稳健。
Max pooling
将数值替换为区域内的最大值
Ave pooling
将数值替换为区域内的平均值
网络结构
在MATLAB中,CNN的网络结构用如下方式定义
% define network layers
layers = [
imageInputLayer([128 128 3])
convolution2dLayer([3 3],8,"Padding","same")
batchNormalizationLayer
reluLayer
maxPooling2dLayer([2 2],"Padding","same","Stride",[2 2])
convolution2dLayer([3 3],16,"Padding","same")
batchNormalizationLayer
reluLayer
fullyConnectedLayer(5)
softmaxLayer
classificationLayer];
一些参数的设置:
% Specify the training options
options = trainingOptions('sgdm', ...
'MiniBatchSize',10, ...
'MaxEpochs',10, ...
'InitialLearnRate',1e-3, ...
'ValidationData',augimdsValidation, ...
'Verbose',true, ...
'Plots','training-progress',...
'ExecutionEnvironment','cpu');
% Train the network using the training data
net = trainNetwork(trainingData,layers,options);
需要明确的参数包括:
- SGD算法的具体类型
- 最小批量大小:用多少个样本来获得Loss function梯度的平均估计值
- 初始学习率:初始值为 𝜖(可以保持不变或降低以提高收敛性)
- 验证数据:训练算法可以定期地在独立的验证数据上检查进度
- Verbose:定期把输出打印到屏幕上
- 绘图:绘制收敛图
- 执行环境:CPU或GPU
迁移学习 Transfer learning
迁移学习指的是将预先训练好的CNN模型,用于另一个任务中。
-
加载预训练的网络。
-
将最终层替换针对新任务设置的层
-
重新训练各层,通常只是训练新的最终层,并保持预训练的层固定不变
可以重新训练所有层(但速度较慢)