探索开发智能应用程序时应考虑的五个关键概念
标签: 人工智能,机器学习,深度学习
M. Tim Jones
发布: 2017-06-06
人工智能领域 (AI) 无疑有自己的优点和缺点,这些优缺点或许比技术曲线成熟度报告和 人工智能的冬天(AI winters) 中提到的还要多,但一些重要技术进步已最终融合在一起,使得开发人员能够开发一些 AI 应用程序。高速网络连接、公开认知算法的 API,以及深入学习等新方法,都正给 AI 的使用创造新机会。当然,这些机会也带来了新挑战,这些挑战的难度有时不亚于 AI 最初打算解决的问题。这些问题不仅仅是技术性的,还需要思考关于这些算法的行为方式,以及它们能够和不能揭示的信息的策略。
关于 AI,要知道的第一点是 AI 是纯架构性的。假设您正在开发一个移动应用程序,以便根据用户的当前位置来推荐饭店。此应用程序中存在一种自然的劳动分工,它将一些功能推送到客户端移动应用程序,将另一些功能推送到服务器端。
在客户端,计算能力仅达到每秒数十亿次浮点运算,而且运行这么多计算会很快耗尽电池电量。在服务器端(取决于集群),计算能力保持在每秒数万亿次浮点运算,当然也不需要担心电力消耗。类似地,移动设备的存储容量为数 GB,而集群的存储容量可能超过数百 PB。显然,尽管移动设备非常适合识别位置以及与用户交互,但构建一个单独依靠该设备的应用程序并不是理想选择。
对于我们的饭店应用程序,更好的架构是在服务器端维护一个全球饭店、菜单和评论列表,以及用户历史记录、喜欢和厌恶信息。然后服务器端将进行 基于内容的过滤(一种考虑关注的事物和用户偏好的推荐系统方法),使用用户的当前位置和历史用餐偏好来识别附近饭店列表。
这个示例显然是一种基于架构功能的关注点分离(但考虑到您想要实现的目标和希望做出的妥协,界线有时可能被模糊化)。但是,稍后您会看到,将用户的数据和偏好存储在云中也有自己的挑战。
即使在数据没有唯一地标识用户的时候,存储用户数据方面也存在必须处理的内在挑战,而且解决这些挑战远不止于简单地加密并保护用户数据,使它们不会因为网络攻击而公开。
2012 年,Target 公司的一位客户购买了无香味护肤液、矿物质补品和棉球(参阅 公司如何了解您的秘密 。Target 的统计模型正确地推断出,该购买行为通常与孕妇相关。然后 Target 开始向该客户发送婴儿产品优惠券作为促销手段。推荐信息被发现,但关注该消息的客户只是一位十几岁的女孩,而且优惠券最终落在了女孩父亲的手中,这位父亲并不知道自己的女儿怀孕了。
另一个意外发布信息的示例来自 Netflix。2006 年,Netflix 发布了一个根据 480,000 条用户评论创建的电影评论的匿名数据集。这些评论采用了用户 ID(一个整数值)、影片、评论日期和等级的格式。2007 年,得克萨斯大学的两位研究人员根据用户的影片评论(以及来自 Internet Movie Database 的公开评论),从此数据中识别出了各个用户。该发现导致了 2009 年对这次违法行为的一次集体诉讼;Netflix 在 2010 年才解决了这起诉讼。
另一方面,维护用户偏好或搜索数据可能对企业有利。不幸的是,此信息对犯罪分子也很有用。2016 年,一位男子的儿子被锁在闷热的车内致死,而人们发现这位男子搜索过“停放的车内有多热”,而且更可疑的是,他还搜索过“需要多高温度,闷热的车内的孩子才会死去”。2011 年,在一位女性的电脑上,发现有人搜索过“三氯甲烷”,随后她的女儿被发现死亡,而且体内有很高的三氯甲烷含量。(参阅 每一天:Justin Ross Harris 审讯的关键时刻 和 您的 Google 搜索记录如何在法庭上被用来对付您。)
更近的一个例子涉及到 Amazon Alexa,这是亚马逊公司的一个智能语音操作助理。因为 Alexa 始终在倾听它的唤醒词,所以检察官相信它可能会提供谋杀证据,并请求获取该设备的日志(Amazon 目前拒绝了该请求)。在谋杀案发生期间,家里的另一台智慧设备(热水器)被认为使用了过量的水,这被声称是掩盖罪行的证据。
所以,尽管我们期望保护隐私,但互联网能够保护隐私的假设是不安全的。您对用户数据的存储和保留,也可能受当地、国家和国际法律的约束。
无论您的应用程序涉及协同过滤还是深入学习等技术,这些算法背后的动力都是数据。但是,不是所有数据都是等同的,而且更重要的是,数据可能仅与某一天相关,而对下一天无用。
考虑开发欺诈检测应用程序。应用程序得出正确决策的速度是关键。在发生欺诈后识别出欺诈性交易,这显然比完全忽略数据好不到哪去。在某些应用程序中,速度是架构的关键原则,它引发了对实时分析的担忧。
历史数据可能紧密相关,但它的相关性有时没有最新数据那么高。我们采用预测您感兴趣的商品的推荐系统作为示例。历史数据可能在此上下文中很有用,但在您的偏好发生改变时,它将对系统失去作用。因此,认知应用程序应用数据来制定决策的速度,以及它不断过滤数据来准确建模用户的能力都很重要。
此外,数据质量对构建准确的模型最为重要。用于图像分类的深入学习模型拥有称为 对抗图像 的数据,恶意用户可使用该数据欺骗深入学习算法,使其对一个已知的、正确分类的图像进行错误分类。深入学习研究人员将这些图像视为安全威胁,因为它们的错误分类可能导致严重的后果(请考虑自动驾驶汽车环境下的深入学习)。试验表明,将这些对抗图像干扰应用到深入学习自动驾驶应用中,会导致将道路标识错误分类为不相关的事物(参阅 通用对抗干扰)。
从用户角度讲,在算法能解释它为什么提供某个解决方案时,在预测和推荐上下文中对算法的信任最高。例如,在推荐系统中,解释为什么推荐一款产品(比如因为用户购买或查看了相关商品)会增加用户的信任。
开发认知应用程序时,您不希望需要做重复工作。幸运的是,认知领域中的开源选项是广泛而又深入的。
如果您的认知应用程序要处理大量数据,诸如 Apache Hadoop 和 Apache Spark 之类的大数据框架不仅提供了管理大型数据集的框架,还提供了机器学习算法来理解数据。使用 Hadoop 或 Spark 进行大规模机器学习的最流行框架是 Apache Mahout 项目。该框架包含各种各样的机器学习算法,包括基于商品的协同过滤(collaborative filtering)、朴素贝叶斯方法(naive Bayes)、隐含马尔可夫模型(hidden Markov models),以及一些集群和维度减少算法。Mahout 中最近添加了 Samsara 平台,该平台提供了一个矢量数学实验环境,使用类似 R 的语法执行大规模数据处理。
Spark 环境支持快速的内存型计算,还提供了一个称为 MLlib 的机器学习库。这个库包含许多机器学习算法,以及用于构建机器学习管道的工作流实用工具。
如果不要求认知应用程序大规模地处理数据,有一些库和工具包可向较小的数据集应用机器学习算法。一个最流行的工具包就是用于 Python 的 scikit-learn。这个工具集是基于 NumPy 和 SciPy 而构建的,它实现了多种机器学习算法,可以在 Python 环境中轻松地对数据集应用这些算法。
除了对数据集应用机器学习算法的一般性平台之外,也有一些适合特定的机器学习应用的特殊环境。一个示例就是 Autoware,这是一个用于市区自主驾驶的开源平台。此软件包括加速、制动和转向控制,能自动检测行驶车道、信号灯、车辆、行人和其他物体。Autoware 是为 Ubuntu (Linux) 发行版开发的,它使用了 Berkeley Software Distribution 许可证。
2015 年,Google 发布了它的开源机器学习系统 TensorFlow,这是一个深入学习框架。TensorFlow 通过有状态数据流图所表示的计算方法来处理称为 张量 的多维数组。这个框架既可以在单个设备上运行,也可以在 CPU 和 GPU 集群上运行。其他重要的深入学习框架包括 Torch、Theano 和 Apache Singa。
最后,IBM Watson 为语言、语音、视觉和数据分析提供了一系列具有普遍适用性的深入学习服务,还提供许多特定的 API,这里无法一一介绍。有关的更多信息,请访问 Watson Developer Cloud,在那里可以找到针对 Node、Java、Python、iOS 和 Unity 的开源 Waston SDK。 IBM Cloud 云上提供了 Watson 服务。
所以,无论您计划大规模地处理数据,还是在单个计算系统上下文中处理数据,大多数机器学习算法都能找到开源实现。还可以找到实现特定于领域的应用的专业工具包。
随着我们收集数据的方法的增加,推动认知计算理解此数据的动力也在增大。大数据框架提供了大规模存储和处理数据的途径,但需要采用一些算法将这些分布式数据简化为有意义的洞察,供我们据以制定有效的决策。
使大量数据具有理解能力相形见绌的一个领域就是物联网 (IoT)。IoT 将推动新的数据收集和分布式管理架构,带来目前不存在的新的安全保护形式。
数据收集、处理和机器学习中的另一个有趣领域是 量化自我(quantified self)。量化自我运动致力于将数据获取能力融入到个人生活中,以推动自我认识和个人信息学的发展。可以融合来自许多来源的数据,包括健身追踪器(跟踪心率和睡眠质量等数据)和 GitHub 提交等在线来源。可分析来自这些来源的数据,以寻找锻炼与睡眠之间的关系,从而获知适当的运动量。决策树归纳是识别生产力和输出量等变量的影响因素的理想机器学习方法。在聚合来自大量用户的这类数据后,一定会揭示出有趣的特征。数据源的这种融合对获取人群的新洞察至关重要。
但是,除了融合数据源之外,还有一个 集成 的概念。集成方法应用了多个学习算法,获取的结果比利用单个学习算法获取的结果的质量更高。通过使用提供了给定领域的不同视角的多个数据集,然后应用机器学习算法集成,可以改善性能和结果。
集成方法的优势的一个例子是 Netflix Prize。通过结合使用多个不同的算法来利用每种模型的优势,Netflix Prize 最终脱颖而出。这些算法包括奇异值分解(singular value decomposition)、受限玻尔兹曼机(restricted Boltzmann machines)和梯度提升决策树(gradient-boosted decision trees)。
本文分析了开发认知应用程序的各种考虑因素,包括来自客户端和服务器角度的架构考虑因素,以及使用框架和库来构建应用程序。文中花大量的篇幅介绍了数据问题,从隐私到过时等特征。最后,本文分析了 IoT 等新技术面临的一些挑战。使用多个数据集和集成方法具有改善结果的好处。
本文翻译自: 5 things you need to know when creating a cognitive app(2017-05-17)