普通视图

发现新文章,点击刷新页面。
昨天以前谭升的博客

一封来自读者的信

作者 谭升
2018年11月24日 11:26

Abstract: 一封来自读者的信
Keywords: 计算机视觉,就业,人工智能,深度学习

收到一位读者的来信,字里行间都看到了当年的自己,中间有一些问题觉得很多人可能都有,所以在他同意的情况下,我把邮件部分贴出来,希望能帮助更多的人。



原文:

同学,您好:
很高兴收到的微信咨询,本来想在微信上回复你,但是我觉得还是好好思考一下你的问题然后把这些问题大概总结一下,回复给你可能更准确也更有帮助,另外我觉得有你这些问题的人应该不少,所以,如果你同意我会在博客上公开这封回信和我们的部分聊天记录,当然我会隐藏掉所有您的个人信息。
看我的博客的很多人都是在校的学生,包括一些本科的同学以及硕士博士研究生,其中我感觉硕士居多,很不幸,我个人是没有读过硕士的,所以对大部分硕士课程以及硕士工作没有什么了解,当然我更不能深入了解每个课题组的深入程度。
我收到的询问一般都是一些入门级的同学发给我的,这很正常,入门之前会恐慌迷茫不知所措,所以需要询问;一旦入门了,需要的工作就是调整,深入了,即使是讨论,也不会找我这种江湖野怪,所以我无法了解到那些人,所以本文不适合那些已经入门的人。
下面来回答你的问题:

  1. 你首先介绍了一下你目前的情况,985,研一,老师是做机器视觉,机械部分,视觉机器人,困惑是自己不知道选什么方向
  2. 实验室别人是做什么的,有人做深度学习,有人做后端,有人做视觉检测
  3. 你的问题是你要不要跟着师兄们的脚步还是跟着老师的脚步做机械部分
  4. 就业形势,深度学习以后的发展,自己非科班,转机器视觉是因为机械行业不景气。
    下面是我个人的对你目前状况的理解,和一些个人的建议,仅供你参考。对于任何问题每个人都有不同看法,有人务实可能选择走保守道路,有人理想,选择走一些理想化的路线,我肯定也会有自己的态度,而对你来说,我的态度对你来说就是一种噪音,或者更准确说,就是误导,所以,你可以多听几个人的建议,综合来看。你听邻居大婶的意见,还不如自己做决定。
  5. 985,这个数字是在校学生表示自己身份的象征,在学校其间,能证明我们能力的只有学校好坏,而到了社会能证明我们身份的就是变成,车,房子,衣着等,其实我不认为985就有多好,我也不会看不起三本的学生,因为有些985的学生最后干的事,如果从社会的角度还不如我们村种菜的大爷对社会的贡献大。我们的社会文化导致了我们从出生开始就要被比较那些能看到的东西,身高,长相,小学考第几,初中考第几,上的什么高中什么大学,这些都是挂在表面的东西,而这个现象的结果是导致我们自己也开始只追求外在的东西,所以对于985,我给你的建议是,如果你内心足够强大,可以完全不顾及外在的东西,深入修炼自己的内心(包括对事物的理解,基础知识,比如数学,语言,编程这些基础的知识技术,过程很苦,看不到什么提高,但是我认为是非常有用的)。老师做的自己不喜欢,或者就业形势不好:我知道很多人不知道自己喜欢什么,或者自己喜欢的东西不能被用来谋生(唱歌跳舞什么的),首先我觉得这个问题我之前也遇到过,最求喜欢的还是追求活下来,如果你的爱好不能够支持你的生活,我建议把80%的精力放在你的谋生技能上,也就是说你的谋生技能要在行业平均水平之上,至于做什么,你可以自己找一个自己相关的,又不太讨厌的做,而你真正的爱好,只有你自己知道的那个,你可以用业余的时间来继续,提高水平同时能够体会到快乐。如果你既不知道自己喜欢什么,也不知道做什么事会开心,我觉得你应该继续找到这件事,如果找不到,这会是个悲剧。自己选方向:工作方向,与目前已经掌握的技能相关,且自己能够掌控的,行业我会在后面说。
  6. 实验室里的人都在做别的,自己要不要学:不能别人干什么你就觉得那个好,从众可以用来保护自己,但是不能作为自己奋斗目标,每个人的性格和技能基础都不同,所以他们做的事可能不一定适合你,像1中说的,你可以80%的精力用于你以后的事业,20%用于爱好。IT行业的细分很多,也很细,所以找一个自己不太讨厌的其实不难,不要担心这个行业怎么样,关键是你的目标是学一点然后找个公司混日子,还是说把这个干好,如果你能把某项技能掌握的很好的话,找工作谋生一般没问题,当然技术最好是主流或者有一定前景的,传呼机维修这种技术就是一个反面典型(来自郭德纲的段子)。
  7. 这和2中的回答一样,不要只看试验是的几个人是做什么的,多在网上看看最新的东西,如果可以,多去Youtube上逛逛是好的,你们村的集市的视野是不如世博会的,找几个自己喜欢的,好好调查一下。导师和师兄在很多人看来就是权威了,当然,实验室环境是,但是这些权威其实没有你看得那么权威,我们从小就喜欢跟随权威,比如有人也把我当成权威,说实话,这些权威包括我就是普通人,而权威的见解就是他们的个人见解,有些很片面,有些甚至就是不对的,所以你不需要100%的跟随他们。
  8. 就业形势不好,因为经济不好,宏观经济以及行业环境都不太好,所以我觉得你要做的更应该是提高自己的技能,求值就是个求期望的过程,要为了得到大的期望,你能做的就是提高自己的概率,也就是让自己在专业方面变得更强大一些,而不是找一个行业招人多的,后者想法会让人一直堕落下去。非科班的问题是基础不好,所以你要做得的是补充自己的基础,深度学习(调参)以后没什么发展,这是我说的,我不是权威,但是研究其工作原理会有前途,但是我们目前的应用主要工作是调参,没人会花钱请你去研究模型的数学原理(Google这些公司除外,我说的是中国公司)人工智能未来会是个非常强的方向,但是不一定是深度学习。计算机视觉,机械这些行业都是强应用行业,机械我不懂,但是计算机视觉我觉得应该是好方向,但是目前国内的水平一般,因为计算机视觉的一个主要特征是替代人类,完成重复工作,而我国目前最不缺的就是人,所以计算机视觉的最近几年的招聘情况我不知道,如果计算机视觉的需求量大的话,这是个非常不错的行业,我理解机械也是个非常有前景的行业,只是热度目前不如人工智能类的这些工作。
    希望能帮助你,注意,我的这些都是给你提供信息,而不是强烈建议或者指导,没有一个人的思想能指导别人的行为,只是提供信息,希望你多思考,多浏览,
    Tony
    Nov,24,2018

收到的回信原文:

