机器学习一直以来都显得相当复杂,不过最近情况开始有所好转。
作为一名Cortex项目的贡献者,我主要基于对一些机器学习团队的观察来进行以下总结,而非基于一项全面的行业研究。
让我们通过一个常见的软件工具——数据库作为类比。创建一个数据库对于不同的工程师来说可能意味着完全不同的事情。对某些人来说,它可能是数百行复杂的代码;而对另一些人来说,则可能只是一个简单的命令。这表明,工具的抽象层对不同的人有着不同的意义,也影响着他们的使用方式。
软件的发展历程证明,当基本的软件组件如数据库、Web服务器等变得足够抽象时,非专业人士也能轻松使用它们。然而,机器学习领域一直缺乏这样的抽象层,这也阻碍了其广泛应用。但现在,这种情况正在改变。一系列旨在简化机器学习使用的项目正在涌现。
1. 提供更友好的开发接口
要在实际应用中使用机器学习,通常需要具备以下条件: - 设计模型的专业知识 - 足够的数据 - 资金来训练模型 - 对机器学习基础设施的理解
这就导致了几乎所有使用机器学习的项目都需要多名专家共同参与。我们需要一种方法,让不具备机器学习背景的开发人员也能轻松使用机器学习。
幸运的是,这一愿景正在逐步实现。
2. 补充机器学习的抽象层
为了让更多人能使用机器学习,开发人员需要对其有一定的了解,并借助现有的抽象层来构建应用。许多重要的抽象层已经在研究中了,它们集中在几个关键领域。
首先,我们需要一种更简便的方式来训练模型。理想情况下,许多机器学习用例不需要从头开始训练模型。例如,如果你正在开发一个聊天机器人,Google的Meena可能比你自己训练的模型表现更好。同样,如果你在开发文本生成器,使用OpenAI的GPT-2会更加高效。通过迁移学习,你可以使用少量数据对这些现成的模型进行微调。
例如,使用gpt-2-simple这样的新库,你可以通过简单的命令行界面快速微调GPT-2:
$ gpt_2_simple finetune your_custom_data.txt
这样,开发人员无需深入了解机器学习的细节,只需掌握如何微调即可。
此外,还有许多其他工具可以帮助开发人员更轻松地训练模型,例如Google Cloud AutoML提供的图形用户界面,允许用户上传数据集并自动生成模型,而无需编写代码。
3. 简化模型预测过程
假设你已经训练好了一个模型,接下来如何根据该模型生成预测呢?有许多工具可以提供模型服务功能,其中很多都与流行的机器学习框架相关联。例如,TensorFlow有TF Serving,而ONNX有ONNX Runtime。此外,还有一些独立的开源项目专注于解决这个问题,如Bert Extractive Summarizer,它简化了使用Google的BERT进行文本摘要的过程。
使用这些工具,开发人员可以通过简单的操作生成预测,而无需深入了解模型本身的细节。
4. 简化模型部署
最后一个挑战在于基础架构。对于小型项目来说,提供预测相对简单,但一旦需要大规模扩展,问题就会变得复杂。以GPT-2为例,它体积庞大且消耗大量资源,因此需要高性能的硬件和复杂的部署方案。
为了应对这种情况,你需要学会使用一系列工具,包括Docker进行容器化,Kubernetes进行容器编排,以及通过云平台配置自动扩展。这对大多数非专业人士来说是一项艰巨的任务。
5. 通过抽象简化机器学习基础架构
为了让开发人员更容易使用机器学习,需要对机器学习的基础架构进行抽象。Cortex就是一个这样的项目,它通过配置文件和命令行界面简化了模型部署的开发工作。
Cortex的目标很简单:将训练好的模型转换成任何开发人员都可以使用的预测API。这使得开发人员无需深入了解机器学习的技术细节,就能轻松使用ML。
总的来说,机器学习背后的数学原理仍然非常复杂,但通过简化应用型机器学习的流程,未来几乎所有的开发人员都将能够利用机器学习的强大功能。