自我学习
From Ufldl
(→Overview) |
(→Learning features) |
||
Line 62: | Line 62: | ||
'''[初译]''' | '''[初译]''' | ||
- | 我们已经了解自编码神经网络(autoencoder)怎么用来从未被标记数据中学习特征。具体来说,假设我们有<math>\textstyle m_u</math>个未被标记的训练集合<math>\textstyle \{ x_u^{(1)}, x_u^{(2)}, \ldots, x_u^{(m_u)}\} | + | 我们已经了解自编码神经网络(autoencoder)怎么用来从未被标记数据中学习特征。具体来说,假设我们有<math>\textstyle m_u</math>个未被标记的训练集合<math>\textstyle \{ x_u^{(1)}, x_u^{(2)}, \ldots, x_u^{(m_u)}\}</math>(下标u代表“未被标记的”)。现在用它们来训练一个稀疏的自编码神经网络。(可以使用合适的白化以及其他预操作) |
- | + | ||
'''[一审]''' | '''[一审]''' | ||
- | 我们已经了解到如何使用一个自编码神经网络(autoencoder)来从无类标数据中学习特征。具体来说,假定有一个无类标的训练数据集<math>\textstyle \{ x_u^{(1)}, x_u^{(2)}, \ldots, x_u^{(m_u)}\} | + | 我们已经了解到如何使用一个自编码神经网络(autoencoder)来从无类标数据中学习特征。具体来说,假定有一个无类标的训练数据集<math>\textstyle \{ x_u^{(1)}, x_u^{(2)}, \ldots, x_u^{(m_u)}\}</math>(下标u代表“不带类标”)。现在用它们训练一个稀疏自编码神经网络(可以使用合适的whitening及其他预处理工作)。 |
- | + | ||
[[File:STL_SparseAE.png|350px]] | [[File:STL_SparseAE.png|350px]] | ||
+ | |||
+ | |||
+ | '''[原文]''' | ||
+ | Having trained the parameters <math>\textstyle W^{(1)}, b^{(1)}, W^{(2)}, b^{(2)}</math> of this model, | ||
+ | given any new input <math>\textstyle x</math>, we can now compute the corresponding vector of | ||
+ | activations <math>\textstyle a</math> of the hidden units. As we saw previously, this often gives a | ||
+ | better representation of the input than the original raw input <math>\textstyle x</math>. We can also | ||
+ | visualize the algorithm for computing the features/activations <math>\textstyle a</math> as the following | ||
+ | neural network: | ||
+ | |||
+ | '''[初译]''' | ||
+ | 训练得到的模型参数<math>\textstyle W^{(1)}, b^{(1)}, W^{(2)}, b^{(2)}</math>,对于任何新的输入<math>\textstyle x</math>,可以计算隐藏单元对应的activations <math>\textstyle a</math>向量。正如前面看到的,这种方法常能给出比原始输入<math>\textstyle x</math>更好的表达重现。如下的神经网络图可视化地阐释了特征/activations <math>\textstyle a</math>的计算: | ||
+ | |||
+ | '''[一审]''' | ||
+ | 利用训练得到的模型参数<math>\textstyle W^{(1)}, b^{(1)}, W^{(2)}, b^{(2)}</math>,给定任意的输入数据<math>\textstyle x</math>,可以计算隐藏单元对应的激活值(activations)向量<math>\textstyle a</math>。如前所述,相比原始输入<math>\textstyle x</math>来说,这样做可以得到一个更好的特征描述。下图的神经网络描述了特征/激活值向量<math>\textstyle a</math>的计算。 | ||
+ | |||
+ | [[File:STL_SparseAE_Features.png|300px]] | ||
+ | |||
+ | |||
+ | '''[原文]''' | ||
+ | This is just the sparse autoencoder that we previously had, with with the final layer removed. | ||
+ | |||
+ | '''[初译]''' | ||
+ | 这是之前得到的移除了最终层次的稀疏自编码神经网络。 | ||
+ | |||
+ | '''[一审]''' | ||
+ | 这实际上就是之前得到的稀疏自编码神经网络,在这里去掉了最后一层。 | ||
+ | |||
+ | |||
+ | '''[原文]''' | ||
+ | Now, suppose we have a labeled training set <math>\textstyle \{ (x_l^{(1)}, y^{(1)}), | ||
+ | (x_l^{(2)}, y^{(2)}), \ldots (x_l^{(m_l)}, y^{(m_l)}) \}</math> of <math>\textstyle m_l</math> examples. | ||
+ | (The subscript "l" stands for "labeled.") | ||
+ | We can now find a better representation for the inputs. In particular, rather | ||
+ | than representing the first training example as <math>\textstyle x_l^{(1)}</math>, we can feed | ||
+ | <math>\textstyle x_l^{(1)}</math> as the input to our autoencoder, and obtain the corresponding | ||
+ | vector of activations <math>\textstyle a_l^{(1)}</math>. To represent this example, we can either | ||
+ | just '''replace''' the original feature vector with <math>\textstyle a_l^{(1)}</math>. | ||
+ | Alternatively, we can '''concatenate''' the two feature vectors together, | ||
+ | getting a representation <math>\textstyle (x_l^{(1)}, a_l^{(1)})</math>. | ||
+ | |||
+ | '''[初译]''' | ||
+ | 现在,假设有一组大小为<math>\textstyle m_l</math>个的被标记训练集<math>\textstyle \{ (x_l^{(1)}, y^{(1)}), | ||
+ | (x_l^{(2)}, y^{(2)}), \ldots (x_l^{(m_l)}, y^{(m_l)}) \}</math>。(下标l代表被“标记的”),我们可以找到更好的输入的重新表达形式。相比起去重现第一个训练样本<math>\textstyle x_l^{(1)}</math>,我们将<math>\textstyle x_l^{(1)}</math>作为自编码神经网络的输入,以此获得对应的activations <math>\textstyle a_l^{(1)}</math>向量。为了重新表达这个样本,用<math>\textstyle a_l^{(1)}</math>来替换原始的特征向量<math>\textstyle x_l^{(1)}</math>。或者,将两个特征向量合并起来,得到重新表达形式<math>\textstyle (x_l^{(1)}, a_l^{(1)})</math>。 | ||
+ | |||
+ | '''[一审]''' | ||
+ | 一审:假定有大小为<math>\textstyle m_l</math>的带类标训练数据集 <math>\textstyle \{ (x_l^{(1)}, y^{(1)}), | ||
+ | (x_l^{(2)}, y^{(2)}), \ldots (x_l^{(m_l)}, y^{(m_l)}) \}</math>(下表l表示“带类标”),对于输入数据,可以找到更好的特征描述。相比原始的数据特征描述 ,可以将<math>\textstyle x_l^{(1)}</math>输入到稀疏自编码神经网络,得到隐藏单元激活值向量<math>\textstyle a_l^{(1)}</math>。接下来,可以直接使用来代替<math>\textstyle a_l^{(1)}</math>描述原始数据<math>\textstyle x_l^{(1)}</math>。也可以合二为一,使用新的向量<math>\textstyle (x_l^{(1)}, a_l^{(1)})</math>来描述。 | ||
+ | |||
+ | |||
+ | '''[原文]''' | ||
+ | Thus, our training set now becomes | ||
+ | <math>\textstyle \{ (a_l^{(1)}, y^{(1)}), (a_l^{(2)}, y^{(2)}), \ldots (a_l^{(m_l)}, y^{(m_l)}) | ||
+ | \}</math> (if we use the replacement representation, and use <math>\textstyle a_l^{(i)}</math> to represent the | ||
+ | <math>\textstyle i</math>-th training example), or <math>\textstyle \{ | ||
+ | ((x_l^{(1)}, a_l^{(1)}), y^{(1)}), ((x_l^{(2)}, a_l^{(1)}), y^{(2)}), \ldots, | ||
+ | ((x_l^{(m_l)}, a_l^{(1)}), y^{(m_l)}) \}</math> (if we use the concatenated | ||
+ | representation). In practice, the concatenated representation often works | ||
+ | better; but for memory or computation representations, we will sometimes use | ||
+ | the replacement representation as well. | ||
+ | |||
+ | '''[初译]''' | ||
+ | 因此,现在训练集合变成<math>\textstyle \{ (a_l^{(1)}, y^{(1)}), (a_l^{(2)}, y^{(2)}), \ldots (a_l^{(m_l)}, y^{(m_l)}) | ||
+ | \}</math>(使用上述的替换表达形式,同时使用<math>\textstyle a_l^{(i)}</math>来表达第<math>\textstyle i</math>个训练样本)。训练集合也可以表示为 <math>\textstyle \{ | ||
+ | ((x_l^{(1)}, a_l^{(1)}), y^{(1)}), ((x_l^{(2)}, a_l^{(1)}), y^{(2)}), \ldots, | ||
+ | ((x_l^{(m_l)}, a_l^{(1)}), y^{(m_l)}) \}</math> (使用上述的连接表达形式)。在实践中,这种连接表达形式常常有更好的效果。但是,考虑到内存或者计算表达形式,有些时候,需要使用替换的表达形式。 | ||
+ | |||
+ | '''[一审]''' | ||
+ | 经过变换后,训练数据集就变成<math>\textstyle \{ (a_l^{(1)}, y^{(1)}), (a_l^{(2)}, y^{(2)}), \ldots (a_l^{(m_l)}, y^{(m_l)}) | ||
+ | \}</math>或者是<math>\textstyle \{ | ||
+ | ((x_l^{(1)}, a_l^{(1)}), y^{(1)}), ((x_l^{(2)}, a_l^{(1)}), y^{(2)}), \ldots, | ||
+ | ((x_l^{(m_l)}, a_l^{(1)}), y^{(m_l)}) \}</math>(决定于使用<math>\textstyle a_l^{(1)}</math>替换<math>\textstyle x_l^{(1)}</math>还是将二者合并)。在实践中,将<math>\textstyle a_l^{(1)}</math>和<math>\textstyle x_l^{(1)}</math>合并通常表现的更好。但是考虑到内存和计算的成本,也可以使用替换操作。 | ||
+ | |||
+ | |||
+ | '''[原文]''' | ||
+ | Finally, we can train a supervised learning algorithm such as an SVM, logistic | ||
+ | regression, etc. to obtain a function that makes predictions on the <math>\textstyle y</math> values. | ||
+ | Given a test example <math>\textstyle x_{\rm test}</math>, we would then follow the same procedure: | ||
+ | For feed it to the autoencoder to get <math>\textstyle a_{\rm test}</math>. Then, feed | ||
+ | either <math>\textstyle a_{\rm test}</math> or <math>\textstyle (x_{\rm test}, a_{\rm test})</math> to the trained classifier to get a prediction. | ||
+ | |||
+ | '''[初译]''' | ||
+ | 最终,我们能够使用一个监督学习算法来训练,比如,SVM,logistic回归,等等,来获得对<math>\textstyle y</math>值的预测。对于一个测试样例<math>\textstyle x_{\rm test}</math>,遵守这样的过程:首先,把它送入自编码神经网络得到<math>\textstyle a_{\rm test}</math>。然后,将<math>\textstyle a_{\rm test}</math>或者<math>\textstyle (x_{\rm test}, a_{\rm test})</math>送到分类器得到预测值。 | ||
+ | |||
+ | '''[一审]''' | ||
+ | 最终,可以训练出一个有监督学习算法(例如svm,logistic regression等),得到一个判别函数对<math>\textstyle y</math>值就行预测。预测过程如下:给定一个测试样例<math>\textstyle x_{\rm test}</math>,重复之前的过程,送入稀疏自编码神经网络,得到<math>\textstyle a_{\rm test}</math>。然后将<math>\textstyle a_{\rm test}</math>或者(<math>\textstyle (x_{\rm test}, a_{\rm test})</math>)送入训练出的分类器中,得到预测值。 |