一、CNN
CNN的结构很多,这里练习采用 1层卷积层+1层pooling层+softmax全连接层 的结构。
过程为:
计算代价函数J
进行卷积操作
进行pooling
计算softmax输出概率
后向求残差error
根据残差求grad
用梯度下降法更新参数
二、后向算法
我们的代价函数选择交叉熵,softmax的残差计算方法与之前的一样。这里只讲与之前不太相同的。
我们把 卷积层+pooling层 是同一层,卷积层的残差计算如下
上采样的时候根据不同pooling(mean or max)方式而采用不同的方法。
有了残差之后,我们就可以计算梯度了,k指的是第k个卷积核。
如果我们的J增加了系数(1/m),则以上两式也需要增加系数(1/m)。
三、代码部分
在上采样的时候,对于mean-pooling 我们巧妙地应用了matlab的 kroon()函数。
其作用如上图所示,简洁明了。
在我们的练习中,具体写法如下:
delta_pool = (1/poolDim^2) * kron(delta,ones(poolDim));