梯度下降法更新权值理论

版权声明:来源请注明出处 https://blog.csdn.net/qq_40196164/article/details/83007061

使用3层的神经网络(包含输入层和输出层)来演示是如何工作的。

网络:input 3个节点;hidden 3个节点;output 3个节点

参数:input:矩阵I是3*1的矩阵;W_{input\, hidden}为3*3的矩阵;W_{hidden\, output}为3*3的矩阵;output:矩阵为3*1的矩阵

计算hidden层节点的矩阵:X_{hidden} = W_{input\: hidden}\cdot I                         O_{hidden} = sigmoid(X_{hidden})

计算output层节点的输出:X_{}{output} = W_{hidden\:output}\cdot O_{hidden}                  O_{output} = sigmoid(X_{output})

如何根据梯度下降法来调节权重:

                                                           New\, w_{j\cdot k} = Old\, w_{j\cdot k} - \alpha \cdot \frac{\varphi E}{\varphi w_{j\cdot k}}     

其中: New\, W_{j\cdot k}是更新后的权重; Old\, W_{j\cdot k}是更新前的权重;\alpha是学习率;\frac{\varphi E}{\varphi w_{j\cdot k}}是斜率代表误差值和权重的比值

                                                         \alpha \cdot \frac{\varphi E}{\varphi w_{j\cdot k}} = \alpha \cdot E_{k}\cdot O_{k}(1 - O_{k})\cdot O_{j }^{\tau} 

其中:E_{k}是output层第k个节点的误差值,E_{k} = t_{k} - o_{k},t_{k}是目标值,O_{k}是实际值

          O_{k}是output层输出的实际值

          O_{j }^{\tau}是前一层的输出的转置

误差与权重的比值(也叫梯度)推导

  • 误差值 = 目标值 - 实际值,有下面三种选择
  • 误差值 = 目标值 - 实际值
  • 误差值 = |目标值 - 实际值|
  • 误差值 = (目标值 - 实际值)的平方,一般我们选择这个,因为使用平方误差,我们可以很容易的使用代数计算出梯度下降的斜率;误差函数平滑连续,这使得梯度下降法很好的发挥了作用-没有间断,也没有突然地跳跃;越接近最小值,梯度越小这意味着,如果我们使用了这个函数调节步长,超调的风险就会变得较小。

                            \frac{\varphi E}{\varphi w_{j\cdot k}} = \frac{\varphi \sum _{n}(t_{n} - o_{n})^{2}}{\varphi w_{j\cdot k}}      E_{k}是output层第k个节点的误差值,E_{k} = t_{k} - o_{k},t_{k}是目标值,O_{k}是实际值

由于节点的输出只取决于所连接的链接,就是取决于链接权重,这意味着误差函数根本就不需要对所有输出节点求和,便得到下式:                                  \frac{\varphi E}{\varphi w_{j\cdot k}} = \frac{\varphi \left ( t_{k} - o_{k} \right )^{2}}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot \frac{\varphi o_{k}}{\varphi w_{j\cdot k}}             t_{k}是一个常数

其中:o_{k} = \frac{1}{1 + e^{-\sum_{3}^{j=1}\left ( w_{j\cdot k} \cdot \frac{1}{1+e^{-\sum_{3}^{i=1}\left ( w_{i\cdot j} \cdot x_{i} \right )}}\right )}} = sigmoid\left ( \Sigma_{j} \cdot o_{j} \cdot w_{j\cdot k} \right )       也就是3层神经网络的输出值

                                        \frac{\varphi sigmoid\left ( x \right )}{\varphi x} = sigmoid\left ( x \right )\left ( 1-sigmoid\left ( x \right ) \right )

\frac{\varphi E}{\varphi w_{j\cdot k}} = \frac{\varphi \left ( t_{k} - o_{k} \right )^{2}}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot \frac{\varphi o_{k}}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot \frac{\varphi sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j}\right )}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right )\left ( 1- sigmoid(\Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right)) \cdot \frac{\varphi \left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right )}{\varphi w_{j\cdot k}}

所以:

\fn_phv \frac{\varphi E}{\varphi w_{j\cdot k}} = = -2\left ( t_{k} - o_{k} \right ) \cdot sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right )\left ( 1- sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right) \right ) \cdot o_{j} = E_{k} \cdot o_{k}\left ( 1 - o_{k} \right ) \cdot o_{j }^{\tau}

猜你喜欢

转载自blog.csdn.net/qq_40196164/article/details/83007061