【强化学习的数学原理】课程笔记--3(蒙特卡洛方法)

目录

蒙特卡洛方法

第二节 推导贝尔曼最优公式中的:
q π k ( s , a ) = ∑ r P ( r ∣ s , a ) r + γ ∑ s ′ P ( s ′ ∣ s , a ) v π k ( s ′ ) q_{\pi_k}(s,a) = \sum_{r} P(r|s,a)r + \gamma \sum_{s'} P(s'|s,a) v_{\pi_k}(s') qπk(s,a)=r∑P(r∣s,a)r+γs′∑P(s′∣s,a)vπk(s′)

时提到过,其中的 P ( r ∣ s , a ) , P ( s ′ ∣ s , a ) P(r|s,a), P(s'|s,a) P(r∣s,a),P(s′∣s,a) 都认为是已知的,这种也被称为 model-based 强化学习。而这一节中,我们要考虑 model-free 的强化学习形式。此时 P ( r ∣ s , a ) , P ( s ′ ∣ s , a ) P(r|s,a), P(s'|s,a) P(r∣s,a),P(s′∣s,a) 不再是已知的,那么为了"估计"这些信息,我们需要使用到蒙特卡洛方法。简单来说,就是 通过大量的模拟实验,用大量的实验的结果来估测模型参数,蒙特卡洛方法的可行性由 大数定律 保证:

对一个随机变量 X X X,假设 { x i } \{x_i\} {xi} 是独立同分布的样本,记 x ˉ = 1 n ∑ i n x i \bar{x} = \frac{1}{n} \sum_{i}^n x_i xˉ=n1∑inxi,则:
E ( x ˉ ) = E [ X ] v a r [ x ˉ ] = 1 n v a r [ X ] \begin{aligned}E(\bar{x}) &= E[X]\\ var[ \bar{x}] &= \frac{1}{n} var[X]\end{aligned} E(xˉ)var[xˉ]=E[X]=n1var[X]

因此 x ˉ \bar{x} xˉ 是 E [ X ] E[X] E[X] 的无偏估计,且由于 lim ⁡ n → ∞ v a r [ x ˉ ] = 0 \lim_{n \rightarrow \infin} var[ \bar{x}] = 0 limn→∞var[xˉ]=0,因此当 n 足够大, x ˉ \bar{x} xˉ 趋于 E [ X ] E[X] E[X]

事实上,用蒙特卡洛方法来估计 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a),用其原始的定义更易理解和使用:
q π k ( s , a ) = E [ G t ∣ S t = s , A t = a ] q_{\pi_k}(s,a) = E[G_t | S_t =s, A_t =a] qπk(s,a)=E[Gt∣St=s,At=a]


MC Basic算法

回忆 第二节 中策略迭代的步骤:

已知 π k → ( v π k ( 0 ) → v π k ( 1 ) → . . . → v π k ( ∞ ) = v π k ) → 求解 q π k ( s , a ) → π k + 1 = { 1 , a = a ∗ ( s ) 0 , a ≠ a ∗ ( s ) → . . . 已知 \pi_k \rightarrow (v_{\pi_k}^{(0)} \rightarrow v_{\pi_k}^{(1)} \rightarrow ... \rightarrow v_{\pi_k}^{(\infin)} = v_{\pi_k}) \rightarrow 求解 q_{\pi_k}(s,a) \rightarrow \pi_{k+1}= \begin{cases} 1, \quad a = a^*(s)\\ 0, \quad a \neq a^*(s) \end{cases} \rightarrow ... 已知πk→(vπk(0)→vπk(1)→...→vπk(∞)=vπk)→求解qπk(s,a)→πk+1={1,a=a∗(s)0,a=a∗(s)→...

上面跟值迭代相比最主要的不同是 ( v π k ( 0 ) → v π k ( 1 ) → . . . → v π k ( ∞ ) = v π k ) (v_{\pi_k}^{(0)} \rightarrow v_{\pi_k}^{(1)} \rightarrow ... \rightarrow v_{\pi_k}^{(\infin)} = v_{\pi_k}) (vπk(0)→vπk(1)→...→vπk(∞)=vπk),将其展开:
v π k ( 1 ) = r π k + γ P π k v π k ( 0 ) v π k ( 2 ) = r π k + γ P π k v π k ( 1 ) ... v π k ( ∞ ) = r π k + γ P π k v π k ( ∞ ) \begin{aligned} v_{\pi_k}^{(1)} &= r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(0)}\\ v_{\pi_k}^{(2)} &= r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(1)}\\ & \dots \\ v_{\pi_k}^{(\infin)} &= r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(\infin)}\\ \end{aligned} vπk(1)vπk(2)vπk(∞)=rπk+γPπkvπk(0)=rπk+γPπkvπk(1)...=rπk+γPπkvπk(∞)

