神经网络向量化
From Ufldl
Line 15: | Line 15: | ||
更具体点来说,参照逻辑回归向量化的例子,我们用Matlab/Octave风格变量<tt>x</tt>表示包含输入训练样本的矩阵,<tt>x(:,i)</tt>代表第<math>\textstyle i</math>个训练样本。则x正向传播步骤可如下实现: | 更具体点来说,参照逻辑回归向量化的例子,我们用Matlab/Octave风格变量<tt>x</tt>表示包含输入训练样本的矩阵,<tt>x(:,i)</tt>代表第<math>\textstyle i</math>个训练样本。则x正向传播步骤可如下实现: | ||
- | <syntaxhighlight> | + | |
+ | <syntaxhighlight> | ||
% 非向量化实现 | % 非向量化实现 | ||
for i=1:m, | for i=1:m, | ||
Line 27: | Line 28: | ||
这个<tt>for</tt>循环能否去掉呢?对于很多算法而言,我们使用向量来表示计算过程中的中间结果。例如在前面的非向量化实现中,<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> |
% 向量化实现 (忽略 b1, b2) | % 向量化实现 (忽略 b1, b2) | ||
z2 = W1 * x; | z2 = W1 * x; |