用反向传导思想求导
From Ufldl
Line 1: | Line 1: | ||
[原文] | [原文] | ||
- | |||
== Introduction == | == Introduction == | ||
Line 9: | Line 8: | ||
简介 | 简介 | ||
- | + | 这一节关于反向传导算法,你会简要了解到使用反向传导作为一种求导方法,以便稀疏自编码器的学习。事实证明这种手段同矩阵计算相结合提供了计算复杂矩阵函数(从矩阵到实数的函数,或用符号表示,从 <math>\mathbb{R}^{r \times c} \rightarrow \mathbb{R}</math>)的强大方法与直觉。 | |
[一审] | [一审] | ||
Line 15: | Line 14: | ||
简介 | 简介 | ||
- | + | 在反向传导算法一节中,我们介绍了在稀疏自动编码器中用来求导的反向传导算法。事实证明这种手段同矩阵计算相结合可以提供计算复杂矩阵函数(从矩阵到实数的函数,或用符号表示,从<math>\mathbb{R}^{r \times c} \rightarrow \mathbb{R}</math>这样映射的函数)的强大方法与直觉。 | |
[原文] | [原文] | ||
Line 44: | Line 43: | ||
[初译] | [初译] | ||
- | + | 首先,回忆一下反向传导思想,这里我们用一种变形的形式逐渐逼近我们的目的: | |
<ol> | <ol> | ||
<li>对每一个第<math>n_l</math>层(最后一层)中的输出单元<math>i</math>,令 | <li>对每一个第<math>n_l</math>层(最后一层)中的输出单元<math>i</math>,令 | ||
Line 68: | Line 67: | ||
[一审] | [一审] | ||
- | + | 首先,我们回顾一下反向传导的思想,为了更适合我们的目的稍作修改呈现于下: | |
<ol> | <ol> | ||
<li>对每一个第<math>nl</math>层(最后一层)中的输出单元<math>i</math>,令 | <li>对每一个第<math>nl</math>层(最后一层)中的输出单元<math>i</math>,令 | ||
Line 135: | Line 134: | ||
[初译] | [初译] | ||
- | 假设我们有一个函数<math>F</math>,<math>F</math>以矩阵<math>X</math> | + | 假设我们有一个函数<math>F</math>,<math>F</math>以矩阵<math>X</math>为参数生成一个实数。我们希望用反向传导思想计算<math>F</math>关于 <math>X</math>的梯度,即<math>\nabla_X F</math>。一般思路是将函数<math>F</math> 看成一个多层神经网络,并使用后向传播思想求梯度。 |
[一审] | [一审] | ||
- | 假设我们有一个函数<math>F</math>,<math>F</math>以矩阵<math>X</math> | + | 假设我们有一个函数<math>F</math>,<math>F</math>以矩阵<math>X</math>为参数得到一个实数。我们希望用反向传导思想计算<math>F</math>关于<math>X</math>的梯度,即 <math>\nabla_X F</math>。大致思路是将函数<math>F</math>看成一个多层神经网络,并使用反向传导思想求梯度。 |
[原文] | [原文] | ||
Line 175: | Line 174: | ||
实例 | 实例 | ||
- | + | 为了描述如何使用反向传导思想计算关于输入的导数,我们要在例1,例2中用到稀疏编码一节中的两个函数。在例3中,我们使用一个独立成分分析一节中的函数来描述使用此思想计算关于权重的偏导的方法,以及在这种特殊情况下,如何处理绑定或重复的权重的情况。 | |
[一审] | [一审] | ||
- | + | 为了描述如何使用反向传导思想计算对于输入的导数,我们在例1,例2中用到稀疏编码一节中的两个函数。在例3中,我们使用一个独立成分分析一节中的函数来描述如何使用此思想计算对于权重的偏导,以及在这个特定例子中,如何处理相同或重复的权重的情况。 | |
[原文] | [原文] | ||
Line 351: | Line 350: | ||
[初译] | [初译] | ||
- | 一旦我们将<math>F</math>看成神经网络,梯度<math>\nabla_X F</math> | + | 一旦我们将<math>F</math>看成神经网络,梯度<math>\nabla_X F</math>就变得容易求了——用反向传导产生: |
<table align="center"> | <table align="center"> | ||
<tr><th width="50px">层</th><th width="200px">激励函数的导数<math>f'</math></th><th width="200px">Delta</th><th>该层输入<math>z</math></th></tr> | <tr><th width="50px">层</th><th width="200px">激励函数的导数<math>f'</math></th><th width="200px">Delta</th><th>该层输入<math>z</math></th></tr> | ||
Line 384: | Line 383: | ||
[一审] | [一审] | ||
- | 一旦我们将<math>F</math>看成神经网络,梯度<math>\nabla_X F</math> | + | 一旦我们将<math>F</math>看成神经网络,梯度<math>\nabla_X F</math>就变得容易求了——用反向传导得到: |
<table align="center"> | <table align="center"> | ||
<tr><th width="50px">层</th><th width="200px">激励函数的导数<math>f'</math></th><th width="200px">Delta</th><th>该层输入<math>z</math></th></tr> | <tr><th width="50px">层</th><th width="200px">激励函数的导数<math>f'</math></th><th width="200px">Delta</th><th>该层输入<math>z</math></th></tr> | ||
Line 580: | Line 579: | ||
[初译] | [初译] | ||
- | 一旦我们把<math>F</math>看做一个神经网络,梯度<math>\nabla_X F</math> | + | 一旦我们把<math>F</math>看做一个神经网络,梯度<math>\nabla_X F</math> 变得好求了——使用反向传导产生 |
<table align="center"> | <table align="center"> | ||
Line 621: | Line 620: | ||
[一审] | [一审] | ||
- | 一旦我们把<math>F</math>看做一个神经网络,梯度<math>\nabla_X F</math> | + | 一旦我们把<math>F</math>看做一个神经网络,梯度<math>\nabla_X F</math> 变得很容易计算——使用反向传导得到: |
<table align="center"> | <table align="center"> | ||
<tr><th width="50px">层</th><th width="200px">激励函数的导数 <math>f'</math> | <tr><th width="50px">层</th><th width="200px">激励函数的导数 <math>f'</math> |