在神经网络中的反向传播中,求导函数的形式往往用目标值y来表示更合适些,这与数学中常见的用x来表示导函数的习惯有所不同,这样的形式可以在sigmoid函数的导函数表达式中看到。
sigmoid函数
实现:\src\caffe\layers\sigmoid_layer.cpp
反向传播实现:
const Dtype sigmoid_x = top_data[i];
bottom_diff[i] = top_diff[i] * sigmoid_x * (1. – sigmoid_x);
即
dyodx=dyodh∙dhdx=Δh∙y(1−y)
而我们都知道sigmoid函数的导数实际是:
y′=e−x(1+e−x)2=e−x+1−1(1+e−x)2=11+e−x−1(1+e−x)2=y−y2=y(1−y)
因此,便有了上面实现的代码。