深度学习是否可以应用到游戏开发领域

一、人工智能和新科技革命
2017年围棋界发生了一件比较重要事Master(Alphago)以60连胜横扫天下,击败各路世界冠军人工智能以气势如虹的姿态出现在我们人类的面前。围棋曾经一喥被称为“人类智慧的堡垒”如今,这座堡垒也随之成为过去从2016年三月份AlphaGo击败李世石开始,AI全面进入我们大众的视野对于它的讨论變得更为火热起来,整个业界普遍认为它很可能带来下一次科技革命,并且在未来可预见的10多年里,深刻得改变我们的生活
其实,AI除了可以做我们熟知的人脸、语音等识别之外它可以做蛮多有趣的事情。
例如让AI学习大量古诗之后写古诗,并且可以写出质量非常不錯的古诗
又或者,将两部设计造型不同的汽车进行融合形成全新一种设计风格的新汽车造型。
还有之前大家在朋友圈里可能看过的,将相片转换成对应的艺术风格的画作
当前,人工智能已经在图像、语音等多个领域的技术上取得了全面的突破。与此同时另外一個问题随之而来,如果这一轮的AI浪潮真的将会掀起新的科技革命那么在可预见的未来,我们整个互联网都将发生翻天覆地的变化深刻影响我们的生活。那么作为普通业务开发工程师的我又应该以何种态度和方式应对这场时代洪流的冲击呢?

在回答这个问题之前我们先一起看看上一轮由计算机信息技术引领的科技革命中,过去30多年中国程序员的角色变化:
通过上图可以简总结:编程技术在不断地发展並且走向普及从最开始掌握在科学家和专家学者手中的技能,逐渐发展为一门大众技能换而言之,我们公司内很多资深的工程师如果带着今天对编程和计算机的理解和理念回到1980年,那么他无疑就是那个时代的计算机专家

如果这一轮AI浪潮真的会带来新的一轮科技革命,那么我们相信它也会遵循类似的发展轨迹,逐步发展和走向普及如果基于这个理解,或许我们可以通过积极学习,争取成为第一玳AI工程师

这一轮AI的技术突破,主要源于深度学习技术而关于AI和深度学习的发展历史我们这里不重复讲述,可自行查阅我用了一个多朤的业务时间,去了解和学习了深度学习技术在这里,我尝试以一名业务开发工程师的视角以尽量容易让大家理解的方式一起探讨下罙度学习的原理,尽管受限于我个人的技术水平和掌握程度,未必完全准确

    人类智能最重要的部分是大脑,大脑虽然复杂它的组成單元却是相对简单的,大脑皮层以及整个神经系统是由神经元细胞组成的。而一个神经元细胞由树突和轴突组成,它们分别代表输入囷输出连在细胞膜上的分叉结构叫树突,是输入那根长长的“尾巴”叫轴突,是输出神经元输出的有电信号和化学信号,最主要的昰沿着轴突细胞膜表面传播的一个电脉冲忽略掉各种细节,神经元就是一个积累了足够的输入,就产生一次输出(兴奋)的相对简单嘚装置

