深度强化学习血泪调参史:从人工智障到人工智能

2023-10-21 15:10

本文主要是介绍深度强化学习血泪调参史:从人工智障到人工智能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度强化学习血泪调参史:从人工智障到人工智能——粗调

  • 背景
  • 应用深度强化学习经常遇到的问题
  • 调参大法
    • 针对问题1:不能达到预期效果,AI宛如神经智障。导致这种问题的源头可能有太多太多种,但是一旦遇到这种问题,建议从以下几个方面入手:
    • 针对问题2:神经网络的cost不下降,一直在高位(有时候的cost能达到二位数)徘徊。产生这种情况的原因很有可能是神经网络的初始化存在问题,举例:神经网络的初始化输出落在了[10,20]的区间内,但是你期望的reward输出却在[-1,1]的区间内,导致神经网络存在很长的一段距离才能训练到合适的参数(有时候根本就训练不出来)
    • 针对问题3:神经网络不收敛。产生这种情况的原因有很多种,下面分别讨论吧
    • 其他通用的建议

背景

初学者在学习了强化学习或深度强化学习理论之后,总想找个应用背景验证一下自己所学的知识。然而,在没有实践经验的条件下,很容易遭受当头一棒,大部分人可能从此开始深度强化学习的从入门到放弃。我也曾经(其实经常)产生放弃的想法,但是好在能够坚持下来,在电脑前死磕代码,一行一行地调试,终于能够解决大部分遇到的问题。

首先说明,一般的多阶段规划问题,以目前的DRL算法能力来看,都能够有不错的表现,如果效果不好,大概率是自己代码的问题。

为了避免各位同学重走深度强化学习的万里长征路,我把我自己总结的调参经验,结合网络上公开的知识,形成这个博客的内容:从人工智障到人工智能。

这篇博客的目的是:先抛开效果不说,能够先让强化学习的神经网络收敛,在下篇博客中将继续深入讲解如何调整具体的算法参数,来搜索使效果最好的那些参数空间

应用深度强化学习经常遇到的问题

1:不能达到预期效果,AI宛如神经智障
2:神经网络的cost不下降,一直在高位(有时候的cost能达到二位数)徘徊
3:神经网络不收敛,AI的表现时好时坏

调参大法

针对问题1:不能达到预期效果,AI宛如神经智障。导致这种问题的源头可能有太多太多种,但是一旦遇到这种问题,建议从以下几个方面入手:

(1)仔细检查代码,尤其是状态的输入是不是和你预期的一样,有时候状态向量中一位的0和1的区别就能让AI疯狂
(2)再次仔细检查代码,看看保存到记忆库(如果使用的是DQN)中的数据,是否能够一一对应,另外,在计算loss函数的时候,一定要保证,是针对同一个状态下的同一个action,计算预测价值和真实价值之间的gap,作为loss值,千万不要搞错,否则,AI不智障是不可能的
(3)检查神经网络的结构,尤其是最后输出的时候,建议不要激活函数(除非你用基于策略的强化学习算法,最后输出的激活函数通常是sigmoid),因为激活函数毕竟有可能导致信息空间的扭曲,从而导致可能输出空间不包含你想要的值,中间隐含层的输出函数建议用Relu
(4)仔细检查环境的逻辑,是否存在同一个状态输入,对应不同reward的情况,如果存在这种不一致的情况,AI将不知所措,因为你一会告诉AI在这个状态下要这么做,一会又告诉AI要那样做

针对问题2:神经网络的cost不下降,一直在高位(有时候的cost能达到二位数)徘徊。产生这种情况的原因很有可能是神经网络的初始化存在问题,举例:神经网络的初始化输出落在了[10,20]的区间内,但是你期望的reward输出却在[-1,1]的区间内,导致神经网络存在很长的一段距离才能训练到合适的参数(有时候根本就训练不出来)

(1)调整神经网络的初始化参数,一般就是w和b的初始化。怎么调整呢,当初始化输出和你期望的输出差不多落在同一区间的时候,基本就可以了,注意,只是基本可以,如果想要更好的效果,则需要大师级的调参了,这里就不赘述了,请各位同学自己查资料

针对问题3:神经网络不收敛。产生这种情况的原因有很多种,下面分别讨论吧

(1)学习率太大,导致神经网络在一个区间内来回跌宕,就是收敛不到最优点。解决办法:调整学习率,一般都是小于0.001的。另外,还可以采用这种办法:随着训练逐渐减小学习率,这样,既可以在开始的时候较快的训练神经网络,又能保证当神经网络训练到差不多的时候,避免产生大规模动荡
(2)仔细检查环境的逻辑,是否存在同一个状态输入,对应不同reward的情况,如果存在这种不一致的情况,AI也有可能会动荡,因为你一会告诉AI在这个状态下要这么做,一会又告诉AI要那样做
(3)环境的reward是否有最优,如果你这个

其他通用的建议

(1)增加记忆库,设置到10万-100万级别;记忆库太小,选择的训练样本之间很有可能不是独立的,即有前后关联,这样是不满足DQN训练的前提条件的(具体理论参考教学书籍)
(2)加一行代码:改为Double-DQN。这个可以尝试着去做一下
(3)检查状态的描述是否合理,如果你自己都不能够基于当前的状态做出正确的决策,那怎么期望AI可以做到呢?注意,初学者经常犯先入为主的错误,自以为状态的描述没有问题,实际上,状态的描述经常是有问题的。比如我们之前做过的一个搜救项目,在一个二维网格上设置目标可能的概率,我们期望AI能够在20步之内遍历尽可能大的概率区域,一开始我们的输入就是概率矩阵,后来才发现,根据这个矩阵,根本就无法知道当前的Agent位于哪个位置,当时也是太傻了。后来做了如下更改:1)AI走过的区域,值改为-1,AI当前的位置,值设为1,这样就可以保证AI既知道历史走过的路径,又知道当前的位置。
在这里插入图片描述

(4)如果能够保证每个action获得即时奖励,那就用即时奖励。如果非得用回合奖励(也就是玩完一局游戏后才有奖励,每一步action没有奖励),那也尽量给每个action赋予一个即时奖励,然后把回合奖励分配给这一回合的每个action中(具体分配方法,可以参考具体问题背景,如果前面几步的action重要,就分配更多的回合奖励给前面的action,比如在上面的问题中,如果你希望AI可以尽早地搜索概率大的区域,就可以把回合奖励更多地分配给前面的action中)
(5)为了加快效率,可以一开始先用一个较大的学习率,让神经网络迅速收敛,然后看AI是否能学到一点东西,如果AI在向着正确的方向训练,说明算法的总体框架基本没问题,然后再调整学习率开始真正训练
(6)状态空间记得要进行归一化操作
(7)reward进行 rescale和clipping操作,实践证明这两个操作无论在收敛速度还是最终性能上都会带来明显提升,参考形式为: r = c l i p ( r / ( s t d ( R e t u r n ) + e ) , − 10 , 10 ) r=clip(r/(std(Return)+ e ),-10,10) r=clip(r/(std(Return)+e),10,10) [1]

[1]https://zhuanlan.zhihu.com/p/99901400

这篇关于深度强化学习血泪调参史:从人工智障到人工智能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255204

相关文章

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识