摘要:从AI开发模型、框架、工具,到提升开发效率的学习办法,为AI开发者逐一解答。

本文分享自华为云社区《10分钟了解AI开发的基本过程》,作者:简单坚持。

1、AI开发究竟在开发什么?

  • 一个硬件开发者的工作成果是一个布满集成电路的服务器,开机就可以运行某种软件。
  • 一个移动端开发者的工作成果可以是一个手机APP,包括了大量二进制数据,可被麒麟芯片直接运行。
  • 一个AI开发者的工作成果则是一个模型,模型本质上是一个函数:
f(图片) = "How are you"
f(猫图片) = "Cat"

无论这个函数有多么复杂,有多少个变量或者参数,AI开发都是试图找出这个函数的表达式。

2、AI模型(函数)是怎么开发出来的?

AI模型本质是一个函数,想要找到这个函数准确的的表达式,仅凭逻辑是无法推导出来的,而是训练出来的,我们喂给机器目前已有的数据,机器就会从这些数据里去找出一个最能满足(专业术语称为拟合)这些数据的函数,当有新的数据需要预测的时候,机器就可以通过这个函数去预测出这个新数据对应的结果是什么。

对于一个具备某种智能能力而言,一般具备以下要素:数据+算法+模型,开发的过程,就是不断地用数据和算法使得模型越来越逼近真实情况,注意是逼近而非推导,这个过程称为训练。

3、AI模型的训练过程是怎么样的?

我们来用一个能够区分猫和狗图片的模型来帮助理解训练的过程:“数据”就是我们需要准备大量标注过是“猫”还是“狗”的图片;“算法”指的是构建模型时我们打算用浅层的网络还是深层的,如果是深层的话我们要用多少层,每层有多少神经元、功能是什么等等,也就是网络架构的设计,相当于我们确定了我们的预测函数应该大致结构是什么样的。

我们用Y=f(W,X,b)来表示这一函数,X是已有的用来训练的数据(猫和狗的图片),Y是已有的图片数据的标签(该图片是猫还是狗), W和b是什么意思呢?一开始,我们确实不知道,这两个参数是需要机器学习后自己找出来的,找的过程也就是训练的过程。

“模型”指的我们把数据带入到算法中进行训练,机器就会去不断地学习,当机器找到最优W和b后,我们就说这个模型是训练成功了,这个时候我们的函数Y=f(W,X,b)就完全确定下来了

然后我们就可以在已有的数据集外给模型一张新的猫或狗的图片,那模型就能通过函数Y=f(W,X,b)算出来这张图的标签究竟是猫还是狗,这就是推理。

简单总结下:不管是最简单的线性回归模型、还是较复杂的拥有一亿个参数的深度神经网络模型,本质都是寻找一个能够良好拟合目前已有数据的函数Y=f(W,X,b),并且我们希望这个函数在新的未知数据上也能够表现良好。

4、AI为什么要强调大量数据?

因为只有数据量足够大,模型才能够学习到足够多且准确的区分猫和狗的特征,才能在区分猫狗这个任务上,表现出足够高的准确性;当然数据量不大的情况下,我们也可以训练模型,不过在新数据集上预测出来的结果往往就会差很多。

假设识别猫的模型要非常准确,就需要各种光照条件、各种背景、各种花色的猫的照片,不仅要有波斯猫,还要有加菲猫,直到模型包含了我们能想到的各种猫的特征,一个人脸识别模型,大约需要几百万张照片,才能达到可用,著名的Imagenet数据集,大约包含了1400万张图片,极大地方便了开发者。

5、在AI开发过程中一个好的开发工具可以帮助开发者做什么?

假设没有一个现成的开发平台,首先你需要学会常用的AI开发语言python,python是整个过程并不耗精力的环节,其次你需要学习传统机器学习和深度学习相关算法,这块算是花费最多精力和时间的环节,然后尽可能去理解和推导算法,然后用python代码去实现算法再训练模型,代码能力很重要,不然你的模型都建不起来。

然后你发现了一个开发框架,华为MindSpore或者谷歌Tensorflow,你会发现并不需要那么高的数学门槛,不是说要深刻理解算法才能更好训练出好模型,模型损失函数优化方法MindSpore/Tensorflow都内置好了,而且只需要简单的调用就好了,如果说MindSpore/Tensorflow是可以把一个模型代码量大大减少的框架,那么Keras就是让模型代码量可以少到惊人的框架,例如上面的猫狗分类器,15行代码就可以搞定,几十行代码就把一个拥有着卷积层、池化层和全连接层的较高级优化方法的深度学习网络架构写出来。

一个开发框架就像安卓框架为手机APP开发者提供的很多基础功能,如果没有这个框架,一个简单的给好友发送图片的功能,你需要直接和操作系统的各个底层功能模块打交道了。

6、AI开发,有了开发框架就够了吗?

当然不是,一个开发框架,只是帮开发者做了一些开发者没必要实现的部分,或者实现起来代价太大的部分,一个完整的AI开发过程,从准备数据、数据预处理、数据标注、选择算法、训练、调参、部署,这和一个普通的APP开发的过程差不多。如同生产一辆汽车,一个自动化、高科技的总装车间是必不可少的,但冲压、涂装车间也制约着汽车的生产效率,那么制约AI开发效率最头痛的是什么,请看下一个问题。AI开发过程中最大的困难是什么?

7、AI开发过程中最大的困难是什么?

  • 要准备大量的数据,前面已经提过,更可怕的是数据标注,据统计,数据处理和标注环节大约占整个开发周期的70%。所谓标注,就是给数据打标签,告诉机器一张图片究竟是猫还是狗,标注是一件在AI开发者看来技术含量非常低的工作,已经属于劳动密集型产业,业界有大量的第三方公司,专门从事数据标注工作。以自动驾驶为例,车头上的摄像机在实时拍摄车前的所有画面,自动驾驶标注的过程要标注前车、障碍物、行人、信号灯、指示牌、指示线等等,这个过程如果完全依赖人工标注,自动驾驶将永远难以商用。
  • 要反复迭代训练,训练并不是一蹴而就,要反复修改各种参数,使得模型的准确度逐步提升,这个过程,目前需要丰富的经验,如果没有充足的算力,训练一次,等待三天,然后调参,再等待三天,如果要迭代20次,这个过程是很消耗人的意志。所以,即使不考虑成本因素,算力也是制约AI普及最大的问题。

8、怎么解决AI开发者的问题?

正如开发一个office软件,不可能费事到用记事本敲代码,你需要一个像visual studio一样的集成开发环境,需要一个像Git一样的代码管理工具,同理,开发一个AI模型,你也需要一个集成开发环境,而且需要一个版本管理工具。

提供给开发者代码编辑环境、语法检查、编译器等功能,一个AI的开发平台,同样也要能帮开发者标注数据、创建模型训练作业、部署模型等功能,有了开发平台,开发平台要帮助开发者把所有苦活累活都干完,让开发者聚焦在最核心的代码和算法上。

当然,要提供给开发者易获取、性能强、价格低的算力,提高模型训练的迭代速度。

9、有没有更快地提升AI开发速度的办法?

当然有。从根本上提升开发效率,挖掘到最本质,只有两个办法:重用和自动化,否则只能一行一行代码干起。

开发一个APP,可以从最基本的代码写起,可以复用开发者共享的开发包、函数等,华为云开源镜像站有大量的java开发包,就是这个意思,也可以复用一个完整的APP,修改下界面配色,就变成了自己的APP,这是复用。要保障APP的质量,可以手工测试,也可以用自动化测试工具。如果这些都不想做,可以也可以用一个现成的工具,用可视化的方法生成一个APP,当然APP的风格只能从工具已有的模板中选取。开发者一直在试图用各种办法,降低开发的工作量。

AI开发也是一样的。可以找现成的数据集、找现成的标注好的数据集,现成的算法和模型,用自动部署工具将模型部署到端边云。当然,也可用自动学习功能,只要提供原始数据,由系统帮助开发者完成模型构建、算法选择和自动训练,开发者可以直接看到结果。最简单的办法,就是寻找一个已经训练好的模型,在软件中直接调用。

基于此,一个好的AI开发平台,要从各个维度去提升开发效率,这些功能往往都是很多小细节,算力强、训练快,只是完成了必须的最基本的功能。

10、华为将提供什么开发工具给开发者?

  • ModelArts,一个AI开发平台 ,用于AI模型开发
  • HiLens,一个视觉AI应用开发平台,用于AI应用开发,应用里面的模型由ModelArts提供。

以上两款产品以云服务的方式在华为云EI提供服务。

Atlas 200 developer kit(开发板)是ModelArts 的线下开发套件。

点击关注,第一时间了解华为云新鲜技术~

AI开发者十问:10分钟了解AI开发的基本过程的更多相关文章

  1. 百度大脑发布“AI开发者‘战疫’守护计划”,AI支援抗疫再升级

    面对新冠肺炎疫情,AI开发者们正在积极运用算法.算力.软件等“武器”助力抗疫.针对开发者们在疫情防控期间的开发与学习需求,2月6日,百度大脑推出“AI开发者‘战疫’守护计划”, 正在进行疫情防控相关应 ...

  2. 10分钟学会Less开发环境搭建与初体验

    Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 今天看一下,10分钟能不能手把手快速教会你Le ...

  3. jeesite应用实战(数据增删改查),认真读完后10分钟就能开发一个模块

    jeesite配置指南(官方文档有坑,我把坑填了!)这篇文章里,我主要把jeesite官方给出的帮助文档的坑填了,按照里面的方法可以搭建起来jeesite的站点.系统可以运行以后,就可以进入开发模块了 ...

  4. 【C/C++】10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)

    C++编写贪吃蛇小游戏快速入门 刚学完C++.一时兴起,就花几天时间手动做了个贪吃蛇,后来觉得不过瘾,于是又加入了AI功能.希望大家Enjoy It. 效果图示 AI模式演示 imageimage 整 ...

  5. 音视频开发者的福音,快速集成AI配音能力

    音视频内容创作者对剪辑应用中的AI配音需求与日俱增.它的优点很多,不光可以解决雇佣人力配音的成本以及创作者本身的口音.语言等限制,还可以大幅提升生产效率.比如,短视频的播放时间短的几十秒,长的vlog ...

  6. java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求

    java使用线程请求訪问每次间隔10分钟连续5次,收到对应的时候停止请求 package com.qlwb.business.util; /** * * * @类编号: * @类名称:RequestT ...

  7. 全面解析百度大脑发布“AI开发者‘战疫’守护计划”

    即日起,百度大脑发布“AI开发者战疫守护计划” 大疫当前,人人有责,携手开发者共同出击抗击疫情 基于百度大脑AI开放平台和飞桨深度学习平台,积极运用算法.算力.软件等“武器”助力抗疫!   谁能参与计 ...

  8. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开 ...

  9. Azure IoT Hub 十分钟入门系列 (1)- 10分钟带你了解Azure IoT Hub 并创建IoT Hub

    建议您先对<Azure 上 IoT 整体解决方案概览 >进行了解. 本文主要分享一个案例: 10分钟-了解Azure IoT Hub并创建Azure IoT Hub 本文主要有如下内容: ...

随机推荐

  1. 对SpringBoot和SpringCloud的理解

    1.SpringCloud是什么 SpringCloud基于SpringBoot提供了一整套微服务的解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于Net ...

  2. Autofac入门

    注意:本文为原创文章,任何形式的转载.引用(包括但不限于以上形式)等,须先征得作者同意,否则一切后果自负. 简介 Autofac 是一个令人着迷的.NET IoC 容器. 它管理类之间的依赖关系.当应 ...

  3. 彻底搞懂彻底搞懂事件驱动模型 - Reactor

    在高性能网络技术中,大家应该经常会看到Reactor模型.并且很多开源软件中都使用了这个模型,如:Redis.Nginx.Memcache.Netty等. 刚开始接触时可能一头雾水,这到底是个什么东东 ...

  4. 「模拟8.13」任(liu_runda的神题,性质分析)

    考场时没有发现性质,用了个前缀和优化暴力,结果写WA了 我们发现其实联通块的个数就是点的个数-边的个数 然后我们需要维护横向上和纵向上的边的前缀和 前缀和的查询形式稍改一下 暴力 1 #include ...

  5. Flask一分钟Mock一个API

    如果安装了Python,并且安装了Flask: pip install flask 那么就可以在短短一分钟内Mock出来一个API,而且只需要用到一个文件. 彻底告别在线Mock网站无法指定请求方法, ...

  6. typescript 中的 infer 关键字的理解

    infer 这个关键字,整理记录一下,避免后面忘记了.有点难以理解呢. infer infer 是在 typescript 2.8中新增的关键字. infer 可以在 extends 条件类型的字句中 ...

  7. Message、Handler、Message Queue、Looper 之间的关系

    单线程模型中Message.Handler.Message Queue.Looper之间的关系 1.Message Message即为消息,可以理解为线程间交流的信息.处理数据后台线程需要更新UI,你 ...

  8. 简述MSTP与配置

    一.简介 二.MSTP概述 三.功能 四.配置命令 一.简介 多生成树协议MSTP(Multiple Spanning Tree Protocol)是IEEE 802.1s中定义的生成树协议,通过生成 ...

  9. Docker减小镜像体积

    导航: 这里分为几个部分. 相关转载云原生:米开朗基杨 1.Docker减小镜像体积 2.Docker镜像针对不同语言的精简策略 对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积 ...

  10. 与KubernetesAPI服务器交互

    在介绍过的Downward API提供了一种简单的方式,将pod和容器的元数据传递给在它们内部运行的进程.但这种方式其实仅仅可以暴露一个pod自身的元数据,而且只可以暴露部分元数据.某些情况下,应用需 ...