写在前面

我终于把神经网络的梯度下降公式推导完毕了!先看看为了伟大工程牺牲的草稿纸吧~

接下来我就分享出我推导的公式以及我总结出来的规律。

梯度下降

神经网络如图所示:

前馈神经网络调整参数的过程可以看成是将误差通过神经网络的连线逐层往回传递从而调整不同层神经元之间的连接系数神经元的阈值。那么误差是如何回传的呢?那就是通过求微分来实现了,求上层神经元输出对下层神经元输出的微分,再给一定的学习步长,通过微分x学习步长实现参数的微小调整从而使得整个神经网络达到最优状态。这也是最常用的梯度下降法

公式分析

首先我们明确要整定的参数以及推导结果,左边红框里面就是我们所要整定的参数:

各个神经元的输入输出关系我已经在上一篇博客中给出了,这里再集中给出一下:

因为推导过程过于复杂,我这边先给出结果,然后对某一结果进行一个定性的分析,有兴趣的同学可以自行推导一下过程:

首先是误差函数对于第一个隐层到第二个隐层神经元的权重的微分,结果如下所示:

公式是通过求导的链式法则来实现的,因为公式过于复杂,我手写一下其中一个系数的求导关系式:

通过推导公式我们可以清楚的看出将链式求导连接起来的就是各个神经网络层的输出,m,n,y不带“帽子”的时候是神经元的输入,带上“帽子”的时候是神经元的输出,神经网络构造链式求导的基本条件就是输入层的神经元和输出层的神经元是直接或者间接连在一起的

我是以系数为例,阈值的推导过程类似,本质上都是求导的链式法则的应用。

latex源码:

    \\
        $
        \frac{\partial E_{k}}{\partial \nu{ij}} = (\hat{y}_{1} - y)*[\hat{y}_{1}*(1-\hat{y}_{1})]*
        [\hat{n}_{j}*(1-\hat{n}_{j})]*\gamma_{j}*\hat{m}_{i}
        $    
    \\
    \\
            $
        \frac{\partial E_{k}}{\partial \gamma{i}} = (\hat{y}_{1} - y)*[\hat{y}_{1}*(1-\hat{y}_{1})]*\hat{n}_{i}
        $    
    \\
        \\
        $
        \frac{\partial E_{k}}{\partial \omega{i}} = \sum_{i=1}^{4} (\hat{y}_{1} - y)*[\hat{y}_{1} * (1-\hat{y}_{1})] *[\hat{n}_{i}*(1-\hat{n}_{i})]*\gamma_{i} * [\hat{m}_{i}*(1-\hat{m}_{i})] * \nu_{ii} * x_{1}
        $    
    \\
        \\
    $
        \frac{\partial E_{k}}{\partial \theta{1i}} = \sum_{j=1}^{4} (-1) * (\hat{y}_{1} - y)*[\hat{y}_{1} * (1-\hat{y}_{1})] *[\hat{n}_{j}*(1-\hat{n}_{j})]*\gamma_{j} * [\hat{m}_{i}*(1-\hat{m}_{i})] * \nu_{ij} 
        $    
    \\
        \\
    $
        \frac{\partial E_{k}}{\partial \theta{2i}} = (-1)*(\hat{y}_{1} - y)*[\hat{y}_{1}*(1-\hat{y}_{1})]*
        [\hat{n}_{i}*(1-\hat{n}_{i})]*\gamma_{i}
    $    
    \\
        \\
    $
    \frac{\partial E_{k}}{\partial \theta{3}} = (-1) * (\hat{y}_{1} - y)*[\hat{y}_{1}*(1-\hat{y}_{1})]
    $    
    \\