这篇Blog的主要内容是关于梯度下降法的一些理解,以及相关的公式推导。梯度下降法很早之前就接触过,但是因为长时间不用,所以理解上也有了一些欠缺,今天看了一些参考文献,写一下自己的一些理解。便于以后帮助自己回忆。
Artificial Neural Network
关于人工神经网络,这是目前使用最广泛的一类算法了。神经网络和其他的算法相比较,计算更加直接。不需要去推导公式,去计算两者的关系,直接通过网络的方式连接,然后用大量的数据训练,没有关系的连接权重逐渐变弱,有关系的权重逐渐变强。如果把输入和输出的函数关系写出来,会发现是一个很复杂的非线性公式。也正是因为这一点,神经网络的拟合程度比普通的线性,非线性算法都要好。
Gradient Descent
对于用梯度下降法训练神经网络,我之前一直没有弄明白的点是为什么梯度的方向就是函数增加最快的方向, 我理解梯度方向是变化最快的方向,但是一直不理解为什么是增加的。今天看了一些参考文献,理解了一点。
对于神经网络,我们会有训练集的数据{ x0,y0}\{x_0, y_0\}{ x0,y0},xxx和yyy之间有函数关系y=f(x)y = f(x)y=f(x),函数有自己的参数ppp,对应于神经网络的权值。所以有y=f(p,x)y = f(p, x)y=f(p,x)。为了能够训练神经网络,让输出和预期值越来越接近,可以定义损失函数(Loss Function),有l=L(x0,y0,y)l = L(x_0, y_0, y)l=L(x0,y0,y)。其中y=f(p,x0)y = f(p, x_0)y=f(p,x0),所以:
l=L(p,y0,x0)l = L(p, y_0, x_0)l=L(p,y0,x0)
计算lll关于ppp的梯度,所以:
▽Cxr(p)=<∂Cxr∂p(0),...,∂Cxr∂p(n)\bigtriangledown{C_{xr}(p)} = < \frac{\partial{C_{xr}}}{\partial{p^{(0)}}}, ..., \frac{\partial{C_{xr}}}{\partial{p^{(n)}}}▽Cxr(p)=<∂p(0)∂Cxr,...,∂p(n)∂Cxr
沿梯度方向,损失函数lll的值是逐渐增加的
对这句话的理解,在于是什么量沿着梯度方向的变化。应该是自变量ppp。例如:
当∂Cxr∂p(0)(p0)>0\frac{\partial{C_{xr}}}{\partial{p^{(0)}}}(p_0) > 0∂p(0)∂Cxr(p0)>0时,也就是说,函数l(p0)l(p^{0})l(p0)在p0p_0p0点时,函数曲线沿p=p0p=p^0p=p0的切线斜率是大于0的,也就是说,在很小的一个区间(p0−δ,p0+δ)(p_0-\delta, p_0+\delta)(p0−δ,p0+δ),如果p1>p0p_1 > p_0p1>p0, 那么有l(p1)>l(p0)l(p_1) > l(p_0)l(p1)>l(p0