強化學習讀書筆記 - 02 - 多臂老O虎O機問題
學習筆記: Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto c 2014, 2015, 2016html
數學符號的含義
通用 \(a\) - 行動(action)。 \(A_t\) - 第t次的行動(select action)。一般指求解的問題。web
在老O虎O機問題中 \(q_*(a)\) - 行動 a 的真實獎賞(true value)。這個是(實際中)不可知的。指望計算的結果收斂(converge)與它。 \(N_t(a)\) - 在第t次以前,行動a被選擇的次數。 \(R_t\) - 第t步的實際獎賞(actual reward)。 \(Q_t(a)\) - 行動 a 在第t次前(不包括第t次)的實際平均獎賞。算法
\[ Q_t(a) = \frac{\sum_{i=1}^{t-1} R_i \times 1_{A_i=a}}{N_t(a)} \]
\(H_t(a)\) - 對於行動a的學習到的傾向。 \(\epsilon\) - 在ε-貪婪策略中,採用隨機行動的機率$[0, 1)$。機器學習
多臂老O虎O機問題
通常的老O虎O機只有一個臂(杆)。你塞10個硬幣,拉一下杆,老O虎O機可能會吐出來一兩個硬幣,或者100個硬幣。 多臂老O虎O機有多個杆(象徵着多個行動(action),每一個杆有本身特有的吐錢邏輯)。 注意:每一個杆的吐錢機率多是固定的(stationary),也多是不固定的(non-stationary)。不固定在現實中更常見。 多臂老O虎O機問題就是在許屢次嘗試後,找到一個有效收益的策略。 多臂老O虎O機問題是統計學、工程、心理學的一個經典問題。不要小看了這個問題,不少權威都研究過。 在強化學習方面,咱們經過這個問題,能夠了解強化學習的基本概念和算法的思路。其中包括:ide
- 探索(exploration)和採用(exploitation)的權衡
- 貪婪(greedy)
- 收斂(convergence)
- 參數初始化的重要性
- 梯度遞減(gradient descent) (注:梯度遞增和梯度遞減的意思同樣,只是看問題的方向不同。) 等等。
如何判斷算法的好壞
在討論算法前,咱們先考慮判斷算法好壞的標準。函數
創建模型 創建一個10臂老O虎O機。 每一個臂的真實行動價值$q_*(a), a = 1, \dots, 10$是一個符合(平均值=0, 方差=1)的正態分佈。 每一個臂的每次行動的估值$R_t(a)$是一個符合(平均值=\(q_*(a)\), 方差=1)的正態分佈。學習
測試標準測試
- 平均獎賞 - 獎賞越多越好
- 最優行動 - 和實際最優行動一致的比率越大越好
解決方法
行動-價值方法 (action-value method)
在決定第t次的行動$A_t$時,使用下面的算法。優化
\[ A_t = \underset{a}{argmax} Q_t(a) \\ where \\ 1_{A_i=a} = \begin{cases} 1, if A_i = a \\ 0, otherwise \end{cases} \]
- 貪婪方法(greedy method) 老是選擇當前取得最大收益的行動。 特色:最大化採用(exploitation)。 算法的過程以下:
初始: \(Q_0(a), a = 1, \cdots, 10\) 都爲0; 每一個杆(action)都拉一下。 \(Q_0(a), a = 1, \cdots, 10\) 有了新值。 根據當前平均收益最大的杆,當作本次選擇的杆。this
- ε - 貪婪方法(ε-greedy method) ε - 讀做epsilon。有彈性的意思。 通常狀況下選擇當前取得最大收益的行動,可是有必定比例ε的行動是隨機選擇的。 特色:加強了探索(exploration)性。 算法的過程以下:
初始: \(Q_0(a), a = 1, \cdots, 10\) 都爲0; 每一個杆(action)都拉一下。 \(Q_0(a), a = 1, \cdots, 10\) 有了新值。 根據當前平均收益最大的杆,當作本次選擇的杆。 同時根據$ε$的值,隨機選擇一個杆。(好比:\(ε=0.1\),每十次隨機選擇一個杆)
增值實現(incremental implementation)
如何計算$Q_t$。 算法
\[ \begin{array} \\ Q_t & = \frac{1}{t-1} \sum_{i=1}^{t-1} R_i \text{ : this method need memory all } R_i. \\ & = Q_{t-1} + \frac{1}{t-1} \left [ R_{t-1} - Q_{t-1} \right ] \text{this method is better, just need memory last } R_{t-1}, Q_{t-1}. \end{array} \]
帶權值步長的增值實現(incremental implementation with weighted step size)
一個替代算法。用步長$\alpha$ 代替$ \frac{1}$。 算法
\[ Q_t = Q_{t-1} + \alpha \left [ R_{t-1} - Q_{t-1} \right ] \]
解釋 這個算法利於解決非穩定(non-stationary)問題。 非穩定(non-stationary)問題意味着$q_*(a)$是會發生變化的。所以,最近幾回的獎賞更具表明性。 $\alpha$越大,意味着最近獎賞的權重越大。 這裏也能夠看到梯度計算的影子。
優化初始值(Optimistic initial values)
優化初始值$Q_1(a)$,若是賦值越大,會鼓勵探索。 初始值爲0時,ε - 貪婪方法(ε=0.1) 好於 ε - 貪婪方法(ε=0.01) 好於 貪婪方法。 看來冒必定風險仍是有好處的。 初始值爲5的貪婪方法 好於 ε - 貪婪方法(ε=0.1)。 有錢人更容易成功。
置信上界選擇算法 (Upper-Confidence-Bound action selection)
可理解爲求每一個行動的最大可信值,選擇最大可信值最大的行動。
算法
\[ A_t = \underset{a}{argmax} \left [ Q_t(a) + c \sqrt{\frac{\log{t}}{N_t(a)}} \right ] \\ where \\ c \text{ : > 0, controls the degree of exploration. bigger c means more exploration.} \\ \text{if } N_t(a) = 0 \text{, then a is considered to be a maximizing action.} \]
算法理解 這個算法在計算:第t次的行動應該是什麼?
咱們沒有說:「第t次的最優行動應該是什麼?」。爲何不說最優呢? 由於,強化學習的目的是整體最優,不是局部最優,所以「第t次的最優行動」不是強化學習最求的目標。
$c$是一個可調的參數。咱們在理解中不用太關心它,當它是$1$好了。
在機器學習中,算法通常都有幾個參數能夠調節。不一樣環境中,調節參數最優化能夠很大的提升算法的質量。 \(Q_t(a)\) - 行動a當前的獎賞。 \(t\) - 第t次。 \(\log{t}\) - 求t的指數。隨着t變大,$\log$變大的速度變慢。 \(N_t(a)\) - 行動a被選擇的次數。 \(\left [ \sqrt{\frac{\log{t}}{N_t(a)}} \right ]\) - 因爲$\frac{\log}{N_t(a)} < 1 \text{, when x > 7 }$, 求平方根,反而是起了一個放緩、放大的做用。 在沒有獎賞的狀況下:\(Q_t(a)\) 不變。$\log$比$N_t(a)$變化的慢,所以總結果會變小。
- 梯度老O虎O機算法 (Gradient Bandit Algorithms) 以前的算法,主要是經過發生的事件,根據行動的估計獎賞,來決定選擇哪一個行動。 梯度算法是:經過發生的事件,根據行動的傾向\(H_t(a)\),來決定選擇哪一個行動。 (我的沒看出有什麼不一樣)。
\[ Pr\{A_t = a\} = \pi_t(a) = softmax(H_t(a)) = \frac{e^{H_t(a)}}{ \sum_{i=1}^k e^{H_t(a)}} \\ A_t = \underset{a}{argmax} (\pi_t(a)) \\ \pi_t(a) \text{ for the probability of taking action a at time t.} \]
softmax是一個激活函數。一般用於輸出的機率計算,就是如今看到的例子。
\[ H_1(a) = 0, \forall a \\ \text{After action } A_t \text{ and receiving the reward } R_t, \\ H_{t+1}(A_t) = H_t(A_t) + \alpha(R_t - \bar{R}_t)(1- \pi_t(A_t)) \text{, and} \\ H_{t+1}(a) = H_t(a) - \alpha(R_t - \bar{R}_t)\pi_t(a) , \forall a \ne A_t \\ \bar{R}_t = \frac{\sum R_t}{t} \\ where \\ \alpha \text{ - step size parameter.} \\ \bar{R}_t \text{ - the average of all the rewards up through and including time t.} \]
參照