深度学习中的梯度下降算法

梯度下降

  • 可导函数在任一点的梯度是自变量空间中的一个向量(二元函数的梯度是 xy 平面上的向量,而不是 xyz 空间里的向量)
  • 函数图形在这一点的切平面的法向量投影在自变量空间中,就是该点梯度的反方向。
  • 某点的梯度是函数以及它的切平面在该点上升最快的方向,即方向导数最大的方向。梯度的长度(模)就是在该方向的方向导数(变化率)。
  • 梯度向任何自变量空间方向的投影的长度(模)是函数在该方向上的方向导数(变化率)。
  • 梯度可以是 0 向量。在梯度为 0 向量的点上各方向的变化率都为 0 。这是函数达到极大/极小值的一阶必要非充分条件(例如鞍点不是极大/极小值,但是梯度也为 0 )。

caffe 中gradient checker

  • 采用的差分法

//Compute derivative of top w.r.t. each bottom and parameter input using finite differencing.

  • 源码:

estimated_gradient = (positive_objective - negative_objective) / stepsize_ / 2.;

1
2
3
4
5
public class HelloWorld{
public static void main(String[] args){
System.out.printly("Hello World!");
}
}
1
2
3
4
5
6
7
#include <stdio.h>
using namespace std;
int main(){
print("hello world!");
return 0;
}