神经网络向量化

From Ufldl

Jump to: navigation, search
Line 26: Line 26:
</syntaxhighlight>  
</syntaxhighlight>  
-
这个<tt>for</tt>循环能否去掉呢?对于很多算法而言,我们使用向量来表示计算过程中的中间结果。例如在前面的非向量化实现(9-2)中,<tt>z2</tt>,<tt>a2</tt>,<tt>z3</tt>都是列向量,分别用来计算隐层和输出层的激励结果。为了充分利用并行化和高效矩阵运算的优势,我们希望算法能同时处理多个训练样本。让我们先暂时忽略前面公式中的<tt>b1</tt>和<tt>b2</tt>(把它们设置为0),那么可以实现如下:
+
这个<tt>for</tt>循环能否去掉呢?对于很多算法而言,我们使用向量来表示计算过程中的中间结果。例如在前面的非向量化实现中,<tt>z2</tt>,<tt>a2</tt>,<tt>z3</tt>都是列向量,分别用来计算隐层和输出层的激励结果。为了充分利用并行化和高效矩阵运算的优势,我们希望算法能同时处理多个训练样本。让我们先暂时忽略前面公式中的<tt>b1</tt>和<tt>b2</tt>(把它们设置为0),那么可以实现如下:
<syntaxhighlight>  
<syntaxhighlight>  
Line 117: Line 117:
为做到这一点,我们先把向量<tt>delta3</tt>和<tt>delta2</tt>替换为矩阵,其中每列对应一个训练样本。我们还要实现一个函数<tt>fprime(z)</tt>,该函数接受矩阵形式的输入<tt>z</tt>,并且对矩阵的每列分别执行<math>f'(\cdot)</math>。这样,上面<tt>for</tt>循环中的4行Matlab代码中每行都可单独向量化,以一行新的(向量化的)Matlab代码替换它(不再需要外层的<tt>for</tt>循环)。
为做到这一点,我们先把向量<tt>delta3</tt>和<tt>delta2</tt>替换为矩阵,其中每列对应一个训练样本。我们还要实现一个函数<tt>fprime(z)</tt>,该函数接受矩阵形式的输入<tt>z</tt>,并且对矩阵的每列分别执行<math>f'(\cdot)</math>。这样,上面<tt>for</tt>循环中的4行Matlab代码中每行都可单独向量化,以一行新的(向量化的)Matlab代码替换它(不再需要外层的<tt>for</tt>循环)。
-
在向量化练习([[Exercise:Vectorization|Vectorization exercise]])中,我们要求你自己去推导出这个算法的向量化版本。如果你已经能从上面的描述中了解如何去做,那么我们强烈建议你去实践一下。虽然我们已经为你准备了反向传播的向量化实现提示([[Backpropagation vectorization hints]]),但还是鼓励你在不看提示的情况下自己去推导一下。
+
[[Exercise:Vectorization|向量化练习]]中,我们要求你自己去推导出这个算法的向量化版本。如果你已经能从上面的描述中了解如何去做,那么我们强烈建议你去实践一下。虽然我们已经为你准备了反向传播的[[Backpropagation vectorization hints|向量化实现提示]],但还是鼓励你在不看提示的情况下自己去推导一下。
==稀疏自编码网络==
==稀疏自编码网络==
-
[[自编码算法与稀疏性|稀疏自编码]]网络中包含一个额外的稀疏惩罚项,目的是限制神经元的平均激活率,使其接近某个(预设的)目标激活率<math>\rho</math>。 其实在对单个训练样本上执行反向传播时,我们已经考虑了如何计算这个稀疏惩罚项,如下所示:
+
[[自编码算法与稀疏性|稀疏自编码]]网络中包含一个额外的稀疏惩罚项,目的是限制神经元的平均激活率,使其接近某个(预设的)目标激活率<math>\rho</math>。其实在对单个训练样本上执行反向传播时,我们已经考虑了如何计算这个稀疏惩罚项,如下所示:
:<math>\begin{align}
:<math>\begin{align}

Revision as of 13:34, 16 March 2013

Personal tools