高大上的 AI,如何在創業公司落地?
原創【51CTO.com原創稿件】
人工智能是由約翰·麥卡錫在 1956 年的達特矛斯會議上提出的:人工智能就是要讓機器的行為看起來就像是人所表現出的智能行為一樣。本文將為大家講解人工智能的發展階段和創業公司如何打造 AI 技術團隊。
人工智能過渡到高層智能的3階段
目前,人工智能正從比較初級的計算智能向更高層次的智能過渡。更高層次的智能包括 3 個階段,第一個階段是感知(perception)智能,機器要聽得見、看得見。聽得見是我們常說的語音識別,機器把人說的一句話,由聲音信號轉化成文字信息。 然后,就是視覺,計算機視覺(computer vision),它能夠看到東西,能夠分辨一些人臉,或者是物體,甚至一些情緒之類的變化。 通過感知階段后,人工智能進入下一個認知(cognition)階段。機器開始能夠理解一些內容。比如說語音識別,機器只是識別出了這個文字,但它不能真正知道人要表達什么信息。這里涉及對自然語言理解。對于機器來說,這是非常困難的一件事情。 認知階段的另一個方向是分析判斷,機器根據當前的情況去做一些主動的判斷。比如棋局對弈,計算機本身不知道自己是在下棋,但是操作員定義好規則之后,通過幾個超級大的深度神經網絡,它能夠做出最優的判斷。 只有當人工智能在認知上獲得了突破性的進步之后,才可能談到下一個階段:創造(creation),這時計算機開始具有情感,能夠有自主意識,能夠自己創造新的東西。這個階段離我們還非常遙遠,大家也不用太擔心計算機會毀滅人類的說法。 人工智能的大事件和穩步發展 在 1997 年,IBM 深藍戰勝了國際象棋的人類世界冠軍,這是AI發展史上比較有標志性的一件事情。但是國際象棋相對圍棋來說,還是簡單很多,很久以來大家都不相信計算機能夠解決圍棋這個問題。 到 2011 年的時候,也是 IBM 在 Watson 在 jeopardy 的比賽中,計算機戰勝了人類。它在語言的一些理解和大規模查詢方面,體現出來計算機的優勢。 2016 年,AlphaGo 擊敗圍棋世界冠軍之后,大家發現深度學習還有人工智能確實能解決很多、特別是確定性的問題。 最近幾年,人工智能有了長足的進步,主要是受 Geoffrey Hinton 的影響。他是最早提出神經網絡的三個人之一,他一直堅持不懈地做深度神經網絡方面的工作。 一直到五年前,他發現計算能力足夠強了,因為有了 GPU,并且 GPU 在不同的機器上可以構成一個集群,計算能力比十幾年前翻了百倍以上。以前解決不了的問題,現在都可以解決了,以前訓練不了的模型現在都能訓練了。 第二個方面就是有了海量的數據,更多體現在像 Google、Facebook 這樣的大公司,他們有大量的用戶數據。現在,使用大量的數據,即使采用一些非常簡單的模型,也可以獲得非常好的效果。也就是說數據往往比算法更有效。 在深度學習提出之后,首先是在語音識別領域獲得了突破,準確率相對提高了百分之三四十,圖像識別和機器翻譯方面也獲得了很大的提高。 關于深度學習,我們認為它很好的一個方面就是簡單實用。像我們做語音識別,最開始用到高斯混合模型及區分性訓練算法,非常復雜。但是有了深度學習之后,相對來說更簡單了,你只需要把數據準備好,有一個足夠大的模型,把數據放進去,就可以訓練一個很好的系統直接使用了。這可能也是深度學習的一個優勢吧! 另外一個方面,因為深度學習可以在 GPU 集群上計算,所以你也不需要買大量的機器,就能夠完成大規模的訓練。這也是為什么很多創業公司,也能夠訓練出比較大的模型及高性能的系統。 創業公司如何搭建AI系統 上面討論了什么是 AI,接下來我們談談作為一個創業公司,在資源非常有限的情況下,怎么去搭建一個高效的 AI 系統。AI 系統主要可以分為數據、算法和工程這 3 個部分。如果用人來打比方,數據相當于是他的血液,算法是他的大腦,工程是他的骨骼。 沒有數據的話,算法只能是停留在課本里面。只有數據和算法這兩者結合起來,才能真正成為一個產品的雛形。如果缺少強有力的工程,那產品永遠走不出實驗室,只能處于演示的階段。所以這三者要非常緊密地結合在一起,才能夠做一個真正有用的人工智能的系統和產品。 當你的產品做得還不錯的時候,系統將會獲得更多用戶的數據,把這個數據再用過來反哺系統,這樣可以形成一個正循環,不斷地提高這個系統的性能。人工智能產品跟別的產品可能不太一樣;別的產品一般做出來之后,功能做成了基本上就完成了,但是人工智能系統是一個不斷迭代,不斷優化的一個系統。 關于數據,怎么去獲得數據? 作為一個小的創業公司,特別是剛開始的時候,沒有數據,公司怎么去獲得第一批數據?其實有各種各樣的辦法,比如我們做語音識別的時候,請了一個阿姨幫我們做飯。做完飯之后,我們給她一本菜譜,讓她給我們念上一個小時,然后把這個聲音錄下來,錄了 1 個月,一天 1 個小時,一個月之后就有 30 個小時的數據了。 這些數據基本可以做一個小系統了。我們就做了一個端到端的演示系統,搭了一個服務器,然后用戶可以在 APP 中,詢問宮保雞丁等等菜,系統就可以識別出來。在這個基礎上,我們已經可以開始做一些工程優化、系統方面的工作。 這個事情做完之后,我們知道這條路是可行的。有了這個基本系統,接下來就可以用更多方法,自動化的數據采集方式來建立一個平臺。當時 Google 的 API 開放的時候,用戶可以把一批語音數據塞進去,然后系統給用戶返回結果,這個結果不一定 100% 準確,但是已經有一些基本的數據可以去跑實驗了。 什么樣的數據有價值? 顯然,真實用戶的數據是價值最高的。不過,還要看公司對這個產品的定義。作為初創公司,不能做一個大而全的系統,而要更多專注在垂直領域上,做出自己的特色。比如出門問問,關注跟出行相關的一些垂直領域,涉及查詢地點、酒店、餐館、火車票、飛機票相關的信息,團隊采集了大量這些領域的數據。這方面 1 個小時的數據,相當于采集 10 個小時甚至更多的通用數據。 系統需要采集多少數據? 搭建一個人工智能系統的時候,到底要采集多少數據?顯然數據量是越大越好,但是因為成本有限,采集基本夠用的數據就行了。這里要做一個判斷,你可以畫一個曲線,比如在語音識別方面,再添加 1000 小時,系統性能還能提高多少?一般系統達到一定數據量后,從數據上獲得的性能提升是越來越小的。到達一個拐點的時候,同樣的資源放在其他的方面,比如算法、工程方面,可能會帶來更大的效果。 有效利用開源算法讓你事半功倍 在學術界,算法的研究最開始是由美國國防部領導的一些項目,帶來的一些學術上的突破。但是近五年到十年,基本上都是一些大公司和研究所,比如微軟研究院,Google 這樣的公司,因為它有大量的數據,大量的計算資源,它能夠在算法和技術方面帶來很大的提升。 作為一個創業公司,不希望再去重新制造輪子,所以盡量用一些開源的東西,比如語音識別用了Kaldi,還有 OpenFst、OpenGrm 這樣的一些開源軟件。語音合成、語義理解、深度學習這些方面基本上都是用開源的東西。因為主要還是用一些 Google 開源的軟件,整個公司的工程基礎、代碼庫還有代碼規范,都是跟隨 Google 的風格。 技術團隊的打造經驗 我們對代碼質量的要求非常高,比如強調 C++ 的編碼風格。Google 有可讀性這樣一個指標,就是說一個新人進入公司,無論之前有多么資深,假如沒有通過代碼可讀性測試的話,新人是不能夠直接把代碼提交到代碼庫里去,他必須要獲得 Readability 這樣一個證明。 所謂 Readability,就是要求程序員寫了一定量的代碼,然后代碼要提交到內部的代碼委員會,他們看到他的代碼之后,會提出大量的修改意見。可能該程序員寫了 100 行代碼,他們給他提出了 500 行的建議,這是很正常的。然后通過這樣來來回回的幾個迭代、循環,最后才能說這個程序員的代碼能力獲得了 Readability 證書。 還有,單元測試是非常必要的,特別是在一些關鍵的算法工程方面。短期內單元測試可能是耗費了很多時間,但是長期來說,它是非常重要的。因為寫大規模的軟件系統,相當于搭積木,假如有一塊不是很穩定的話,那可能搭起來的房子很快就會塌掉。特別是在特定情況下,比如人員發生流動的時候,如果沒有單元測試的話,新來的人再去改這個代碼,就不能夠保證這個代碼能完成它以前的功能。 Code Review 也是非常重要的,包括我本人在內,也是花大量的時間做 Code Review 。特別是對剛來的一些同學,我們能夠很快通過 Code Review 功能,讓他熟悉我們的代碼風格,然后讓他能夠寫出高質量的代碼。剛開始的時候,比如頭一兩個月的時候,可能花的時間比較多,但是他一旦進入軌道之后,工作的效率會提高很多。但是,前端團隊可能不太適合做這個事情。 還有代碼的提交,必須要有資深工程師的 LGTM,就是 Look Good To Me,這樣才能提交。一般情況下,如果沒有 LGTM 提交的代碼,是不符合流程的,通常我們會找他談話。 最后,需要一個比較高效的開發環境,就是要有一個強大穩定的 base 庫。我們從比較大的開源項目中,抽出一些有用的東西放到我們 base 庫里面,然后在這個基礎上再添加我們自己的一些基礎庫。 強大穩定的 base 庫是非常重要的。像 Google 的 base 庫里,大家可以看到其中很多都是最一流的工程師寫出來的,包括 Jeff Dean,這樣才能保證基礎庫的穩定和高效。 人才招聘看重解決問題的能力 怎么招人?招什么樣的人?大公司和小公司實際上是很不一樣的,大公司希望招一個非常專業的人才,我們叫 specialist,就是說在某一個領域他能做得非常深,因為大公司不需要你一個人懂10個不同方面,只需把某一個方面做細、做透就行了。 而創業公司正好是相反的,因為他總共就那么幾個人,那這個人必須把這 10 件事情要全部給做掉。我們通常希望招人能夠招一個通才(generalist),就是說不需要太專,但是他的學習能力要很強,并且也愿意去接觸更多的項目,這樣的話,才比較適合初創公司這樣快速的發展。 執行力也很重要,一定要能夠按時把任務完成,當然問題挑戰很多,我們希望員工最終能夠主動想辦法完成任務,而不要找各種各樣完不成的理由。 最后一個方面就是要有好的溝通能力,跟團隊的成員要能夠溝通,才能夠很好的合作。 小公司 CTO 要做“全能型”人才 CTO 的主要職能是什么?首先是要給公司創造價值,這肯定是最重要的。公司最重要的是什么?首先是產品,產品要質量好,能夠商業化,能夠賺錢,這是最重要的。CTO 更多負責技術方面,怎么把技術和產品更有機的結合在一起為公司創造更大的價值? CTO 不僅要想現在的技術怎么更好地跟產品結合在一起,也要想一些中長期的計劃,就是以現有的團隊和資源,要做什么樣的投入才能夠讓產品在今后一年、兩年時間內能夠保持優勢,保持創新,能夠提高產品的競爭力。這一點非常重要,它考驗 CTO 對于策略和戰略的把控。 第二個任務是要搭建團隊,要確定今后幾年,公司要向哪個方向或技術發展。接下來,就要實現資源到位。然后,CTO 要花很多的時間去招人。CTO 不可能什么事情都能做,他一定要招到很多在某一些方面比他強的人,有了這些人后,工程技術團隊才能夠真正的有戰斗力,能夠做出一個人不可能做到的事情。 小公司在很多情況下,CTO 還扮演著救火隊員這樣的一個職能,就是有一些難題出現了,他要帶領大家沖上去把這些困難的問題解決。 作者:雷欣 雷欣 出門問問CTO,人工智能專家
編輯:吳叢叢、孫淑娟
本文選自《CTO說》
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】