谭老师,您好
多谢老师抽出时间为我指点迷津,正像老师所说的,我应该首先对自己有个清晰的认识,然后再选择自己的发展方向。
现在的社会是资产财富论能力,然而大学入学时大家都差不多,不同的专业进入社会开始拉开差距,生化环材也正是因为这个原因被称为劝退专业,机械则是屌丝专业,个人觉得这些专业的学生并不比CS EE 差,但是赚不到钱的就得在这个社会的下游,作为机械专业的学生,是不甘心吧,当然也是当初自找的,生化环材机友们和所有人一样爱财,也希望自己和家人以后能过得好点,我想我会转互联网/IT吧,如老师所说,大多数人不知道自己喜欢什么,我也是,就专业方面来说,机器人和应用开发 人工智能都挺有好感,但谈不上热衷,大概不是真的喜欢吧,作为生活的一部分,我想我会转互联网,作为爱好追求,我还应该多去了解自己,谢谢老师提点,我以为选择了一个方向就会是生活的全部了,所以害怕决定。
把这个问题公开我觉得挺好的,希望所有有想法的人勇敢一点。


原文地址: https://face2ai.com/Other-a-mail

【强化学习】2.1 k臂赌博机(k-armed bandits)问题

作者 谭升
2018年10月8日 22:40

Abstract: 在强化学习中,平衡Exploitation和Exploration将会是一个从始至终的问题,我们本章用简单的k臂赌博机问题来从具体的每一步来分析和研究这个问题,本节先介绍下问题的描述和大概的解决思路,为本章后面的问题解决做好铺垫
Keywords: 强化学习,k臂赌博机,多臂赌博机,利用,探索,Exploitation,Exploration

k臂赌博机(k-armed bandits)问题

赌博机,说到赌博,大家都觉得这是一个非常不好的活动,但是说回来,赌博是催生数理统计和概率的主要动力,具体可以看未完成的系列:数理统计学简史
作为不赌博的好孩子,大部分人对k臂赌博机可能不是很了解,首先我们来介绍一下这种赌博机:

这就是为什么是k臂赌博机,那个臂就是旁边的控制器,通过拉动控制器就能出发机器开关,当出现指定的图案就会有相应的奖励,这是1臂赌博机,如果有多个这种机器放在一排,那么这就是k臂赌博机。

k臂赌博机问题描述

下面我们来从学术的角度描述一下这个问题,描述如下:
我们面对的选择包含 $k$ 个选项,或者 $k$ 种可选的行为,每一个选择或者行为都对应了一个奖励信号(rewarding signal,忘记了回到前面看看) 每种选择对应的奖励信号是随机的,但是都来自固定的分布,当然来自不同选择的奖励信号服从的分布都不同,但是不会随时间改变,比如,$k$ 种可选的行为中 $f_1$ 表示第一种行为的奖励信号的随机分布,其可以不同于 $f_2$ 也就是第二种行为的奖励信号的随机分布,但是为了简化问题,我们目前研究的问题中 $f_1,f_2,\dots,f_k$ 都不随时间变化。
我们的目的是通过每一步观察,选择,执行不同行为来最大化我们的奖励信号,当然这个过程需要长时间,或者是多步以后来观察结果,一次或者两次的观察是没有研究意义的。

k臂赌博机

经过上面的描述,我们就可以把描述和赌博机联系在一起了,首先我们对赌博机进行如下假设:

  1. 赌博机出现的结果都是满足某种随机分布的,当然这个可能是赌场老板设定的,也可以是自然产生的
  2. 赌场里面有很多赌博机可以供我们选择,如果赌场就一个赌博机,我们就要换一家研究k-armed bandits problem了
  3. 赌博机的内的设置不会随时间改变,也就是1中的分布不随时间改变,没有幕后黑手操控比赛

有上面三点假设,我们就可以解释为什么我们本章研究的问题的是k臂赌博机了,我们面对 $k$ 个赌博机,我们的目的是最大化我们的收益,所以我们的做法是选择一个赌博机,然后下注(假定从始至终都不变)启动所有机器,获得结果,观察其他机器的行为,决定下一局是否换别的机器下注,对应上面的问题:

  • 奖励信号 对应 单次赌博收益
  • 可选行为 对应 本次使用哪台机器
  • 每个行为对应的奖励信号的随机分布 对应 每台赌博机出现不同结果的随机分布

所以这就是我们上面描述的问题的生活中的例子,或者说我们可以通过生活中这个例子来得到问题。

上面的例子是赌博机的例子,下面还有一个类似的类比,就是医生看病的例子,医生每天要面对一些列的病人,每个病人用什么样的治疗方案就是一个选择的过程,而每种选择都对应着不同效果,而治疗效果就是奖励信号,当医生面对络绎不绝的病人时,医生的目标就是把奖励信号最大化,也就是最大程度的让更多人康复,这个类比也符合上面我们的问题描述

  • 奖励信号 对应 病人康复程度
  • 可选行为 对应 可选的治疗方案
  • 每个行为对应的奖励信号的随机分布 对应 每种治疗方案对当前患者的效果的随机分布

数学描述

把上面的语言描述转换成数学描述就是如下了:
当前为第 $t$ 次选择(对应赌博中的第 $t$ 局,医生的第 $t$ 个患者), 有 $k$ 中选择,我们在此次选择的行为是: $A_t$ 对应获得的奖励信号是 $R_t$ ,那么对于这一轮选择,假设我们选择了 $a$ 我们获得奖励信号的期望 $q_*$ 就是:
$$
q_{\ast}(a)\doteq\mathbb{E}[R_t|A_t=a]
$$

如果你对 $A_t$ 和 $a$ 搞不清楚,我可以大概说一下,$A_t$ 是一个总称,本轮的所有选择的总称, 而 $a$ 是特定的一个行为,所以期望的公式就可以解释的清楚了,因为不同行为对应不同的分布,而我们希望使用期望来衡量这个行为的奖励信号。
如果我们明确知道每一步(局)每个行为(机器)将会出什么结果,那么我们就不需要选择了,直接选最大的那个就好了,所以我们这里假定我们不知道,也许你大概知道期望,但是对结果还是无法确定的(你可以一直观察某个赌博机的结果,利用大数定理通过采样结果来估计原始分布的结果)
这里我们对 $t$ 步的特定行为 $a$ 的评价(前面说的value function中value,和rewarding signal直接相关)的期望进行定义:
$$
Q_t(a)\approx q_*(a)
$$

这样就可以利用我们上面对问题的分析,以及使用前面提到的value function来解决这个问题了

强化学习解决k臂赌博机问题

