摘要:从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. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,第1部分-基础知识和实现 OTA updates for Embedded Linux,  Fundamentals and implementation 更新的需要 一 ...

  2. windows 下安装Charles,破解,安装证书,设置可抓取https包

    参考地址: https://www.zzzmode.com/mytools/charles/ 一.下载后进行安装  二.安装后进行破解 按照参考中的链接破解即可 三.Charles在windows证书 ...

  3. Spring如何使用三级缓存解决循环依赖

    Spring如何使用三级缓存解决循环依赖 首先来了解一下什么是循环依赖 @Component public class A { @Autowired B b; } @Component public ...

  4. JVM快速入门(上)

    前言 根据狂神说的JVM快速入门做了以下笔记,讲的很好的一个博主,给小伙伴们附上视频链接狂神说JVM快速入门    接下来我按照他所讲的内容给大家记录一些重点! 一.JVM体系结构 .java经由ja ...

  5. switch分支语句

    语句句式 Calendar c = Calendar.getInstance(); //获得一周的某天 int i = c.get(Calendar.DAY_OF_WEEK); switch (i) ...

  6. C++ folly库解读(三)Synchronized —— 比std::lock_guard/std::unique_lock更易用、功能更强大的同步机制

    目录 传统同步方案的缺点 folly/Synchronized.h 简单使用 Synchronized的模板参数 withLock()/withRLock()/withWLock() -- 更易用的加 ...

  7. NoSQL:如何使用NoSQL架构构建实时广告系统

    JDNoSQL平台是什么 JDNoSQL平台是一个分布式面向列的KeyValue毫秒级存储服务,存储结构化数据和非机构化数据,支持随机读写与更新,灵活的动态列机制,架构上支持水平扩容,提供高并发.低延 ...

  8. CosId 1.0.3 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

  9. jwt-在asp.net core中的使用jwt

    JWT学习文章: 第一篇:JWT原理 第二篇:JWT原理实现代码 第三篇:在asp.net core中的使用JWT 前两篇文章中我写了jwt的原理,并且也用原理实现了jwt的验证.如果要看前两篇文章, ...

  10. js笔记8

    1.js数据类型 基本数据类型:string.undefined.null.boolean.nember 引用数据类型:object.array.function 二者的区别? 基本的数据类型就是简单 ...