什麼是“理解”?如何在人工智能中定義“理解”?(what is understanding ?)

* 這篇文章主要不是解釋哲學上的“理解”,而是在計算或者人工智能或是數學上定義“理解”

   

    對於人而言,理解似乎是一件簡單的事情。在我們上課的時候我們能確切的知道是否理解老師所講的內容,在我們看書的時候我們能確切的知道書中的內容我們是否理解,在我們與人交談的時候我們能確切的知道別人說了什麼,我們也確切的知道別人所描述的我們是否理解。我們似乎天生就有這個能力

   所以有一個問題,我們如何知道自己理解了或者不理解?什麼是理解?

   衆所周知,自然語言理解是人工智能的最高目標之一,如果連什麼是理解都不知道的話,我們可能無法實現這個宏偉的目標

   這裏的理解是指計算機是否理解了一個概念。比如,這裏舉最簡單的自然數加法(姑且簡單的叫做加法)爲例。那麼對計算機而言什麼是加法?其實人也解釋不清楚什麼是加法,而只是大腦裏有一個模糊的關於加法的概念(包括加法表,進位規則,數字符號操作過程),而且能根據別人給定的加法題目給出正確的答案。所以當我們提出題目 12+23=? 的時候,這個看起來簡單的題目對計算機而言並不簡單。計算機需要知道數字符號(12,23)和邏輯操作符號(+,=),以及這個題目涉及的概念是什麼(我們確切知道他是加法題目,但是對計算機而言他就是一串符號,如果脫離符號所映射的領域知識,那麼符號便沒有意義

    所以我們如何以計算機的視角來解決 P: 12+23=? 這個問題?

    1. 我們需要知道給定符號串P的目的(這裏是求兩個數的和),這裏涉及到自然語言中的意圖識別,假設我們定義萬能意圖函數F(X):X -> D,X爲符號輸入,D爲輸出,當我們輸入問題字符時F(x)能給我們這串字符的目的

    2. 我們需要知道目的D及字符串P關聯的知識庫,這裏得到知識庫加法規則A(X),A(X)可以視作我們大腦中關於加法的知識或者運算過程,假設我們仍然定義一個函數M(X)來表示該關聯映射

    3. 我們已經得到該字符串P的目的D和規則A(X),我們需要根據規則的內容填充,假設規則A(X)能直接根據字符串序列P解析出數字符號(12,23)和邏輯符號(+,=),並知道各符號的邏輯關係及操作過程,並作操作得到結果

    這裏我們算基本解決了該問題,可以看到該問題並不簡單,我們能夠得到:加法概念實際是整個關於加法的操作並得到結果的過程,而加法概念本身也包含數字概念和操作概念,如:什麼是1,2,3... 什麼是+,=... 這本身也是概念,如果不理解底層的概念,那麼便無法建立關於該底層概念的高層概念。所以這正是自然語言理解困難的關鍵之一

    所以由上:什麼是理解?what is understanding ?(這裏有點跳躍)

   我們在這裏先簡單的預定義在加法上的理解(然後推廣到其他概念上):對於任意的輸入,如果計算機能夠基於程序操作輸出正確的值,那麼認爲計算機理解了加法

   我們會發現如果人編寫了一個加法的程序,而計算機運行程序輸出正確的值,那麼實際是人理解了加法,而計算機只是根據指令完成計算而已。這樣我們就必須制定一個規則:即加法程序必須爲計算機所寫,且所寫程序不能是來自外部程序的拷貝,且對於任意的輸入,輸出正確的值,那麼計算機就理解了加法

   這裏總結以上的定義:如果計算機能夠寫出一個加法程序(該程序不是來自外部程序的拷貝)對於任意的輸入,該程序運行後輸出正確的值,那麼計算機就理解了加法

  這可以等價爲更形式的定義:給定一個圖靈機 M,一套初始程序 P,學習加法需要的完備數據 D 及一個完備的加法測試系統 TP,如果 M 能夠利用 P 與 D 寫出一個算法使 TP 測試爲加法完備的,那麼我們說 M 理解了加法。而編寫出一個程序判斷兩個函數是否相等是不可判定問題,所以這裏及以下的完備的測試系統TP的測試用例數限定於趨近於一個極大數字

   我們可以推廣爲,給定一個圖靈機M,一套初始程序 P,某概念的完備數據 D 及一個完備的測試系統 TP,如果M能夠利用 P 與D 寫出關於該概念的一個算法使TP測試爲完備的,那麼我們說 M 理解了該概念。其中概念需要滿足可計算性要求;測試系統TP可以是人寫的程序;數據D不能是該概念的完整或部分算法程序

    我們可以舉個例子來說明該定義:在做項目的時候,產品經理定義了一系列的需求給程序員,並告訴程序員需求的解釋,那麼產品經理如何知道程序員是否理解這些需求?產品經理當然不知道!即便產品經理相信程序員理解該需求,也一定是建立在一段時間的磨合後或是建立在大量認知的基礎上。所以我們如何準確的知道程序員是否理解產品需求?Talk is cheap , Show me the code。程序員要給產品經理程序和代碼,產品經理給測試人員測試,且我們知道這個測試人員懂代碼和如何運行測試,如果測試人員認爲程序和代碼都沒有問題且完成了需求,那麼產品經理認爲程序員理解了產品需求,否則沒有理解產品需求

 這裏例子的映射關係爲:產品經理->我們,程序員->圖靈機M和初始程序P,產品需求->某概念完備數據D,測試人員->測試系統TP

    所以我們由上,圖靈機M是已知的,我們需要解決的問題是數據D,初始程序P與測試系統TP的問題。測試系統有白盒測試即原理測試,而也可以是黑盒測試。有些概念的測試系統較簡單如加法,減法,乘法等等,但有的可能會異常的複雜,以至於只能做黑盒測試,如圍棋,自然語言理解等等

   其實這裏我們已經看到了機器學習的影子,從上我們可以推斷:如果機器人沒有學習能力那麼機器人就不能理解任意概念

    續:是否所有的概念都可以用序列過程來驗證理解?這裏的猜想是:可以。比如我們對機器人說:請給我一個蘋果。如果機器人將桌子上的蘋果拿來給了我(這裏假設機器人不是人爲的硬編碼),那麼說明機器人理解實體“蘋果”的意思,同樣也理解“給”的意思,並且理解“我”這個實體的意思(不然就不會真確的產生蘋果給我的結果),也就是我們能夠同時驗證多個概念的理解性,而這個驗證只是通過序列化的過程來驗證的,即:從機器人聽到指令到將蘋果給我的這樣一個序列過程。這裏把這種驗證稱爲:概念理解的序列過程驗證

參考文獻:

 1. Pedro Domingos,The Master Algorithm: How the Quest for the Ultimate Learning Machine Will Remake Our World

 2. Mitchell,Machine Learning

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

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

 

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