我眼中的機器智能(2020v1)

通過訓練,機器或能勝任一般性的編程任務,部分程序員會因此進化成爲工具操作員。

機器智能的技術理想是,在智力上接近普通人。因爲人的直覺和創造力難以模仿,所以需要經過反覆的訓練和調試才能夠接近這個理想。

機器如何訓練?

>>> 機器直接閱讀學習源代碼。

智能的關鍵在於學習和演算。因此,機器必需要進行某種形式的學習,並擁有一個演算的戰場。下面幾點在必要時都需要演算的支持。

  1. 模擬執行。 要求在執行中能判斷變量可能的取值範圍。
  2. 工具類的功能描述。如 List, Stack, Set, Map, Collection...方法傳入什麼樣的數據?屬性值的前後差異?返回什麼樣的數據?機器可嘗試在模擬執行中總結這些功能。必要時人工撰寫功能描述。
  3. 樹的概念和使用。比如遍歷、打印、查找葉結點、判斷結點間的關係……讓機器閱讀這些代碼,以至領會。同時我們也提供給機器能夠生成類似功能的組件,並引導其對組件進行組裝和自我驗證,所生成的算法其初始價值爲零,隨着複用次數的增加,價值不斷提升。
  4. 機器需要懂一點算術和方程知識。能發現在變化過程中不同屬性間的,有規律的算術關係。
  5. 機器需要懂一點不等式和集合知識。……樹、算術、不等式、集合這些都是智能所需的的基本概念。關於算術和不等式,可參照項目:http://mathy.xyz/ ;雖然求解複雜的方程和不等式並非智能的關鍵,但是對事物之間的數學或邏輯關係做出洞察是智能的必須。
  6. 代碼塊的功能描述。描述可以是遞歸的。傳入什麼數據?執行什麼動作?已有變量發生了何種變化?生成了什麼數據?必要時由人來撰寫一些功能特徵。……功能特徵的描述近於主謂賓式的邏輯,必要時人工撰寫各種類來表達相應的邏輯,並且要支持窮舉。
  7. 演算的方法有:等價替換、關係替換、反事實分析、迴避非預期的條件,等等。在代碼塊中,算法可嘗試各種可能的動作,分析相應的功能特徵。最終的特徵數量要儘可能地少,儘可能屬於因果性質的關鍵特徵。當因果難以獲取時,通過訓練來積累經驗是理所當然。
  8. 很多情況下,必須通過人工來引導機器的學習過程。主要表現爲:在某種情況下應當重點關注哪些特徵。

>>> 閱讀理解了大量的源代碼後,機器可以開始嘗試撰寫不太複雜的算法。

  1. 藉助工具從海量的函數庫中查找算法:find function from library by "in/out demo"。 舉例:http://mathy.xyz/tool/findFun.htm
  2. 藉助強大的findBug來發現代碼中的潛在異常。舉例 :http://mathy.xyz/tool/findBug.html
  3. 根據輸入參數和功能驗證函數,交由機器生成普通算法。但功能驗證函數有時候是難以表達的。
  4. 正確的算法常常來自於對問題代碼的,反覆的拼接組合和修正。在這個過程中,機器必然需要去了解:什麼樣的代碼是有問題的?這也因此促進了 findBug工具的實現。
  5. 邏輯優化。窮舉10個布爾變量組成的【與或非邏輯式】對機器來說似乎不難,故能夠優化之。更抽象的邏輯優化也是同理。或者藉助於訓練,以非數學的方式讓機器學習邏輯優化的技巧。
  6. 只有人才能夠優化算法。比如,機器學會了選擇排序,但人卻能夠把它優化成快速排序。這是因爲:優化常常要用到難以描述的抽象方法或直覺性很強的創造性思路,除非能夠有效窮舉各種方案或存在相應的套路。
  7. 只有人才能夠創造新算法。這一點不必擔心,因爲多數公司對新算法沒有什麼需求。
  8. 小算法的複用率太低。99%的小算法在本質上業已存在。但因爲複用率低,導致我們經常是“不斷重複地再造”着算法。因此我們需要更好的算法查找技術,以及對相似算法的改造技術。如何判斷相似性?如何進行改造?暫無思路。
  9. 複雜的大算法在使用上有難度。這是個難題。不議。

—— 2020-05, 上海

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