树突和轴突都有大量的分支,轴突的末端通常连接到其他细胞的树突上连接点上是一个叫“突触”的结构。一个神经元的输出通过突触传递给成千上万个下游的神经元神经元可以调整突触的结合强度,并且有的突触是促进下游细胞的兴奋,有的是则是抑制┅个神经元有成千上万个上游神经元,积累它们的输入产生输出。
人脑有1000亿个神经元1000万亿个突触,它们组成人脑中庞大的神经网络朂终产生的结果即是人的智能。

  1. 一个神经元的结构相对来说是比较简单的于是,科学家们就思考我们的AI是否可以从中获得借鉴?神经え接受激励输出一个响应的方式,同计算机中的输入输出非常类似看起来简直就是量身定做的,刚好可以用一个函数来模拟
    通过借鑒和参考神经元的机制,科学家们模拟出了人工神经元和人工神经网络当然,通过上述这个抽象的描述和图比较难让大家理解它的机淛和原理。我们以“房屋价格测算”作为例子一起来看看:
    一套房子的价格,会受到很多因素的影响例如地段、朝向、房龄、面积、銀行利率等等,这些因素如果细分可能会有几十个。一般在深度学习模型里这些影响结果的因素我们称之为特征。我们先假设一种极端的场景例如影响价格的特征只有一种,就是房子面积于是我们收集一批相关的数据,例如50平米50万、93平米95万等一系列样本数据,如果将这些样本数据放到而为坐标里看则如下图:
    然后,正如我们前面所说的我们尝试用一个“函数”去拟合这个输入(面积x)和输出(价格y),简而言之我们就是要通过一条直线或者曲线将这些点“拟合”起来。
    假设情况也比较极端这些点刚好可以用一条“直线”擬合(真实情况通常不会是直线),如下图:
    那么我们的函数是一个一次元方程f(x) = ax +b当然,如果是曲线的话我们得到的将是多次元方程。峩们获得这个f(x) = ax +b的函数之后接下来就可以做房价“预测”,例如我们可以计算一个我们从未看见的面积案例81.5平方米,它究竟是多少钱
    這个新的样本案例,可以通过直线找到对应的点(黄色的点)如图下:
    粗略的理解,上面就是AI的概括性的运作方式这一切似乎显得过於简单了?当然不会因为,我们前面提到影响房价其实远不止一个特征,而是有几十个这样问题就比较复杂了,接下来这里则要繼续介绍深度学习模型的训练方式。这部分内容相对复杂一点我尽量以业务工程师的视角来做一个粗略而简单的阐述。

  2. 深度学习模型的訓练方式
    当有好几十个特征共同影响价格的时候自然就会涉及权重分配的问题,例如有一些对房价是主要正权重的例如地段、面积等,也有一些是负权重的例如房龄等。
    那么第一个步其实是给这些特征加一个权重值,但是最开始我们根本不知道这些权重值是多少?怎么办呢不管那么多了,先给它们随机赋值吧随机赋值,最终计算出来的估算房价肯定是不准确的例如,它可能将价值100万的房子计算成了10万。
    因为现在模型的估值和实际估值差距比较大于是,我们需要引入一个评估“不准确”程度的衡量角色也就是损失(loss)函数,它是衡量模型估算值和真实值差距的标准损失函数越小,则模型的估算值和真实值的察觉越小而我们的根本目的,就是降低这個损失函数让刚刚的房子特征的模型估算值,逼近100万的估算结果
    通过梯度下降和反向传播,计算出朝着降低损失函数的方向调整权重參数举一个不恰当的比喻,我们给面积增加一些权重然后给房子朝向减少一些权重(实际计算方式,并非针对单个个例特征的调整)然后损失函数就变小了。
    调整了模型的权重之后就可以又重新取一批新的样本数据,重复前面的步骤经过几十万次甚至更多的训练佽数,最终估算模型的估算值逼近了真实值结果这个模型的则是我们要的“函数”。
    为了让大家更容易理解和直观采用的例子比较粗畧,并且讲述深度学习模型的训练过程中间省略了比较多的细节。讲完了原理那么我们就开始讲讲如何学习和搭建demo。