上面我们应该已经能从整体上掌握k臂赌博机的问题过程了,那么我们接下来就要用我们前面提到的一些概念来解决这个问题了。
如果从我们自身出发,我们希望每一步都能最大化我们的收益(或者叫做奖励信号),我们自身会对所有赌博机都有一个评估,无论是感性的还是理性的,我们都会认为某个或者某几个赌博机获得高回报的可能性大一些,那么我们就有很多种玩法了:

  1. 贪婪的我 —— 每次都玩那个我认为回报高的赌博机
  2. 任性的我 —— 每次随便玩,就是不选我认为回报高的
  3. 会强化学习的我 —— 每贪婪若干次后任性一次(玩自认为回报高的机器几次后,随机玩一次别的机器,看看是否会改变自己前面的观点)

前面我们反复说过两个单词(第一次考托福的时候我还用这两个单词写过作文😜)”exploitation” or “exploration” ,上面1中的贪婪也被称为 “greedy actions” 当你选择这种action的时候,你的action对应的就是”exploitation”;相反,如果我们就是不选我们认为回报高的,也就是2的这种行为,我们称为 “exploration”,如果我们还是想赢点钱,这种行为也不是完全傻瓜的,因为我们可以通过这种行为来纠正我们对每台机器回报高低的期望(有可能你对机器回报高低的判断是错误的,实际上也是这样的),换句话说,每台机器回报高低我们根本就是乱猜,所以1中的贪婪也有可能执迷不悟,而通过偶尔的”2”一下,没准会得到更多的收获,也就是3中给出的做法,会有更多收获。
Exploitation的做法肯定是正确的,但是从长期来看Exploration可能会产生更高的收益(短期来看exploration的收益大概率不如exploitation),因为exploration很有可能找到比当前执行的action收益更高的其他action。但是具体怎么安排或者说怎么平衡Exploitation和exploration就是我们今后要一直研究的问题了。我们经常会用 “conflict” 来形容Exploitation和Exploration之间的选择。
是Exploitation还是Exploration这个问题理论上是没有通用解的,每一个环境,每一个问题,每一步都是不一样的,也无法确定,对于k臂赌博机问题,目前有一些专用的数学公式可以比较好的平衡Exploitation和Exploration之间的关系,但是这些公式或多或少都对问题的某些方面进行了限制和假设,这就使得这些方法在相似问题的不同环境下可能会失效。在后面章节我们研究的全面的强化学习(Fall Reinforcement Learning Problem, k臂赌博机 问题是简化后的问题)的时候,对应的环境会变得不同,一些假设条件也会不成了,这时候这些方法也会失效。这时候(某些假设不成立的时候)算法对应的收敛性和收敛边界都会失效。
我们目前的研究不关心是否以一种高效,漂亮的(sophisticated)方法来平衡Exploitation和Exploration,而是只要能平衡就行,不管漂不漂亮,高不高效,本章我们就列举几个简单的方法来平衡他们来获得比只 exploitation更好的结果。

总结

在强化学习中,平衡Exploitation和Exploration将会是一个从始至终的问题,我们本章用简单的k臂赌博机问题来从具体的每一步来分析和研究这个问题,从而获得更直观,更详细的理解。

References

  1. Sutton R S, Barto A G. Reinforcement learning: An introduction[J]. 2011.

原文地址: https://face2ai.com/RL-RSAB-2-1-A-k-armed-Bandit-Problem

【强化学习】1.6 本章总结、强化学习历史简述

作者 谭升
2018年10月2日 16:56

Abstract: 强化学习第一章小结
Keywords: 强化学习历史,强化学习总结

本章总结、强化学习历史简述

总结

强化学习就是一种通过计算方式来理解和进行目标导向学习的方法。其直接表现是通过agent和环境的交互进行学习,而不需要对环境做任何限制或者需要复杂的环境模型,从本书作者来看,强化学习是第一个研究agent在和环境交互的时候产生的问题计算化的领域,通过研究和环境的交互,达到长期的目标。
强化学习有一个非常明显的框架,就是agent和环境之间的action、state和reward之间的相互关系。这个框架尝试着从一种简单的方式来反应人工智能问题的基本特点,而这些特点包括:“诱因”(cause) 和 “结果”(effect),“不确定”(uncertainty)和 “非决定论”(nondeterminism) 以及 “清晰目标的存在性”(existence of explicit goal)。

强化学习历史

强化学习的历史不是很久远,但是由于研究的方向很多,所以没办法把每条只限都列举出来,这里我们主要分成三个方向:

  1. 研究 “trial” 和 “error”
    • 起源于早期对动物学习的研究
    • 早期人工智能的主要方向
    • 1980s强化学习复苏的主要动力
  2. 优化控制
    • 使用 value function 求解
    • 使用 dynamic programming 求解
  3. 1和2的混合
    • 1和2看起来相互独立,而且独立程度很高,但是我们前面说到的井字棋中使用到了“时序差分方法”(temporal-difference method)

相关论文见引用1中的1.7节

References

  1. Sutton R S, Barto A G. Reinforcement learning: An introduction[J]. 2011.

原文地址:https://face2ai.com/RL-RSAB-1-6-Summary-History

【Julia】变量

作者 谭升
2018年10月2日 09:13

Abstract: 本文介绍Julia变量的相关内容,包括Julia的变量命名,以及命名的惯用法则(命名风格)
Keywords: Julia变量,Julia变量名,Julia命名一般规则

Julia 变量

如果Julia不是你的入门编程语言,那么对于编程语言中的变量应该已经习以为常,在C语言中,变量名对应于一个内存地址(需要声明变量类型)而在高级一些的语言中,比如python,变量名更抽象,他对应于一个值,或者可以理解为它存储了这个值,这个值可以是该语言允许的任何类型(不需要声明变量类型)。
Julia的变量属于后者,不需要声明变量类型,而是可以让你的合法变量名随时存储任何Julia变量类型的值。
如果Julia是你的第一门编程语言,那么你只要知道,变量名存储了一个变量值就可以了。
在交互模式下,我们进行一下操作,比如输入 x=10 后回车,就会输出10这个结果,接着你可以输入指令 x+1 回车,就会显示 10+1 的结果,如下:

# Assign the value 10 to the variable xjulia> x = 1010# Doing math with x's valuejulia> x + 111# Reassign x's valuejulia> x = 1 + 12# You can assign values of other types, like strings of textjulia> x = "Hello World!""Hello World!"

任何编译器解释器都不会关心这个变量叫什么名字,所有变量在解释器面前一视同仁,所以你不用担心你的变量名字不好听而影响程序执行效果。
接着再看几个例子(例子都来自Julia文档)

julia> x = 1.01.0julia> y = -3-3julia> Z = "My string""My string"julia> customary_phrase = "Hello world!""Hello world!"julia> UniversalDeclarationOfHumanRightsStart = "人人生而自由,在尊严和权利上一律平等。""人人生而自由,在尊严和权利上一律平等。"

更厉害的是Julia的变量名不止局限于英文字符的组合,unicode字符通过 UTF-8 编码也可以成为变量,换句话说,希腊字母,中文字符,日文,韩文等这些都可以做变量名,这就厉害了,python 和c/c++ 是不行的:

