感知器的样子
从外部看,感知器是一个函数,它接受n 参数(即n 维向量)并产生m 输出(即m 维向量)。
在内部,感知器由多层神经元组成,这样一层中的每个神经元都接收来自前一层所有神经元的输入,并使用该输入来计算单个输出。第一层由n 神经元组成,它接收输入。最后一层由m 神经元组成,并在感知器处理完输入后保存输出。
如何根据输入计算输出
从神经元 i 到神经元 j 的每个连接都有一个权重 w(i,j)(稍后我会解释它们的来源)。第二层神经元p 的total input 是第一层神经元的加权输出之和。所以
total_input(p) = Σ(output(k) * w(k,p))
其中k 运行在第一层的所有神经元上。一个神经元的激活是通过应用一个激活函数从神经元的总输入中计算出来的。一个常用的激活函数是费米函数,所以
activation(p) = 1/(1-exp(-total_input(p))).
通过应用output function,根据神经元的激活计算神经元的输出。一个经常使用的输出函数是身份f(x) = x(确实有些作者将输出函数视为激活函数的一部分)。我只是假设
output(p) = activation(p)
当计算出第二层所有神经元的输出时,使用该输出计算第三层的输出。迭代直到到达输出层。
权重从何而来
首先,权重是随机选择的。然后选择一些示例(从中您知道所需的输出)。将每个示例输入感知器并计算 error,即实际输出与期望输出相差多远。使用该错误来更新权重。计算新权重的最快算法之一是Resilient Propagation。
如何构建感知器
您需要解决的一些问题是
- 文档的相关特征是什么?如何将它们编码为
n-dimansional 向量?
- 应该选择哪些示例来调整权重?
- 应如何解释输出以对文档进行分类?示例:产生最可能类别的单个输出与为每个类别分配概率的向量。
- 需要多少个隐藏层,它们应该有多大?我建议从一个带有
n 神经元的隐藏层开始。
第一点和第二点对分类器的质量非常关键。感知器可能对示例进行正确分类,但在新文档上失败。您可能需要进行实验。要确定分类器的质量,请选择两组示例;一个用于训练,一个用于验证。很遗憾,由于缺乏实践经验,我无法为您提供更详细的提示来回答这些问题。