百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

我们如何利用AI和机器学习将游戏引入现实生活?

bigegpt 2024-08-31 16:48 2 浏览

雷锋网AI科技评论按:本文作者Danny Lange,图普科技编译自O'REALLY。

“游戏开发”是一项非常复杂的任务,并且需要耗费大量的人力资源。图形艺术家、故事叙述者和软件工程师需要共同努力,才能打造出比较好的游戏环境、游戏情节和人物角色行为。通常,游戏是以传统代码的形式出现的“硬线行为”的微妙组合,也是以大量规则的形式出现的更具响应性的行为集合。在过去的几年间,数据导向型的“机器学习”已经逐渐取代了一些企业(比如亚马逊、Netflix和优步)中的规则导向型系统。在Unity,我们探究了“机器学习”技术的使用,包括“深度学习”在文本创作中的应用,以及“深度加强学习”在游戏开发中的应用。在机器学习和人工智能的浪潮中,我们看到了巨大的希望和发展空间。

对于那些数据导向型的大企业来说,机器学习已经不算是新兴技术了。2007年,Netflix发起了一个“过滤算法”的公开赛,为能够预测电影用户评分的最佳过滤算法专门设立了“Netflix奖”,这正是我们现在所经历的人工智能媒体报道浪潮的开端。不过早在2000年年初,一些大企业为了谋求更好的发展,已经对“数据导向型决策”和“机器学习”有所涉猎了。为了充分了解顾客们的偏好,进而将顾客偏好转化为更高的销售额,亚马逊一直在潜心研究他们的“推荐算法”。除了亚马逊的“推荐算法”之外,广告技术是另一个较早利用“机器学习”来提高网站点入率的领域。近年来,机器学习已经扩展至更多的行业,并且不断趋于成熟。

举例来说,我们在前面提到过的“推荐算法”最初只是作简单的推荐方案,如今已经发展到能够通过“探索”和“开发”寻求更多的信息。而亚马逊和Netflix在使用他们的推荐系统进行数据收集时所面临的挑战是,如果只向客户展示推荐频率高的产品,而不展示其他的产品,那么他们获得的客户偏好信息就不全面。而解决这一问题的方法是:将纯开发行为转变为加入了探索元素的开发行为。最近,由于同时具备了“开发”和“探索”能力,像“上下文老虎机”(contextual bandits)这样的算法能够更好地了解客户的未知信息,也因此越来越受欢迎。相信我,“上下文老虎机” (contextual bandits)算法肯定会在你浏览亚马逊商城的时候隐藏了一些网页。我们在“Unity博客”上发表了一篇文章,文章讲述了“上下文老虎机” (contextual bandits)算法的强大功能,从中你可以看到该算法的互动演示。

在2015年,DeepMind进一步发展了“上下文老虎机” (contextual bandits)算法,并且将其从一个深度神经网络与加强学习大规模结合的系统上发布出来。该系统仅靠一些作为输入的原始像素和分数就能以超人类的水平掌握各种范围的Atari 2600游戏。Deepmind的研究人员将“开发”和“探索”的概念完全对立,“上下文老虎机” (contextual bandits)算法不太擅长行为学习,但是“深度加强学习”却能够学习用于最大化“未来累积红利”的行为顺序,换句话来说,深度加强学习会学习那些能够实现“长期价值”(LTV)最优的行为。在一些Atari游戏中,“长期价值”表现在那些通常为人类玩家保留的策略发展上。

在Unity,我们给自己提出了这样一个问题:如何让一只鸡学会穿过繁忙的道路而不被迎面而来的汽车撞上,同时还要收集道路上的礼包?我们采用了一种与DeepMind实验非常类似的通用“加强学习”算法,并且规定如果小鸡捡到礼包获得正分,被车撞到则获得负分。除此之外,我们还给小鸡设定了四个动作:左移、右移、前进和后退。依靠这些原始像素和分数输入,以及几个非常简单的指令,小鸡在不足六个小时的训练后就达到了超人类水平的性能。

那么我们究竟是如何从实际应用的角度做到这一点的呢?其实很简单。我们使用了一组Python APIs,将Unity游戏与运行于“亚马逊网络服务器”(AWS)的TensorFlow服务相联系,TensorFlow是谷歌在2005年首次发布的深度学习框架。仔细观看视频中,你会发现小鸡在训练的初期阶段主要是探索如何不被汽车撞上(探索阶段),随着训练的深入,小鸡开始学习收集礼包(开发阶段)。值得关注的是,这个学习系统的一个重要能力就是处理从未遇到的状况。游戏中汽车的出现和礼包的放置都是完全任意的,而尽管小鸡已经经过了几个小时的训练,它还是会遇到之前训练中没有经历过的情境。有了我们的Python API,读取游戏框架和游戏内部状态,使用机器学习对游戏进行反向操作就变得非常简单了。

这只游戏小鸡的训练给亚马逊、Netflix和优步的发展提供了一些灵感,他们可以运用相同的技术来优化其客户服务。

想象一下,假如要训练一个“非玩家游戏角色”(NPC),而不是对其行为进行编码,那么游戏开发者就需要创建一个游戏场景。在这个场景中,我们将会利用与Python API相联的“云加强学习”来训练NPC。这个游戏场景可以是完全虚拟合成的,也可以在其中加入一些人类玩家。当训练到一定程度,这个NPC的性能已经相当不错的时候,游戏开发者就能利用另一组Unity API将TensorFlow模型直接嵌入他们的游戏中,这样一来,游戏就不需要连接TensorFlow的云服务了。