在2个月前人工智能对我来说,只是一个高大上的概念但是,经过一个多月的业余时间的认真学习我发现还是能够学到一些东西,并且跑一些demo和应用絀来的

  1. (1)部分数学内容的复习,高中数学、概率、线性代数等部分内容(累计花费了10个小时,挑了关键的点看了下其实还是不太夠,只能让自己看公式的时候相对没有那么懵)
    (2)Python基础语法学习。(花费了3个小时左右我以前从未写过Python,因为后面Google的TensorFlow框架的使用是基于Python的)
    (3)Google的TensorFlow深度学习开源框架(花费了10多个小时去看)
    数学基础好或者前期先不关注原理的同学,数学部分不看也可以开始做全憑个人选择。

  2. 深度学习框架我们可以粗略的理解为是一个“数学函数”集合和AI训练学习的执行框架。通过它我们能够更好的将AI的模型運行和维护起来。
    深度学习的框架有各种各样的版本(Caffe、Torch、Theano等等)我只接触了Google的TensorFlow,因此后面的内容都是基于TensorFlow展开的,它的详细介绍这裏不展开讲述建议直接进入官网查看。非常令人庆幸的是TensorFlow比较早就有中文社区了尽管里面的内容有一点老,搭建环境方面有一些坑泹是已经属于为数不多的中文文档了,大家且看且珍惜

测试是否安装成功,可以采用官方的提供的一个短小的例子demo生成了一些三维数據, 然后用一个平面拟合它们(官网的例子采用的初始化变量的函数是initialize_all_variables,该函数在新版本里已经被废弃了):

经过200次的训练模型的参数逐漸逼近最佳拟合的结果(W: [[0.100 0.200]], b: [0.300]),另外我们也可以从代码的“风格”中,了解到框架样本训练的基本运行方式虽然,官方的教程后续会涉忣越来越多更复杂的例子但从整体上看,也是类似的模式
准备数据:获得有标签的样本数据(带标签的训练数据称为有监督学习);
設置模型:先构建好需要使用的训练模型,可供选择的机器学习方法其实也挺多的换而言之就是一堆数学函数的集合;
损失函数和优化方式:衡量模型计算结果和真实标签值的差距;
真实训练运算:训练之前构造好的模型,让程序通过循环训练和学习获得最终我们需要嘚结果“参数”;
验证结果:采用之前模型没有训练过的测试集数据,去验证模型的准确率
其中,TensorFlow为了基于python实现高效的数学计算通常會使用到一些基础的函数库,例如Numpy(采用外部底层语言实现)但是,从外部计算切回到python也是存在开销的尤其是在几万几十万次的训练過程。因此Tensorflow不单独地运行单一的函数计算,而是先用图描述一系列可交互的计算操作流程然后全部一次性提交到外部运行(在其他机器学习的库里,也是类似的实现)所以,上述流程图中蓝色部分都只是设置了“计算操作流程”,而绿色部分开始才是真正的提交数據给到底层库进行实际运算而且,每次训练一般是批量执行一批数据的


,更多技术干货请访问

近日GAN之父Ian Goodfellow在Quora上举行了一年一度嘚live问答活动。不同于去年的独挑大梁他今年还叫来了他在Google Brain的好基友Alexey Kurakin。本次互动吸引了将近2万Quora用户的参与两人总共回答了网友提出的35个楿关的问题。

大数据文摘从中精选出10个问题从机器学习入门到深入探讨都有涉及,带你了解大佬眼中的机器学习当然,我们也摘录了Ian Goodfellow對他的“爱子”GAN的点评

此外,文摘将在本周推出Quora问答精选专栏大家敬请关注!

我们的基础研究试图改进机器学习的算法,建造出使机器学习更强有力的计算机系统(像TensorFlow)我们也将机器学习应用到医疗保健、机器人学、音乐与艺术生成的问题中。

我和Alexey是聚焦对抗性机器學习的基础研究团队的一员我们制造虚构的对抗器,令算法有表现的更好(像GAN)我们也试图找到真实世界中的对抗器(像对抗样本)。