julia> δ = 0.000011.0e-5julia> 你好地球 = "Hello world""Hello world"julia> 안녕하세요 = "Hello""Hello"
怎么样,可以用中文命名变量名了以后,你会在你的工程中使用中文命名你的变量名么?注意到上面 $\delta$ 的同学们可能在想这个变量在实际中怎么使用呢?好消息,用latex就可以,当然只有部分编辑器或者IDE支持这个功能,Julia REPL 是支持的,上面的 $\delta$ 在Julia REPL的写法就是 \delta-*tab* ,如果你发现那个字符不知道怎么写,比如你看别人的代码中有个 $\zeta$ 不知道怎么写,你只需要在Julia REPL 中输入 ? 然后在后面粘贴那个字符即可。有一些编程语言会为编译器或者编辑器定义一些常量以及函数,这些常量或函数一般不允许用户修改,但是Julia可以,如果你明确知道自己在做什么,那么这个操作可以帮助你的程序更好更符合你想象的方式进行,但是如果你还是个新手,建议不要随意修改内置常量或函数,因为你很有可能忘记自己修改过这个常量或函数,而在别的部分再次当做原始功能使用,就会造成很隐蔽的bug。
julia> pi = 33julia> pi3julia> sqrt = 44

但是如果这个常量或函数先被使用,而你在之后尝试重新定义或者修改,那么Julia就会抛出错误:

julia> piπ = 3.1415926535897...julia> pi = 3ERROR: cannot assign variable MathConstants.pi from module Mainjulia> sqrt(100)10.0julia> sqrt = 4ERROR: cannot assign variable Base.sqrt from module Main

Julia 变量命名规则

变量名的命名规则:

  1. 变量名以字母 A-Z or a-z,下划线,或者Unicode中大于00A0的部分 开头(更过详细的Unicode参考4)
  2. + 这类操作符也是可以用作标识符的,但是这种用法非常特殊,比如再从新定义加法操作的时候,加法操作就是用(+) 来定义的,(+)=f 就是重新定义加法操作(更过详细的Unicode参考4)
  3. 语言内置的状态符是不可以用作变量名的,比如你不可把 if,else这类关键字用作变量名:
    julia> else = falseERROR: syntax: unexpected "else"julia> try = "No"ERROR: syntax: unexpected "="
  4. Unicode变量名的有一些注意细节,如果要大量使用,可以参考文档:https://docs.julialang.org/en/latest/manual/variables/

Julia 变量名的常用风格

命名风格不是语法内容,这些内容是一些常见的比较利于编程的习惯,如果你有自己的更好的习惯,也可以用你的方法来写,但是代码的作用一是为了驱动程序,得出我们想要的结果,第二则是让别人了解你的思想,如果大家都看不懂你的什么,那么这个代码其实是不成功的。
常见的命名风格有以下几条:

  1. 变量名采用小写字母
  2. 每个单词之间用 _ 分开,但一般不要使用,除非这个变量名特别长,且不好读。
  3. Types或者Modules的名字以大写字母开头,每个单词首字母大写,用驼峰形式代替下划线
  4. functions或者macros用小写形式,不要使用下划线。
  5. function如果要对其参数进行写的操作的话,函数名后面要加!,这种函数叫做 “变异函数”(mutating)或者“取代函数”(in-place)因为这种函数不只返回一个结果,还会在过程中修改参数的值。
  6. 更多编程风格可以参考https://docs.julialang.org/en/latest/manual/style-guide/

总结

本文介绍了Julia变量和简单的命名风格,好的编程风格是很重要的,无论对于编码还是调试。

Reference

  1. https://docs.julialang.org/en/latest/manual/variables/

原文地址: https://face2ai.com/Julia-Lang-3-Variables

【Julia】Julia环境搭建(Mac,Windows,Linux)

作者 谭升
2018年9月29日 21:56

Abstract: 本介绍Julia环境的搭建,包括在Mac,Linux以及在Windows下的安装过程,最后我们使用atom搭建一个Julia IDE
Keywords: Julia环境搭建, Mac,Julia Windows,Julia Linux,Juno

Julia环境搭建(Mac,Windows,Linux)

上文我们说到Julia是一种适合数据科学的语言,那么今天我们就研究一下怎么安装Julia,以及完成一套IDE的搭建,很多人,尤其是写程序有一段时间,但是时间又不长的同学经常会纠结各种问题,比如为啥大牛都用VIM,是不是要学会VIM才能继续进步,说实话,不管是IDE还是VIM还是EMACS,不过是个工具,哪个你用的效率最高哪个就是最好的,至于vim的神话,我的解读是,vim必然是个利器,入了门的人得心应手,但是入门困难的就一直处于困难阶段,我们的最终目的是为了完成我的设计的算法,评估测试算法,至于用什么编辑器,什么环境,我觉得你找个最顺手的,那就是最好的。
本文我们用到的编辑器是Atom,因为atom中的插件可以直接把一个编辑器扩展成IDE,如果你是资深vim用户,那么你一定有办法自己把编辑器调整到顺手状态。
所以我们今天只讲安装和atom下的IDE搭建。

安装Julia

安装Julia并不难,到地址 https://julialang.org/downloads/
下就能看到:

Jupiter-web

可以看到我当前的版本是1.0,目前1.1在测试,所以你们使用的时候可能都2.x了,如果基本套路变了,那么你就要仔细看一下说明了。

Mac下安装Julia

我们在表格中找到 Mac对应的安装包 .dmg 格式

然后点击下载(速度有点慢),

按照Mac程序的一般安装方法,拖到应用里面即可。

这个时候就算安装完了,但是使用mac的程序员启动这种没界面的应用喜欢使用命令行,这里的做法是,建立一个从应用到命令行搜索目录的软连接:

1
ln -s /Applications/Julia-1.0.app/Contents/Resources/julia/bin/julia /usr/local/bin/julia

当前julia版本是1.0。

注意这个”Julia-1.0.app” 会随版本不同,不要照抄这段命令。

在命令行中启动julia如果出现下图,恭喜,成功了:

Windows下安装Julia

Windows下安装就要注意一下操作系统版本了:

windows7 和server 2012 需要特别的组件,原因我也不知道,我目前只有一台Windows 10 的pc,所以我就下载64-bit的安装包,安装结果没测试,大家有问题留言吧。
如果想在cmd中启动,需要添加环境变量,但是windows程序员一般不用cmd启动程序

Linux下安装Julia

Linux下我目前只有ubuntu

方式一:apt

1
sudo apt-get install julia

输入sudo密码就可以完成安装了

但是问题是,我的ubuntu版本比较低,所以对应源上的Julia还是老版本的

看到了吧,官网的版本都到1.0.0 了,

方式二:下载tar.jz

对应的办法就是卸掉这个然后去下载官网上的通用版本,然后解压编译:


