本文共 13452 字,大约阅读时间需要 44 分钟。
Deepmind团队在17年12月5日发布的最新Alpha Zero中,非常重要的一种方法就是强化学习(reinforcement learning),又称再励学习、评价学习,是一种重要的机器学习方法,靠自身的经历进行学习。通过这种方式,RLS在行动-评价的环境中获得知识,改进行动方案以适应环境。正因为可以在小数据量的情况下靠自身的行动获得经验,所以Alpha Zero可以通过自我对弈进行学习提高。深度学习的一种分类方式:监督学习、无监督学习、半监督学习、强化学习。
基本原理
强化学习是从动物学习、参数扰动自适应控制等理论发展而来,其基本原理是:如果Agent的某个行为策略导致环境正的奖赏(强化信号),那么Agent以后产生这个行为策略的趋势便会加强。Agent的目标是在每个离散状态发现最优策略以使期望的折扣奖赏和最大。强化学习把学习看作试探评价过程,Agent选择一个动作用于环境,环境接受该动作后状态发生变化,同时产生一个强化信号(奖或惩)反馈给Agent,Agent根据强化信号和环境当前状态再选择下一个动作,选择的原则是使受到正强化(奖)的概率增大。选择的动作不仅影响立即强化值,而且影响环境下一时刻的状态及最终的强化值。如图所示。
简单来说就是给你一只小白鼠在迷宫里面,目的是找到出口,如果他走出了正确的步子,就会给它正反馈(糖),否则给出负反馈(点击),那么,当它走完所有的道路后。无论比把它放到哪儿,它都能通过以往的学习找到通往出口最正确的道路。
RL最重要的3个特点在于:(1)基本是以一种闭环的形式;(2)不会直接指示选择哪种行动(actions);(3)一系列的actions和奖励信号(reward signals)都会影响之后较长的时间。
总的来说,RL与其他机器学习算法不同的地方在于:其中没有监督者,只有一个reward信号;反馈是延迟的,不是立即生成的;时间在RL中具有重要的意义;agent的行为会影响之后一系列的data。
模型设计
一种RL(reinforcement learning) 的框架:
--------------------------------
for
1. 观测到数据
2. 选择action
3. 得到损失
目标是最小化损失
--------------------------------
以吃豆子游戏为例,解释一下模型设计的主要元素,输入输出如下所示:
输入:
状态(State)=环境,例如迷宫中的每一格是一个state,例如(1,3)
动作(Action)=在每个状态下,有什么行动是容许的,例如{上、下、左、右}
奖励(Rewards)=进入每个状态时,能带来正面或负面的价值,迷宫中的那格可能有食物(+1),也可能有怪兽(-100)
输出:方案(Policy)=在每个状态下,你会选择哪个行动?
以上四个元素(S A R P)就构成了一个强化学习系统。
AlphaZero的设计中的主要算法之一就是强化学习,原文如下:
在RL问题中,有四个非常重要的概念:
(1)规则(policy)
Policy定义了agents在特定的时间特定的环境下的行为方式,可以视为是从环境状态到行为的映射,常用 π来表示。policy可以分为两类:
确定性的policy(Deterministic policy): a=π(s)
随机性的policy(Stochastic policy): π(a|s)=P[At=a|St=t]
其中,t是时间点,t=0,1,2,3,……
St∈S,S是环境状态的集合,St代表时刻t的状态,s代表其中某个特定的状态;
At∈A(St),A(St)是在状态St下的actions的集合,At代表时刻t的行为,a代表其中某个特定的行为。
(2)奖励信号(a reward signal)
Reward就是一个标量值,是每个time step中环境根据agent的行为返回给agent的信号,reward定义了在该情景下执行该行为的好坏,agent可以根据reward来调整自己的policy。常用R来表示。
(3)值函数(value function)
Reward定义的是立即的收益,而value function定义的是长期的收益,它可以看作是累计的reward,常用v来表示。
(4)环境模型(a model of the environment)
整个Agent和Environment交互的过程可以用下图来表示:
其中,t是时间点,t=0,1,2,3,……
St∈S,S是环境状态的集合;
At∈A(St),A(St)是在状态St下的actions的集合;
Rt∈R∈R 是数值型的reward。
强化学习主要方法简介
强化学习的方法可以从不同维度进行分类:
是否需要对环境理解:model free和model-based
基于概率(Policy-based)和基于价值(Value-based)的RL
回合更新(monte-carlo update)和单步更新(temporal-difference update)的RL
在线学习(on-policy)和离线学习(off-policy)
无论从哪个角度分类,主要的方法有: policy gradients、q learning、sarsa 、 actor-critic、Monte-carlo learning、 Deep-Q-Network
这里强烈推荐一个简洁清晰的介绍视频,6分钟直接明了的说明各种方法的特点:
莫烦python:http://v.youku.com/v_show/id_XMTkyMDY5MTk2OA==.html
应用案例及python代码
有很多种场景应用的都是强化学习,AlphaZero最为出名,其他还有直升机特技飞行、机器人行走、玩游戏比人类还要好等等。
举个栗子:我们想要实现的,就是一个这样的小车。小车有两个动作,在任何一个时刻可以向左运动,也可以向右运动,我们的目标是上小车走上山顶。一开始小车只能随机地左右运动,在训练了一段时间之后就可以很好地完成我们设定的目标了 。
我们使用的算法就是最简单的Deep Q Learning算法,算法的流程如下图所示。
完整代码如下:
import tensorflow as tf import numpy as np import gym import randomfrom collections import dequeEPISDOE = 10000STEP = 10000ENV_NAME = 'MountainCar-v0'BATCH_SIZE = 32INIT_EPSILON = 1.0FINAL_EPSILON = 0.1REPLAY_SIZE = 50000TRAIN_START_SIZE = 200GAMMA = 0.9def get_weights(shape): weights = tf.truncated_normal( shape = shape, stddev= 0.01 ) return tf.Variable(weights)def get_bias(shape): bias = tf.constant( 0.01, shape = shape ) return tf.Variable(bias)class DQN(): def __init__(self,env): self.epsilon_step = ( INIT_EPSILON - FINAL_EPSILON ) / 10000 self.action_dim = env.action_space.n print( env.observation_space ) self.state_dim = env.observation_space.shape[0] self.neuron_num = 100 self.replay_buffer = deque() self.epsilon = INIT_EPSILON self.sess = tf.InteractiveSession() self.init_network() self.sess.run( tf.initialize_all_variables() ) def init_network(self): self.input_layer = tf.placeholder( tf.float32, [ None, self.state_dim ] ) self.action_input = tf.placeholder( tf.float32, [None, self.action_dim] ) self.y_input = tf.placeholder( tf.float32, [None] ) w1 = get_weights( [self.state_dim, self.neuron_num] ) b1 = get_bias([self.neuron_num]) hidden_layer = tf.nn.relu( tf.matmul( self.input_layer, w1 ) + b1 ) w2 = get_weights( [ self.neuron_num, self.action_dim ] ) b2 = get_bias( [ self.action_dim ] ) self.Q_value = tf.matmul( hidden_layer, w2 ) + b2 value = tf.reduce_sum( tf.mul( self.Q_value, self.action_input ), reduction_indices = 1 ) self.cost = tf.reduce_mean( tf.square( value - self.y_input ) ) self.optimizer = tf.train.RMSPropOptimizer(0.00025,0.99,0.0,1e-6).minimize(self.cost) return def percieve(self, state, action, reward, next_state, done): one_hot_action = np.zeros( [ self.action_dim ] ) one_hot_action[ action ] = 1 self.replay_buffer.append( [ state, one_hot_action, reward, next_state, done ] ) if len( self.replay_buffer ) > REPLAY_SIZE: self.replay_buffer.popleft() if len( self.replay_buffer ) > TRAIN_START_SIZE: self.train() def train(self): mini_batch = random.sample( self.replay_buffer, BATCH_SIZE ) state_batch = [data[0] for data in mini_batch] action_batch = [data[1] for data in mini_batch] reward_batch = [ data[2] for data in mini_batch ] next_state_batch = [ data[3] for data in mini_batch ] done_batch = [ data[4] for data in mini_batch ] y_batch = [] next_state_reward = self.Q_value.eval( feed_dict = { self.input_layer : next_state_batch } ) for i in range( BATCH_SIZE ): if done_batch[ i ]: y_batch.append( reward_batch[ i ] ) else: y_batch.append( reward_batch[ i ] + GAMMA * np.max( next_state_reward[i] ) ) self.optimizer.run( feed_dict = { self.input_layer:state_batch, self.action_input:action_batch, self.y_input:y_batch } ) return def get_greedy_action(self, state): value = self.Q_value.eval( feed_dict = { self.input_layer : [state] } )[ 0 ] return np.argmax( value ) def get_action(self, state): if self.epsilon > FINAL_EPSILON: self.epsilon -= self.epsilon_step if random.random() < self.epsilon: return random.randint( 0, self.action_dim - 1 ) else: return self.get_greedy_action(state)def main(): env = gym.make(ENV_NAME) agent = DQN( env ) for episode in range(EPISDOE): total_reward = 0 state = env.reset() for step in range(STEP): env.render() action = agent.get_action( state ) next_state, reward, done, _ = env.step( action ) total_reward += reward agent.percieve( state, action, reward, next_state, done ) if done: break state = next_state print 'total reward this episode is: ', total_rewardif __name__ == "__main__": main()
如想了解算法关键设定,请参考CSDN杨思达zzz:http://blog.csdn.net/supercally/article/details/54767499
学习资源
授人以渔,分享以下强化学习的相关学习资源:
1. Udacity课程1:Machine Learning: Reinforcement Learning,以及更深入的Udacity课程2:Reinforcement Learning
2. 经典教科书:Sutton & Barto Textbook: Reinforcement Learning: An Introduction 网页中可免费下载新版(第二版)初稿
3. UC Berkeley开发的经典的入门课程作业-编程玩“吃豆人”游戏:Berkeley Pac-Man Project (CS188 Intro to AI)
4. Stanford开发的入门课程作业-简化版无人车驾驶:Car Tracking (CS221 AI: Principles and Techniques)
5.CS 294: Deep Reinforcement Learning, Fall 2015 CS 294 Deep Reinforcement Learning, Fall 2015。课程安排和资料很好。推荐最为RL进阶学习。
注:以上Berkeley和Stanford的课程项目都是精心开发的课程作业,已经搭建好了基础代码,学习者可专注于实现核心算法,并且有自动评分程序(auto-grader)可以自测。
参考资料:
百度百科词条:强化学习
CSDN:Lili_Y_Love,强化学习(Reinforcement Learning, RL)初步介绍
SegmentFault:方老司,《深入浅出机器学习》之强化学习
DeepMind:Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm。17.12.05
知乎:不爱老婆的猪,https://www.zhihu.com/question/41775291/answer/92740775
莫烦python:http://v.youku.com/v_show/id_XMTkyMDY5MTk2OA==.html
CSDN杨思达zzz:http://blog.csdn.net/supercally/article/details/54767499
编译:T.R
来源:argmin.net 将门创投
深度强化学习可以用于在围棋中实现超人的表现,在atari游戏中成为高手,同时也可以控制复杂的机器人系统,自动调节深度学习系统、管理网络堆栈中的队列问题,此外还能改善数据中心的能耗效率…这几乎就是一个神通广大的技术啊!但是我们需要对这种铺天盖地的媒体宣传保持足够清醒的头脑。作者希望在这篇文章中为读者呈现出强化学习的真实面貌,让我们明白什么是强化学习能做的而且能出色完成的,而哪些又仅仅是停留在纸面上的假设而已。同时作者还认为机器学习中的一些重要问题将可以通过强化学习的角度予以解决。
强化学习令人不解的原因主要在于它需要我们利用一种在通常机器学习中不常用的核心概念去思考。首先你需要考虑时变的统计学模型并理解数据中的依赖只是暂时的相关而已;第二、你应该理解统计学习问题中的反馈效应,每一次行为后对于结果的观测分布,强化学习系统必须适应这些分布。这两个方面都理解起来都十分困难,在这篇文章里作者将强化学习归结成了一种预测分析的模式,而在随后的文章里则是以优化控制的形式展开的。每一种都和我们熟知的机器学习问题有很大的不同。
强化学习与预测分析
人们一般认为机器学习拥有三根重要的柱石:非监督学习、监督学习、强化学习,这三个部分基本上包含了机器学习研究与应用的方方面面。
那他们之间有什么不同呢?每一种方法的输入都是一列索引和对应的特征,但对应的输出却各不相同。在非监督学习中,算法的目标是对数据进行有效的归纳总结,我们可以把这一过程视为模型将输入的x数据转换为了可以归纳表示输入信息的低维度输出z。常见的非监督学习包括聚类或者将样本映射到其他的维度上,下图分别表示了常见的聚类、词云和流形学习等典型的方法。
而对于监督学习来说、我们需要通过输入数据x预测出输出数据的某一特征y,这是我们最为熟悉的机器学习方法了,主要包括回归和分类两大分支。
而对于强化学习来说,对于特定的输入x对应着两个输出分别是action和reward。强化学习的目标就是在给定输入的情况下尽可能地选择出能使r(奖励)最大的a(行为)。有很多问题可以用强化学习来解决,从游戏中的在线决策到网络世界中的最大化收益都可以通过这样的方式来获取较好的解决方案。
对于更为广阔的领域来说,下面这张图道出了各种方法和应用所处的阶段和特点。
描述性分析指的是通过归纳数据使其具有更好的可解释性,非监督学习就是一种很好的描述性分析方法,而预测分析的目标则是基于现在的数据估计未来的结果,而最终的规范性分析(prescriptive analytics)则旨在指导行动以保证结果。强化学习恰恰就属于最后一个范畴。
上图描绘的结果可能与传统的机器学习智慧大相径庭,而本文想呈现的是一个不同的观点。根据Gartner的观点,非监督学习是这三类机器学习中最容易的一种,因为它的风险会很低。如果你所需要的仅仅只是归纳总结的话它几乎不会给出错误答案。就像GAN对你的卧室颜色进行了正确或者错误的渲染对于结果没有影响。描述性模型和非监督学习主要着眼于美学方面而不是具体的目标;预测分析和监督学习则充满了更多的挑战,我们还需要分析它的精度以及在新数据中的行为和表现。
而最大的挑战则来自于规范性分析。这一类模型的目标十分清晰:强化学习和规范性分析需要分析输入并决定要采取的行动和明确对应的奖励。规范性分析所面对的新数据来源于不确定的环境中,随后需要作出决策并利用这些决策影响环境。这样的系统会在好的决策下获得丰厚的奖励,而在糟糕的决策后则面临着灾难性的结果。但由于反馈来源于复杂的相互联系中使其在理论上难以研究。对于真实的计算系统来说,无论是自动驾驶系统还是庞大社交网站,与真实世界的活跃交互远远超过了你我的想象!
这就是我们需要详细理解强化学习的原因,它为我们提供了一种可以进行交互的机器学习框架。作者认为强化学习将会在机器学习领域有着更多的应用。对于每一个人来说,理解一些强化学习有助于我们更安全的构建和利用机器学习系统。在下一部分中作者将要从优化控制的角度更为详细的阐释强化学习。
强化学习最为迷人的地方在于将机器学习和控制有机地结合到了一起,但人们对于智能体与环境的交互还知之甚少。机器学习和控制在各自的领域的应用有很大的差别,控制是在一个具体的环境中设计出精密复杂行为的理论,而机器学习却是在没有预先模型的情况下从数据中进行复杂的预测任务。控制理论的核心在于连接输入和输出的动力学系统。这一系统的初始状态在输入和环境条件的作用下不断转换,而输出则是输入和对应状态的函数。如果在没有输入的情况下,我们要预测未来的输出只需要知道系统所处的状态即可。
我们利用牛顿定律来作为例子理解控制的过程。如果我们希望将四旋翼悬浮在空中并从一米上升到2m的位置,那么我们首先需要增加螺旋桨的转速以获取更大的升力。这时候螺旋桨转速是输入1,它需要与输入2重力进行相互作用。那么四旋翼无人机的动力学就要满足牛顿定律:加速度的大小与受外力成正比,而这里的外力则是升力与重力之差。同时加速度的大小还与四旋翼飞行器的质量成反比。同时速度等于初速度加上加速与加速的时间,最终的位置则需要满足初始位置加上速度与运动时间的乘积。通过这些公式我们就可以计算出运动到目标位置所需的升力和转速以及作用的时间了。这时候系统的状态就可以表示为位置和速度这一对参量。
这时候可以将这一动力学系统表示为一个差分方程:
其中f表示状态转移方程,主要受到当前状态、当前输入和误差的影。et可以是随机噪声也可以视为模型的系统误差。
优化控制的目的是尽可能的最小化或者最大化控制目标。我们假设每一时刻我们都能从当前的输入和状态中获取到目前一些奖励,而我们需要的是最大化这些奖励。我们可以将这一过程表现为下面的形式:
上式表示我们需要特定的控制序列ut来最大化0~N时间内的奖励,而这取决于动力学系统的状态转移规则f。假设我们是控制工程师,那么我们现在需要做的就是为这一优化控制问题建立模型,并寻找最优解,然后问题就迎刃而解了!有很多的控制问题可以按照这样的方式解决,其中最早的求解算法便是反向传播算法。
另一个重要的例子是马尔科夫决策过程(MDP),这时候xt变成了离散的输入值,u(t)则是离散的控制,x(t+1)的概率分布则由x(t)和u(t)共同决定。在马尔可夫过程中,可以将上述变量表示为概率分布,同时可以利用动态编程的方法求解这一问题。
讲了这么多,现在是我们把学习引入到控制过程中的时候了。如果我们对于f一无所知那么我们将如何建模如何解决问题呢?这就是机器学习可以大显身手的地方了!
我们可能不知道螺旋桨在给定电压下的推力,我们该如何建模呢?首先我们应该利用实验去观察在不同的输入下一个动力学模型是否适合这个系统,随后将这一模型转换为一个优化问题。
对于更为复杂的系统,我们不可能写出一个紧凑的参数化模型。一种可能的方法就是不去管模型而是尝试在x(t)的不同测量来不断增加奖励,这就引入了”规范分析“领域的强化学习。这样的规范分析不仅利用从头开始创建控制系统,同时也适用时变模型的建模和分析。需要强调的是,这是一种纯粹依赖于反馈的控制方法,而不依赖于传统的控制理论。
其中关键的不同在于我们对于一个动力学系统的了解程度有多么的深刻,从而才能建立优化的控制过程?使系统达到高水平控制性能的优化过程是什么(重复与监测)?
这两个问题构成了强化学习的对于经典控制问题的核心。
强化学习入门之旅下一站:
The Linearization Principle >>http://www.argmin.net/2018/02/05/linearization/
The Linear Quadratic Regulator>>http://www.argmin.net/2018/02/08/lqr/
人工智能赛博物理操作系统
AI-CPS OS
“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。
AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务和数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。
领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:
重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?
重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?
重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?
AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的数字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:
精细:这种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。
智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。
高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。
不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。
边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。
AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:
创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;
对现有劳动力和实物资产进行有利的补充和提升,提高资本效率;
人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间。
给决策制定者和商业领袖的建议:
超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;
迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新
评估未来的知识和技能类型;
制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开
发过程中确定更加明晰的标准和最佳实践;
重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临
较高失业风险的人群;
开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。
子曰:“君子和而不同,小人同而不和。” 《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。
如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!
新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。
产业智能官 AI-CPS
用“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能),在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链。
长按上方二维码关注微信公众号: AI-CPS,更多信息回复:
新技术:“云计算”、“大数据”、“物联网”、“区块链”、“人工智能”;新产业:“智能制造”、“智能金融”、“智能零售”、“智能驾驶”、“智能城市”;新模式:“财富空间”、“工业互联网”、“数据科学家”、“赛博物理系统CPS”、“供应链金融”。
官方网站:AI-CPS.NET
本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!
版权声明:由产业智能官(公众号ID:AI-CPS)推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com