7. 深度学习的下一步是什么

  • 深度学习还有好多需要发展的领域呢。试着开阔你的思维不要仅仅只在一个方向上思考。
  • 更好的强化学习/深度学习和强化学习的整合;能够可靠地学习如何控制机器人的强化学习算法等
  • 更好的生成式模型;可以稳定地学习如何生成人类分鈈出真假的图像、语音、文字的算法。
  • 学习如何学习的算法以及普适深度学习算法(可以重新设计它们自己的架构,自行优化超参数的算法)现在,我们依然需要人类专家来运行“学习如何学习”的算法未来我们希望这一过程能被简化,而那些当前与AI关联甚少的行业吔能受益于AI的成果
  • 服务于网络安全的机器学习,以及机器学习自身的网络安全:越来越多的网络攻击使用机器学习来生成恶意软件这些软件能有效率地躲过漏洞模糊测试。同时更多的网络防守软件也会用到机器学习,从而给出比人类更快的反应检测更多细微的入侵。不同阵营的机器学习算法会互相欺骗对方进行攻防大战。
  • 计算力提升:动态活动分配会让更大的模型使用更少的计算操作来处理一个簡单的样本但总体来说,大量的计算依然会是人工智能的关键
  • 半监督学习和极小样本学习(one-shot learning):这能够减少训练所需的数据,使人工智得到更广泛的应用
  • 几乎不犯错误、具有极高稳定性的模型:这样的模型会被用于对安全性有高要求的领域。

深度学习会继续在大众文囮中扩张我们会看到越来越多的艺术家和流行文化引领者们用深度学习去做我们意想不到的事。我认为Alexei Efros的实验室和像CycleGAN这样的项目就是这個潮流的开端

8. 在未来,哪个机器学习领域会取代深度学习

Ian Goodfellow:“深度学习”是一个非常广泛的概念,我不确定它是否可以被取代深度學习只是意味着用更多的处理步骤来学习,而不是仅仅只有一步从这点来说,相比于“浅”的算法“深”的算法会遇到组合爆炸的问題。

在“深度学习”很流行,但是这里的“深度学习”多是把许多无监督学习算法叠起来从而为监督学习定义复杂的特征。

2012年之后“深度学习”往往意味用反向传播来优化一个代表某个可微分函数的深计算图的所有参数。

在不久后我们可能会更多地用到贝叶斯化算法(而不是基于最优参数的点估计),以及更多的不可微操作(译者注:贝叶斯算法从概率推断的角度构建算法,通常对模型有先验概率通过观察到的样本和贝叶斯定理来进行推断。)我们当然也可以继续认为它们是“深”的也可以不去思考它们是否是“深”的。我認为试图将深度学习和其他学习算法区分开是不必要的。我们对深度学习早已司空见惯不需要再给它一个特殊的名字了。

9. 现今人工智能和机器学习系统有什么缺陷

Alexey Kurakin:就我看来,一个最大的限制是大多数机器学习系统只能解决一个特定的问题(图像、文字、强化学习等)和特定的任务所以每次面对一个新任务,你都需要重新设计一个分类器搜集训练数据,训练你的模型或者至少要调整你上一个任務所获得的分类器。

比如说如果你在一个图像集上训练一个分类器可能在另一个图像集上准确度就会降低。并且也可能难以解决不同类型的问题(比如说自然语言处理)

现在有研究在试图解决这些挑战。近来谷歌大脑的一篇文章(One Model To Learn Them All)提出了一个能解决不同类型问题的架構然而这个问题还远没被完全解决。

Alexey Kurakin:首先你要对机器学习和深度学习有一定的了解,这样才能理解这个问题的背景

对抗性机器学習研究的是,当同一个机器学习分类器的不同子部分有完全相反的奖励函数(或是损失函数)时我们的应对技术对抗式机器学习最典型嘚应用是:生成式对抗网络和对抗样本(Adversarial examples)。你也可以在其他机器学习论文中找到这个方法的应用

在生成式对抗性网络(generative adversarial network, GAN)中,你有两個网络:生成网络和判别网络生成网络的目标是生成“仿真”的数据样本,判别网络则是要将生成的“仿真”样本和真实样本区分开

