微头条丨【RL】算法简介与实现 Value-Based-Learning算法
一 Value-Based
Q-Learning
(资料图片仅供参考)
Q-Learning是RL算法中Value-Based的算法,Q即为Q(s,a)就是在某一时刻的s状态下(s∈S),采取 动作a (a∈A)能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward。所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。 下面是Q-Learning的TensorFlow实现
import numpy as npimport pandas as pdclass QLearning: def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9): """ QLearning :param actions: :param learning_rate: :param reward_decay: :param e_greedy: """ self.actions = actions self.lr = learning_rate self.gamma = reward_decay self.epsilon = e_greedy self.q_table = pd.DataFrame(columns=self.actions) def chooseAction(self, observation): """Choose action with state and observation""" self.checkStateExist(observation) if np.random.uniform()<SELF.EPSILON: :]="" opt_actions="self.q_table.loc[observation," #="" ="="np.max(opt_actions)].index)"" return="" action="opt_actions.argmax()" updateparams(self,="" state,="" action,="" reward,="" self.checkstateexist(state_)="" q_pre="self.q_table.loc[state," state_="" !="terminal" self.gamma="" self.q_table.loc[state_,="" :].max()="" q_target="reward" self.q_table.loc[state,="" action]="" +="" *="" (q_target="" -="" q_pre)="" def="" checkstateexist(self,="" if="" state="" not="" in="" self.q_table="self.q_table.append(" pd.series([0]*len(self.actions),="" index="self.q_table.columns," name="state)" )
DQN
当状态动作很多时,Q-Learning使用Table存储Value的方式不再实用(甚至不可行)。
如何不使用Table而得到每个状态下采取各个动作的Value呢?DQN用神经网络将State映射到Value。 DQN是在Q-Learning的主框架上做了扩展,包括:
记忆库(用于重复学习,随机抽取的经历也打乱的状态之间的相关性,使神经网络的更新更有效率)MLP计算Q值暂时冻结Q_target参数(切断相关性),target网络用来计算Q现实
下面是DQN的TensorFlow实现
import tensorflow as tfimport numpy as npclass DeepQNet: def __init__(self, n_actions, n_features, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9, update_target_iter=300, memory_size=500, batch_size=32, e_greedy_increment=None, output_graph=False, ): """ DQN :param n_actions: :param n_features: :param learning_rate: :param reward_decay: :param e_greedy: :param update_target_iter: :param memory_size: :param batch_size: :param e_greedy_increment: :param output_graph: """ self.n_actions = n_actions self.n_actions = n_actions self.n_features = n_features self.lr = learning_rate self.gamma = reward_decay self.epsilon_max = e_greedy self.update_target_iter = update_target_iter self.memory_size = memory_size self.batch_size = batch_size self.epsilon_increment = e_greedy_increment self.epsilon = 0 if e_greedy_increment is not None else self.epsilon_max # total learning step(Cooperate with update_target_iter in learn() to update the parameters of target net) self.learn_step_counter = 0 # memory: row = memory_size, col = observation + observation_ + action + reward self.memory = np.zeros((self.memory_size, self.n_features*2+2)) self._buildNet() self.sess = tf.Session() if output_graph: tf.summary.FileWriter("logs/", self.sess.graph) self.sess.run(tf.global_variables_initializer()) self.cost = [] def _buildNet(self): """"Build evaluate network and target network""" # build evaluate net self.state = tf.placeholder(tf.float32, [None, self.n_features], name="state") self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name="Q_target") with tf.variable_scope("evaluate_net"): c_names, n_l1 = ["evaluate_net_params", tf.GraphKeys.GLOBAL_VARIABLES], 10 w_initializer, b_initializer = tf.random_normal_initializer(0, 0.3), tf.constant_initializer(0.1) with tf.variable_scope("layer1"): w1 = tf.get_variable("w1", [self.n_features, n_l1], initializer=w_initializer, collections=c_names) b1 = tf.get_variable("b1", [1, n_l1], initializer=b_initializer, collections=c_names) l1 = tf.nn.relu(tf.matmul(self.state, w1) + b1) with tf.variable_scope("layer2"): w2 = tf.get_variable("w2", [n_l1, self.n_actions], initializer=w_initializer, collections=c_names) b2 = tf.get_variable("b2", [1, self.n_actions], initializer=b_initializer, collections=c_names) self.q_evaluate = tf.nn.relu(tf.matmul(l1, w2) + b2) with tf.variable_scope("loss"): self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_evaluate)) with tf.variable_scope("train"): self.opt = tf.train.RMSPropOptimizer(self.lr).minimize(self.loss) # build target net self.state_ = tf.placeholder(tf.float32, [None, self.n_features], name="state_") with tf.variable_scope("target_net"): c_names = ["target_net_params", tf.GraphKeys.GLOBAL_VARIABLES] with tf.variable_scope("layer1"): w1 = tf.get_variable("w1", [self.n_features, n_l1], initializer=w_initializer, collections=c_names) b1 = tf.get_variable("b1", [1, n_l1], initializer=b_initializer, collections=c_names) l1 = tf.nn.relu(tf.matmul(self.state_, w1) + b1) with tf.variable_scope("layer2"): w2 = tf.get_variable("w2", [n_l1, self.n_actions], initializer=w_initializer, collections=c_names) b2 = tf.get_variable("b2", [1, self.n_actions], initializer=b_initializer, collections=c_names) self.q_next = tf.nn.relu(tf.matmul(l1, w2) + b2) def storeTransition(self, state, action, reward, state_): """Store the state, observation and reward experienced during the train process to enable batch training""" if not hasattr(self, "memory_counter"): self.memory_counter = 0 transition = np.hstack((state, [action, reward], state_)) index = self.memory_counter % self.memory_size self.memory[index, :] = transition self.memory_counter += 1 def chooseAction(self, observation): """Choose action with state and observation""" observation = observation[np.newaxis, :] if np.random.uniform() < self.epsilon: actions = self.sess.run(self.q_evaluate, feed_dict={self.state: observation}) action = np.argmax(actions) else: action = np.random.randint(0, self.n_actions) return action def updateTargetNet(self): """Update the target net with the latest evaluate net parameters""" evaluate_params = tf.get_collection("evaluate_net_params") target_params = tf.get_collection("target_net_params") self.sess.run([tf.assign(t, e) for t, e in zip(target_params, evaluate_params)]) def learn(self): # check to update target net if self.learn_step_counter % self.update_target_iter == 0: self.updateTargetNet() print("Update target net!") # Get batch training data from the memory if self.memory_counter > self.memory_size: sample_index = np.random.choice(self.memory_size, size=self.batch_size) else: sample_index = np.random.choice(self.memory_counter, size=self.batch_size) batch_memory = self.memory[sample_index, :] q_evaluate, q_next = self.sess.run([self.q_evaluate, self.q_next], feed_dict={self.state: batch_memory[:, 0:self.n_features], self.state_: batch_memory[:, -self.n_features:]}) q_target = q_evaluate.copy() batch_index = np.arange(self.batch_size, dtype=np.int32) eval_act_index = batch_memory[:, self.n_features].astype(int) reward = batch_memory[:, self.n_features + 1] # Related to memory format, here means [action, reward] q_target[batch_index, eval_act_index] = reward + self.gamma * np.max(q_next, axis=1) _, cost = self.sess.run([self.opt, self.loss], feed_dict={self.state: batch_memory[:, 0:self.n_features], self.q_target: q_target }) self.cost.append(cost) self.epsilon = self.epsilon + self.epsilon_increment if self.epsilon < self.epsilon_max else self.epsilon_max self.learn_step_counter += 1 def showCost(self): import matplotlib.pyplot as plt plt.plot(np.arange(len(self.cost)), self.cost) plt.ylabel("Cost") plt.xlabel("training steps") plt.show()
二 Policy-Based
直接输出动作,可以在连续区间内选择动作;而Value-Based要在连续区间中,对无数个动作计算价值选择行为是不可行的。
误差如何反向传递呢?没有误差,它的目的是选的动作在下次更有可能被选择,但怎么知道动作的好坏呢,用reward,reward小,动作在下次被选择的可能性增加的少。
Actor-Critic
Actor:Policy-Based,输入State,预测输出采取各种Action的概率。 Critic;Value-Based,输入State,预测输出当前State的Value,并与下一状态的next_stateValue求TD_error 在Actor-Critic中,Actor可以每一步都更新学习(而单纯的Policy-Based方法要在回合结束后才能更新)
但也带来了问题:由于两个网络在连续状态中更新参数,每次跟新前后的参数具有相关性,导致网络只能片面的看待问题,甚至学不到有效的参数,不能收敛。
TRPO
PPO
Deep Deterministic Policy Gradient(DDPG)
标签:
相关推荐:
精彩放送:
- []如何查看.dat文件内容?dat文件是什么意思?
- []热门看点:NCBI-BLAST在线使用教程详细攻略(图解)
- []每日关注!标准股份:截至2023年2月28日,公司股东人数约为2.36万户
- []金科回复深交所关注函:约4.8亿股份将被司法拍卖,不会导致公司实控人发生变化
- []天天最新:什么是二叉树的遍历?二叉树的遍历顺序规则是什么?
- []linux中Gy模式什么意思?一文读懂重要极端微生物的生理特点
- []环球视讯!卸载MySQL重新安装:安装失败解决方法
- []环球即时看!【企业版】Mule3的新增特点-云连接
- []中科江南:有关内容请参考之前的敬请广大投资者理性投资,注意风险
- []外媒:英国房价出现10多年来最大跌幅
- []旭辉、中骏拟分别以14亿、25亿元整栋出售上海虹桥办公楼
- []微头条丨【RL】算法简介与实现 Value-Based-Learning算法
- []世界报道:免费小巧的分屏软件 支持win7和win8系统
- []世界头条:天威视讯:公司的深汕威视数据中心一期、清湖云中心机房项目正在建设过程中尚未投产
- []对数的计算公式是什么?对数的计算公式性质及推导过程
- []美的置业2023前两月合同销售额150.2亿元
- []文旅局长“出圈”,爆红之后如何长红?
- []M8宗师入围CCTV·《中国汽车风云盛典》
- []中国银河证券:PMI继续超预期回升 经济持续向好
- []全球热门:2022年股市放假安排时间表,股市放假时间一览
- []增量资金即将注入A股?基金最新研判:强劲复苏或开启第二波行情
- []股票假期安排2022,放假时间一览
- []降准会造成哪些影响,有以下三点影响
- []今日讯!工行如何基金定投
- []银行十一放假吗,有的银行会放假
- []【全球速看料】实探北京新房市场:小阳春提前到来 部分楼盘价格回涨
- []天天热推荐:武进不锈:很抱歉,公司证券部联系电话是051988737341,请在工作时间拔打
- []当前速递!东方锆业:具体情况敬请关注公司披露的相关公告。公司目前只处于提供样品供一些电池材料厂家研发的阶段
- []生活性消费需求是什么需求?生产性消费需求又是什么需求?有何不同?
- []市场经济是什么意思?商品经济概念是什么?
- []什么是消费需求?什么是投资需求?和投资需求有什么不同?
- []索克服务注资500万元成立科技服务公司 经营范围含网络技术服务
- []经济危机的含义是什么?经济周期代表了什么?
- []家居丨益森科技启动上市辅导 注册资本1.07亿元
- []当前焦点!财面儿丨联发集团发行8.2亿元中期票据 利率4.98%
- []世界资讯:百胜中国2022年度收入95.7亿美元 录得4.42亿美元净利润
- []百龙创园:截至2023年2月28日,公司股东总户数为7364户
- []精选!短线高手炒股方法
- []十大正规外汇平台排行,外汇平台名单一览
- []世界动态:如何办理香港银行账户
- []焦点热议:看股票涨跌的最简单的办法,有以下三个方法
- []焦点速讯:多只权益类基金提前结束募集
- []中国酒店业疫后复苏猜想:魔鬼都在细节里
- []世界热推荐:中签可转债怎么操作
- []科创50指数etf基金怎么买
- []北元申购是什么板块
- []还呗借钱靠谱吗 还呗借钱靠不靠谱
- []天天观热点:创业板新股上市的涨跌幅限制为
- []创业板注册制交易新规
- []环球微头条丨3月2日重点数据和大事件前瞻
- []环球热点!原油价格为什么会出现负值
- []广西元强建设项目管理有限公司
- []天天快消息!抛售美国国债是什么意思
- []头条焦点:股票熔断什么意思
- []全球今日讯!内外兼修!晶澳科技引领光伏高质量发展
- []天天即时看!税优识别码在保单哪里
- []天天速讯:美国印钞票对世界有什么影响
- []世界看点:公积金怎么自动代扣
- []健康账户和个人账户的区别
- []全球速讯:高争民爆:截止2月28日,1.8万左右
- []2015年世界快乐报告
- []观热点:超声胃镜和肠镜可以一起做吗_胃镜和肠镜可以一起做吗
- []滚动:次级债券是什么意思
- []委比委差什么意思
- []天天看点:邮政储蓄小额贷款条件,有以下五点
- []全球热消息:买车按揭是怎么计算的
- []车船税在哪里缴纳
- []全球资讯:兴业物联:将上市所得款项余下未动用部分用于收购拓展
- []天天百事通!昊华能源:2022年归母净利润同比降33.78%
- []今日热文:卫宁健康:公司医院客户的院内数据通常由医院存储管理,公司提供相应的技术支持和服务
- []世界讯息:股票kdj线图怎么看
- []焦点速讯:养老个人缴费比例,是8%
- []世界报道:工商银行卡余额怎么查询
- []世界速递!etf怎么买卖交易
- []2022年中国人民银行存款利率表,各类型存款利率一览
- []今日观点!光的速度_说一说光的速度的简介
- []世界热头条丨盈建科:2月28日公司高管梁博减持公司股份合计2.3万股
- []坚朗五金:2月28日公司高管赵键减持公司股份合计5.04万股
- []保利发展125亿元定增申请获得上交所受理
- []今日视点:湖北襄阳3.87亿元挂牌3.91万平方米商住地
- []全球热点评!中泰化学:公司南黄草湖煤矿尚未取得采矿权证
- []先进数通:2月28日公司高管范丽明减持公司股份合计37万股
- []环球关注:应收账款的管理有哪些,有以下三点
- []天天资讯:什么是保本基金
- []全球资讯:农业银行还款日期,在账单日后的第25天
- []【全球播资讯】建设银行住房贷款利率表2022最新利率,分以下两种利率
- []今日热文:基金定投什么意思
- []热门看点:超讯通信:2月22日至2月24日公司高管钟海辉、陈桂臣、邓国平减持公司股份合计12.92万股
- []格力地产:重大免税资产重组交易对方更换财务顾问
- []太辰光:2月28日公司高管张艺明、肖湘杰减持公司股份合计27万股
- []世界短讯!清研环境:公司目前主营业务暂不涉及数字经济相关业务
- []当前关注:赛特新材:2月27日至2月28日公司高管汪美兰减持公司股份合计10.75万股
- []全球播报:美国加息影响
- []世界热资讯!巴菲特投资理念
- []银行卡更换手机号
- []热门:证券交易所是做什么的 包括以下5点
- []热门看点:年线是多少日均线
- []班耶华友
- []全球热点评!河南开封:鼓励回购存量商品房用作保障性租赁住房
- []东吴证券(香港):房地产正经历较大边际变化 拥有市场化外拓和服务边界拓宽能力的物业公司具备长期投
- B站注册资本增幅400%至5亿 目前由陈睿全资持股
- 光源资本出任独家财务顾问 沐曦集成电路10亿元A轮融资宣告完成
- 巨轮智能2021年上半年营收11.24亿元 期内研发费用投入增长19.05%
- 红枣期货尾盘拉升大涨近6% 目前红枣市场总库存约30万吨
- 嘉银金科发布2021年Q2财报 期内净利润达1.27亿元同比增长208%
- 成都银行2021上半年净利33.89亿元 期内实现营收同比增长17.27亿元
- 汽车之家发布2021年第二季度业绩 期内新能源汽车品牌收入增长238%
- 中信银行上半年实现净利润290.31亿元 期末不良贷款余额706.82亿元
- 光伏概念掀起涨停潮交易价格创新高 全天成交额达1.29亿元
- 上半年生物药大增45% 关键财务指标好转营收账款持续下降
- 全球简讯:百强房企2月业绩同环比双增长:保利蝉联首位,头部房企领衔迎来“小阳春”
- 天天新动态:成交量超1.5万套!北京二手房小阳春已至
- 首都在线:公司的对外投资情况,请查阅公司在巨潮资讯网披露的公告
- 河南:住房公积金发放贷款时限压缩至20个工作日
- 焦点快播:丽臣实业:公司目前正在按计划有序推进通过电商平台进行日化产品的销售业务
- 新股怎么买
- 2022-2023上海育儿假期新规多少天?2023年上海育儿假必须连续休吗?
- 环球热消息:新股上市首日涨幅限制
- 每日快讯!地方债是什么
- 查保险到期怎么查,有以下六种方法
- p2p理财公司排名,十大p2p理财公司一览
- 当前短讯!顺发恒业减持回购股份70万股 所得资金总额为257.34万元
- 全球速递!欣贺股份:公司目前暂未收到相关信息
- 当前速讯:凯撒文化:《我开动物园那些年》还没有上线运营
- 广宇集团:子公司一石巨鑫为旗下一公司3000万元贷款提供担保
- 鼎捷软件:公司如有相关计划,将严格按照规定及时履行信息披露义务,您请持续关注公司发布的公告
- 钠电自行车落地!储能还会远吗?
- 当前播报:工信部金壮龙:新能源汽车、光伏产量连续多年保持全球第一
- 环球今头条!股票7开头是什么股
- 当前快讯:k宝证书过期怎么更新
- 当前速讯:曾韬:钠电池需求增量大 2025年全球潜在市场空间或达73GWh
- 天天滚动:股票下跌的原因,有以下五点
- 热消息:携手中科海钠!又一化工巨头跨界10万吨电池级碳酸钠项目
- 邦普循环携手梅赛德斯-奔驰,开展动力电池闭环回收项目
- 新消息丨巴菲特2000亿投资新能源,为何8次减持比亚迪
- 天天新资讯:孚能科技钠电池获车企定点!今年上半年启动量产
- 每日报道:又一新型储能技术实现新突破!
- 当前要闻:河南新乡:抓紧布局 大力推广储能氢能产业
- 当前动态:互联网金融什么意思
- 天天简讯:买保险的注意事项
- 2022年印度新增光伏装机15GW
- 天天新资讯:佳兆业集团:2023年1-2月合计交付7个项目 共3899套房
- 滚动:今年2月底全港持牌代理人数录41038人 扭转连续5个月跌势
- 全球今亮点!中通国脉:公司将严格按照相关法律法规的要求履行信息披露义务;具体情况请以公司公告信息为准
- 万东医疗:APEXCT是GE医疗推出的基于深度学习算法的CT系统
- 仁恒:2022年利润为25.79亿元 同比降36.24%
- 世界快报:汉嘉设计:目前相关工作正在推进中
- 金健米业:目前,公司主要从事国内粮油业务的生产与销售,主要产品有大米、食用油、面条、面粉、牛奶等
- 天天微速讯:2022年度全国农村网络零售额达2.17万亿元 同比增长3.6%
- 企业-TMC-酒店之间价格不透明,到底是谁在作祟?
- 产业化进程加速,固态电池开辟锂电新未来
- 今日精选:期货在哪里开户才正规,期货公司
- 天天看热讯:“强政策+市场化参与”双驱动,美国储能需求爆发在即
- 播报:为什么开酒店难赚钱
- 当前滚动:通货膨胀怎么办
- 天天热讯:工商银行五星级客户是什么意思
- 当前焦点!新股申购技巧
- 股票专业术语
- 大中矿业: 关于总经理辞职及聘任总经理和变更法定代表人的公告
- 天天视讯!河南:个人住房公积金贷款发放时限压缩至20个工作日内
- 国际油价受益于中国需求前景,OPEC+变政须等待此情形
- 每日资讯:3月1日金桥信息涨停分析:数据要素,智慧政务,web3.0概念热股
- 全球视讯!3月1日深桑达A涨停分析:数据要素,数字经济,国产操作系统概念热股
- 合肥就公积金新政征求意见 多子女家庭最高可贷75万元
- 全球热讯:3月1日魅视科技涨停分析:智慧政务,数字经济,人工智能概念热股
- 当前视点!扬州金泉:业绩高增长背后,户外用品代工厂还有空间吗?
- 今亮点!NYMEX原油上看78.97美元
- 每日热讯!郑州新型城市基础设施建设项目初步设计获批 总投资4.46亿元
- 环球微速讯:豫园股份:复地投资质押1600万股股份予中融国际信托
- 【全球报资讯】山西:2023年将开工改造城镇老旧小区1855个
- 焦点报道:全世界所有狗狗的种类有哪些?全世界所有狗狗的种类怎么划分的?
- 从怎么组词?从组词有哪些?
- 世界看点:如果还有明天谁写的?《如果还有明天》的原唱是谁?
- 美国有哪些著名的好葡萄酒?美国著名的好葡萄酒介绍?
- 建设银行个人贷款需要哪些条件?建行个人贷款条件介绍?
- 海南旅游业人气旺,酒店餐饮企业盼求职者“火速到岗”
- 观察:能单独买重疾险吗,可以
- 锐步pump篮球鞋怎么样?锐步pump篮球鞋有哪些优缺点?
- 股指期货交易时间
- 毛呢大衣怎么清洗?毛呢大衣清洗方法?
- 通讯!吉林市美食有哪些?吉林市美食介绍?
- 农商银行贷款要什么条件,有以下7种条件
- 食人鱼的天敌是什么?食人鱼的天敌有哪些?
- 【全球新视野】主角变成僵尸的小说有哪些?推荐几部主角变成僵尸的小说
- 黄金会掉价吗,可能会
- 世界球精选!旭辉集团:2023年1-2月在全国交付近万套新房
- 天天热点评!香港法院将佳源国际清盘呈请聆讯押后至3月6日
- 力盛体育:请见公司上一条互动易相关问题的
- 全球实时:百度集团午后一度涨近8% ChatGPT项目文心一言于3月16日正式发布
- 【世界速看料】中铁置业2023年度第一期中票注册报告状态更新为“反馈中” 注册金额60亿
- 全球讯息:张家港行:截至2月28日,公司股东户数为59660户
- 焦点日报:厦门国贸6亿元公司债决定不行使续期选择权 将于4月13日兑付
- 世纪华通:请关注公司披露的信息;公司将于2023年4月29日披露《2022年年报》
- 环球速看:顶格申购是什么意思? 啥叫顶格申购
- 2011年房贷利率是多少
- 1.42-1.432/Wh,河南大唐内黄100MW风电项目储能系统开标
- 聚焦:绩优股是什么意思
- 【全球新视野】森林防火小知识完整版_森林防火小知识
- 信用卡透支额度,是先消费后还款的授信额度
- 世界最新:86MW/170MWh!国能打捆采购储能系统项目公开招标!
- 周末酒店房价翻番,水果捞日售百余杯“不成问题”,柳州最近有多火?
- 热点聚焦:pos机刷卡手续费标准,不同银行和发行机构的标准不同
- 全球热点评!广西平陆储能电站首次参与电网调峰调频
- 天天热讯:文旅局长圈粉80万之后,塔河的考验刚刚开始
- 478万元!泓慧能源预中标华电光伏项目飞轮储能系统
- 锂价明年真能回到20万元?锂都宜春停产整顿是否会影响锂价回落?
- 时讯:美原油交易策略:中国数据提振需求预期,油价短线偏向多头
- 世界快看点丨无锡城建:审计机构将变更为公证天业会计师事务所
- 环球今热点:雄安新区:执行"认房不认贷" 首套房5年以上公积金贷款利率为3.1%
- 全球快消息!英皇文化产业租赁深业上城(南区)一期2层商铺 用于戏院营运及相关业务