如何提高加強學習演算法本身

大部分的機器學習都是ml( Maximum likelihood learning)極大似然估計方法,

你有很多example,q就是example,在這個q(example)下有不同的chance,best就是你最好的chance,0:t意思是你的程序長度是t,一個個程序寫下來,就有0到t個token,a代表action,a意思是程序是一個個action,最大似然就是最大化產生程序的概率。這是傳統的方法,你知道這個程序的效果很好,你優化這個程序,去產生這個程序的概率。

加強學習的目標函數是:

首先有個stochastic policy,寫程序的時候有一個policy,程序(a0:T|q,θ)的每一步是按照概率分佈來寫,概率分佈是模型定義的。優化的是寫出的程序能給你多少reward,reword(上圖公式中的R)可以任意定義,如問答系統,可能是你的f –Measure。 這點是有優勢的,你生成一個程序不會關心程序本身,而是關心程序運行的結果對不對或者好不好。

加強學習是個優化過程,優化的目標他是不可導的,程序本身不可導,當把你的程序變成stochastic policy的方法,就可以優化了。雖然數學上是可以優化的,但是實際優化還是很難的。

加強學習訓練的不同

最大的不同是訓練的樣本並不是標註出來的,訓練樣本是模型自己產生的,一半訓練的步驟是你有個actor(模型),把它放到訓練環境中,讓他自由產生的行為,拿到一個問題寫一個程序,這個過程是有隨機性的,會寫各種不同的程序,看判斷每個程序產生的答案對不對,對就達到Reinforce,模型學著調整寫程序的策略,優化目標函數,通過調整策略使得它產生reward的期望是最高的,這個訓練的難點是初期行文很差,永遠都拿不到好的結果,就沒有辦法訓練,自己產生訓練數據,訓練數據又不好,就沒有辦法進行訓練,一般解決問題的方法是pretraining,先用 Maximum likelihood learning,而不是先用rl,pretraining必須要知道好的example才能訓練,用 Maximum likelihood訓練的它的目標函數不是最優的,會有biased training的問題。

加強學習的問題

l 搜索空間很大

l 延遲返回reward。就是做了很多事情運行了很久才給你反饋你做的好不好,你要很久才能知道哪一步做的好,哪一步做的不好。Alphago裏很明顯,

l 訓練的速度時間長和穩定性差。

谷歌大腦發了一篇文章稱Reinforcement Learning效率太低,從數學上演算法是可以收斂的,實際上需要很長時間才能收斂,所以現實中需要想辦法提高它的收斂速度。

弱監督學習很適合加強學習的方法

弱監督學習和加強學習都是不知道中間步驟是什麼,需要自己搞清楚中間步驟,但是問題是搜索空間比較大和降低biased。

memory augmented policy optimization(內存擴充策略優化)

新模型叫做mapo(memory augmented policy optimization)他的方法是提高加強學習一個最有效的方法是提高長時記憶,actor(模型)會產生很多example(systematic exporation),如果example非常好,就會存在memory(長時記憶)中,在學習的過程中,actor當前產生的結果和以前看到的結果,把兩個結果結合在一起進行學習。

用長時記憶增強強化學習

生物長時記憶的核心是人過去經歷的事情非常多,想要提高當前任務效果,就會從過去記憶中找到最相關的記憶進行回放進行訓練,數學證明有個有效的方法找到那一段段記憶回放。

λ放在最大似然的訓練目標函數上,(1-λ)放在Reinforcement Learning的目標函數上,相當於結合兩方面的好處,左邊讓模型快速訓練起來,右邊的目標函數是你真正想要優化的,一般λ取的比較小,但是還是有biased,因為左邊不是它想要的目標函數,所以在訓練初期還是管用的,下面的問題就是如何解決掉biased問題,用更好的形式結合兩方面的優勢。

Biased形式

用wikitablequestion下來看baised是什麼樣,具體形式叫做spuirous programs,假設你有一個問題「which nation won the most silver medal?(那個國家贏得銀牌最多)」,答案是nigeria。

問題是很多程序都能算出這個答案,有時候甚至上百個程序能算出答案,如果只看Weak supervision,你搞不清楚那個程序是對的,

天使代表問題的真正語義回答的正確答案,下面魔鬼雖然都能產生正確的答案,但是是錯的。

加強學習訓練的目標函數天然有抵禦spurious programs的能力。

假設上圖每個圈圈都代表過去的一個經歷,黃色代表產生reward正確的答案,灰色代表沒有,當模型看到兩個spurious都能產生正確的答案,當你用Reinforcement Learning的模型天然的boast正確(天使)的程序,這樣情況下其他的錯誤程序被選的概率就會很低。

對比其他目標函數,很容易看到它的優勢在哪裡。

Reinforcement Learning的目標函數更多的boast正確的答案,比較少的boast不正確的答案,這個目標函數很好,代表你真正想優化的目標,問題它需要很多的experience上做update,所以它計算量很大,速度很慢。

我們用的方法是mapo,效果更加好。它的想法是:

有個長時記憶,在長時記憶中存著重要的experience,可以計算模型的update的gradient,在memory 之外讓模型去做exampling。它在數學上和原始training object是等價的,因為用到importance sampling,計算的 Variance會小很多,計算的cost小很多,訓練速度就會快。

在去example experience的時候,應該有一半放在memory裡面,一半放在memory外面,從數學上證明一半的時間放在好的experience上,一半時間放在壞的experience上。

下圖是四種目標函數的實驗結果

iml是Algorithm Maximum likelihood,最大的似然的學習,從上圖(左側)看初期訓練很快,最後的結果不是很好,因為有biased問題。

mml是Maximum Marginal Likelihood,它會減少biased,效果會更好一點,但是沒有辦法完全消除biased,

mapo是memroy augmented policy optimization和Reinforcement Learning是一樣的,但是它的variance更小,會比傳統的Reinforcement更快,mapo初期比較慢一些,因為後期沒有biased,所以最後效果最好。

上面是在mapo在兩個數據集上的訓練結果,一個是wikitablequestions上,在維基百科圖表上回答問題,一個是在wikisql上做的實驗,這個數據集是如何在自然語言上生成sql的。可以看到mapo效果都很不錯。在圖上其他的學習方法都是強監督學習,mapo是弱監督學習,難度更大。

系統架構如上,系統裏有很多actor,actior和不同的環境交互,拿著問題會產生program,在決定拿那個program去做update,actor唯一的作用是產生兩個program,一個在memory 裡面,一個在momory外面, 然後發給learner,所有的學習都在learner中實現,學習之後在發回到所有的actor上面,actor繼續和環境交互,整個系統最多的計算是在actor上,怎麼去採樣experience,之後再訓練。

(完)

參看:

飄哥:學習基於弱監督學習的自然語言理解(上)?

zhuanlan.zhihu.com
圖標
飄哥:學習基於弱監督學習的自然語言理解(中)?

zhuanlan.zhihu.com
圖標
飄哥:學習基於弱監督學習的自然語言理解(下)(一)?

zhuanlan.zhihu.com
圖標

推薦閱讀:
相關文章