從時間序列表示到層級化的強化學習

CNN對圖像的表示我們熟悉是從細節紋理到輪廓到物體部分到概念的層級表示關係。那麼神經網絡對時間序列可以建立什麼樣的表示呢?要知道時間序列是比圖像更普遍的一種數據類型。我們知道最廣泛使用的也是最高級的時間序列是語言。那麼什麼是時間序列的一般表示呢?

這篇文章從神經科學的角度從五個層次解析了時間序列的表示問題。

The Neural Representation of Sequences: From Transition Probabilities to Algebraic Patterns and Linguistic Trees. Dehaene, Stanislas, et al. "The neural representation of sequences: from transition probabilities to algebraic patterns and linguistic trees." Neuron 88.1 (2015): 2-19.

首先, 對於一個一般的時間序列, 你可以想象以聲音為例,當聲音進入到耳朵裡, 它本來僅僅是一些頻率音量不同的振動,它怎麼就變成了音律,變成了語言?這就說明我們的神經系統不是在機械的接受這些時間序列, 而是不停提取和序列有關的信息, 最終合成成為有意義的東西。這個過程, 事實上類似於圖像的層級化處理, 也是一個有層次的過程。這種層次, 被分為如下圖的5步:

從時間序列表示到層級化的強化學習

第一層, 神經網絡可以提取和序列中的時間信息,比如不同音符間的間隔,每個音符持續的時間等,以及這些音符是如何轉換的。或者說在這個層次,神經網絡主要care的維度就是時間,而儘量忽略其它維度。如果用比較數學的語言來說, 神經網絡會對時間序列下一步的輸入做預測, 這種預測的主要依據是一個從過去的輸入到當下的條件概率。

生物神經網絡的本性,根據時間對未來的刺激做預測, 比如你給它一個週期刺激, 當某個週期相應的刺激沒有來,就會發放一個缺失信號表示驚訝。

然後, 神經網絡可以對序列進行分塊, 好比切割成由一列列車廂組成的而火車, 這樣, 序列就不再僅僅依賴於時間,分出的塊好比一個個物體, 或者item,這就好比CNN對圖像進行了邊緣分割。具體如何做分塊切割呢?通常一個過程裡會出現自然的分割節點, 比如你在左顧右看的時候, 視覺信號是輸入時間序列, 你看到左邊的某個邊界或右邊的邊界,就是時間序列的自然分割點。

再後,神經網絡可以抽取這些item之間的順序信息, 而無視每個塊的具體時間序列, 如時間長度一類,也就是此時的神經網絡可以區分abc和acb的區別,而忽略時間或單個塊的區別。

如果前面的看起來和智能關係不大, 後面就厲害了, 因為生物神經網絡還可以抽取塊與塊之間的代數模式, 比如cocolith, co-co 連續出現了兩次,這就是模式。這種模式本身代表了一種統計規律, 被我們稱為regularity 。我們可以看做神經網絡可以在複雜的音樂中識別出模式,識別出和絃。

從時間序列表示到層級化的強化學習

在這個階段,神經網絡關注不同輸入間的某種統計相關性而不是具體輸入的類型, 可以稱為抓取序列的某種抽象結構知識 (TurnTurnTurnTurn = PushPushPushPush != TurnTurnPushPush)

最後, 被作者稱為人類獨有的, 是抽取序列裡由一定符號規則生成的“語法”,這種規則可以反覆使用實現層級結構,也就是樹結構。

從時間序列表示到層級化的強化學習

對樹結構的解析模式:從詞語到短語到句子的語法樹結構,這是對時間序列的最高級表示

到最後一個級別, 我們可以看到這已經不再是機械的時間序列處理, 而幾乎是自然語言處理了。你有沒有想到一個重大的問題也就是語言的起源呢?你有沒有想到喬姆斯基的通用語法規則呢?

除了上面介紹的方法,從時間序列到空間結構, 從時間序列到因果圖, 都可以看做是很高級的序列表示生成方式。

如果這裡看去, 好像沒有什麼意思的神經科學文章, 那麼後面我們會看到這樣一個思想如何有助於解決一個AI問題。

強化學習本質處理的就是時間序列, 由輸入觀測的時間序列, 我們要得到一組動作的時間序列, 最終得到我們要的獎勵。每個動作都需要通過學習到的策略得到。這是經典的強化學習方法, 但是這種一個個動作學習的方法未免過於繁瑣,而且需要遍歷的動作總數猶如組合爆炸(想一想即使每個回合只有四個基本動作, 一百回合就是4的100次方種組合)。一篇新的文章給我們一個完全不同的思維角度。

