神经网络参数的反向传播算法

神经网络损失函数

假设,用神经网络实现一个分类问题,有一个神经网络如下图所示:


L表示这个网络的层数,
S_l表示这个网络L层的单元。
这个分类问题如果是二元分类,输出层输出的结果是一个实数,可能
是0,也可能是1,输出层的单元数目是1,通常可以用K=1表示。
如果是多元分类,输出层的单元数目则为K,且假设函数的输出是一个K维向量,假设K=4,则输出结果可以用以下方式表示:

逻辑回归中,带有正则项的损失函数如下所示:

J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_j^{2}

神经网络的损失函数用如下公式表示:

J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}{\sum_{k=1}^{K}}y_k^{(i)}logh_{\theta}(x^{(i)})_k+(1-y_k^{(i)})log(1-h_\theta(x^{(i)}))_k]+\\ \ \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}(\theta_{ji}^{(l)})^2

其中,h_\theta(x)K维向量,(h_\theta(x))_{i}表示第i个输出。

反向传播算法

  • 算法介绍:
    根据以上公式,我们已经得到了损失函数的计算公式,与逻辑回归算法一样,需要最小化损失函数,与逻辑回归算法最小化的方法一样,需要对J(\theta)求导,重点在于,对J(\theta)关于\theta_{ji}的偏导该如何计算?
    假设,我们只有一个训练样本(x,y),在上述的神经网络中,根据前向传播算法,计算方式如下所示:

    为了计算J(\theta)的导数,将会采用一种反向传播(BackPropagation)的算法,以上述神经网络为例,就是计算第四层每一个输出单元的输出值a^{(4)}与训练样本真实值y之间的差,如下所示:
    \delta^{(4)}= a_j^{(4)}-y_j^{(4)}

根据前向传播算法,可以有以下计算:
\delta^{(3)} = (\theta^{(3)})^T\delta^{(4)}.*g'(z^{(3)})

\delta^{(2)} = (\theta^{(2)})^T\delta^{(3)}.*g'(z^{(2)})

其中,g'(z) = a.*(1-a)
以上,我们介绍了一个训练样本的反向传播算法的计算过程,在一个大小为m训练集中,其计算过程如下所示:
初始化设置\delta_{(ji)}=0,
for \ \ i \ \ to \ \ \ m
\ \ \ \ set \ \ a^{(1)} = x^{(i)}

\ \ \使用前向传播算法计算a^{(l)}

\ \ \根据y^{(i)},计算\delta^{(L)} = a^{(L)}-y^{(i)}

\ \ \根据反向传播算法,计算\delta^{(l)}

\ \ \ \ \delta^{(l)}_{ij}:=\delta_{ij}^{(l)}+a_j^{(l)}\delta^{(l)}_{i}

最后,带有正则项的计算方式如下所示:
D_{ij}^{(l)} = \frac{1}{m}\delta_{ij}^{(l)}+a_j^{(l)}\delta^{(l)}_{i} \ \ \ if \ \ j\ne0

D_{ij}^{(l)} = \frac{1}{m}\delta_{ij}^{(l)} \ \ \ \ if \ \ j = 0

注意:利用反向传播算法计算\delta^{(l)}时,从\delta^{(L-1)}一直计算到\delta^{(2)}\delta^{(1)}不用计算,因为输入项x^{(i)}没有误差。

  • 深入理解反向传播算法
    神经网络的学习中,我们已经详细了解了神经网络的计算原理,即前向传播算法,如下公式所示:

a_1^{(2)} = g(\theta_{10}^{(1)}x_0+\theta_{11}^{(1)}x_1+\theta_{12}^{(1)}x_2+\theta_{13}^{(1)}x_3)

a_2^{(2)} = g(\theta_{20}^{(1)}x_0+\theta_{21}^{(1)}x_1+\theta_{22}^{(1)}x_2+\theta_{23}^{(1)}x_3)

a_3^{(2)} = g(\theta_{30}^{(1)}x_0+\theta_{31}^{(1)}x_1+\theta_{32}^{(1)}x_2+\theta_{33}^{(1)}x_3)

h_\theta(x) = a_1^{(3)} = g(\theta_{10}^{(2)}a_0^{(2)}+\theta_{(11)}^{(2)}a_1^{(2)}+\theta_{12}^{(2)}a_2^{(2)}+\theta_{13}^{(2)}a_3^{(2)})


有了以上前向传播算法的计算原理,反向传播算法的只是跟前向传播算法的计算方向不一样而已。
不带正则项的损失函数计算方法如下所示:
J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]

与线性回归类似,可以近似认为损失函数的计算如下所示,看做某种方差函数。

J(\theta) = (h_\theta(x^{(i)})-y^{(i)})^2

神经网络中,\delta_j^{(l)} = \frac{\partial}{\partial z_j^{(l)}}J(\theta_j),根据其反向传播的特点,前一层的\delta^{(l)}由后一层的\delta^{(l+1)}乘以其路径上的\theta参数得到。

梯度检测

线性回归和逻辑回归中,使用梯度下降算法来实现最小化J(\theta)的值,在神经网络反向传播算法的实现过程中,也使用梯度下降算法得到最小的J(\theta)的值,但是与之前的算法相比,在反向传播的过程中会出现未知bug使得梯度下降算法得到的J(\theta)的值会出现误差,为了消除这种误差,采用梯度检测的方法,在梯度下降算法中,我们要得到J(\theta)的值,可以如下图所示,取得导数的近似值。


梯度的值,可以用以下公式表示:

\frac{\partial}{\partial \theta}J(\theta) = \frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2\epsilon}

其中,\epsilon是一个极小值,一般取\epsilon = 10^{-4}
以上,我们只考虑了\theta是实数的情况,神经网络的算法中,\theta是一个n个元素的向量(\theta \in R^n),其梯度计算方式可以如下表示:

通过以上数值估计的方法得到的J(\theta)关于\theta的偏导数,与反向传播算法得到的偏导数相比较,如果两者大小接近,则说明反向传播算法得到的梯度是正确的。

随机初始化

梯度下降算法中,需要对\theta参数初始化,在逻辑回归中,初始化的参数一般全部取0,但是在神经网络中,这一做法是无效的。\theta参数是神经网络中权重参数,当取为0时,会导致输入参数乘0的情况,导致神经网络相邻两层的\delta参数的不会发生变化。也会导致同一个神经单元的权重参数相一致。这样就会导致神经网络的高度冗余,最后导致神经网络的输出只有一个特征。

随机初始化的过程中,\theta取值通常如下所示,随机初始化取得的值一般在0到1之间。
\theta_{ij}^{(l)} \in [-\epsilon, \epsilon]

总结

以上,介绍了神经网络中的反向传播算法,结合之前的内容,训练一个神经网络的步骤如下所示:

  • 确定神经网络的架构:
    神经网络的组成由输入层,输出层和隐藏层构成,其架构选择基本遵循以下原则:

    • 输入层:神经网络的输入层有输入参数x的维数决定。
    • 输出层:由输出参数y确定,例如,在手写数字识别中,输出层的结构就能确定是10个类别。
    • 隐藏层:一个神经网络中,隐藏层的层数一般默认为1,如果有多个隐藏层,则应该保证每个隐藏层的神经单元数目相同。隐藏层的单元数目可以和输入层的单元数目相匹配,也可以比输入层的单元数目大几倍。
  • 神经网络的训练
    神经网络的训练大致可以有以下几个步骤确定,如下所示:

    • 随机初始化权重参数,一般取很小的值,接近于0。

    • 执行前向传播算法,即也就是对于任意输入x^{(i)},都有输出h_\theta(x^{(i)})

    • 计算损失函数J(\theta)

    • 利用反向传播算法计算出J(\theta)关于\theta的偏导数\frac{\partial}{\partial \theta_{ij}^{(l)}}J(\theta)

    • 使用梯度检测,即也就是比较数值方法得到导数值与反向传播算法得到的到数值是否接近。

    • 停止使用梯度检测,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容