在上篇《CNN卷积神经网络学习笔记2:网络结构》中,已经介绍了CNN的网络结构的详细构成,我们已经可以初始化一个自己的CNN网络了,接下来就是要用训练得到一个确定的CNN的模型,也就是确定CNN的参数。
CNN本质上就是人工神经网络的一种,只是在前几层的处理上有所不同,我们可以把卷积核看成是人工神经网络里的权值W,而采样层实质上也是一种卷积运算。所以可以基于人工神经网络的权值更新的方法来推导CNN里的权值更新公式。人工神经网络里是用反向传播算法将误差层层回传,利用梯度下降法更新每一层的权值,CNN中也是类似的。所以这里先对传统的BP算法做个概述,然后再推广到CNN中。
1,BP算法
1.1 Feedforward Pass前向传播
首先定义平方误差代价函数:
EN=12∑n=1N∑k=1c(tnk−ynk)2.
其中N是样本个数,c是label的维度,对于分类问题,意味着这些样本能分为c类。 tkn 表示第n个样本的label tn 的第k维, ykn 是第n个样本网络的输出(predict label)的第k维。我们的目标是要更新网络的权值,使得网络输出y与真实值t更接近,也就是最小化这个E,考虑到要考虑一个样本,则第n个样本的误差函数是:
En=12∑k=1c(tnk−ynk)2.
定义第l层的输出为:
xl=f(ul),其中ul=Wlxl−1+bl(1)
这里f是激活函数, xl−1 是l-1层的输出,也就是l层的输入,W和b分别是l层的权值和偏置。
上式就是前向传播的公式,每一层对输入(也就是上一层的输出)做运算,得到输出结果,这样将样本信息逐层传递,最后输出一个预测值(predict label)。
1.2 Backpropagation Pass反向传播
预测值与真实值(label)之间必然是存在误差的,反向传播就是要把这个误差信息回传给每一层,让这些层修改他们的权值,使得CNN更精准。
BP算法中是用梯度下降法更新权值的,梯度下降法的更新公式如下:
Wlnew=Wlold−η∂E∂Wlold.
blnew=blold−η∂E