近期學習了一下q-learning相關的內容,重點總結一下學習的難點,即q-learing的更新部分。
如莫煩大神的**,在我們學習的狀態下,有兩種可行的動作,actionlist如下:
表1a1
繼續學習
a2去看電視
相應的在當前狀態下,如果採取對某一動作,那麼會對我們產生一定的影響,即受到懲罰還是獎勵。我們設當前狀態,即我們在學習的狀態s1下,執行相應的action的獎懲情況:
表2a1
a2s1-21
此表表示在s1狀態下,如果採用a1則會收到懲罰,採用a2會獎勵。聰明的娃娃會在s1 狀態下選擇a2,那麼q-learning的思想也大體一致。
q-learning的思想假如我們現在在s1狀態下,選擇的a2,到達狀態s2,s2的q表如下:
表3a1
a2s1-21
s2-4
2那麼在當前s2狀態,當前的a1總收益為-4,a2總收益為2,現在我們繼續往下,在s2狀態下,q-learning首先會在當前的實際情況下選擇a2,因為a2帶給我們的收益是大於a1的,因此會假設我們執行了a2,即我們在當前狀態的q表中選擇收益最大的action,maxq(a2),且執行了a2後會有獎勵r(但r在當前狀態並不一定存在),因此將[r+γmaxq(a2)]稱之為q(s1,a2)的現實值(因為含有r),γ為衰減係數。之後將q(s1,a2)稱之為q(s1,a2)的估計值。
這裡可以這樣理解,就是在s1的狀態下,執行a2,會到達s2狀態,但是此時此刻,我們就處在s2狀態,什麼action也不選擇,但是q-learning回去模擬去估計,因此由表2到了表3。其實s2的那一行是實際沒有的。
因此實際上的更新如下:
s2=q(s1,a2)=q(s1,a2)+alpha[r+γ*maxq(a2)]
alpha為學習率
參考:
pytorch 更新部分引數(凍結引數)注意事項
實驗的pytorch版本1.2.0 在訓練過程中可能需要固定一部分模型的引數,只更新另一部分引數。有兩種思路實現這個目標,乙個是設定不要更新引數的網路層為false,另乙個就是在定義優化器時只傳入要更新的引數。當然最優的做法是,優化器中只傳入requires grad true的引數,這樣占用的記憶...
hibernate update部分更新
hibernate update hibernate 中如果直接使用 session.update object o 會把這個表中的所有字段更新一遍。比如 view plaincopy to clipboardprint?public class teachertest public class t...
hibernate update部分更新
hibernate update hibernate 中如果直接使用 session.update object o 會把這個表中的所有字段更新一遍。比如 view plaincopy to clipboardprint?public class teachertest public class t...