轉載自https://www.cnblogs.com/zeze/p/8268388.html
Progressive NN是第一篇我看到的deepmind做這個問題的。思路就是說我不能忘記第一個任務的網絡,同時又能使用第一個任務的網絡來做第二個任務。
為了不忘記之前的任務,他們的方法簡單暴力:對所有的之前任務的網絡,保留並且fix,每次有一個新任務就新建一個網絡(一列)。
而為了能使用過去的經驗,他們同樣也會將這個任務的輸入輸入進所有之前的網絡,並且將之前網絡的每一層的輸出,與當前任務的網絡每一層的輸出一起輸入下一層。
每次有一個新的任務,就重新添加一列,然后將前幾列的輸出fuse到當前列來。
比如說,如果兩個任務的low level特征類似,則當前任務網絡中的前幾層可能完全沒有用處,只需要用之前任務的輸出就夠了。
但是一個很明顯的問題是,這個網絡不能學到自己的low level feature的網絡,然后使用之前網絡的high level決策。因為1,當low level不一樣的時候,將輸入輸入之前的網絡就不make sense了;更重要的是,當前列的輸入根本無法輸入進之前列的網絡,只復用高層網絡根本無從談起。
所以這里的限制就是,兩個任務需要有類似的low level feature。當然啦,這篇文章還是有很酷的視頻,也確實用到了一些任務上。
用幾句話就能夠說明白這個所謂的progressive neural networks到底是什么了!簡直不能再簡單!
就是:
Step 1:構造一個多層的神經網絡,訓練某一個任務,上圖第一列
Step 2:構建第二個多層的神經網絡,然后固定第一列也就是上一個任務的神經網絡,將上一列的神經網絡的每一層(注意是每一層)都通過a處理連接到第二列的神經網絡的每一層作為額外輸入。也就是第二個神經網絡每一層除了原始的輸入,還加上經過a處理的之前的神經網絡對應層的輸入。
Step 3:構建第三個多層神經網絡,訓練第三個任務,將前兩列的神經網絡固定,然后同上一樣的方法連接到第三個神經網絡中。
上圖的線很清楚的表示了這個過程。
這就是把神經網絡和神經網絡連起來的方法!
a的作用其實主要是為了降維和輸入的維度統一(與原始輸入匹配),用簡單的MLP來表示!
除此之外,增強學習算法沒有任何變化。文章中使用A3C算法,一個比DQN強4倍的算法!
總的來說,就是抽取之前的神經網絡的信息與當前的輸入信息融合,然后訓練!訓練的效果就可以和沒有加前面的神經網絡的方法對比,如果效果好很多說明前面的神經網絡有用,知識有遷移!
這種方法的好處就是之前的訓練都保留,不至於像fine tune那樣更改原來的網絡!而且每一層的特征信息都能得到遷移,並且能夠更好的具化分析。
缺點就是參數的數量會隨着任務的增加而大量增加!並且不同任務的設計需要人工知識。