注意你的平台,是X86 还是arm以及操作系统的位数。
如果你是linux程序员,我觉得后面的事我没有一步一步跟你说了,因为都是linux下通用的编译安装步骤,这里不再赘述了。

安装Atom,搭建IDE

接着我们要安装一款编辑器,github出品,良心之作 —— atom,这款编辑器的优点就是开源,速度快,核心小,尤其是对于从windows刚来linux,或者mac的同学们,离开vs有可能水土不服,但是相信我,如果你用了atom或其他类似的编辑器,你就会忘记那个好多G的vs。
下载atom: https://atom.io
有多重平台,Mac,Linux,Windows对应的安装包,安装套路和Julia类似,都是普通的安装过程,然后,最关键的一步
注意,这是我目前正在写文章的atom的状态:

比较正常,接着我们要安装juno了: http://junolab.org 注意区分juno,有好多叫juno的项目,比如NASA什么的。还有就juno要求的atom平台版本号。

Juno是一个atom上的插件,Windows 或者Linux 使用快捷键

1
2
3
Mac下使用```Cmd+,``` 打开atom的插件安装界面
![](./markdown-img-paste-20180929230510192.png)
选择```install


安装完juno后,他会自己给你安装一些他需要的扩展:

右上角安装完成后重启Atom就有Juno可以用了,就这样:

然后我们就成功了,当网速不那么流畅的时候稍微等一会儿,juno安装完成会提示你。不要着急。

总结

今天我们完成了Julia的环境搭建,有了环境,有了IDE,我们就能大展拳脚,看看Julia是不是真的那么高效便捷了。

Reference

  1. https://docs.julialang.org/en/v1/manual/getting-started/

原文地址: https://face2ai.com/Julia-Lang-1-Install

【强化学习】 1.4.1 强化学习与优化方法

作者 谭升
2018年9月26日 08:50

Abstract:本文介绍强化学习和优化方法之间的关系,他们之间一些共同误区以及强化学习的工程性质
Keywords:强化学习,优化方法,强化学习工程化

强化学习与优化方法

优化方法是机器学习的一个关键组成部分,大部分监督学习和部分非监督学习都要依靠优化方法找到模型的参数,强化学习中也会使用优化方法中的一些算法来使agent获得更多的reward signal,而强化学习或者优化方法在进行过程中有些说法会让人感到迷惑。

“强化学习的目标”与“优化问题的目标”

前面我们提到过,强化学习的目标或者叫做战略目标就是让agent获得更多的reward signal,注意“更多”这个说法,从数学的角度讲,更多是个增长的过程,而这个过程有没有极限,也就是会不会有“最多”这种情况,这也成了强化学习的一个极限。

同样的问题也出现在优化问题中,优化问题的解是否还可以进一步优化,或者,这个解已经是全局最优的了,这个判断其实是非常困难的。

所以,我们在描述强化学习或者优化问题的时候,提到“最大化xx的鼓励信号(reward signal)….”或者 “最优化xx函数” 这些都不是强调一定要找到最大的唯一解,事实上,这个解可能本身就不存在,或者即使存在,由于种种原因,我们也没办法找到这个解。
强化学习要做的就是不断的让agent去尝试找到比目前更好的 策略(policies) 来得到更多的鼓励信号(reward signal)
如果用一句话概括就是:

“Optimization is not the same as optimality”(优化不等于最优)

如果某个优化方法在别的系统中表现非常优秀,但是当他移植到其他系统中仍然需要仔细评估,和测试,因为系统的 “不可预测性” 使得算法的工作 “环境非常复杂”,所以不能依靠算法之前在别的系统的表现来随意的评估其在当前系统中的表现。agent通常能够发现预料之外的 策略(policies) 来获得意想不到的好结果。如果把这个过程对比自然界中的生物的行为的话,那么就应该是我们所说的“创造力”了。这种创造力表现在,“ 变化(variation) ”和“ 选择(selection) ”上,这是进化能解决物种所面对的生存挑战的基础,也是强化学习解决人工智能所面对的挑战的基础。但是创造是有风险的,因为有的时候我们并不知道“变化(variation)”是朝向好的方向还是不好的方向或者根本就是无意识无目标的变化。

优化,变化等以上观点一直以来都被思考,就是哪个才是最好的,如果改变agent目前的策略效果会变好还是变坏是不确定的,所谓的继续优化是 “优化” 还是 “恶化”?一个很有意思的比喻是;

“Be careful what you wish for because you just might get it”(小心你想得到的,有可能你已经得到了)

强化学习和工程

为了解决上面这个“世纪难题”(最优性,不可预测性,变化,等问题),有很多策略(注意这是抽象的宏观的方案,而不是具体实施的方案)被使用,比如:

  • 限制agent的可变化方向
  • 使目标函数(objective function)对风险敏感

但是这些方案都是比较片面的解决方法,不能从根本解决问题,标准工程化的要求是,在系统正式上线工作之前,要经过严格的测试,因为系统一旦上线,产品一旦销售,我们的技术必须对使用者负责,如果系统存在不可预测的风险,且风险对于使用者是高危的,不可抗拒的,那么我们必须在测试阶段发现,并且解决,这和其他工程师一样的。由于强化学习等机器学习算法都存在不可预知的行为,所以在上线之前更应该严格评估。

优化结果的随机性不可预测性只是强化学习工程化中的风险点之一,其他工程中存在风险,在强化学习中同样也大大小小的存在,所以在评估时,不能只关注强化学习的风险点,比如数据安全,网络安全,等等在其他工程中的风险,在强化学习都一并存在。
讨论详细的问题在我们这里很不现实,我们只要记住,严格的测试系统,强化学习系统,机器学习系统,提前发现风险,解决风险,降低风险这些事情无论何时都是重中之重。

总结

本文介绍了强化学习和优化方法之间的一些概念混乱,优化不一定找到最优解。以及强化学习的工程化问题,降低风险,解决风险是所有机器学习工程应用中的重点。

References

Sutton R S, Barto A G. Reinforcement learning: An introduction[J]. 2011.

原文地址:https://face2ai.com/RL-RSAB-1-4-1-Connection-to-Optimization-Method

【信息论、推理与学习算法】本系列博客介绍

作者 谭升
2018年9月21日 11:53

Abstract: 本文是本系列的第一篇,介绍本系列的主要内容
Keywords: Information Theory,信息论,Inference,推理,Learning Algorithms,学习算法

信息论、推理与学习算法介绍

这个系列是信息论相关内容的介绍,信息论是什么可能有些做机器学习或者AI的同学们不太了解,而做通信的同学应该是非常清楚的,如何准确的定义信息论是什么,不在我的能力范围内,但是我们平时接触到的图像,或者简单点说灰度图像,一个8bit的像素点能有多少阶灰度,为什么有256,而不是258或者其他的,这个其实就属于信息论的知识范围,而信息论和机器学习有关系么?答案是肯定的,凡是处理信息,传递信息的过程,都多多少少跟信息论有那么点关系。
本系列主要面对的读者是: 从事机器学习,人工智能类内容研究的同学,工程师,或者爱好者
需要的背景知识:工程专业,科学类专业,或者数学类本科1,2年级的数学知识,包括,微积分,概率论,线性代数的基本知识(本站已经完成这些基础知识的全部博客,可以随时查阅)。
本书封面:

机器学习,信息论

传统的信息论课程不仅包括Shannon的信息化思想,也有实际解决问题的现实应用,我们这个系列更加进一步的包括了:

  • Bayesian Data Modelling
  • Monte Carlo Methods
  • Variational Methods
  • Clustering ALgorithms
  • Neural Networks

为什么要把信息论和机器学习弄到一起?
信息论和机器学习是一个硬币的两面!
60年代一个领域 —— 控制理论(cybernetics)在信息论,计算机科学,和神经科学等学科中非常火爆,这些科学家们都在研究一个相同的问题,那时候信息论和机器学习还是属于同一类。大脑是一个压缩信息,进行沟通的系统,而在数据压缩(data conpression)和纠错码上(error-correcting code)表现最好的(state-of-the-art)的算法上使用的工具,在机器学习中也会使用。
这些种种迹象都表明,机器学习和信息论有着密切的关联,而我们本系列更关注的就是信息论在机器学习方面的应用,或者帮助我们理解一些算法的特点和局限。

学习地图

本书的目录如下,当然这些课不是我们所有要学的,我画了个地图,大概应该是按照这个地图来完成我们的博客的:

Preface

1 Introduction to Information Theory
2 Probability, Entropy, and Inference
3 More about Inference

I Data Compression

4 The Source Coding Theorem
5 Symbol Codes
6 Stream Codes
7 Codes for Integers

II Noisy-Channel Coding

8 Dependent Random Variables
9 Communication over a Noisy Channel
10 The Noisy-Channel Coding Theorem
11 Error-Correcting Codes and Real Channels

III Further Topics in Information Theory

12 Hash Codes: Codes for Ecient Information Retrieval
13 Binary Codes
14 Very Good Linear Codes Exist
15 Further Exercises on Information Theory
16 Message Passing
17 Communication over Constrained Noiseless Channels
18 Crosswords and Codebreaking
19 Why have Sex? Information Acquisition and Evolution

IV Probabilities and Inference

20 An Example Inference Task: Clustering
21 Exact Inference by Complete Enumeration
22 Maximum Likelihood and Clustering
23 Useful Probability Distributions
24 Exact Marginalization
25 Exact Marginalization in Trellises
26 Exact Marginalization in Graphs
27 Laplace’s Method
28 Model Comparison and Occam’s Razor
29 Monte Carlo Methods
30 Ecient Monte Carlo Methods
31 Ising Models
32 Exact Monte Carlo Sampling
33 Variational Methods
34 Independent Component Analysis and Latent Variable Modelling
35 Random Inference Topics
36 Decision Theory
37 Bayesian Inference and Sampling Theory

V Neural networks

38 Introduction to Neural Networks
39 The Single Neuron as a Classier
40 Capacity of a Single Neuron
41 Learning as Inference
42 Hopeld Networks
43 Boltzmann Machines
44 Supervised Learning in Multilayer Networks
45 Gaussian Processes
46 Deconvolution

VI Sparse Graph Codes

47 Low-Density Parity-Check Codes
48 Convolutional Codes and Turbo Codes
49 Repeat{Accumulate Codes
50 Digital Fountain Codes

地图

根据我们的目标和书上给出的建议,我们要学习下面这些章节,箭头之间表示先后关系,箭头指向的课程需要在前面的课程完成后才能进行:

github: https://github.com/Tony-Tan/MachineLearningMath 上有高清大图

总结

本文是信息论的第一课,后续就围绕上图展开,对于基础不是了解的同学可以去看前面的其他博客,谢谢支持。

【强化学习】 1.4.0 “进化方法”和 “决策梯度方法” 概论

作者 谭升
2018年9月20日 12:59

Abstract: 本文介绍强化学习中的一些局限(limitation)和机遇(scope),介绍进化方法和决策梯度方法的区别和优劣
Keywords: Evolutionary Method,进化方法,Policy Gradient Methods,决策梯度方法

“进化方法” 和 “决策梯度方法” 概论

进化方法是我在学习“强化学习”这本书之前认为的在人工智能中必然要有的一个部分,但是本书给了我一盆冷水,本书作者认为进化算法对强化学习的作用不太明显,或者说缺点更多,不适合用作强化学习的方法。
但是我认为AI如果能达成,一定是模拟人或者动物的智慧形成过程的,即使进化方法不是学习技能(learn skills in individual lifetime)的主要方法,但是其对智慧的长期形成一定有非常重要影响,不能因为进化方法不适合强化学习的某些任务就彻底否定他,相反我们要注意他们的结合。
本书在讲述强化学习的过程中主要是围绕 Estimating Value Function展开的,但是Estimating Value Function在强化学习中不是必须的,Estimating Value Function前一篇介绍过https://face2ai.com/RL-RSAB-1-3-Elements-of-RL/。

进化方法(Evolution Method)

在wiki上有进化的详细解释,如果有对进化算法不了解的同学可以大概看看或者自己google 。如果用概括性的语言描述一下,大概是这个样子的:

进化方法,或者遗传算法是模拟生物繁殖时候基因交换,基因变异等过程来对某个Agent进行优化的方法

举个例子:我们有一个任务M,我们模拟用10000个随机生成的Agent去完成任务,这些agnet是第一代,其中只有100个完成了;那么我们重新组合这100个的“基因”(按照各种设计的方法)产生10000个新的Agent,这些Agent就是第二代,去完成任务M,有200个成功了,继续进行第三代,第四代,直到找到一组或者多组稳定的“基因”能成功完成任务,这个过程就是进化方法,其主要过程在于组合基因和淘汰不满足对象。
类似的进化过程,进化算法,以及模拟退火等优化方法都是类似的套路。

这类方法是没有 Estimating Value Function 的

这就是本文的一个关键结论。

通过我们上面例子的描述可以发现,我们的进化算法只有“生”和“死”,比如产生新的agent是生,淘汰agent则是死,agent的全部能力全部来自遗传,这从人类进化的角度来看是不对,我们并不是靠生孩子进化到如此的,每个agent在有生之年不多研究进去,我们的人类才进化到现在的文明,作者也是这个观点,而且其对agent的有生之年的学习过程(agent自我完善policy的过程,人和动物完善自己的skill的过程)更加关注。
但是进化方法也是有些作用的,在某些强化学习问题中,进化方法也是可以使用的,一般这种问题有以下特点:

  1. Policy的搜索空间很小
  2. Policy的搜索空间是结构化的,比较易于搜索
  3. 时间充足,比如这个训练程序可以跑一个世纪

还有一种特殊的情况,就是在agent不能准确感知环境(Environment)的状态(State)的时候,进化方法很有用处.
这个也可以跟生物进化联系起来,在最初的地球,没有生物,有机物出现,第一个有机体出现,他们有任何感知能力,只能通过遗传,变异这种方式获得适应环境的生物,在变异出器官组织后,才能对环境进行感知互动,进化自己的policy

本书(本系列博客)主要重点在于agent在和环境interact的时候的“学习”,而进化方法就没这个过程,并且在interaction的过程中的细节,是agent进化的一个重要信息来源,这些细节信息使用起来会使得policy 的搜索更加高效,
所以我们可以总结一下进化方法在强化学习过程中的几个缺点:

  • 忽视太多强化学习问题背后的结构信息
  • 舍弃了搜索policy过程中其实是一个函数,来对应state和action(进化算法没有这个)
  • 忽略了agent的lifetime的policy选择和他所处的环境和状态等信息。

虽然agent当前的state可能是错误的,就是agent可能是判断错误了(偶尔会出现这种问题),但是这并不影响这些信息(state,action等)对学习过程的帮助。

“进化方法”和“学习过程”(主要指agent自我修正调整policy的过程)在自然过程中有很多相同的特征,但是其目前看来确实不适合强化学习问题,所以本书(本系列博客)中的强化学习方法一般不包括进化方法

决策梯度方法(Policy Gradient Method)

这里有一个类似进化方法的学习方法,我们会在后面经常用到,这也是一个非常简单的方法,可以解决一些小的问题,叫做 “决策梯度方法”(Policy Gradient Method)
这种方法的特点是agent中的参数是有限的,换句话说,这个空间是离散且有限的,注意离散和不连续是两回事,有限的离散的空间参数个数是固定的,这样的话搜索空间会被缩小到很小,并且存在理论上的最优解,这种方法在有限的参数空间调整自己的policy来获得更好的reward,这个调整过程有点像进化算法的组合那一步,但是不同的是,这里的调整要根据agent和state之间的action来调整,而进化方法的调整方法是不关心这些信息的,所以他们有类似,但是又大不同。
决策梯度方法和其他的强化学习方法没有什么严格的定义区别,所以没有必要过于计较区分算法的归类。

Conclusion

本文介绍了进化方法和强化学习之间的一些关系,以及决策梯度方法之间的一些知识,注意进化方法是没有Estimating Value Function 的,这是问题的关键。

References

Sutton R S, Barto A G. Reinforcement learning: An introduction[J]. 2011.

原文地址:https://www.face2ai.com/RL-RSAB-1-4-0-Limitations-and-Scope转载请标明出处

【强化学习】1.3 强化学习的基础元素

作者 谭升
2018年9月12日 21:51

Abstract: 本文介绍除了agent和environment以外的,对于强化学习最重要的最基础的四个元素。
Keywords: Policy,策略,Reward Signal,奖励,Value Function,评价函数,Model of Environment,环境模型

强化学习的基础元素

前面我们说到了几个生活中的例子,和几个RL中基本模型,本文我们继续深入,探索目前强化学习中最基本的组成元素。

策略(Policy)

策略是我的翻译,我不知道“正确”的翻译是什么,但是我们还是老原则,用英文。书中的定义是

A policy defines the learning agent’s way of behaving at a given time.

换成中文,我觉得更接地气一点的就是Policy就是agent的在任意时刻的产生行为的依据,也就是说agent,或者人或者动物或者robot,在某一时刻,有明确的最终目的,但是此时此刻,面对这个时间点的环境的时候,他要产生某种规则的方式,就是policy。如果用数学的的形式就是
$$
f(环境)\to 行为
$$
这里面的 $f$ 是个映射,是不是函数不一定,这个映射,综合当前的所有环境信息,产生一个action。最简单的例子,这个policy可以是个映射表,当出现什么环境的时候,就做出什么样的决定,如果你穷举了下棋的所有棋局,那么每种盘面都对应了最佳的走法,我们把这个对应走法记录在一章表上,那么这个表(中的内容)就是policy

心理学中把这个叫做刺激反应法则(stimulus-response rule)或者叫做 association(翻译不出来)
Policy可以是非常简单的规则,比如自动驾驶看到红灯要停车,也可以及其复杂,比如自动驾驶要把在菜市场里的车开出来。
Policy是agent面对环境做出action的核心,但是这个核心有时候也可以是随机的,换句话说,上面那张“表”里面的信息可能是随机——有时候随机并不代表不可靠

奖励信号(Reward Signal)

激励信号,或者奖励信号,书中的定义:

A reward signal defines the goal in a reinforcement leaning problem

激励信号,就是agent的得分,目前我们的研究的agent在每一步都有来自环境的反馈,由于我们没有所谓的有teacher,所以我们会通过一个我们设计的[reward函数],来计算出每一步我们得到的评分,而agent存在的目的就是在他的生命周期内最大化这个得分的总和。
reward signal是agent来自每一个action之后环境给与的反馈,得分定义这个action的好坏,以及好坏的程度;类似于生物中,对于刺激的反应,是表示舒服还是难受。
这个goal是立刻的明确的,不能有延迟以及模棱两可的评分,或者说是客观公正的,不能被agent改变的,换句话说,这个goal是公正的,agent不能又当运动员又当裁判。agent只能通过根据环境改变自己的行为来最大化自己的goal,评判有专门的[裁判](后面会说到)。
agent不断学习新的知识来提高自己的得分,其工作方法是改变自己的policy,所以reward signal 就成了调整policy的主要依据了。
同样这个裁判也有可能是随机,没错,一个疯了的裁判,至于为什么会有这种情况,我也不知道后面会不会涉及。
第三章我们会介绍这个reward 函数对于agent不变是有生物学原理的,原理来自我们的大脑。

值函数(Value Function)

注意区分,Reward Function 和Value Function是不同的两个函数,作用不同,性质不同。书中的定义:

Whereas the reward signal indicates what is good in an immediate sense, a value function specifies what is good in the long run.

用中文说就是,reward是每次的结果,value function是来预测这个agent到最后能得到的总分。value function有一定的预测行为在里面,包括后面可能出现的情况,而这些情况是否发生目前是不确定的,一个类似的例子就是,你在准备高考,参加了两次模拟考试,reward是你这两次模拟考试的好坏,而value函数是要预测你最终高考结果的。
很有可能出现这种情况,前面几个step的reward 都很低,但是value function却依然很好。反之亦然会出现。

在RL中reward是最主要的,value function次之。如果没了reward那么agent就是无头苍蝇,而且没有reward就没了value的概念。value更像是辅助agent 来得到更多reward的参考书。
然而,agent做决定的时候有时候更多的考虑value function,这个原因是我们的RL最终目标是得到更高的reward总和,而不是某一步的reward,所以这会给我们一个错觉,就是value function比reward要更重要。
作为得到更多reward的参考,value的获得更加复杂,比获得reward要复杂的多,reward依据当前环境给出,而value是依据后面的环境给出,一个是静态的,一个是动态的(环境在变,agent的policy也在变)
在一般的RL算法的重要组成就是要找到有效value预测值,这个工作会是未来几十年的重点研究方向

环境模型(Model of Environment)

最后一个就是环境模型,环境是个很大的很抽象的概念,环境模型和环境并不是一会儿事,但是关系密切。

某个state下,agent的某个action可能会获得什么样的反馈,环境模型可以预测这个反馈,而实际的反馈是环境根据state和action给出的,所以环境模型越接近环境,就会越准确,环境模型更多的用来做Planning,就是agent在做action之前“思考,计划”
使用环境模型和planning进行的RL,我们称之为“基于模型的方法”,相反,就是“不基于模型的方法”
不基于环境模型的方法是更直接的trail-and-error 方式,经常被看做是planning方式的对立方法。但是第八章,会介绍同时使用 trail-and-error 和 模型以及planning 的方法。
基于模型的方法会跨越我们RL中各种层级:low-level, trail-and-error, high level以及deliborating planning。

Conclusion

本文介绍了强化学习的四种基本组成元素,不但基础而且非常重要,基本就是后面所有的研究对象了。需要好好研究。

References

  1. Sutton R S, Barto A G. Reinforcement learning: An introduction[J]. 2011.

原文来自:https://face2ai.com/RL-RSAB-1-3-Elements-of-RL转载标明出处

【强化学习】1-2 强化学习举例

作者 谭升
2018年8月30日 23:27

Abstract: 本文介绍几个对应于强化学习的生活中的例子,来具体化前面提到的名词和几个重要理论在自然界中的表现。
Keywords: 强化学习,强化学习举例,Agent,Environment,环境,Reaction,反应

强化学习举例

强化学习例子(Examples)

这几个例子都是实际自然界或者生活的例子,并不是RL的具体应用,所以不要理解错了,我们通过观察自然,观察生物智能的形成和遗传,是我们了解智能的有效方法,个人愚见,没准这也是唯一突破当前理解障碍的方法,生物通过数万年的演化,遗传,庞大的种群保证了其有大量的样本,来完成筛选和淘汰,每个个体的基因,神经系统,数量大到可能无法想象。所以如果连这些都没考虑过,没深入研究过,应该是对问题没有深刻理解的。
陶哲轩说过,如果你对问题的来源内容背景都不是很了解的话就想去解决问题,那么这个非常困难的。
我们来看几个例子:

  1. 一个专业棋手下棋,当他每下一步的时候,他考虑的都是在计算预测,当他走了某一步以后,可能的结果以及对方会进行的反制措施,或者有时候,凭借直觉立刻来决定这步棋怎么走。
  2. 一个自主的控制者,实时调节参数来控制石油精炼加工的工艺,这个控制者可以自主的取平衡 产出-消耗-质量 之间的平衡关系,而不需要完全按照工程师给出的精确结果。
  3. 小羚羊,小牛,在刚出生的几分钟就能挣扎的站起来,半小时左右就能以20mile/hour 的速度奔跑
  4. 移动的机器人,能决定是否需要进入一个新房间找垃圾还是马上找到路线去充电,他的决定取决于当前的电量,以及找到路线需要花费的能量
  5. Phil准备他的早餐,虽然在我们看来,这个谁都可以,非常平常,但是整个过程,非常严苛,准备早饭的着一系列动作隐藏了一个巨大的复杂的条件网络,目标和子目标网络,比如,我们分析一下:走到厨房,打开柜子,选择原料,拿到原料,打开原料包装,然后把剩余的放回去;接着下一套动作是取碗,勺子,拿牛奶;这些的所有过程包括了眼睛的动作,寻找,定位,协调手完成动作;迅速决定用什么动作,把这些东西以什么样的轨迹放到哪里,并且不要碰撒旁边的其他容器。一个简单的早饭仔细分析竟然如此复杂,每一步都有明确的goal,比如取原料,是为了吃里面的东西,而不是为了打开包装,在吃饭的时候,用勺子吃了第一勺食物,是为了吃下一勺,以及最后从中获得能量。无论Phil是否享受吃饭的过程,如果当前身体的station告诉他很需要能量,需要大概吃多少,以及想吃什么,他都会按照这个指令去做的。

强化学习的特征(Features of Examples and RL)

上面5个都是我们生活中自然界的例子,所有例子经过分析都可以得出以下结论:

  • 所有例子都包含interaction(作用,反应)
  • 这些interaction都是在agent和environment之间产生的
  • agent要做出决定,做什么
  • environment是agent所处的环境,agent在其中搜寻,并达到自己的目标
  • environment不管是否已知,agent都要去搜索

Agent的Actions会影响未来Environment的State,以及Agent后面的选择空间,例如:

  • 下棋的这一步决定,直接影响棋手下一步的走法
  • 机器人走的下一步,会影响他的电量,和他找到充电站的消耗能量

所有这些action的结果都会在若干步后体现,而不是马上反映出来,所以目前agent能做的就是预测和计划(prediction and planning)

有效性(Effects of Actions)

上面这些例子,所有action的结果全部无法完全预测,所以agent只能自己随时注意environment的变化,随时做出反应。
比如在Phile做饭的过程中,他要仔细盯着要拿出来多少材料,加多少牛奶,而且不能溢出来。
所有例子中的目标在某种意义上说都是非常明确地,agent通过直观的感受来判断是否向着目标前进。比如:

  • 棋手知道什么样算是赢了
  • 石油提炼工知道生产了多少油
  • 机器人知道自己有多少电,还有多久能到充电站
  • Phil知道自己吃没吃饱

Agent的经验(Experience of Agent)

所有例子,agent都能根据经验提高他们的表现:

  • 棋手反复训练能提高技艺
  • 羚羊通过反复的尝试知道怎么能站稳,能奔跑
  • Phil天天做早餐,所以知道什么样的工序最优

那么agent后面的技能是根据前面的经验,那么刚开始的agent从哪来的经验呢?(Agent初始知识来源)

  • 来自类似的任务
  • 通过设计,人工完成
  • 生物进化

所有这些都是agent初始化的内容,但是agent最终表现,都是要靠和environment之间的interaction完成的,这个过程逐渐修正agent的行为,执行在当前环境特异化的操作。

Conclusion

前面的高谈阔论,不过就是做早饭的一个过程,可见,我们获得了如此行动能力,和智慧是多么的复杂和令人惊叹的

References

  1. Sutton R S, Barto A G. Reinforcement learning: An introduction[J]. 2011.

原文来自:https://face2ai.com/RL-RSAB-1-2-Examples/转载标明出处

❌
❌