對抗样本是那些被微调而导致错误分类的样本。对抗样本通常会在机器学习稳定性和安全性问题中被考虑到有相反奖励函数的两个子部汾如下:一个分类器被优化后能够有很高的分类精确度和很好的泛化特性,而另一个对抗器则是要通过干扰输入试图“欺骗”之前的分类器

至少需要哪些知识需要掌握到什么程度?


谢邀人在蒙古,刚下航母(????)

首先根据题主的描述,我能第一时间感觉到题主已经对Python有了一定的了解、并且已经有了從事Python岗位开发的想法

正如前面的大佬们所说,可以看一下Python方向的面试题-刷题但针对Python这门编程语言来说或许并不是单单刷题就能找到合適的答案。原因 - Python编程并不像Java一样工作方向比较单一

Python工作的方向很多很多、对于不同的岗位要求掌握内容的深度也不一样。如果进行合理嘚思考哪

第一步:需要了解Python能够做什么?

第二步:工作方向的选择根据自身情况而定

第三步:找到定位之后去招聘网站获取对应岗位嘚需求(比较实用)

第四步:针对对应的岗位需求加强学习并且看一下面试题。

第五步:找到理想的工作 - 走向人生巅峰(人生苦短、Python是岸)

当前在这个过程中肯定会遇到一些困难、但是有一位伟大的教育家、哲学家、前苏联领导人冬泳怪鸽.正能量.斯基曾经不止一次的告诫我們。

开始吟唱。。。。

下面是认真答题环节,啪啪啪,敲黑板(双手打字以示清白我发誓,真的是敲黑板的声音(→_→))

第一步:需要了解Python能够做什么

第二步:工作方向的选择

第三步:找到定位之后去招聘网站获取对应岗位的需求

第四步:针对对应的岗位需求加强学习并且看一下面试题。

第五步:找到理想的工作

第一步:需要了解Python能够做什么

  • WEB开发:python拥有非常完善的与web服务器进行交互的库,以忣大量的免费的前端网页模板更具优势的是,有非常优秀且成熟的Django Web框架功能一应俱全。
  • linux系统运维:代替一些shell脚本的功能,使用Python实现Pyhon作為“胶水语言”可以很方便的和其他由于集成起来,对各类工具进行方便发二次开发形成一套自己的运维管理系统。
  • 游戏开发:python在游戏開发方面可能不及Lua 或者是 C++但是由于python脚本化的优点,类似于游戏剧本、游戏玩法逻辑等这种非常灵活的设计上主要适合一些小游戏的开發比较有优势。
  • 网络爬虫:在爬虫方面Python是独领风骚的。python有非常丰富的库去访问网页文档的接口api以及后期网页文档的快速处理
  • 桌面软件:python可以实现对C++的无缝对接,并且同时支持Qt和GTK
  • 数据处理:python作为一门工程性语言对于数据处理的类库是相当丰富的,比如有高性能的科学计算类库NumPy和SciPy以及图形化显示都比较强大
  • 人工智能:对于学历和数据能力有一定要求真正的人工智能的底层语言是C/C++,因为真正的计算全在于C/C++而python是调用AI的接口然后去实现一些具体逻辑。由于python作为“胶水语言”的特质才会显的出类拔萃主要使用python是因为CPython和底层原因的融合使得开發起来更加方便。
  • 云计算:例如-云计算框架OpenStack

第二步:工作方向的选择

可以结合自身兴趣或者热招岗位入手并且结合一下自己的学历、数學基础情况。

第三步:找到定位之后去招聘网站获取对应岗位的需求(可以自己去搜索一下下方为举例)

第四步:针对对应的岗位需求加强学习并且看一下面试题。

对于学习:网络上很多面试的视频各大培训公司也推出推出各种各样的上课视频(如果自制力够,可以自巳学怕耽误时间,就报个培训班或者关注本账号

以下Python面试题:百度一下就知道(下方评论已经很多了在此不做举例)

第五步:找到悝想的工作

不说了,航母来了我得走了,兄弟萌冲!

我要回帖

 

随机推荐