有些游戏开发者可能会说:“早在10到15年前,我们就已经这么做过了。”但是时代已经发生了巨大的变迁。尽管我们已经发明了“递归神经网络”(RNN),比如用于序列学习的“长短时记忆”(LSTM)和用于空间特征学习的“卷积神经网络”(CNN),但是由于计算能力的欠缺,以及大规模、精细软件框架的缺失,这些神经网络在实际应用方面,如游戏开发,仍面临巨大的阻碍。

“深度加强学习”在游戏开发中的运用尽管仍处于初期发展阶段,但是我们清楚地知道它将很可能成为一项颠覆性的游戏技术。像TensorFlow这样成熟的机器学习框架正在不断降低游戏开发者和机器学习研究者的入门门槛。机器学习现在正不断进入企业的各个角落,那么我们完全有可能在未来游戏中的发现机器学习的影子。

想要了解更多关于用深度学习开发数字体验的讯息,请查看Danny Lange于2017年9月17至20日在美国洛杉矶“人工智能大会”上发表的《利用“深度学习”将游戏、VR和AR引入现实生活》。雷锋网也将做持续关注。

via oreilly,雷锋网AI科技评论

相关推荐

Java 泛型大揭秘:类型参数、通配符与最佳实践

引言在编程世界中,代码的可重用性和可维护性是至关重要的。为了实现这些目标,Java5引入了一种名为泛型(Generics)的强大功能。本文将详细介绍Java泛型的概念、优势和局限性,以及如何在...

K8s 的标签与选择器:流畅运维的秘诀

在Kubernetes的世界里,**标签(Label)和选择器(Selector)**并不是最炫酷的技术,但却是贯穿整个集群管理与运维流程的核心机制。正是它们让复杂的资源调度、查询、自动化运维变得...

哈希Hash算法:原理、应用(哈希算法 知乎)

原作者:Linux教程,原文地址:「链接」什么是哈希算法?哈希算法(HashAlgorithm),又称为散列算法或杂凑算法,是一种将任意长度的数据输入转换为固定长度输出值的数学函数。其输出结果通常被...

C#学习:基于LLM的简历评估程序(c# 简历)

前言在pocketflow的例子中看到了一个基于LLM的简历评估程序的例子,感觉还挺好玩的,为了练习一下C#,我最近使用C#重写了一个。准备不同的简历:image-20250528183949844查...

55顺位,砍41+14+3!季后赛也成得分王,难道他也是一名球星?

雷霆队最不可思议的新星:一个55号秀的疯狂逆袭!你是不是也觉得NBA最底层的55号秀,就只能当饮水机管理员?今年的55号秀阿龙·威金斯恐怕要打破你的认知了!常规赛阶段,这位二轮秀就像开了窍的天才,直接...

5分钟读懂C#字典对象(c# 字典获取值)

什么是字典对象在C#中,使用Dictionary类来管理由键值对组成的集合,这类集合被称为字典。字典最大的特点就是能够根据键来快速查找集合中的值,其键的定义不能重复,具有唯一性,相当于数组索引值,字典...

c#窗体传值(c# 跨窗体传递数据)

在WinForm编程中我们经常需要进行俩个窗体间的传值。下面我给出了两种方法,来实现传值一、在输入数据的界面中定义一个属性,供接受数据的窗体使用1、子窗体usingSystem;usingSyst...

C#入门篇章—委托(c#委托的理解)

C#委托1.委托的定义和使用委托的作用:如果要把方法作为函数来进行传递的话,就要用到委托。委托是一个类型,这个类型可以赋值一个方法的引用。C#的委托通过delegate关键字来声明。声明委托的...

C#.NET in、out、ref详解(c#.net framework)

简介在C#中,in、ref和out是用于修改方法参数传递方式的关键字,它们决定了参数是按值传递还是按引用传递,以及参数是否必须在传递前初始化。基本语义对比修饰符传递方式可读写性必须初始化调用...

C#广义表(广义表headtail)

在C#中,广义表(GeneralizedList)是一种特殊的数据结构,它是线性表的推广。广义表可以包含单个元素(称为原子),也可以包含另一个广义表(称为子表)。以下是一个简单的C#广义表示例代...

「C#.NET 拾遗补漏」04:你必须知道的反射

阅读本文大概需要3分钟。通常,反射用于动态获取对象的类型、属性和方法等信息。今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的。获取类型的成员Type类的GetMembe...

C#启动外部程序的问题(c#怎么启动)

IT&OT的深度融合是智能制造的基石。本公众号将聚焦于PLC编程与上位机开发。除理论知识外,也会结合我们团队在开发过程中遇到的具体问题介绍一些项目经验。在使用C#开发上位机时,有时会需要启动外部的一些...

全网最狠C#面试拷问:这20道题没答出来,别说你懂.NET!

在竞争激烈的C#开发岗位求职过程中,面试是必经的一道关卡。而一场高质量的面试,不仅能筛选出真正掌握C#和.NET技术精髓的人才,也能让求职者对自身技术水平有更清晰的认知。今天,就为大家精心准备了20道...

C#匿名方法(c#匿名方法与匿名类)

C#中的匿名方法是一种没有名称只有主体的方法,它提供了一种传递代码块作为委托参数的技术。以下是关于C#匿名方法的一些重要特点和用法:特点省略参数列表:使用匿名方法可省略参数列表,这意味着匿名方法...

C# Windows窗体(.Net Framework)知识总结

Windows窗体可大致分为Form窗体和MDI窗体,Form窗体没什么好细说的,知识点总结都在思维导图里面了,下文将围绕MDI窗体来讲述。MDI(MultipleDocumentInterfac...