当前位置: 首页 > 科技观察

机器学习难在哪里

时间:2023-03-22 13:45:42 科技观察

机器学习已经被广泛应用。教程、文章和开源代码无处不在。有时你只需要对机器学习算法有一点了解就可以在实践中应用它们。但机器学习仍然很困难:推动机器学习研究的科学本身就是困难的,需要创新、实验和坚持;也很难将已知的机器学习模型应用到实际工作中;市场上的机器学习工程师也比一般的软件工程师贵一点。困难不是来自数学,因为机器学习的相关实现不需要很高的数学基础。难点来自于:1.选择什么样的机器学习工具这需要透彻了解每种算法和模型的优缺点。这种技能可以通过学习这些模型(课程、教程、论文等)获得。当然,这种知识建构的难点存在于计算机的各个领域,不仅仅是机器学习。2.机器学习调试难这个难点体现在两个方面:1)算法不行;2)算法有效,但还不够好。机器学习的独特之处在于,要找到上述问题的原因“呈指数级”。通常,机器学习算法的调试时间较长,很多BUG很难用少量数据重现,往往出现在迭代的后期。很少有算法能一次成功,所以更多的时间花在调优模型上。指数级困难的调试在标准软件工程领域,当解决方案没有按预期工作时,通常有两件事被认为是错误的:算法和实现。下面以简单的递归算法为例:defrecursion(input):ifinputisendCase:returntransform(input)else:returnrecursion(transform(input))当算法不如预期时,我们可以枚举所有失败的情况,网络本例中的GridSearch如下图所示:横轴是算法设计可能出错的一些情况,纵轴是算法实现可能出错的情况。下一个调试过程是结合您收集到的有关此错误的信号,例如编译器错误、程序输出和您的直觉理解。这些信号和先验知识有助于对上图进行剪枝。在机器学习领域,还有两个额外的维度:真正适用的模型和数据。为了说明这两个维度,用随机梯度下降(SGD)训练逻辑回归(LR)是最简单的例子:算法的正确性由梯度下降更新方程组成;实现的正确性包括正确计算特征和参数更新;数据中的错误包括嘈杂的标签、预处理错误、未选择正确的特征或没有足够的数据。模型中的bug可能是模型的描述能力不足,比如你选择了线性分类器来处理非线性问题。我们的Debug过程已经从二维网格扩展到了四维超立方体(上图为了清楚只画了三个维度),第四维数据维度可以可视化为如下三维序列(注意:一个正确的解决方案只有一个立方体)。术语指数难度意味着在2D空间中,可能出错的方式在4D中为100,000,000,000,000,000,000,000。因此,根据手头的信息直觉哪里出错就成了机器学习的基本功。幸运的是,机器学习算法有更多可用的信息,例如:训练集和测试集上的损失分析,应用数据上的真实输出,以及算法中间输出的统计分析。延迟调试周期导致机器学习调试困难的第二个因素是调试周期很长。通常需要几十个小时甚至几天的时间来实施一个潜在的错误修复,并通过实际输出来判断它是否成功。自动更新在机器学习领域往往不太现实,因为在训练集上运行一次需要很长时间,尤其是深度学习模型。调试周期太长,机器学习不得不采用并行模式,因此需要接触到软件开发人员不熟悉的指令并行。机器学习的最终目标往往落在直觉的建立上。这种直觉是指根据已有的信息,可以快速判断哪里出了问题,哪里可以改进。这是你不断参与机器学习项目实践积累的最关键的技术:你开始将一些信息与Debug空间中的疑似问题联系起来。在原作中,有很多这样的例子。例如,早期训练神经网络时遇到的问题会周期性地反映在Lossfunction中。损失本应下降,但每次都跳回更高的值。经过反复试验,我最终了解到这是因为数据集没有很好地随机化,这在您使用小批量SGD时会出现问题。简而言之,快速有效的Debug是现代机器学习的必备技能。