手机网站 广告,数字广东网络建设有限公司网站,广州seo优化电话,淘宝网站打算找人做本文转载自知乎专栏「机器学习笔记」#xff0c;原文作者「余帅」#xff0c;链接https://zhuanlan.zhihu.com/p/358829371 本文学习目标1. 复习Q-Learning#xff1b;2. 理解什么是值函数近似#xff08;Function Approximation#xff09;#xff1b;3. 理解什么是DQN原文作者「余帅」链接https://zhuanlan.zhihu.com/p/358829371 本文学习目标1. 复习Q-Learning2. 理解什么是值函数近似Function Approximation3. 理解什么是DQN弄清它和Q-Learning的区别是什么。2 用Q-Learning解决经典迷宫问题现有一个5房间的房子如图1所示房间与房间之间通过门连接编号0到4,5号是房子外边即我们的终点。我们将agent随机放在任一房间内每打开一个房门返回一个reward。图2为房间之间的抽象关系图箭头表示agent可以从该房间转移到与之相连的房间箭头上的数字代表reward值。图1 房子原型图图2 抽象关系图根据此关系可以得到reward矩阵为Q-Learning是一种off-policy TD方法伪代码如图所示Q-Learning伪代码我们首先会初始化一个Q表用于记录状态-动作对的值每个episode中的每一步都会根据下列公式更新一次Q表这里的迷宫问题每一次episode的结束指的是到达终点状态5。为了简单起见这里将学习率设为1更新公式变为另外将衰减系数γ设为0.8。Q表初始化为一个5×5的全0矩阵。每次这样更新最终Q表会收敛到一个矩阵。最终Q表收敛为因此也可以得到最优路径如下红色箭头所示Python代码import numpy as np
GAMMA 0.8
Q np.zeros((6,6))
Rnp.asarray([[-1,-1,-1,-1,0,-1],[-1,-1,-1,0,-1,100],[-1,-1,-1,0,-1,-1],[-1,0, 0, -1,0,-1],[0,-1,-1,0,-1,100],[-1,0,-1,-1,0,100]])
def getMaxQ(state):return max(Q[state, :])
def QLearning(state):curAction Nonefor action in range(6):if(R[state][action] -1):Q[state, action]0else:curAction actionQ[state,action]R[state][action]GAMMA * getMaxQ(curAction)
count0
while count1000:for i in range(6):QLearning(i)count1
print(Q/5)Q-Learning方法很好的解决了这个迷宫问题但是这终究只是一个小问题状态空间和动作空间都很小实际情况下大部分问题都是有巨大的状态空间或者动作空间想建立一个Q表内存是绝对不允许的而且数据量和时间开销也是个问题。3 值函数近似与DQN值函数近似Function Approximation的方法就是为了解决状态空间过大也称为“维度灾难”的问题。通过用函数而不是Q表来表示 这个函数可以是线性的也可以使非线性的。其中ω称为“权重”。那怎么把这个权重求出来即拟合出这样一个合适的函数呢这里就要结合机器学习算法里的一些有监督学习算法对输入的状态提取特征作为输入通过MC/TD计算出值函数作为输出然后对函数参数 进行训练直到收敛。这里主要说的是回归算法比如线性回归、决策树、神经网络等。这里就可以引入DQNDeep Q-Network了实际上它就是Q-Learning和神经网络的结合将Q-Learning的Q表变成了Q-Network。好现在关键问题来了。这么去训练这个网络呢换句话说怎么去确定网络参ω呢第一我们需要一个Loss Function第二我们需要足够的训练样本。训练样本好说通过epsilon-greedy策略去生成就好。回忆一下Q-Learning我们更新Q表是利用每步的reward和当前Q表来迭代的。那么我们可以用这个计算出来的Q值作为监督学习的“标签”来设计Loss Function我们采用如下形式即近似值和真实值的均方差采用随机梯度下降法SGD来迭代求解得到我们想要的具体公式和过程还请看参考资料这里不展开了其实就是求导啦。值得一提的是上述公式中的q(·)根据不同方法算出来其形式不一样比如利用MC则为回报利用TD(0)则为Q-Learning呢就是在David Silver的课里他根据每次更新所参与样本量的不同把更新方法分为增量法Incremental Methods和批处理法Batch Methods。前者是来一个数据就更新一次后者是先攒一堆样本再从中采样一部分拿来更新Q网络称之为“经验回放”实际上DeepMind提出的DQN就是采用了经验回放的方法。为什么要采用经验回放的方法因为对神经网络进行训练时假设样本是独立同分布的。而通过强化学习采集到的数据之间存在着关联性利用这些数据进行顺序训练神经网络当然不稳定。经验回放可以打破数据间的关联。最后附上DQN的伪代码学到这里其实可以做一个阶段性总结了强化学习算法的基本框架可以用下图概括参考文献[1]Reinforcement Learning: An Introduction - Chapter 9: On-policy Prediction with Approximation[2]Reinforcement Learning: An Introduction - Chapter 10: On-policy Control with Approximation[3]David Silver’s RL Course Lecture 6 - Value Function Approximation (video, slides)[4]DQN从入门到放弃5 深度解读DQN算法[5]一条咸鱼的强化学习之路6之值函数近似Value Function Approximation和DQN