From 0a9c1bd78d3d5d30f6c11c9d43e0e73863cadbf4 Mon Sep 17 00:00:00 2001 From: qiwang067 Date: Mon, 21 Dec 2020 20:30:02 +0800 Subject: [PATCH] fix ch4 typos --- docs/chapter4/chapter4.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/chapter4/chapter4.md b/docs/chapter4/chapter4.md index 7f6a4f1..1387d05 100644 --- a/docs/chapter4/chapter4.md +++ b/docs/chapter4/chapter4.md @@ -289,11 +289,14 @@ $$ REINFORCE 的伪代码主要看最后四行,先产生一个回合的数据,比如 $(s_1,a_1,G_1),(s_2,a_2,G_2),\cdots,(s_T,a_T,G_T)$。然后针对每个动作 来计算梯度。 在代码上计算时,我们要拿到神经网络的输出。神经网络会输出每个动作对应的概率值,然后我们还可以拿到实际的动作,把它转成 one-hot 向量乘一下,我们可以拿到 $\ln \pi(A_t|S_t,\theta)$ 。 +> 独热编码(one-hot Encoding)通常用于处理类别间不具有大小关系的特征。 例如血型,一共有4个取值(A型、B型、AB型、O型),独热编码会把血型变成一个4维稀疏向量,A型血表示为(1,0,0,0),B型血表示为(0,1,0,0),AB型会表示为(0,0,1,0),O型血表示为(0,0,0,1)。 + ![](img/4.23.png) -* 手写数字识别是一个经典的多分类问题,输入是一张手写数字的图片,经过神经网络输出的是各个分类的一个概率。 +* 手写数字识别是一个经典的多分类问题,输入是一张手写数字的图片,经过神经网络输出的是各个类别的一个概率。 * 目的是希望输出的这个概率的分布尽可能地去贴近真实值的概率分布。 * 因为真实值只有一个数字 9,你用这个 one-hot 向量的形式去给它编码的话,也可以把这个真实值理解为一个概率分布,9 的概率就是1,其他的概率就是 0。 + * 神经的网络输出一开始可能会比较平均,通过不断地迭代,训练优化之后,我会希望 9 输出的概率可以远高于其他数字输出的概率。 ![](img/4.24.png) @@ -311,8 +314,6 @@ REINFORCE 的伪代码主要看最后四行,先产生一个回合的数据, * 类似地,policy gradient 预测每一个状态下面应该要输出的这个行动的概率,就是输入状态 $s_t$,然后输出动作的概率,比如 0.02,0.08,0.09。实际上输出给环境的动作是随机选了一个动作,比如说我选了右这个动作,它的 one-hot 向量就是 0,0,1。 -> 独热编码(one-hot Encoding)通常用于处理类别间不具有大小关系的特征。 例如血型,一共有4个取值(A型、B型、AB型、O型),独热编码会把血型变成一个4维稀疏向量,A型血表示为(1,0,0,0),B型血表示为(0,1,0,0),AB型会表示为(0,0,1,0),O型血表示为(0,0,0,1)。 - * 我们把神经网络的输出和实际动作带入交叉熵的公式就可以求出输出的概率和实际的动作之间的差距。 * 但这个实际的动作 $a_t$ 只是我们输出的真实的动作,它并不一定是正确的动作,它不能像手写数字识别一样作为一个正确的标签来去指导神经网络朝着正确的方向去更新,所以我们需要乘以一个奖励回报 $G_t$。这个奖励回报相当于是对这个真实动作 的评价。 * 如果 $G_t$ 越大,未来总收益越大,那就说明当前输出的这个真实的动作就越好,这个 loss 就越需要重视。