一、神经网络中误差函数问题
对于一个分类问题,神经网络的输出等价于计算条件概率f(x)c=p(y=c|x)。我们希望在训练集中的样本可以最大化上述概率,即给定训练数据点x(t),我们希望最大化输出为y(t)的概率。为了和前面提出的经验风险最小化训练框架相结合,我们把这个最大化问题通过取负对数将其转化为一最小化问题。转化后的负对数似然目标函数定义如下:
l(f(x),y)=−∑c1(y=c)logf(x)c=−logf(x)y
由于对数函数f(x)=log(x)是单调递增函数,那么将原目标函数取对数之后优化目标仍然是最大化问题,故应再加上负号,将其转化为最小化问题。 这里取对数的主要目的是简化数学上的推导和增强数值稳定性。
二、参数梯度计算方法
随机梯度下降算法的一个核心就是计算出每个参数的偏导数,本部分从输出层入手,给出输出层网络的偏导数计算方法,并在此基础之上,给出参数偏导的一般形式。
1.输出层的梯度计算
输出层偏导计算方法如下:
∂l(f(x),y)∂f(x)c=∂∂f(x)c−logf(x)y=−1(y=c)f(x)y
则输出层的梯度为:∇f(x)−logf(x)y=−1(y=c)f(x)y⎡⎣⎢⎢1⋮1⎤⎦⎥⎥=−e(y)f(x)y
其中,e(y)表示一个列向量,该列向量的第y个元素为2.输出层预激励的梯度计算
输出层预激励的推导过程较为复杂,这里先给出推导结果,再给出推导过程。误差函数对预激励求偏导的结果为:
∇a(L+1)(x)−logf(x)y=−(e(y)−f(x))
下面给出推导过程:∂∂a(L+1)(x)c−logf(x)y=−1f(x)y∂f(x)y∂a(L+1)(x)c
注意到f(x)y=softmax(a(L+1)(x))y)=ea(L+1)(x)y∑c′ea(L+1)(x)c′,于是有原式=−1f(x)y∂∂a(L+1)(x)cea(L+1)(x)y∑c′ea(L+1)(x)c′=−1f(x)y(∂∂a(L+1)(x)cea(L+1)(x)y∑c′ea(L+1)(x)c′−ea(L+1)(x)y(∂∂a(L+1)(x)c∑c′ea(L+1)(x)c′)(∑c′ea(L+1)(x)c′)2)=−1f(x)y(1(y=c)ea(L+1)(x)y∑c′ea(L+1)(x)c′−ea(L+1)(x)y∑c′ea(L+1)(x)c′ea(L+1)(x)c∑c′ea(L+1)(x)c′)=−1f(x)y(1(y=c)softmax(a(L+1)(x))y−softmax(a(L+1)(x))ysoftmax(a(L+1)(x))c)=−1f(x)y(1(y=c)f(x)y−f(x)yf(x)c)=−(1(y=c)−f(x)c)
下一章将给出隐层梯度计算的一般形式。