神經網絡如何學習到加法等算法 - 神經編碼器-解釋器(Neural Programmer-Interpreters)

算法的本質

    何爲算法(algorithm)?

    從狹義來講,算法是計算機科學裏面的概念,簡單來說,所謂算法就是定義良好的計算過程,它取一個或者一組值作爲輸入,併產生出一個或一組值作爲輸出。亦即,算法就是一系列的計算步驟,用來將輸入數據轉換成輸出結果[1]。

    從廣義來講,算法是從初始態到可達目標態的序列過程。

    如:命令機器人拿起一個瓶子,那麼算法就是從機器手中沒有瓶子到不斷修正自己機器手到拿起一個瓶子的動作過程。而這些動作和程序沒有本質的區別,都是序列化過程。假如我們將拿起瓶子的動作簡化爲基本的形式:Left,Right,Top,Down,Forward,Backward,OpenHand,CloseHand,這些動作的參數都爲T,即持續時間。那麼機器人拿起瓶子這樣的動作過程就可以概括爲這些動作的組合序列過程,我們如果定義整個組合序列過程集合即機器人動作空間,那麼這個算法就是找到這樣一個或者多個子動作空間使機器人拿起瓶子。

神經編碼器-解釋器

    由上,本質上算法程序就是序列過程,但是通常算法程序都是人類寫的。因爲人工智能的發展,機器變得越來越智能,越來越能做很多事情,所以這裏就有一個有趣的問題:如果機器能夠學會了寫出自己的算法並改變自身的算法,那麼機器是否就擁有了自我進化的能力?

    我們知道任何複雜的東西C都必然由比他自己更簡單的東西S構成,如果S不能再分解爲比自己更簡單的東西,那麼S就是C的一個因子,如果C=S那麼C不能被分解。以自然數爲例:0,1,2,3...任何自然數必然可以由一個或者多個0和素數相乘得到,所以0和任何素數構成得到任何自然數的乘法因子,目前素數並不是有窮的,所以因子目前並不有窮。

    由上,爲了學習C我們可以先學習S,同樣可以遞歸的找到學習C的所有因子。這和人類相似,我們學習概念也是從簡單的開始,然後學習由簡單概念構成的複雜概念,尤其在數學上,如果老師講的上一堂課沒聽懂的話,那麼下一堂課也很難聽懂,如果長期沒聽懂的話,那麼也基本數學這麼學科再學就沒有意義了。這也是我們常說的基礎很重要的原因,因爲複雜的東西由基礎的東西構成。這個在自然語言中也呈現出簡單到抽象的層次結構。

     神經編碼器-解釋器(Neural Programmer-Interpreters,NPI)的思想和上面的類似,即我們可以先學習簡單的算法,如:自然數加法,文本替換等,然後學習複雜的算法。在神經編碼器-解釋器之前,就有很多論文闡述如何學習加法的機器學習算法,如:神經圖靈機(Neural Turing Machine),等等,還有最近Facebook發表的用強化學習來訓練機器學習簡單算法。

     下面根據論文來敘述該算法的思想。NPI由三個可學習組件,即:一個任務未知的遞歸核心,一個持久的鍵值對程序內存和特定領域的編碼器組成。其中該論文中的遞歸核心是以LSTM爲基礎的序列模型。下面是架構圖:

 

 

前饋過程

   

   

   

   其中:

    爲時間 的原始環境狀態, 爲函數參數, 爲編碼後的狀態, 爲特定領域的編碼器(函數),

   爲程序或程序動作, 爲LSTM的內部隱藏狀態, 輸出狀態,爲多層感知機(MLP)和LSTM-Core構成的遞歸網絡函數

   爲是否終止程序的概率, 爲嵌入程序的鍵(key), 爲下一個時間的參數值,皆爲解碼器

    爲下一時間的環境狀態,只是環境變化函數,並不是我們計算得到的,而是環境生成的。

加法計算過程

    加法計算過程如下圖:

               

 

 

    整個加法是在一個表格中進行,其中第1,3,5,7行爲指針可達位置,其他行爲數字行,紅色的箭頭爲指針,紅色的箭頭只能左右移動即:LEFT,RIGHT,而這些移動即我們的子程序,ADD,ACT...也是子程序或者叫因子程序。而指針指向的位置爲他下面的格子。上面過程爲第一個執行ADD1,產生下一個程序WRITE和兩個參數,即位置爲第4個指針行的指針所指位置(即第8行,第5列,下同)及得到的值2;然後執行併產生程序ADD1等等,都差不多不細講。其中CARRY爲進位程序,ACT是一個綜合簡化程序,WRITE爲寫入數字到表格。當然還有其他程序過程,這裏只列舉了加法。

訓練

    訓練主要通過運行的軌跡即:這個時間步的輸入和應該的輸出來監督式訓練。最優參數通過下面的公式獲得:

    而代價函數爲:

    其中單步條件概率可以因子化爲以下的和:

    通過梯度上升法,求解最優參數集。 其他問題可參考[2]。

總結

    有人說自然數加法很簡單,實際上對於研究人工智能的人而言未必是簡單的,因爲我們不僅僅要知道是什麼,更要知道爲什麼,往往簡單的東西是難以說清楚的比如:1+1爲什麼等於2,很難說清楚,當然這是皮亞諾公理的內容。自然數加法的基礎公理是大學數學分析才學的,相對的自然數加法則是小學數學的內容,所以what和why的層次有巨大的區別。在人工智能中自然數加法如果用迴歸逼近的方法來做只能得到近似解,而不能得到精確解,這個是有很大差別的。

 

 

參考:

 1. Thomas H.Cormen、Charles E.Leiserson、etc,Introduction to Algorithms

 2. Scott Reed 、Nando de Freitas,Neural Programmer-Interpreters

 3. Neural Programmer-Interpreters 動畫演示

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章