我正在努力更好地理解机器学习原理,但我有点卡在如何将所有内容联系在一起上。
例如,我被分配了对三组模式进行分类的任务。每个模式都有一个与之相关的目标值(为了简单起见,假设是1、0和-1)。我将算法通过LMS算法运行了一遍。
我计算了输出和误差:
a = w(n) * x(n) e(n) = d(n) - w(n)x(n)
然后我重新计算了权重向量:
w(n+1) = w(n) + alpha*x(n)*e(n)
我对这三个模式都这样做了。我迭代重新计算权重向量大约30次。
现在,我该如何处理我创建的这个新的权重向量?我是否应该将这个权重向量应用于一组新的“测试数据”?
“收敛”的权重向量现在是否成为尝试分类任何未见数据的权重向量?
有了这个权重向量,我如何将其应用于新的数据集?梯度下降、均方误差和收敛在这个过程中如何发挥作用?
回答:
正如Matias提到的,这不是一个神经网络——LMS(我假设这里指的是最小均方)更接近于线性方法,如线性回归。相比之下,神经网络模型类通常是由多个节点排列成电路形式的模型组成,通过几层变换传递输入数据,使得最终结果通常是输入的非常复杂的非线性函数。
话虽如此:你的更新步骤需要涉及某个地方的梯度才能生效。你写的是
w(n+1) = w(n) + alpha*x(n)*e(n)
我将它重写为
new_weight = curr_weight + learning_rate * gradient
其中
gradient = X * transpose(e)
这是误差向量和输入数据向量的点积。
至于我为什么决定称之为“梯度”,请参见这个更新规则的推导——这个更新规则来自于对由均方误差给出的成本函数的梯度下降。在“足够”的迭代之后,你拥有的权重将是最小化均方误差的权重,因此得名。
现在,我该如何处理我创建的这个新的权重向量?我是否应该将这个权重向量应用于一组新的“测试数据”?“收敛”的权重向量现在是否成为尝试分类任何未见数据的权重向量?
是的,正是如此!我们称最终的权重集为final_weights
,假设它有k
个条目,其中k
必须是每个数据点的维度(所以你的输入数据可能是n-by-k
的矩阵,每一行代表一个k
维的数据点,因此矩阵维度是合适的)。
然后你可以对未见的数据点X ~ 1-by-k
生成预测
prediction = final_weights * X
并且prediction
将是一个浮点值。(你说你想要0、+1、-1作为你的目标值,但根据它们是无序标签还是有序值,你需要不同的策略;例如,如果它们代表温度,你可能会尝试对prediction
取地板和天花板,但如果它们代表无序类别,你可能需要训练三个单独的模型,每个模型指示落入特定类别的可能性。如果这看起来不清楚,请留言,我会添加编辑。)
如果你真的想,你可以在上面使用任何任意的权重集;只是你会用一个全部由零或全部由随机数组成的权重向量生成糟糕的预测。训练过程(即所有这些迭代更新)是为了确保你有一个还算不错的权重向量,即一个基于过去的训练数据生成合理好的预测的权重向量。
有了这个权重向量,我如何将其应用于新的数据集?
使用上面的预测规则,将其应用于新的、未见的数据,一次一个数据点。
梯度下降、均方误差和收敛在这个过程中如何发挥作用?
梯度下降通过上述提到的更新规则实现。考虑成本函数
Cost(weights) := mean-square-error(weights)
是使用权重的函数;你想最小化成本,所以你使用梯度下降来找到实现这一点的权重。我们说权重“收敛”,因为当你处于最佳权重集时,它们将停止更新,即使你继续迭代。之所以如此,是因为误差将减少到零,当这种情况发生时,你的更新规则将是
new_weights = old_weights + (learning_rate * 0)
希望这有意义!