從時間序列表示到層級化的強化學習

強化學習通常用如上框圖實現, 即agent會根據環境給與的reward調整action的一個反饋系統, 最終實現利益最大化, 難點在於agent的行為通常改變環境,而環境影響行為策略。

Christodoulou, Petros, et al. "Reinforcement Learning with Structured Hierarchical Grammar Representations of Actions." arXiv preprint arXiv:1910.02876 (2019).

這篇文章的核心思想是, 如果把動作看做一組時間序列,我們可以對動作的集合本身建立一套語法規則, 得到一組macro-action,也就是由若干動作組成的動作的宏,它們可以作為新的基本單位被學習。這樣,我們變可以把動作 打包來學習。這樣一個個基本動作就可以構造出一個層級嵌套的結構 ,大大減少需要學習的動作組合數。這種方法在20個atari game裡19取得了 性能的進步。

想一想這和人類的基本學習習慣是類似的。你去學習做飯,不會去學習如何用一個個基本的運動手臂的動作構成倒鹽,加油,燒水的一連串動作,菜譜只會告訴你熱鍋之後先煎西紅柿後放入雞蛋即可,也就是說我們默認了即使做菜的種類很多,有幾種基本行為是類似的,那些基本行為又由更基本的動作構成,但是我們不需要提起那些更基本的動作,就可以告訴你怎麼做菜。這裡提到的方法是類似的, 而唯一不同的是每個基本行為是要學習的, 我們需要知道如何從更基本的動作構建基本的行為。 事實上這個方法是實現層級強化學習的一種方式。

從時間序列表示到層級化的強化學習

勃艮第牛肉的製作過程為例看層級化的強化學習。每個動作由更基本的動作組成,又成為更復雜的動作的基礎。

從時間序列表示到層級化的強化學習

那麼如何去學習這些動作的宏-基本行為呢?我們可以看到, 此處對動作時間序列的處理, 剛剛所說的一般時間序列表示,本質是一樣的, 都是通過先打包,再整和包和包之間的語法規則,得到動作的層級結構 。如果神經網絡可以對時間序列實現如上表示。那麼它就可以通過觀測自己的動作,得到如何組合這些動作得到其語法結構。

算法的具體實現如下:

agent需要在探索遊戲並記錄自己在遊戲中的歷史,與一般的強化學習流程不同,這裡的一些經歷是沒有加入噪聲的,這些經歷被單獨放入到一個叫Sequitur的程序裡進行action的語法生成, 在這個過程裡, 一些經常重複的行為片段比如ababab,會被替代為ccc , c =ab, 這個新生成的c, 被稱為marco-action,生成符號的標準是新符號可以減少描述整個序列需要的字符數(符號的本質?)如此我們進行一級級的迭代,就得到action的整個語法樹,這裡的方法像不像是剛剛講過的從序列中生成代數結構和樹結構的方法?

從時間序列表示到層級化的強化學習

從時間序列表示到層級化的強化學習

通過回放機制方便生成新的宏

然而我們也可以從這裡聯繫到技術的起源。有一本書叫技術的本質, 它提出技術是一種進化的生命體, 它可以看做是由更基本的單元技術組成,這些不同的單元技術構成技術的模塊,組成更復雜的技術。這或許幫助我們理解為什麼近代最先進的技術出現在歐洲而不是中國。歐洲尤其是地中海地區,地理位置上很容易匯聚從中東,非洲,小亞細亞和歐洲本地的技術,從而交匯組合不同的技術元素,組成更大的技術的“宏”,促進更新技術的發展。

由此我們想到如果把技術本身看成某種強化學習可以學習的動作集合, 那麼技術不就對應這種層級化的強化學習嗎? 較高級的技術由較低級的技術模塊組合而成, 這些較低級的技術模塊本身因為經常被重複使用就被打包起來 。

從這一點看, 我們或者可以聯想如何可以通過強化學習幫助我們生成新的技術。


整個這篇文章說明了,時間序列的抽象表示是如何幫助我們解決一個非常困難的強化問題的。本質上 越是能夠從具象的輸入信息裡抽象出結構性知識,就越能從降低維數災難, 也越能夠讓學習變得簡單容易 (從更小的集合裡尋找最優解),得到的解也越容易具有魯棒性(策略建立在一般結構之上而不是細節上)。因此從這點上看, 抽象的意義是巨大的。那些最聰明的大腦,往往也是最擅長從細節裡尋找一般性結構的。


分享到:


相關文章: