初识强化学习
强化学习的主要思想是基于机器人(agent)和环境(environment)的交互学习,其中agent通过action影响environment,environment返回reward和state,整个交互过程是一个马尔可夫决策过程。当前做出的决定要使得未来收益最大化。
总目标是最大化累计收益
R
=
∑
t
=
0
∞
γ
t
r
t
{\displaystyle R=\sum _{t=0}^{\infty }\gamma ^{t}r_{t}}
R=t=0∑∞γtrt
系数gamma代表未来目前(现在)决策的影响,reward 的衰减因子,决定目光的长远
R
t
=
r
1
+
γ
r
t
+
1
+
γ
2
r
t
+
2
+
.
.
.
+
γ
n
−
1
r
n
R_t=r_1+\gamma_{}r_{t+1}+\gamma^2r_{t+2}+...+\gamma^{n-1}r_n
Rt=r1+γrt+1+γ2rt+2+...+γn−1rn
表格型方法——Sarsa&Q-learning
表格型方法是遍历每一个位置不断选择最佳决策
表格方法演示
Sarsa更新公式:
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
⏟
t
a
r
g
e
t
−
Q
(
s
t
,
a
t
)
⏟
c
u
r
r
e
n
t
]
Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ \underbrace{r_t + \gamma Q(s_{t+1}, a_{t+1})}_{target} - \underbrace{Q(s_t, a_t)}_{current} \right]
Q(st,at)←Q(st,at)+α⎣⎡target
rt+γQ(st+1,at+1)−current
Q(st,at)⎦⎤
Q-learning 更新公式:
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
γ
max
a
Q
(
s
t
+
1
,
a
)
⏟
t
a
r
g
e
t
−
Q
(
s
t
,
a
t
)
⏟
c
u
r
r
e
n
t
]
Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ \underbrace{r_t + \gamma \max_a Q(s_{t+1}, a)}_{target} - \underbrace{Q(s_t, a_t)}_{current}\right]
Q(st,at)←Q(st,at)+α⎣⎢⎢⎡target
rt+γamaxQ(st+1,a)−current
Q(st,at)⎦⎥⎥⎤
有何不同?
Sarsa为on-policy &Q-learning为off-policy
Sarsa是根据已知的下一步决策来决定下一步,下一步的决策是一定会执行的action,所以为了保证程序的执行,程序会选择我们需要的最佳策略,如此会尽可能的让所有策略远离悬崖。
Q-learning
Q-learning不需要知道下一步会对本身造成什么影响,默认的下一步是Q最大的动作,Q-learning的行为更大胆,不会瞻前顾后,会探索所有的可能性,最终会在所有表格中找到一个最优解。
神经网络方法求解RL——DQN
Q-learning
求解不可数的Q表格,使用神经网络拟合Q表格。
DQN
神经网络的作用就是输入State再返回Q值
基于策略梯度求解RL
不同于之前的三种方法
policy-based基于神经网络输出策略概率
π
θ
(
a
t
∣
s
t
)
\pi_\theta(a_t|s_t)
πθ(at∣st)
Policy Gradient(PG)在尝试所有可能后改变权重值,改变选择每个策略概率,但不至于永远不会选中,是一个概率。
这次与之前的作业不一样,需要调整神经网络结构。
激活函数,网络层数和每个隐藏层中的节点数的选择很重要。
最后的大作业DDPG 四旋翼控制
激活函数的选择
人工神经网络试图模仿类似的行为。下图所示的网络就是由相互连接的神经元组成的人工神经网络。
上图中的黑色圆圈代表神经元。 每个神经元都有权重、偏差和激活函数。 信息进入输入层,神经元通过权重和偏差对输入信息进行线性变换,而非线性变换由激活函数完成。 信息从输入层传输到隐藏层,隐藏层对信息进行处理并将结果发送到输出层。 这被称为前向传播。如果产生的输出偏离预期值呢? 在神经网络中,我们将根据误差更新神经元的权重和偏差。 这个过程被称为反向传播。 一旦所有训练数据经过了这一过程,则最终的权重和偏差就被用于测试。
激活函数是神经网络的一大关键组件,因为它们可将原本线性的分类器转换成非线性的。激活函数的发展经历了Sigmoid -> Tanh -> ReLU -> Leaky ReLU -> Maxout这样的过程,还有一个特殊的激活函数Softmax,因为它只会被用在网络中的最后一层,用来进行最后的分类和归一化。
最后的两个作业分别使用了tanh与relu
我估计为什么要换成tanh是因为relu当输入为负时,梯度为0,会产生梯度消失问题。
选择激活函数需要看具体情况而定。
网络层数和每个隐藏层中的节点数的选择
在神经网络中,当且仅当数据必须以非线性的方式分割时,才需要隐藏层。
貌似不能确定的样子,需要多看看书多查查资料。