稀疏自编码重述
From Ufldl
Line 3: | Line 3: | ||
Wiki上传者:严晓东;姚涛 | Wiki上传者:严晓东;姚涛 | ||
- | == Sparse Autoencoder Recap == | + | == Sparse Autoencoder Recap[稀疏自编码重述] == |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
:【原文】: | :【原文】: | ||
Line 29: | Line 21: | ||
从前面(神经网络)自编码器描述可知,位于神经网络中的神经元都采用相同的激励函数。 | 从前面(神经网络)自编码器描述可知,位于神经网络中的神经元都采用相同的激励函数。 | ||
在注解中,我们修改了自编码器定义,使得某些神经元采用不同的激励函数。这样得到的模型更容易应用,而且模型对参数的变化也更为鲁棒。 | 在注解中,我们修改了自编码器定义,使得某些神经元采用不同的激励函数。这样得到的模型更容易应用,而且模型对参数的变化也更为鲁棒。 | ||
+ | |||
:【原文】: | :【原文】: | ||
Line 68: | Line 61: | ||
其中 <math>a^{(3)}</math> 是输出. 在自编码器中, <math>a^{(3)}</math> 近似重构了输入<math>x = a^{(1)}</math>。 | 其中 <math>a^{(3)}</math> 是输出. 在自编码器中, <math>a^{(3)}</math> 近似重构了输入<math>x = a^{(1)}</math>。 | ||
+ | |||
:【原文】: | :【原文】: | ||
Line 104: | Line 98: | ||
设定<math>a^{(3)} = z^{(3)}</math>可以很简单的解决上述问题。从形式上来看,就是输出端使用恒等函数<math>f(z) = z</math>作为激励函数,于是有<math>a^{(3)} = f(z^{(3)}) = z^{(3)}</math>。我们称该特殊的激励函数为 '''线性激励函数 '''(称为恒等激励函数可能更好些)。 | 设定<math>a^{(3)} = z^{(3)}</math>可以很简单的解决上述问题。从形式上来看,就是输出端使用恒等函数<math>f(z) = z</math>作为激励函数,于是有<math>a^{(3)} = f(z^{(3)}) = z^{(3)}</math>。我们称该特殊的激励函数为 '''线性激励函数 '''(称为恒等激励函数可能更好些)。 | ||
需要注意,神经网络中隐含层的神经元依然使用S型(或者tanh)激励函数。这样隐含单元的激励公式为 <math>\textstyle a^{(2)} = \sigma(W^{(1)}x + b^{(1)})</math> ,其中<math>\sigma(\cdot)</math> 是S型函数, <math>x</math> 是输入, <math>W^{(1)}</math> 和<math>b^{(1)}</math> 分别是隐单元的权重和偏差项。我们仅在输出层中使用线性激励函数。 | 需要注意,神经网络中隐含层的神经元依然使用S型(或者tanh)激励函数。这样隐含单元的激励公式为 <math>\textstyle a^{(2)} = \sigma(W^{(1)}x + b^{(1)})</math> ,其中<math>\sigma(\cdot)</math> 是S型函数, <math>x</math> 是输入, <math>W^{(1)}</math> 和<math>b^{(1)}</math> 分别是隐单元的权重和偏差项。我们仅在输出层中使用线性激励函数。 | ||
+ | |||
:【原文】: | :【原文】: | ||
Line 113: | Line 108: | ||
一个自编码器在这个设置中,有一个S型(或tanh)隐含层和一个线性输出层—被称为'''线性解码'''。在这个模型中,我们有 <math>\hat{x} = a^{(3)} = z^{(3)} = W^{(2)}a + b^{(2)}</math>。因为输出<math>\hat{x} </math>是一个包含隐单元的线性函数,通过改变<math>W^{(2)}</math> 的值,每一个输出单元<math>a^{(3)}</math> 可以用来构造产生大于1或者小于0的值。这让我们可以采用构造稀疏自编码实现实值输入而不需以特定范围来预限定每一个输入样。 | 一个自编码器在这个设置中,有一个S型(或tanh)隐含层和一个线性输出层—被称为'''线性解码'''。在这个模型中,我们有 <math>\hat{x} = a^{(3)} = z^{(3)} = W^{(2)}a + b^{(2)}</math>。因为输出<math>\hat{x} </math>是一个包含隐单元的线性函数,通过改变<math>W^{(2)}</math> 的值,每一个输出单元<math>a^{(3)}</math> 可以用来构造产生大于1或者小于0的值。这让我们可以采用构造稀疏自编码实现实值输入而不需以特定范围来预限定每一个输入样。 | ||
- | |||
:【一校】: | :【一校】: | ||
Line 119: | Line 113: | ||
一个S型或tanh隐含层以及线性输出层构成的自编码器,我们称为'''线性解码器'''。 | 一个S型或tanh隐含层以及线性输出层构成的自编码器,我们称为'''线性解码器'''。 | ||
在这个线性解码器模型中,<math>\hat{x} = a^{(3)} = z^{(3)} = W^{(2)}a + b^{(2)}</math>。因为输出<math>\hat{x} </math>是隐单元激励输出的线性函数,改变<math>W^{(2)}</math> ,可以使输出值<math>a^{(3)}</math> 大于1或者小于0。这使得我们可以用实值输入来训练稀疏自编码器,避免预先缩放样本到给定范围。 | 在这个线性解码器模型中,<math>\hat{x} = a^{(3)} = z^{(3)} = W^{(2)}a + b^{(2)}</math>。因为输出<math>\hat{x} </math>是隐单元激励输出的线性函数,改变<math>W^{(2)}</math> ,可以使输出值<math>a^{(3)}</math> 大于1或者小于0。这使得我们可以用实值输入来训练稀疏自编码器,避免预先缩放样本到给定范围。 | ||
+ | |||
:【原文】: | :【原文】: | ||
Line 138: | Line 133: | ||
\end{align} | \end{align} | ||
</math> | </math> | ||
- | |||
:【初译】: | :【初译】: | ||
Line 157: | Line 151: | ||
\end{align} | \end{align} | ||
</math> | </math> | ||
- | |||
:【一校】: | :【一校】: | ||
Line 176: | Line 169: | ||
\end{align} | \end{align} | ||
</math> | </math> | ||
- | |||
- | |||
:【原文】: | :【原文】: | ||
- | |||
Of course, when using backpropagation to compute the error terms for the ''hidden'' layer: | Of course, when using backpropagation to compute the error terms for the ''hidden'' layer: | ||
Line 203: | Line 193: | ||
因为隐含层采用一个S型(或tanh)的激励函数<math>f</math>,在上述表达式中,<math>f'(\cdot)</math>依然是S型(或tanh)函数的导数。 | 因为隐含层采用一个S型(或tanh)的激励函数<math>f</math>,在上述表达式中,<math>f'(\cdot)</math>依然是S型(或tanh)函数的导数。 | ||
- | |||
:【一校】: | :【一校】: | ||
- | |||
当然,若使用反向传播算法来计算隐含层的误差项时: | 当然,若使用反向传播算法来计算隐含层的误差项时: |