Forward和Backward是Net中的计算本质。
Caffe学习3——Forward and Backward
让我们考虑最简单的逻辑回归分类器。

前向传播的部分是根据input来计算output,从而进行inference。在前向中,Caffe通过模型中每个layer的计算组合来计算“function”的值。这个传播从bottom到top进行。
Caffe学习3——Forward and Backward
数据x通过inner product layer来得到g(x),在通过一个softmax layer得到h(g(x)),则我们可以得到softmax loss为fW(x).

反向传播是计算loss的梯度用于learning。在反向传播中,Caffe通过自动微分来计算每个layer的梯度,并用其反向组合来表示整个模型的梯度。反向传播是从top到bottom的过程。
Caffe学习3——Forward and Backward
Backward从loss的梯度fWh开始,然后通过链式法则,逐层计算剩余layer的梯度。而layers的参数,如inner product层,其在backward中梯度的含义就是参数的fWWiP
这些计算都紧跟在定义model之后:Caffe已经完成了前向和后向的实现。

  • Net::Forward()和Net::Backward()函数执行相应的传递,而Layer::Forward()和Layer::Backward()计算每个Layer的具体传递。
  • 每个Layer有forward_{cpu, gpu}()和backward_{cpu, gpu}()方法分别计算不同mode的传递。但是由于constraint或convenience,layer也可仅实现其中CPU和GPU一种方法。

求解器首先通过forward来得到output和loss,再通过backward来得到模型的gradient,然后通过梯度来更新weight来使得loss最小化。Solver、Net和Layer的分工,使得Caffe模块化并让开发者进行开发。
有关Caffe的forward和backward的具体细节,由之后的layer catalogue进行描述。

相关文章: