当前位置: 首页 > 编程日记 > 正文

干货!3 个重要因素,带你看透 AI 技术架构方案的可行性!

作者 | 房磊

责编 | Carol

出品 | AI 科技大本营(ID:rgznai100)

人工智能这几年发展的如火如荼,不仅在计算机视觉和自然语言处理领域发生了翻天覆地的变革,在其他领域也掀起了技术革新的浪潮。无论是在新业务上的尝试,还是对旧有业务对改造升级,AI这个奔涌了60多年的“后浪”,正潜移默化的影响着我们传统的技术架构观念。

AI架构(尤其是以机器学习和深度学习为代表的架构方案)已经成为我们技术架构选型中的一个新的选项。

你是否需要AI架构的解决方案?AI架构选型的主要依据是什么?这是我们今天主要讨论的问题。

我们先来看一个典型的AI架构:

1、首先需要采集训练模型所需要的数据,这些数据有可能来自业务系统本身,如CTR预估任务中的用户点击数据、用户下单数据等;也有可能来系统外部,公开购买或自主爬取,如图片分类任务中的图片、NLP任务中的语料等。

2、这些数据被收集起来后,经过清洗、加工,被存储起来,因为毕竟不是只用一次。一般是存储在分布式存储设备(如HDFS)或云端,多数公司还会建立自己的数据平台,保存在数据仓库中,长期积累下来。

3、需要使用的时候,先进行数据筛选,选择合适的特征数据,然后经过数据预处理,送入到算法模型中。模型的搭建可选的技术框架很多,可以是基于spark mllib,也可以是sklearn、tensorflow、pytorch等。然后经过训练、评估和调参,完成模型的构建工作。

4、最后模型要应用到线上的具体业务中,完成分类、回归某一具体任务。在部署过程中,有可能是将模型打包,将预测模型直接部署到业务系统(客户端)中;也有可能是直接提供一个在线RESTful接口,方便跨语言调用。

总结一下,经过数据采集、加工处理、特征选择、数据预处理、模型训练、模型评估、模型应用几个环节,数据跨过业务系统、数据平台、算法模型三个系统,形成一个闭环,最终又应用到业务系统中,这就构成了整个AI架构的核心。

是否需要AI架构,如何衡量这套技术架构方案的可行性?我认为,主要是看以下三个要素。

场景

我们讨论架构的可行性,是否适合业务及业务发展是第一衡量准则,AI架构也不例外。

回顾那些经典的、已经广泛应用的机器学习场景,比如推荐、搜索、广告等,这些场景都具有这样的特点:场景相对封闭、目标单一、可控。

究其原因,无论算法模型多么复杂,其最终都要落实到损失函数上的,而后者一般都是单目标、单优化任务。或追求极值(损失最小化)、或达到某种对抗上的平衡(比如GAN)。在这种情况下,无论业务如何建模,还是要落地到算法模型和损失函数的,最终也就限制了场景和目标上的单一。

因此,看一个业务是否适合AI架构,就要先看这个业务场景目标是否单一、可控。或经过业务建模和架构拆解后,每个环节的场景是否单一。

举个例子,同程艺龙酒店系统为酒店商家提供了上传酒店图片的功能,在这个场景下,除了要审查图片的合法性,还要给图片打上分类标签,如“大堂”、“前台”、“客房”、“周边”等。为了能正常使用AI架构,就必须对场景内的各目标进行拆分,训练不同的分类器。具体流程如下:

其中,第2、3、4步涉及到多个图片分类器,每个分类器的目标不同,所需要的训练数据也不同。对于输入的同一个样本图片,每个分类器完成自己的职能,目标单一可控。对于一些不通过的样本,可能还涉及到人工干预。最后合法的图片存入系统。

从业务必要性上来说,也并不是所有业务场景都需要AI架构。算法模型是对事物的精确模拟和抽象,复杂度也是比较高的。但可能有时我们业务上并不需要如此精细的控制。比如有时一个简单的if...else...就解决了问题;复杂点的可能会设计几种“策略”,然后由业务专家针对每种情况进行配置;再复杂的可能还会考虑BI的方案:收集数据,然后展开多维度的分析,最后由分析师连同业务专家得到某种规律性的结论,再内置到系统里,效果可能也不错。

再举个酒店分销调价的例子,在将酒店分销给代理售卖前,一般会在底价基础上对产品卖价进行干预,调整一定的点数(百分比),保证销量的同时,最大化收益。

一开始,可能仅仅是一个固定的比率(比如加价6%)。随着业务发展,设计了一系列策略,比如针对“是否独家”、“是否热门”2维度将酒店划分到4个象限里,对“独家-热门”酒店实施一个较高的调价比率,而对“非独家-冷门”酒店实施一个较低的比率。结果收益提高了一大截,效果不错。

而后,业务人员希望施行更加精细的控制,于是对酒店的星级、地区、商圈、独家、房型等维度进行了更为精细的划分,并结合历史数据进行统计分析,对各种结果施以不同的调价比率。产量和收益又进一步提升了。

这时如果各业务方都比较满意、成本也不高,系统复杂度也不高,那就没必有再考虑更为精细、智能的AI架构了。引入AI,本质上,还是要带来效率、体验或准确性的提升,同时平衡成本和收益,控制系统复杂度。如果不能带来这些,那就要重新审视我们的方案了。 

当然,有时我们也会考虑架构的扩展性和业务的发展,预留一些设计上的“开闭”空间。“策略模式”这时也许是个不错的选择。对于系统的默认策略,采用基于人工的、配置的方案,同时保留策略扩展接口,随着将来业务要求的增高,再引入“基于AI的策略”。这样即控制了当前的成本,又平衡了系统的扩展性。

数据

数据决定了机器学习的上限,而算法和模型只是逼近这个上限而已。

数据的采集和获取通常需要很长时间,建立充分、全面的数据仓库,更需要长时间的积累和打磨,因此,数据在任何一个公司都是宝贵的资产,不肯轻易送出。而一个算法模型的成功与否,关键看数据和特征。因此,一套AI架构的解决方案,最终能否取得好的效果,关键看是否已经采集到了足够、充分的数据。

这些数据来源一般包括:自有系统采集、互联网公开数据收集(或爬取)、外购等。

自有系统采集是最常见的方案,业务系统自身产生的数据,一般也更适合业务场景的应用。可这样的数据珍贵且稀少,所以往往需要公司的决策者提前布局,早早的开始收集、整理业务数据,建设数据平台、充实数据仓库,这样经过几个月甚至几年以后,在真正用到AI架构时,弹药库里已经储备了充足的“弹药”了。

互联网公开的数据爬取也是一个快速且免费的方法,但在茫茫大海中找到适合自己的数据并不容易,且因为你能拿到、别人也能拿到,因此很难拉开和其他竞对公司的差异。

外购一般要花费巨额费用,且质量参差不齐,一般是互联网公司最后不得已的方案。

在数据获取成本高、难度大、积攒时间久这样的前提下,而场景又适合使用AI架构,面对数据匮乏,是不是就没有办法了呢?也不尽然,我们还是有些替代方案的。

1、 浅层模型通常比深层模型需要更少的数据量,因此,在数据量不足的时候,通常可以使用浅层模型替代深层模型来减少对数据量的需求。当然,模型的表达能力也会随之下降,但应对不是特别复杂的业务场景,浅层模型也一样能取得很好的效果。当然,随之而来的是对特征挖掘更高的要求和对模型选择的挑剔。拿分类任务来说,SVM、逻辑回归、随机森林、朴素贝叶斯...每种模型都有其特点和适用性,要充分考虑和权衡,才能利用好每一条数据。所谓数据不够、模型来凑,也是不得已的办法。

2、 采用预训练模型也是降低数据需求量的一个很好的办法,迁移学习已经在图像分类问题上广泛运用,BERT模型也将预训练模型带入自然语言处理的大门。在一些特定问题上,如果能找到合适的预训练模型,再加之少量自己的数据进行微调,不但对数据的需求量降低,训练时间也大大降低,一举两得。只是合适的预训练模型可遇而不可求。

3、 还有一个减少数据需求的变通的办法是采用少量数据先“启动”,然后不断获取数据,并加快模型更新频率,直至采用“在线学习”的方法。这里实际上是将总的数据需求,拉长到时间维度去解决。当然,这里也需要业务上允许前期模型的准确度不是那么高,随着数据的增多和模型的不断更新,逐步达到预期效果。

举个例子,酒店shopper类产品的售卖,为了加快展现速度,通常采取供应商数据预抓取的方式落地。但供应商给的QPS极其有限,每次只能抓取一个酒店,高频率的抓取可以保证酒店数据的新鲜度,给客人更好的体验;低频率的抓取因库存、价格信息时效性不能保证,往往就会导致预定失败,造成损失。因此,如何在酒店间合理的分配QPS就是一个典型的机器学习问题。

我们从酒店热度、预定周期、节假日等多个维度进行了特征挖掘,最后却发现“季节”这个关键因素,我们却提取不到有效特征,原因是数据仓库里只有三个月的数据,也就是只有当季的数据。

为了解决这个问题,我们重新设计了模型,调整了架构方案,采用“在线学习”的方式,将模型更新问题纳入到了解决方案中。原始数据只用来训练一个初始模型,上线后,模型不断拿新产生的数据并进行迭代更新,同时对时间线更近的数据赋以更高的样本权重,以此来保证对季节性因素的跟进。系统上线后,取得了很好的效果。

4、 强化学习在初始数据缺乏的情况下,大多数时候也是一个备选方案。强化学习采用“试错”的方式,不断演化,并最终学到规律。当然这需要业务模型做相应的调整,同时,如果演化周期过长,那有可能模型在前期相当长的时间内,都不能做出较优的决策,因此需要业务容忍度较高。

算力

众所周知,训练过程是一个典型的“计算密集型任务”,没有强大的算力,是难以支撑算法模型的训练和研究的。做机器学习的计算平台,GPU几乎是标配,其训练时间比CPU一般能缩短5倍以上。

目前,主要有自建和租赁云平台两种途径获取。如果“不差钱”,当然可以选择自建,但现在GPU升级换代太快,基本一年一换。对于做机器学习的GPU来说,运算速度是关键,很可能花了大价钱搭建的GPU集群,过几年却变成了一台“老爷车”。

租赁云平台虽然可以随时享受最新GPU运算速度带来的“快感”,但所需花费的精力也不少。不但要详细对比每家云平台提供的服务和成本,还要合理的搭配CPU和GPU,做到资源利用最大化。

说了这么多,提的最多的可能就是“成本”和“收益”这两个词了,这也是业务最关心的问题。无论是计算资源还是系统架构,上一套AI架构的解决方案都是需要投入相当大的成本的,如果选择得当,在一个合适的场景下,AI也是能带来相当不错的收益;但如果入不敷出,选择AI架构的解决方案就要慎重了。

最后,技术人员储备和法律因素也是上AI架构前需要考量的问题,前阵子还发生了国家工信部约谈AI换脸应用企业的事件。

AI是一场浪潮,它不仅带来了新的技术和行业,也给了老系统焕发新生命活力的机会。作为技术人员,我们不仅要拥抱新技术带来的挑战,更要清楚其技术选型的主要因素和背后的风险,这样才能屹立浪潮之巅。那么,你是否需要AI架构的解决方案呢?

作者介绍:

房磊,2014年加入同程艺龙任架构师、技术委员会委员;先后负责MAPI手机网关平台建设、同程艺龙开放平台建设、shopper类产品直连系统建设等。

推荐阅读
  • 重构ncnn,腾讯优图开源新一代移动端推理框架TNN

  • 墨奇科技汤林鹏:如何用 AI 技术颠覆指纹识别?

  • 性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络

  • 研发的未来在哪里?Serverless 云开发来了!

  • 真惨!连各大编程语言都摆起地摊了!

  • 国外小伙怒喷加密货币行业:入行两年,我受够了!

你点的每个“在看”,我都认真当成了AI

相关文章:

mysql从另一张获取数据的方法

方法一 CREATE TABLE tmp AS SELECT a.id FROM t_user t JOIN temp a ON t.email a.email; 方法二 INSERT INTO t_user (id,username,PASSWORD,email,user_type,STATUS) SELECT id,REPLACE(email,,_),PASSWORD,email,0,0 FROM temp; 这两个sql都是从另外一张中获取的数据插入…

手动创建Spring项目 Spring framework

之前学习框架一直是看的视频教程,并且在都配套有项目源码,跟着视频敲代码总是很简单,现在想深入了解,自己从官网下载文件手动搭建,就遇到了很多问题记载如下。 首先熟悉一下spring的官方网站:http://spring…

使用 ASP+ DataGrid 控件来创建主视图/详细资料视图

Nikhil Kothari Microsoft Corporation 2000年8月简介 Microsoft Visual Studio.NET 的下一发行版包括 DataGrid Web 控件 (作为服务器控件的 Active Server Page (ASP) 套件的一部分)。 该控件提供用以根据数据源的内容来表示 HTML 的功能。 DataGrid 控件可以用于若干个只…

如何将广告始终定位到网页右下角

body{margin:0;border:0;height:100%;overflow-y:auto;}#test{display:block; bottom:3px; right:3px; width:130px; position:fixed;}/* 以下是写给IE6的 */* html #test{position:absolute;right:18px} * html{overflow-x:auto; overflow-y:hidden;}转载于:https://www.cnblo…

如何用 Python 将 Excel 表格转成可视化图形?| 原力计划

作者 | Waao666责编 | 王晓曼出品 | CSDN 博客前言大家知道,考研很大一部分也是考信息收集能力。每年往往有很多人就是在这上面栽跟头了,不能正确分析各大院校往年的录取信息,进而没能选择合适的报考院校。至于很多院校的录取信息是以 PDF 形…

Mac OS X 下mysql配置备忘

从windows过渡到os x确实需要适应,对于开发人员来讲更是这样。从官网下载目前最新版本的mysql 5.7.13,下载地址:http://dev.mysql.com/downloads/mysql/刚开始非常顺利的安装完mysql,这时候我还没有意识到密码的问题,直…

为 ASP.NET Datagrid 创建自定义列

Marcie Robillard DatagridGirl.com 2003 年 9 月 简介 不得不承认,为 Microsoft ASP.NET 编写 Datagrid 代码包括大量的重复工作。尽管我深受该控件的困扰,但我还是不断寻找简化这类任务的捷径。谁都不愿意做重复的工作,对不对&#xff1…

不怕面试被问了!二叉树算法大盘点

作者 | BoCong-Deng题图 | 视觉中国出品 | CSDN博客树结构对于程序员来说应该不陌生,特别是二叉树,基本只要接触算法这一类的都一定会碰到的,所以我打算通过一篇文章,对二叉树结构的相关算法进行总结汇总,思路和代码实…

Field types

2019独角兽企业重金招聘Python工程师标准>>> Field types The generated Form class will have a form field for every model field. Each model field has a corresponding default form field. For example, a CharField on a model is represented as a CharFie…

【51CTO学院三周年】我的职业生涯有贵人相助--小强老师

个人认为功能测试做到一定年限之后,自然会遇到职业生涯中最大瓶颈——转型。对此,我的经历是这样的。话说那还是两年前,在搜索某问题的时候发现了51CTO,从中看到了很多大牛的博文和视频课程,顿时感觉自己找到宝了&…

在.NET中实现彩色光标,动画光标和自定义光标