这里由于 P ( r ∣ s , a ) , P ( s ′ ∣ s , a ) P(r|s,a), P(s'|s,a) P(r∣s,a),P(s′∣s,a) 未知,我们 不再通过迭代的方式求解 v π k v_{\pi_k} vπk,再来求解 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) 了,而是直接根据一些 experiment (即样本) 来估计 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) ,上述算法变成:

已知 π k → 从 ( s , a ) 出发,做 n 次实验,有 n 个结果 g π k ( i ) ( s , a ) → 估计 q π k ( s , a ) = 1 n ∑ i g π k ( i ) ( s , a ) → π k + 1 = { 1 , a = a π k ( s ) 0 , a ≠ a π k ( s ) → . . . 已知 \pi_k \rightarrow 从 (s,a) 出发,做n次实验,有n个结果 g_{\pi_k}^{(i)}(s,a) \rightarrow 估计 q_{\pi_k}(s,a) = \frac{1}{n}\sum_i g_{\pi_k}^{(i)}(s,a) \rightarrow \pi_{k+1}= \begin{cases} 1, \quad a = a_{\pi_k}(s)\\ 0, \quad a \neq a_{\pi_k}(s) \end{cases} \rightarrow ... 已知πk→从(s,a)出发,做n次实验,有n个结果gπk(i)(s,a)→估计qπk(s,a)=n1i∑gπk(i)(s,a)→πk+1={1,a=aπk(s)0,a=aπk(s)→...

其中 a π k ( s ) = arg max ⁡ a ∈ A q π k ( s , a ) a_{\pi_k}(s) = \argmax_{a \in A} q_{\pi_k}(s,a) aπk(s)=a∈Aargmaxqπk(s,a)

下面可以看一些例子:

对于上图这样一个 grid-world 而言,一共有9个 state,每个 state 都有五种 action,假设对于每个 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) 需要找 n n n 个样本来做估计,那么一共需要 45 ∗ n 45*n 45∗n 个样本。下面我们仅以 s 1 s_1 s1 为例来拆解一下:

由于上述 grid-world 是确定形式的,因此每个 ( s , a ) (s,a) (s,a) 实际不论采多少次样,结果都是相同的,即 g π k ( i ) ( s , a ) , i = 1 , 2 , 3... g_{\pi_k}^{(i)}(s,a), i = 1,2,3... gπk(i)(s,a),i=1,2,3... 都相同。(对于概率形式的 policy 而言,就可以进行大量不同的采样)

  • 对 ( s 1 , a 1 ) (s_1, a_1) (s1,a1),路径总为 s 1 → a 1 s 1 → a 1 s 1 → a 1 . . . s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow ... s1→a1s1→a1s1→a1...: q π 0 ( s 1 , a 1 ) = − 1 + γ ( − 1 ) + γ 2 ( − 1 ) + . . . = − 1 1 − γ q_{\pi_0}(s_1, a_1) = -1 + \gamma (-1) + \gamma^2 (-1) + ... = \frac{-1}{1-\gamma} qπ0(s1,a1)=−1+γ(−1)+γ2(−1)+...=1−γ−1
  • 对 ( s 1 , a 2 ) (s_1, a_2) (s1,a2),路径总为 s 1 → a 2 s 2 → a 3 s 5 → a 3 . . . s_1 \overset{a_2} \rightarrow s_2 \overset{a_3} \rightarrow s_5 \overset{a_3} \rightarrow ... s1→a2s2→a3s5→a3...: q π 0 ( s 1 , a 2 ) = 0 + γ ( 0 ) + γ 2 ( 0 ) + γ 3 ( 1 ) + γ 4 ( 1 ) + . . . = γ 3 1 − γ q_{\pi_0}(s_1, a_2) = 0 + \gamma (0) + \gamma^2 (0) + \gamma^3 (1) + \gamma^4 (1) + ... = \frac{\gamma^3}{1-\gamma} qπ0(s1,a2)=0+γ(0)+γ2(0)+γ3(1)+γ4(1)+...=1−γγ3
  • 对 ( s 1 , a 3 ) (s_1, a_3) (s1,a3),路径总为 s 1 → a 3 s 4 → a 2 s 5 → a 3 . . . s_1 \overset{a_3} \rightarrow s_4 \overset{a_2} \rightarrow s_5 \overset{a_3} \rightarrow ... s1→a3s4→a2s5→a3...: q π 0 ( s 1 , a 2 ) = 0 + γ ( 0 ) + γ 2 ( 0 ) + γ 3 ( 1 ) + γ 4 ( 1 ) + . . . = γ 3 1 − γ q_{\pi_0}(s_1, a_2) = 0 + \gamma (0) + \gamma^2 (0) + \gamma^3 (1) + \gamma^4 (1) + ... = \frac{\gamma^3}{1-\gamma} qπ0(s1,a2)=0+γ(0)+γ2(0)+γ3(1)+γ4(1)+...=1−γγ3
  • 对 ( s 1 , a 4 ) (s_1, a_4) (s1,a4),路径总为 s 1 → a 4 s 1 → a 1 s 1 → a 1 . . . s_1 \overset{a_4} \rightarrow s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow ... s1→a4s1→a1s1→a1...: q π 0 ( s 1 , a 1 ) = − 1 + γ ( − 1 ) + γ 2 ( − 1 ) + . . . = − 1 1 − γ q_{\pi_0}(s_1, a_1) = -1 + \gamma (-1) + \gamma^2 (-1) + ... = \frac{-1}{1-\gamma} qπ0(s1,a1)=−1+γ(−1)+γ2(−1)+...=1−γ−1
  • 对 ( s 1 , a 5 ) (s_1, a_5) (s1,a5),路径总为 s 1 → a 5 s 1 → a 1 s 1 → a 1 . . . s_1 \overset{a_5} \rightarrow s_1 \overset{a_1} \rightarrow s_1 \overset{a_1} \rightarrow ... s1→a5s1→a1s1→a1...: q π 0 ( s 1 , a 1 ) = 0 + γ ( − 1 ) + γ 2 ( − 1 ) + . . . = − γ 1 − γ q_{\pi_0}(s_1, a_1) = 0 + \gamma (-1) + \gamma^2 (-1) + ... = \frac{-\gamma}{1-\gamma} qπ0(s1,a1)=0+γ(−1)+γ2(−1)+...=1−γ−γ

因此 a π 0 ( s ) = arg max ⁡ a ∈ A q π 0 ( s 1 , a ) = 2 或 3 a_{\pi_0}(s) = \argmax_{a \in A} q_{\pi_0}(s_1,a) = 2 \text{ 或 } 3 aπ0(s)=argmaxa∈Aqπ0(s1,a)=2 或 3。实时上我们也可直观看到,将 s 1 s_1 s1 处的 action 改成 a 2 a_2 a2 或者 a 3 a_3 a3 均可将 s 1 s_1 s1 处的 action 调整至最优。

NOTE: 上述例子中,是为了方便理解,所以相当于是把 model (即 P ( r ∣ s , a ) P(r|s,a) P(r∣s,a) 和 P ( s ′ ∣ s , a ) P(s'|s,a) P(s′∣s,a) )都展示出来了,但实际的情况应该是:我们并不知道 model 是怎样的,但是从每个 ( s 1 , a i ) (s_1, a_i) (s1,ai) 出发采样 n n n 次,会发现每次采出来的 trajectory 都是相同的,然后我们依然按 q π 0 ( s 1 , a ) = 1 n ∑ i g π 0 ( i ) ( s 1 , a ) q_{\pi_0}(s_1,a) = \frac{1}{n}\sum_i g_{\pi_0}^{(i)}(s_1,a) qπ0(s1,a)=n1∑igπ0(i)(s1,a) 来估计 q π 0 ( s 1 , a ) q_{\pi_0}(s_1,a) qπ0(s1,a),其实就还是上述的结果。

另一个更有意思的例子是:

前一个例子,我们采样的 trajectory 是无限长的,但在这个例子中,我们将采样的 trajectory 的长度从1开始逐渐递增,然后可以观察到一个有趣的现象:当采样的 trajectory 的长度比较小时,只有更靠近 target state的 state,其 state value 才能算到为正,而更远的 state,其 state value 都为0。从公式上来说也很好理解,由于: v π ( s ) = ∑ a π ( a ∣ s ) q π ( s , a ) v_{\pi}(s) = \sum_a \pi(a|s) q_{\pi}(s,a) vπ(s)=a∑π(a∣s)qπ(s,a) ,因此贪婪policy下, v π ( s ) = max ⁡ a q π ( s , a ) v_{\pi}(s) = \max_{a}q_{\pi}(s,a) vπ(s)=amaxqπ(s,a),而从上一个例子不难得知 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) 要能走到 target state,才能开始拿到正的分数,因此如果 trajectory 的长度太短,以至于甚至走不到 target state,那么 q π ( s , a ) = 0 q_{\pi}(s,a) = 0 qπ(s,a)=0,因此 v π ( s ) v_{\pi}(s) vπ(s) 也为0。

sparse reward

上述现象也称为 sparse reward,因为其 reward 是稀疏的,即前面走对很多步都没有reward,必须到 target state 开始才有 reward。对于特别大的 state space 来说, sparse reward 会导致模型效率低下,因为每个样本的计算量都大大提升。有一些方法可以缓解这样的问题,例如:如果能走到离 target state 比较近的 state,那么也可以拿到一定的 reward,离得越近,reward 越大。更多可见 Reference


MC Greedy 算法

上述 MC Basic 方法在实际使用时,还有很多地方需要改进:

样本使用效率

以上面第一个例子为例:

当从 ( s 1 , a 2 ) (s_1, a_2) (s1,a2) 出发,其实计算其 action state 时,还同时可以算到很多后面的 state 的 action state :
s 1 → a 2 s 2 → a 4 s 1 → a 2 s 2 → a 3 s 5 → a 1 ⋯ [ ( s 1 , a 2 ) 的样本 ] s 2 → a 4 s 1 → a 2 s 2 → a 3 s 5 → a 1 ⋯ [ ( s 2 , a 4 ) 的样本 ] s 1 → a 2 s 2 → a 3 s 5 → a 1 ⋯ [ ( s 1 , a 2 ) 的样本 ] s 2 → a 3 s 5 → a 1 ⋯ [ ( s 2 , a 3 ) 的样本 ] s 5 → a 1 ⋯ [ ( s 5 , a 1 ) 的样本 ] \begin{aligned} s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_4} s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_1, a_2)\text{ 的样本}]\\ \quad\\ s_2 \xrightarrow{a_4} s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_2, a_4)\text{ 的样本}]\\ \quad\\ s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_1, a_2)\text{ 的样本}]\\ \quad\\ s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1}& \cdots \quad [(s_2, a_3)\text{ 的样本}]\\ \quad\\ s_5 \xrightarrow{a_1}& \cdots \quad [(s_5, a_1)\text{ 的样本}] \end{aligned} s1a2 s2a4 s1a2 s2a3 s5a1 s2a4 s1a2 s2a3 s5a1 s1a2 s2a3 s5a1 s2a3 s5a1 s5a1 ⋯[(s1,a2) 的样本]⋯[(s2,a4) 的样本]⋯[(s1,a2) 的样本]⋯[(s2,a3) 的样本]⋯[(s5,a1) 的样本]

