Implement Policy Gradients demo with refactored API
Created by: wanghaoshuang
1. 任务描述
假设有一个阶梯,连接A、B点,player从A点出发,每一步只能向前走一步或向后走一步,到达B点即为完成任务。我们希望训练一个聪明的player,它知道怎么最快的从A点到达B点。 我们在命令行以下边的形式模拟任务:
A - O - - - - - B
一个‘-'代表一个阶梯,A点在行头,B点在行末,O代表player当前在的位置。
2. Policy Gradient
2.1 模型
inputyer
模型的输入是player观察到的当前阶梯的状态$S$, 要包含阶梯的长度和player当前的位置信息。 在命令行模拟的情况下,player的位置和阶梯长度连个变量足以表示当前的状态,但是我们为了便于将这个demo推广到更复杂的任务场景,我们这里用一个向量来表示游戏状态$S$. 向量$S$的长度为阶梯的长度,每一维代表一个阶梯,player所在的位置为1,其它位置为0. 下边是一个例子:
S = [0, 1, 0, 0] // 阶梯长度为4,player在第二个阶梯上。
hidden layer
隐藏层采用两个全连接layer FC_1
和FC_2
, 其中FC_1
的size为10, FC_2
的size为2.
output layer
我们使用softmax将FC_2
的output映射为所有可能的动作(前进或后退)的概率分布(Probability of taking the action),即为一个二维向量act_probs
, 其中,act_probs[0]
为后退的概率,act_probs[1]
为前进的概率。
模型表示
我将我们的player模型(actor)形式化表示如下: $$a = \pi_\theta(s)$$ 其中$\theta$表示模型的参数,$s$是输入状态。