作者:孟宪会 微软MVPTest.cs using System;using System.Drawing;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Reflection; namespace ColorCursor{ public class Form1 : System.Windows.Forms.Form { [DllImport("us…

magento模板区块--首页content区块

首页替换 自定义首页content内容 在cms-->>page 新建首页 在content 里加入 -------------------------- <div class"col-left side-col"> <p class"home-callout"><a href"{{store direct_url"apparel/shoes/womens/anash…

遮挡也能识别?地平线提出时序信息提升行人检测准确度|​CVPR 2020

来源 | 驭势科技行人检测作为计算机视觉领域最基本的主题之一&#xff0c;多年来被广泛研究。尽管最先进的行人检测器已在无遮挡行人上取得了超过 90% 的准确率&#xff0c;但在严重遮挡行人检测上依然无法达到满意的效果。究其根源&#xff0c;主要存在以下两个难点&#xff1…

通过响应式web设计,使本站支持手机浏览

2019独角兽企业重金招聘Python工程师标准>>> 2014-01-28 14:49:14 现在越来越多的人通过手机来上网&#xff0c;手机由于屏幕尺寸的原因&#xff0c;当浏览为PC端浏览器设计的网页的时候&#xff0c;往往会出现各种各样的问题。 糊涂僧的这个小博客也一样&#xff0…

在ASP.NET中跨页面实现多选

作者&#xff1a;孟宪会 微软MVP SelectMultiPages.aspx <% Page EnableViewState"true" CodeBehind"SelectMultiPages.aspx.cs" Language"c#" AutoEventWireup"false" Inherits"eMeng.Exam.SelectMultiPages" %><…

c#有多少种可能导致写文件失败?

1.路径中有非法字符 Path.GetInvalidPathChars() 2.文件名中有非法字符 Path.GetInvalidFileNameChars() 3.文件创建时&#xff0c;文件夹只读。 4.文件创建时&#xff0c;文件夹权限不足&#xff0c;如需要管理员权限。 5.文件创建时&#xff0c;文件夹不存在。 6.系统目录&am…

抖音、快手和直播行业的火爆究竟给了谁机会?

经常收到一些CSDN小伙伴的留言&#xff0c;反馈如下这样的困惑“短视频这么火爆&#xff0c;我该学些什么技术才能入行&#xff1f;”“我想从事音视频开发&#xff0c;该如何入门和进阶&#xff1f;真的像坊间传闻的那么难吗&#xff1f;”音视频的开发前景做一个不恰当的比喻…

android上line-height的问题

关于line-height大家应该非常熟悉了吧&#xff0c;就是用来做垂直居中的&#xff0c;屡试不爽&#xff0c;基本上没有什么问题&#xff0c;但是最近一个项目&#xff0c;测试提了一个bug&#xff0c;看图吧。 从别处窃的图&#xff0c;这个问题只有安卓上才能复现&#xff0c;做…

深入讲解 ASP+ 验证

Anthony Moore Microsoft Corporation 2000年10月简介 这篇文章详细讲解了 ASP 验证控件的工作方式。如果要生成其中包含验证控件的复杂页面&#xff0c;或是要扩展验证框架&#xff0c;建议您阅读本文。如果要学习使用验证控件&#xff0c;或是要决定是否使用验证控件&…

EditText和TextView出现中文、英文等string串的排版问题

默认EditText和TextView自动换行。如果在string中出现了中文字符&#xff0c;排版出现意外&#xff0c;如图所示&#xff1a; 这是因为软盘默认的是半角输入&#xff0c;而字母与数字的占位与汉字不同&#xff0c;所以在默认的情况下会出现如上的排版情况。 但是如果将默认的半…

阿里云蒋江伟:我们致力于为世界提供70%的算力 | 凌云时刻

导读&#xff1a;6月9日&#xff0c;2020阿里云峰会在云端召开&#xff0c;阿里巴巴合伙人、阿里云智能基础产品事业部高级研究员蒋江伟出席峰会并做了题为《新基建&#xff0c;新算力&#xff1a;阿里云基础设施算力全新升级》的重磅发布。&#xff08;以下内容为演讲实录&…

zabbix 微信报警( python 2.x )

python 2.x 微信报警脚本#!/usr/bin/python #_*_coding:utf-8 _*_ __author__ lvnianimport urllib,urllib2 import json import sysdef gettoken(corpid,corpsecret):gettoken_url https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid corpid &corpsecret corpsec…

利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型

作者 | Comet译者 | 天道酬勤&#xff0c;责编 | Carol出品 | AI 科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;这篇文章是由AssemblyAI的机器学习研究工程师Michael Nguyen撰写的。AssemblyAI使用Comet记录、可视化和了解模型开发流程。深度学习通过引入端到端的…

PHP中的页面跳转

PHP页面跳转一、header()函数 点击按钮<input type"submit" name "submit" value"确定" /> 使用POST方式<form action"X.php" method"post"> X.php页面只做判断逻辑 处理完以后 <?php //isset函数 if…

Closure Compiler 使用

为什么80%的码农都做不了架构师&#xff1f;>>> 该项目首页&#xff1a;http://code.google.com/intl/zh-CN/closure/compiler/ 下载地址&#xff1a;http://closure-compiler.googlecode.com/files/compiler-latest.zip 下载后解压&#xff0c;即可看到compiler.j…

如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能

作者&#xff1a;未知 请作者速与本人联系步入 IT 业已经有几年的时间了 , 从最早接触 pb6.0 到现在 .Net 技术 , 计算机技术不论是从硬件还是软件都有巨大的进步 . 而中国程序员总体水平在世界上也是远远落后&#xff0c;其中缺乏完善的体系、必要的交流和程序员个人英雄主义…

Revit二次开发之“选择某一楼层的墙”

其实就是过滤器的用法。这里想要找到同一楼层中的风管&#xff0c;不可行。 要用&#xff1a;duct.ReferenceLevel//选择某一楼层上的墙[Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)]//[Journaling(JournalingMode.NoCommandData)]publiccl…

百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路!

作者| 阿里文娱高级专家 随方&#xff0c;阿里文娱开发专家 轩成责编 | 屠敏头图 | CSDN 下载自视觉中国背景在阿里的业务中&#xff0c;有广泛的算法应用场景&#xff0c;也沉淀了相关的算法应用平台和工具&#xff1a;基础的算法引擎部分&#xff0c;有成熟的召回和打分预估引…

Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)

上一节我们讨论了 attach volume 操作中 cinder-api 的工作&#xff0c;本节讨论 cinder-volume 和 nova-compute 如何将 volume attach 到 Instance。cinder-volume 初始化 volume 的连接cinder-volume 接收到 initialize_connection 消息后&#xff0c;会通过 tgt 创建 targe…

关于DataGrid等控件中的自动编号

作者&#xff1a;未知 请作者速与本人联系序号内容1Taye2BOx3Glass4StarCraft一、正序A、AllowPagingFalse情况下<asp:DataGrid id"DataGrid1" runat"server"> <Columns> <asp:TemplateColumn> <ItemTemplate> …