因此我们会发现:可能不需要从每一个 state 出发,而只要从一些比较前面的 state 出发,就有可能给后面的 (state, action) 也得到足够多的样本。

顺便再介绍两个相关的概念,从上例也能发现,即使是同一条 trajectory ,也可能经过某对 (state, action) 好几次 (eg:上面的 ( s 1 , a 2 ) (s_1, a_2) (s1,a2)) :

  1. first-visit strategy:如果采样时,只采第一次出现的样本
  2. every-visit strategy:如果采样时,采全部出现的样本

MC ϵ \epsilon ϵ-Greedy 算法

上面我们已经探讨了 MC Basic 的一个改进方向,就是不用真的对每一个 (state, action) 进行遍历,而是可以选几个 state ,然后进行足够长的探索。那么问题来了:需要选怎样的 state,多长的 trajectory ,才能让每对 (state, action) 都采到足够的样本呢?

这里就来到了 exploration 和 exploitation 的balanceexploitation :很好理解,就是要选取最优的 Policy,而前面我们已经证明过,最优的 Policy 就是贪婪形式的: π k + 1 ( a ∣ s ) = { 1 , a = a k ∗ ( s ) 0 , a ≠ a k ∗ ( s ) \pi_{k+1}(a|s) = \begin{cases} 1, \quad a = a^*_k(s)\\ 0, \quad a \neq a^*_k(s) \end{cases} πk+1(a∣s)={1,a=ak∗(s)0,a=ak∗(s)

那既然能找到最优策略,又扯到 exploration 什么事呢?这是因为 a k ∗ ( s ) = arg max ⁡ a ∈ A q π k ( s , a ) a^*k(s) = \argmax{a \in A} q_{\pi_k}(s,a) ak∗(s)=a∈Aargmaxqπk(s,a) 实际是求不到的。因为 第一节 就提到过: 为了一般性,我们后面讨论的都是 continuing task,将 target state 也看作普通的 state,可以离开,只是每次进入 target state 时 ,reward 加 1 。所以每个 q π k ( s , a ) q_{\pi_k}(s,a) qπk(s,a) 对应的都是一个无限长的 trajectory ,上例中可以把值求出来,是因为它刚好是一个收敛的级数,但不是所有的情况我们都保证 reward 级数可以收敛。这样就会导致一个问题:我们不能直接信任贪婪形式的结果。与此同时,贪婪形式带来的坏处是:它的每一条 trajectory 能覆盖的样本比较有限,所以需要的 trajectory 会比较多,计算量也比较大。既然反正都无法保证得到的策略是最优的,还不如为了更快得得到一个可用的策略,再保留一些探索性,因此提出了 MC ϵ \epsilon ϵ-Greedy 算法 :

π k + 1 ( a ∣ s ) = { 1 − ∣ A ∣ − 1 ∣ A ∣ ϵ , a = a k ∗ ( s ) 1 ∣ A ∣ ϵ , a ≠ a k ∗ ( s ) \pi_{k+1}(a|s) = \begin{cases} 1 - \frac{|A|-1}{|A|} \epsilon, \quad a = a^*_k(s)\\ \frac{1}{|A|} \epsilon, \quad a \neq a^*_k(s) \end{cases} πk+1(a∣s)={1−∣A∣∣A∣−1ϵ,a=ak∗(s)∣A∣1ϵ,a=ak∗(s)

其中 ∣ A ∣ |A| ∣A∣ 是 action 的种数。即对每个非最优的 action,仍然给一点点的概率,使得 trajectory 仍有可能往这个方向走。 (这里与深度学习中 "贪婪搜索会导致局部最优,所以用 beam search 来增大一些探索的空间" 形似而神不似 ,因为对于很多的序列学习任务,它的长度是 有限且已知 的,因此它的最优解是可以求到的,只是计算量过大实际不太可行。而这里的最优解,是理论都不可知的 (model-free 时,前面 model-based 的情况,理论上还是可以用贝尔曼最优公式求解的),增大搜索的目的是为了减少计算量,而 beam search 是为了得到更好的结果而增加计算量 )。以下是 exploration 和 exploitation 的balance 的总结:

  • 大 ϵ \epsilon ϵ + 短&少的 trajectory,偏向于 exploration。样本量少,计算快,但找到的策略差
  • 小 ϵ \epsilon ϵ + 长&多的 trajectory,偏向于 exploitation。样本量大,计算慢,但找到的策略更优

一些例子

还是看一些例子来加深理解:

  1. ϵ \epsilon ϵ 的影响

从 (a) 到 (d), ϵ \epsilon ϵ 从0开始逐渐增大,可以看到 state value 也在逐渐变小,说明策略在逐渐变"差",但 (b) 至少跟 (a) 还是 consistent 的,即最大概率的 action 和 (a) 还是相同,而 © 和 (d),甚至有的 state 最优 action 已经变了。这其中的原因,可以以 target value 为例讨论一下: 当 ϵ \epsilon ϵ 比较大时,从 target state 出发,往各个方向探索的概率都比较大了,但是 target value 周围大部分都是 forbidden state,因此总是会拿到负分,尽管我们希望的结果是:在 target state 学会呆在原地,但呆在原地就有比较大的几率拿负分,相反往下走出去了,反而不容易拿负分,因此它最后学到的是在 target state 要往下走出去。

  1. ϵ \epsilon ϵ 的大小与所需 trajectory 条数的关系

左边一列是 ϵ = 1 \epsilon =1 ϵ=1 时,表明各个方向探索的概率相等。右边一列是 ϵ = 0.5 \epsilon =0.5 ϵ=0.5 时,表明探索性弱一些。可以看到:

  • ϵ \epsilon ϵ 较大时,同样长度的 trajectory 探索到的 (state,action) 种数更多,甚至长度较长时,一条 trajectory 就足以产生所有 (state,action) 的样本了
  • ϵ \epsilon ϵ 较大时,一条 trajectory 产生的样本在不同 (state,action) 的分布也比较均匀,即采样比较均匀;而 ϵ \epsilon ϵ 较小时,会出现大部分 (state,action) 采样比较少,而个别 (state,action) 采样多得多的情况

结论: ϵ \epsilon ϵ 和 trajectory 的条数,均为MC ϵ \epsilon ϵ-Greedy 算法的超参数,需要根据实验来调整,更大的 ϵ \epsilon ϵ 可以减少马尔可夫模拟次数,但是得到的策略效果也会更差一些,而更小的 ϵ \epsilon ϵ 计算量更大,结果也更好。一般可以前期采用大的 ϵ \epsilon ϵ ,加大探索空间,快速找到一个差不多的策略,后期再改成小的 ϵ \epsilon ϵ ,找更好的策略。


Reference:

1.强化学习的数学原理

相关推荐
QQ_77813297415 分钟前
基于深度学习的图像超分辨率重建
人工智能·机器学习·超分辨率重建
IT古董1 小时前
【漫话机器学习系列】020.正则化强度的倒数C(Inverse of regularization strength)
人工智能·机器学习
进击的小小学生1 小时前
机器学习连载
人工智能·机器学习
Trouvaille ~1 小时前
【机器学习】从流动到恒常,无穷中归一:积分的数学诗意
人工智能·python·机器学习·ai·数据分析·matplotlib·微积分
itwangyang52010 小时前
AIDD - 从机器学习到深度学习:蛋白质-配体对接评分函数的进展
人工智能·深度学习·机器学习
jerry20110810 小时前
机器学习常用术语
人工智能·机器学习
IT古董11 小时前
【机器学习】机器学习的基本分类-强化学习-Actor-Critic 方法
人工智能·机器学习·分类
終不似少年遊*11 小时前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
嘿嘻哈呀11 小时前
使用ID3算法根据信息增益构建决策树
决策树·机器学习·信息增益·id3算法
GocNeverGiveUp14 小时前
机器学习1-简单神经网络
人工智能·机器学习