从3.1节可以看出,人工智能应用开发过程的挑战很多,主要表现在三个方面:①开发流程复杂冗长;②算法技能要求高,需要应用开发者熟悉算法;③应用维护很频繁,可能超过传统软件应用。
因此,考虑到这些挑战,往往就需要在开发过程中做一些权衡。下面将针对这三种挑战,依次分析如何有效利用平台优势和业务具体场景,做出最佳权衡。
由于人工智能应用无处不在,可以与各行各业相结合,所以人工智能应用的开发需要足够灵活,能够适应各种行业的需求。但是往往灵活背后的代价就是复杂,尤其对于人工智能应用开发来说,其天然具备较高的复杂度。
在开发人工智能应用之前,同时需要业务经验知识和人工智能经验知识,这样才能设计出合理的方案。对于人工智能应用开发全过程的每个处理步骤而言,输入数据的统计分布、输入数据的覆盖范围、最适合的处理逻辑、输出都是不确定的。这种不确定性会不断传递给后续的处理步骤。随着处理步骤的增多和数据的不断变化,可能需要增加、减少或改变后续的处理步骤,或者改变某个处理步骤中的具体逻辑。因此,人工智能应用开发过程其实是一个不断试错、不断调优、不断迭代的过程,很难一次性开发出一个可以满足要求并直接部署的人工智能应用。这就是人工智能应用开发过程天然具备的复杂性。
正如第1章和第2章所述,为了降低这种复杂性,通常需要固化一些开发流程模板,可以基于模板来开发自己的人工智能应用,不需要全部的灵活度,但是有时候足以解决当前面临的问题。当然这种模板也可以被用来二次加工、不断迭代和优化。这种基于已有模板的开发方式更加简单,也更容易解决相对受限领域的具体问题。
人工智能应用开发需要利用人工智能算法来处理数据,因此开发人员必须同时具备软件工程和人工智能方面的知识和技能,开发门槛相对较高。虽然基于工作流模板的开发方式可以大幅降低人工智能应用开发门槛,但是开发者(工作流的使用者)仍然需要按照工作流的每个处理步骤不停地迭代。如上所述,人工智能应用开发过程其实是一个反复迭代的过程,并且需要较强的人工干预。
大多数情况下,人工干预的程度也跟待解决问题的难度强相关。如果问题没有特别复杂,一般采用一些简单的参数调优即可,和软件工程师对数据库性能参数调优一样。对于一些非常经典和成熟的机器学习算法,算法的架构基本相对稳定,即使是算法工程师也未必会对其进行大幅度的修改,更多的是一些小范围优化。这些超参数包括但不限于算法本身的一些阈值选择或训练策略选择等。因此,大部分开发者为了快速将算法应用到实际问题中,通常基于经验对这些参数进行调节,从而找到更好的算法和模型。但是如果有更强的机器,人工只需定义好规则和搜索空间,就可以利用机器强大的算力来做参数的自动选择和调优。这个调优过程就转变为一个自动化搜索过程。
现在一些传统的人工智能算法都逐渐成熟,大多数可以借助大集群算力和一定的搜索调优算法来完成最优算法的自动选择、优化和训练,具体可以参考第6章。
因此,很多人工不断进行调优、迭代的实验过程,逐渐地都可以交给机器来完成,尽量减少开发者的负担,这就是人与机器的平衡。如果要在算力上多投入一些,就可以在人工上少投入一些,反之亦然。开发人工智能应用需要在人和机器方面做一个平衡。人工智能应用开发平台所能够提供的是更多的灵活性和层次性,能够适应不同比例的人力投入和机器投入。
从3.1节可以看出,在人工智能应用开发和部署之后,需要及时维护。在维护阶段,用户可以选择应用指标监控模块来实时查看人工智能应用的推理效果。如果推理效果不满足要求,则需要手工或者自动维护,将不合适的数据回流到开发态。然后开发者可以重新查看和理解这些数据,并基于这些数据对已有人工智能应用进行迭代优化。
由于数据的变化会严重影响人工智能应用推理效果的好坏,因此人工智能应用的迭代需要非常及时。这也就使得人工智能应用的开发态和运行态紧密结合,形成一个闭环。对于有些可以自动维护并自动进行迭代优化的场景,这个闭环基本可自动运行,仅需在人工智能应用版本更迭时进行人工审核。
未来,随着人工智能应用的进一步复杂化,包括其内部模型本身的复杂,以及运行态环境的复杂(包括端、边、云),进行人工智能应用开发态和运行态的融合将更为必要,并且这种融合通过人工智能应用开发平台体现出来,可以进一步简化维护人工智能应用的难度。
总体上看,以上三个层面的权衡,其实本质上对人工智能应用开发平台提出了非常高的要求。只有提供足够多的领域模板、足够多的自动化调优能力,以及足够强大的人工智能应用开发态和运行态闭环能力,并在具体业务场景中做出最佳权衡,才能真正提升整体开发效率、降低整体开发成本,给业务方带来最终价值。