我开发了一个图像处理程序,可以识别给定数字图像的数字。每张图像为 27x27 像素 = 729 像素。我取每个 R、G 和 B 值,这意味着我从每个图像中有 2187 个变量(截距 +1 = 总共 2188)。
我使用了以下梯度下降公式:
Repeat {
θj = θj−α/m∑(hθ(x)−y)xj
}
其中θj
是变量 j 的系数;α
是学习率;hθ(x)
是假设;y
是实际值,xj
是变量 j 的值。m
是训练集的数量。hθ(x)
,y
是针对每个训练集的(即,这就是求和符号的用途)。进一步的假设被定义为:
hθ(x) = 1/(1+ e^-z)
z= θo + θ1X1+θ2X2 +θ3X3...θnXn
有了这个和 3000 张训练图像,我能够在一个多小时内训练我的程序,并且在交叉验证集上进行测试时,它能够识别正确的图像 ~ 67% 的时间。
我想改进它,所以我决定尝试 2 次多项式。
然而,每张图像的变量数量从 2188 个跃升至 2,394,766 个!仅做一步梯度下降就需要我一个小时。
所以我的问题是,机器学习中如何处理大量变量?一方面,我没有足够的空间来为每个训练集保存那么多变量。另一方面,我目前为每个训练样本存储 2188 个变量,但我必须执行 O(n^2) 才能将每个变量的值乘以另一个变量(即多项式到 2 阶值)。
因此,非常感谢任何建议/建议。