1. 程式人生 > >王垠:自動程式設計是不可能的 我為什麼不在乎人工智慧

王垠:自動程式設計是不可能的 我為什麼不在乎人工智慧

文/王垠

  有人聽說我想創業,給我提出了一些“忽悠”的辦法。他們說,既然你是程式語言專家,而現在人工智慧(AI)又非常熱,那你其實可以搞一個“自動程式設計系統”,號稱可以自動生成程式,取代程式設計師的工作,節省許許多多的人力支出,這樣就可以趁著“AI 熱”拉到投資。

  有人甚至把名字都給我想好了,叫“深度程式設計師”(DeepCoder = Deep Learning + Coder)。口號是:“有了 DeepCoder,不用 Top Coder!” 還有人給我指出了這方向最新的,吹得神乎其神的研究,比如微軟的 Robust Fill……

  我謝謝這些人的關心,然而其實我並不在乎,也不看好人工智慧。現在我簡單的講一下我的看法。

  機器一樣的心

  很多人喜歡鼓吹人工智慧,自動車,機器人等技術,然而如果你仔細觀察,就會發現這些人不但不理解人類智慧是什麼,不理解人工智慧有什麼侷限性,而且這些“AI 狂人”們的心,已經嚴重的機械化了。他們或多或少的失去了人性,彷彿忘記了自己是一個人,忘記了人最需要的是什麼,忘記了人的價值。這些人就像卓別林在『大獨裁者』最後的演講裡指出的:“機器一樣的人,機器一樣的心。”

  每當提到 AI,這些人必然野心勃勃地號稱要“取代人類的工作”,“節省勞動力開銷”。暫且不討論這些目標能否實現,它們與我的價值觀,從一開頭就是完全矛盾的。一個偉大的公司,應該為社會創造實在的,新的價值,而不是想方設法“節省”什麼勞動力開銷,讓人失業!想一下都覺得可怕,我創造一個公司,它最大的貢獻就是讓成千上萬的人失業,為貪得無厭的人節省“勞動力開銷”,讓貧富分化加劇,讓權力集中到極少數人手裡,最後導致民不聊生,導致社會的荒蕪甚至崩潰……

  我不可想象生活在那樣一個世界,就算那將使我成為世界上最有錢的人,也沒有了意義。世界上有太多錢買不來的東西。如果走在大街上,我看不到人們幸福的笑容,悠閒的步伐,沒有親切的問候,關愛和幽默感,看不見甜蜜浪漫的愛情,反而看見遍地痛不欲生的無家可歸者,鼻孔裡鑽進來他們留下的沖人的尿騷味,走到哪裡都怕有人搶劫,因為人們實在活不下去了,除了偷和搶,沒有別的辦法活……

  如果人工智慧成功的話,這也許就是最後的結果。幸運的是,有充足的證據顯示,人工智慧是永遠不會成功的。

  我的人工智慧夢

  很多人可能不知道,我也曾經是一個“AI 狂熱者”。我也曾經為人工智慧瘋狂,把它作為自己的“偉大理想”。我也曾經張口閉口拿“人類”說事,彷彿機器是可以跟人類相提並論,甚至高於人類的。當深藍電腦戰勝卡斯帕羅夫,我也曾經感嘆:“啊,我們人類完蛋了!” 我也曾經以為,有了“邏輯”和“學習”這兩個法(kou)寶(hao),機器總有一天會超越人類的智慧。可是我沒有想清楚這具體要怎麼實現,也沒有想清楚實現了它到底有什麼意義。

  故事要從十多年前講起,那時候人工智慧正處於它的冬天。在清華大學的圖書館,我偶然地發現了一本塵封已久的 Peter Norvig 的大作『Paradigms of Artificial Intelligence Programming』(PAIP)。像個考古學家一樣,我開始逐一地琢磨和實現其中的各種經典 AI 演算法。PAIP 的演算法側重於邏輯和推理,因為在它的年代,很多 AI 研究者都以為人類的智慧,歸根結底就是邏輯推理。他們天真地以為,有了謂詞邏輯,一階邏輯這些東西,可以表達“因為所以不但而且存在所有”,機器就可以擁有智慧。於是他們設計了各種基於邏輯的演算法,專家系統(expert system),甚至設計了基於邏輯的程式語言 Prolog,把它叫做“第五代程式語言”。最後,他們遇到了無法逾越的障礙,眾多的 AI 公司無法實現他們誇口的目標,各種基於“神經元”的機器無法解決實際的問題,鉅額的政府和民間投資化為泡影,人工智慧進入了冬天。

  我就是在那樣一個冬天遇到了 PAIP,它雖然沒能讓我投身於人工智慧領域,卻讓我迷上了 Lisp 和程式語言。也是因為這本書,我第一次輕鬆而有章法的實現了 A* 等演算法,並且理解到裡面的真諦。也是因為 PAIP,我第一次理解到了程式的“模組化”是什麼,我開始在自己的程式裡使用小的“工具函式”,而不再擔心很多人憂心忡忡的“函式呼叫開銷”。PAIP 和 SICP 這兩本書,最後導致了我投身於程式語言領域,並且有幸獲得這個領域鼻祖們的指點。

  在 PAIP 之後,我又迷了一陣子機器學習(machine learning),因為有人告訴我,機器學習是人工智慧的新篇章。然而我逐漸的意識到,所謂的人工智慧和機器學習,跟真正的人類智慧,關係其實不大。相對於實際的問題,PAIP 裡面的經典演算法其實相當幼稚,複雜度很高,根本不可能解決大規模的實際問題。最重要的問題是,我看不出 PAIP 裡面的演算法跟“智慧”有任何關係。而“機器學習”這個名字,完全就是一個幌子。很多人都看出來了,機器學習說白了就是統計學裡面的“擬合函式”,換了一個具有迷惑性的名字而已。

  嚇人的外衣之下

  人工智慧的研究者們總是喜歡擡出“神經元”一類的名詞來嚇人,跟你說他們的演算法是受了人腦神經元工作原理的啟發。注意了,“啟發”是一個非常模稜兩可的詞,由一個東西啟發得來的結果,可以跟這個東西毫不相干。比如我也可以說,Yin 語言的設計是受了九陰真經的啟發 :P

  世界上這麼多 AI 研究者,有幾個真的研究過人腦,解刨過人腦,拿它做過實驗,或者讀過腦科學的研究成果?最後你發現,幾乎沒有 AI 研究者真正做過人腦或者認知科學的研究。著名的認知科學家 Douglas Hofstadter 早就在接受採訪時指出,這幫所謂“AI 專家”,對人腦和意識(mind)是怎麼工作的,其實完全不感興趣,也從來沒有深入研究過,卻號稱要實現“通用人工智慧”(Artificial General Intelligence, AGI),這就是為什麼 AI 直到今天都只是一個虛無的夢想。

  縱觀歷史上機器學習能夠做到的事情,都是一些字元識別(OCR),語音識別,人臉識別一類的,我把這些統稱為“識別系統”。當然,識別系統是很有價值的,我經常用手機上的語音輸入法,人臉識別對於警察和間諜機關,顯然意義重大。雖然很重要,識別系統跟真正的“智慧”,卻相去非常遠,而且這些識別系統的普及,導致了人工智慧的能力被嚴重的神化。說白了,這些識別系統,也就是統計學的擬合函式能做的事情:輸出一堆畫素或者音訊,輸出一個個的單詞文字。很多人分不清“文字識別”和“語言理解”的區別。OCR 和語音識別系統,雖然能依靠統計的方法,知道你說的是哪些字,卻不能真正理解你在說什麼。

  聊一點深入的話題,看不懂的人可以跳過這一段。“識別”和“理解”的差別,就像程式語言裡面“語法”和“語義”的差別。程式語言的文字,首先要經過詞法分析器(lexer),語法分析器(parser),才能送進直譯器(interpreter),只有直譯器才能實現程式的語義。類比一下,自然語言的語音識別系統,其實只相當於程式語言的詞法分析器(lexer)。大部分的 AI 系統,連語法分析器(parser)都沒有,所以主謂賓,句子結構都分析不清楚,更不要說理解其中的含義了。IBM 的語音識別專家 Frederick Jelinek 曾經開玩笑說:“每當我開掉一個語言學家,識別率就上升了。” 其原因就是語音識別僅相當於一個 lexer,而語言學家研究的是 parser 以及 interpreter。當然了,你們乾的事情太初級了,所以語言學家幫不了你們,但這並不等於語言學家是沒有價值的。

  各大公司最近叫得最響亮的“AI 技術”,就是 Siri,Cortana,Google Assistant,Amazon Echo 一類含有語音識別功能的工具,叫做“個人助手”。這些東西里面,到底有多少可以叫做“智慧”的東西,我想用過的人都應該明白。我每一次試用 Siri 都被它的愚蠢所折服,可以讓你著急得砸了水果手機。那另外幾個同類,也沒有好到哪裡去。很多人被“微軟小冰”忽悠過,咋一看真能理解你說的話,然而聊一會你就發現,小冰不過是一個“網路句子搜尋引擎”而已。它只是按照你句子裡的關鍵字,隨機搜出網上已有的句子。大部分這類句子出自問答類網站,比如百度知道,知乎,等等。一個很簡單的實驗,就是反覆傳送同一個詞給小冰,比如“智慧”,看它返回什麼內容,然後拿這個內容到 Google 或者百度搜索,你就會找到那個句子真正的出處。人都喜歡自欺欺人,看到幾個句子回答得挺有“詩意”,就以為它是在跟你對話,而其實它是牛頭不對馬嘴,所以你才感覺有“詩意”。大部分人跟小冰對話,都喜歡只把其中“符合邏輯”的部分截圖下來,然後驚呼:“哇,小冰好有趣!” 他們沒有告訴你的是,沒貼出來的對話,幾乎全都是雞同鴨講。

  我並不是說這些產品完全沒有價值。我用過 Siri 和 Google Assistant,我發現它們還是有用的,特別是在開車的時候。因為開車時操作手機容易出事,所以我可以利用語音控制。比如我可以對手機說:“導航到最近的加油站。” 然而實現這種語音控制,根本不需要理解語言,你只需要用語音識別輸入一個函式呼叫:導航(加油站)。個人助手在其它時候用處都不大。我不想在家裡和公共場所使用它們,原因很簡單:我懶得說話,或者不方便說話。點選幾下螢幕,我就可以精確地做到我想要的事情,這比說話省力很多,也精確很多。個人助手完全不理解你在說什麼,這種侷限性本來無可厚非,然而各大公司卻拿這些個人助手來煽風點火,各種誇大,閉口不提他們的侷限性,讓外行們以為人工智慧就快實現了,這就是為什麼我必須鄙視一下他們。

  由於有了這些“個人助手”,有些人就號稱類似的技術可以用來製造“機器客服”,使用機器代替人作為客服。他們沒有想清楚的是,客服看似“簡單工作”,跟這些語音控制的玩意比起來,難度卻是天壤之別。客服必須理解公司的業務,必須能夠精確地理解客戶在說什麼,必須形成真正的對話,要能夠為客戶解決真正的問題,而不能只抓住一些關鍵字進行隨機回覆。另外,客服必須能夠從對話資訊,引發現實世界的改變,比如呼叫配送中心停止發貨,向上級請求滿足客戶的特殊要求,拿出退貨政策跟客戶辯論,拒絕他們的退貨要求,抓住客戶心理,向他們推銷新服務等等,各種需要“人類經驗”才能處理的事情。所以機器能不但要能夠形成真正的對話,理解客戶的話,它們還需要現實世界的大量經驗,需要改變現實世界的能力,才可能做客服的工作。由於這些個人助手全都是在忽悠,所以我看不到有任何希望,能夠利用現有的技術實現機器客服。

  很多人看到 AlphaGo 的勝利,以為所謂 Deep Learning 終究有一天能夠實現人類級別的智慧。在之前的一篇文章裡,我已經指出了這是一個誤區。很多人以為人覺得困難的事情(比如圍棋),就是體現真正人類智慧的地方,其實不是那樣的。我問你,心算除法(23423451345 / 729)難不難?這對於人是很難的,然而任何一個傻電腦,都可以在 0.1 秒之內把它算出來。圍棋,國際象棋之類也是一樣的原理。這些機械化的問題,根本不能反應真正的人類智慧,它們只需要蠻力。

  縱觀人工智慧領域發明過的嚇人術語,從 Artificial Intelligence 到 Artificial General Intelligence,從 Machine Learning 到 Deep Learning,…… 我總結出這樣一個規律:人工智慧的研究者們特別喜歡製造嚇人的名詞,當人們對一個名詞失去信心,他們就會提出一個不大一樣的,新的名詞,免得人們把對這個名詞的失望,轉移到新的研究上面。然而這些名詞之間,終究是換湯不換藥。因為沒有人真的知道人的智慧是什麼,所以也就沒有辦法實現“人工智慧”。

  生活中的每一天,我這個“前 AI 狂熱者”都在為“人類智慧”顯示出來的超凡能力而感到折服。甚至不需要是人,任何高等動物(比如貓)的能力,都讓我感到敬畏。我發自內心的尊重人和動物。我不再有資格拿“人類”來說事,因為面對這個詞彙,任何機器都是如此的渺小。

  自動程式設計是不可能的

  現在回到有些人最開頭的提議,實現自動程式設計系統。我現在可以很簡單的告訴你,那是不可能實現的。微軟的 Robust Fill 之類,全都是在扯淡。我對微軟最近乘著 AI 熱,各種煽風點火的做法,表示少許鄙視。不過微軟的研究員也許知道這些東西的侷限,只是國內小編在誇大它的功效吧。

  你仔細看看他們舉出的例子,就知道那是一個玩具問題。人給出少量例子,想要電腦完全正確的猜出他想做什麼,那顯然是不可能的。很簡單的原因,例子不可能包含足夠的資訊,精確地表達人想要什麼。最最簡單的變換也許可以,然而只要多出那麼一點點例外情況,你就完全沒法猜出來他想幹什麼。就連人看到這些例子,都不知道另一個人想幹什麼,機器又如何知道?這根本就是想實現“讀心術”。甚至人自己都可以是糊塗的,他根本不知道自己想幹什麼,機器又怎麼猜得出來?所以這比讀心術還要難!

  對於如此弱智的問題,都不能 100% 正確的解決,遇到稍微有點邏輯的事情,就更沒有希望了。論文最後還“高瞻遠矚”一下,提到要把這作法擴充套件到有“控制流”的情況,完全就是瞎扯。所以 RobustFill 所能做的,也就是讓這種極其弱智的玩具問題,達到“接近 92% 的準確率”而已了。另外,這個 92% 是用什麼標準算出來的,也很值得懷疑。

  任何一個負責的程式語言專家都會告訴你,自動生成程式是根本不可能的事情。因為“讀心術”是不可能實現的,所以要機器做事,人必須至少告訴機器自己“想要什麼”,然而表達這個“想要什麼”的難度,其實跟程式設計幾乎是一樣的。實際上程式設計師工作的本質,不就是在告訴電腦自己想要它幹什麼嗎?最困難的工作(資料結構,演算法,資料庫系統)已經被固化到了庫程式碼裡面,然而表達“想要幹什麼”這個任務,是永遠無法自動完成的,因為只有程式設計師自己才知道他想要什麼,甚至他自己都要想很久,才知道自己想要什麼……

  有句話說得好:程式設計不過是一門失傳的藝術的別名,這門藝術的名字叫做“思考”。沒有任何機器可以代替人的思考,所以程式設計師是一種不可被機器取代的工作。雖然好的程式設計工具可以讓程式設計師工作更加舒心和高效,任何試圖取代程式設計師工作,節省程式設計勞力開銷,剋扣程式設計師待遇,試圖把他們變成“可替換原件”的做法(比如 Agile,TDD),最終都會倒戈,使得僱主收到適得其反的後果。同樣的原理也適用於其它的創造性工作:廚師,髮型師,畫家,……

  所以別妄想自動程式設計了。節省程式設計師開銷唯一的辦法,是邀請優秀的程式設計師,尊重他們,給他們好的待遇,讓他們開心安逸的生活和工作。同時,開掉那些滿口“Agile”,“Scrum”,“TDD”,“軟體工程”,光說不做的扯淡管理者,他們才是真正浪費公司資源,降低開發效率和軟體質量的禍根。

  傻機器的價值

  我不反對繼續研究人工智慧,投資人工智慧,然而我覺得不應該過度誇大它的用處,把注意力過分集中在它上面,彷彿那是唯一可以做的事情。我的個人興趣,其實不在人工智慧上面。那我要怎麼創業呢?很簡單,我覺得大部分人其實不需要很“智慧”的機器,“傻機器”才是對人最有價值的。所以設計新的,可靠的,造福於人的傻機器,應該是我創業的目標。當然我這裡所謂的“機器”,包括了硬體和軟體。

  只舉一個例子,有些 AI 公司想研製“機器傭人”,可以自動打掃衛生做家務。我覺得這問題幾乎不可能解決,還不如直接請真正智慧的——阿姨來幫忙。我可以做一個阿姨服務平臺,方便需要服務的家庭和阿姨進行配對。給阿姨配備更好的工具,通訊,日程,支付設施,讓她工作不累收錢又方便,讓家庭也省心放心,那豈不是兩全其美?哪裡需要什麼智慧機器人,難度又高,又貴又不好用。顯然這樣的阿姨服務平臺,結合真正的人的智慧,輕而易舉就可以讓那些機器傭人公司死在萌芽之中。

  當然我不會真去做個阿姨服務平臺,我只是舉個例子。許許多多對人有用的傻機器,還在等著我們去發明。這些機器設計起來雖然需要靈機一動,然而實現起來難度卻不高,給人帶來便利,經濟上見效也快。這些東西不對人的工作造成競爭,反而可能製造更多的就業機會,可以說是利國利民。利用人的智慧,加上機器的蠻力,讓人們又省力又能掙錢,才是最合理的發展方向。

https://news.cnblogs.com/n/568072/