1.AI开发到底在开发什么?硬件开发人员的工作成果是一个充满集成电路的服务器,可以在打开时运行某种软件。移动开发者的工作产品可??以是一个手机APP,包含大量的二进制数据,可以直接由麒麟芯片运行。AI开发者的工作成果是一个模型,它本质上是一个函数:f(picture)="Howareyou"f(catpicture)="Cat"不管这个函数有多复杂,有多少变量或参数,人工智能的发展就是要找出这个功能的表达方式。2、AI模型(功能)是如何开发的?AI模型的本质是一个函数。要找到这个函数的准确表达,不能单靠逻辑推导,而是训练出来的。我们将现有数据提供给机器,机器将从这些数据中学习。找到一个最能满足(技术上称为拟合)这些数据的函数,当有新数据要预测时,机器可以使用这个函数来预测新数据的结果会是什么。对于某种智能能力,一般有以下几个要素:数据+算法+模型。开发过程就是不断地使用数据和算法,让模型更接近真实情况。请注意,它是近似值而不是推导值。这个过程称为训练。3、AI模型的训练过程是怎样的?我们用一个可以区分猫狗图片的模型来帮助理解训练过程:“数据”就是我们需要准备大量已经被标记为“猫”或者“狗”的图片;“算法”是指当我们建立模型时,我们打算使用浅层网络或深层网络。如果是深层,我们需要用到多少层,每层有多少个神经元,作用是什么等等,也就是网络架构的设计,相当于决定了我们的预测function应该是大概的结构是怎样的。我们用Y=f(W,X,b)表示这个函数,其中X是已有的训练数据(猫狗的图片),Y是已有图片数据的标签(图片是猫还是狗)),W和b是什么意思?刚开始的时候,我们真的不知道这两个参数需要经过机器学习才能找出来,而且找出的过程也是训练的过程。“模型”就是我们将数据带入算法中进行训练,机器会不断学习。当机器找到最优的W和b时,我们说模型已经成功训练。这时候我们的函数Y=f(W,X,b)就完全确定了然后我们就可以给模型在已有数据集之外的一张新的猫或者狗图片,那么模型就可以通过函数Y=f(W,X,b)计算这张图片的标签是猫还是狗,这就是推理。简单总结一下:不管是最简单的线性回归模型,还是更复杂的1亿参数的深度神经网络模型,本质都是找到一个函数Y=f(W,X,b),我们要这个函数执行以及新的未知数据。4、AI为什么强调海量数据?因为只有数据量足够大,模型才能学习到足够准确的特征来区分猫狗,才能在区分猫狗的任务中表现出足够高的准确率;当然,当数据量不大的时候,我们也可以训练模型,但是在新数据集上的预测结果往往会差很多。假设识别猫的模型要非常准确,它需要各种光照条件、各种背景、各种颜色的猫的照片,不仅是波斯猫,还有加菲猫,直到模型包括我们能想到的每一种猫人脸识别模型的特征需要大约几百万张照片才能可用。著名的Imagenet数据集包含约1400万张图片,极大地方便了开发人员。5、好的开发工具在AI开发过程中能帮助开发者做什么?假设没有现成的开发平台,首先需要学习常用的AI开发语言python。Python是整个过程中不消耗能量的环节。其次,你需要学习传统的机器学习和深度学习相关的算法。这是最耗费精力和时间的环节,尽量去理解和推导算法,然后用python代码实现算法然后训练模型。编码能力很重要,否则你的模型就建不起来了。然后你找一个开发框架,华为MindSpore或者谷歌Tensorflow,你会发现你不需要那么高的数学门槛,并不是说你需要对算法有深刻的理解才能更好的训练出好的模型,模型损失函数优化方法MindSpore/Tensorflow都内置好了,只需要简单的调用。如果说MindSpore/Tensorflow是一个可以大大减少模型代码量的框架,那么Keras就是一个可以将模型代码量减少到小得惊人的框架,比如上面的猫狗分类。15行代码就可以搞定,几十行代码就可以写出一个具有卷积层、池化层、全连接层更高级优化方法的深度学习网络架构。一个开发框架就像Android框架为移动APP开发者提供的很多基本功能。如果没有这个框架,你需要直接和操作系统底层的各个功能模块打交道,才能实现一个简单的发图片给好友的功能。6、AI开发有一个开发框架就够了吗?当然不是,一个开发框架只是帮助开发者做一些开发者不需要实现的部分,或者实现起来成本太高的部分。一个完整的AI开发流程,从数据准备、数据预处理、数据标注、选择算法、训练、调参、部署,都和一个普通APP开发的流程差不多。就像生产汽车一样,自动化、高科技的装配车间是必不可少的,但冲压和涂装车间也制约着汽车的生产效率,那么制约AI开发效率最头疼的是什么?请看下一个问题。AI开发过程中最大的难点是什么?7、AI开发过程中最大的难点是什么?需要准备大量的数据,前面说了,更可怕的是数据标注。据统计,数据处理和标注约占整个开发周期的70%。所谓标注,就是给数据打上标签,告诉机器一张图片是猫还是狗。标注在AI开发者眼中是一项技术含量很低的工作。它已经是一个劳动密集型行业,而且这个行业有大量的第三方。一家专业从事数据标注的公司。以自动驾驶为例,车头的摄像头会实时捕捉车前的所有画面。在自动驾驶标记过程中,需要对前方车辆、障碍物、行人、信号灯、标志、指示线等进行标记,如果这个过程完全依赖人工,请注意,自动驾驶永远无法商用。需要反复迭代训练。培训不会在一夜之间发生。需要反复修改各种参数,逐步提高模型的准确率。这个过程目前需要丰富的经验。如果算力不够,train一次,等三天,再调请再等三天。如果要迭代20次,这个过程就很累了。因此,即使不考虑成本因素,算力也是制约人工智能普及的最大问题。8.如何解决AI开发者的问题?就像开发办公软件一样,不可能用记事本敲代码。你需要像visualstudio这样的集成开发环境和像Git这样的代码管理工具。同样,开发一个AI模型,也需要一个集成开发环境,需要一个版本管理工具。为开发者提供代码编辑环境、语法检查、编译器等功能。人工智能开发平台还可以帮助开发人员标记数据、创建模型训练作业和部署模型。有了开发平台,开发平台需要帮助开发者完成所有辛苦的工作,让开发者专注于核心代码和算法。当然,还需要为开发者提供易获取、高性能、低成本的算力,以提高模型训练的迭代速度。9.有没有办法更快地提高人工智能的开发速度?当然有。要想从根本上提高开发效率,挖到本质,只有两条路:复用和自动化,否则只能一行一行地做。开发一个APP,可以从最基础的代码开始,可以复用开发者分享的开发包和功能。华为云开源镜像站有大量的java开发包。就是这个意思,还可以复用一个完整的APP,修改界面颜色,就变成了自己的APP,就是复用。为保证APP的质量,您可以手动测试,也可以使用自动化测试工具。如果你不想做这些事情,你也可以使用现成的工具,以可视化的方式生成一个APP。当然,APP的风格只能从工具已有的模板中选择。开发人员一直在尝试使用各种方法来减少开发工作量。人工智能开发也是如此。你可以找到现成的数据集、现成的标注数据集、现成的算法和模型,并使用自动部署工具将模型部署到边缘云。当然,自动学习功能也是可以的。只要提供原始数据,系统就会帮助开发者完成模型构建、算法选择和自动训练,开发者可以直接看到结果。最简单的方法就是找一个训练好的模型,直接在软件中调用。基于此,一个好的AI开发平台需要从多个维度提升开发效率。这些功能往往是很多小细节,具有强大的计算能力和快速的训练,但只完成最基本的必要功能。
