有些人認為人工智能和aclass=機器學(xué)習(xí)的本質(zhì)不過是大肆運用if語句,或者說編程知識罷了,建議說這話的人最好能拿出詳細證據(jù)證明。本文將對比兩個概念,并解釋從事這兩個領(lǐng)域的專業(yè)人員的區(qū)別:他們的身份是什么?
有些人認為人工智能和《aclass=“》機器學(xué)習(xí)的本質(zhì)不過是大肆運用if語句,或者說編程知識罷了,建議說這話的人最好能拿出詳細證據(jù)證明。本文將對比兩個概念,并解釋從事這兩個領(lǐng)域的專業(yè)人員的區(qū)別:他們的身份是什么?軟件工程師、軟件開發(fā)人員、機器學(xué)習(xí)專家、數(shù)據(jù)科學(xué)家、程序員或碼農(nóng)……有些人甚至更夸張,稱他們?yōu)槿陶?、大師或搖滾明星!他們實際上都是一類人嗎?即便真的如此,機器學(xué)習(xí)和傳統(tǒng)編程之間又是否存在界限呢?
機器學(xué)習(xí)vs編程:首先,什么是機器學(xué)習(xí)?
人們常說人工智能和機器學(xué)習(xí)不過是if語句,或者簡單來說就是統(tǒng)計學(xué)知識。那除此之外呢?難道機器學(xué)習(xí)就只是數(shù)學(xué)和算法的結(jié)合嗎?這種簡單化的概括有時候聽起來似乎很有趣,但機器學(xué)習(xí)的涵義顯然要比這更復(fù)雜。
不過,讓我們先來看一個更加恰當?shù)慕忉尅?/p>
簡單來說,人工智能就像是一把傘,下面涵蓋圖像處理、認知科學(xué)、神經(jīng)網(wǎng)絡(luò)以及其他各個領(lǐng)域內(nèi)容。機器學(xué)習(xí)也是傘下的一個組成部分,它的核心思想是計算機不僅能執(zhí)行預(yù)先寫好的算法,同時還會自主學(xué)習(xí)如何解決問題。換句話說,可以用亞瑟·塞繆爾(ArthurSamuel,“機器學(xué)習(xí)”術(shù)語的提出者)曾給出的一個絕佳定義來解釋:
機器學(xué)習(xí)是賦予計算機無明確編程即可學(xué)習(xí)的研究領(lǐng)域。
所以說,機器學(xué)習(xí)能夠教機器完成算法難以解決的各種復(fù)雜任務(wù)。具體到哪些任務(wù)呢?它們很可能已經(jīng)以各種形式出現(xiàn)在了生活中。例如:手機上的面部識別或語音識別、汽車駕駛(谷歌自動駕駛汽車)、智能診療(Watson)、產(chǎn)品推薦、購書(亞馬遜)、觀影(Netfix)、音樂(Spotify)、個人助手(Siri,Cortana)……還有列舉不完的其他例子。
這樣應(yīng)該已經(jīng)解釋清楚了,接下來要談的是有關(guān)機器學(xué)習(xí)十分重要的一點。
所有有效的機器學(xué)習(xí)技術(shù)都可以追溯到權(quán)限不同的三種訪問級別。什么意思呢?首先,第一級別的機器學(xué)習(xí)技術(shù)只有谷歌和IBM這些主要行業(yè)巨頭才有權(quán)訪問。第二級別學(xué)生等具備一定知識的人可使用。第三級別則代表即便是老人也能夠輕松應(yīng)對。
目前機器學(xué)習(xí)的發(fā)展階段正出于第二級別和第三級別的交界處。因此,借助這一技術(shù),世界變化的進程也在飛速加快。
關(guān)于機器學(xué)習(xí)的最后一個要點:大多數(shù)機器學(xué)習(xí)任務(wù)可以被劃分為有教師學(xué)習(xí)(監(jiān)督學(xué)習(xí))和自主學(xué)習(xí)(無監(jiān)督學(xué)習(xí))。不過,如果把機器學(xué)習(xí)的場景想象成程序員在旁邊打個巴掌給個棗兒,就有點跑偏了。
“教師”在這里表示數(shù)據(jù)處理過程中的人為干預(yù)。在機器進行監(jiān)督學(xué)習(xí)訓(xùn)練時,要先獲得數(shù)據(jù)再根據(jù)數(shù)據(jù)進行預(yù)測。而另一方面,在機器自學(xué),即進行無監(jiān)督學(xué)習(xí)時,仍先需要數(shù)據(jù),但這時要找到數(shù)據(jù)的屬性。
機器學(xué)習(xí)vs編程:機器學(xué)習(xí)和編程有何差別?
“在傳統(tǒng)編程中,程序的一切表現(xiàn)都取決于程序員的硬編碼。在機器學(xué)習(xí)中,機器有大量空間自己學(xué)習(xí)數(shù)據(jù)并給予反饋?!?/p>
因此,上文提到的各種專業(yè)人員不能相互調(diào)換身份:數(shù)據(jù)工程師取代不了傳統(tǒng)程序員的工作,反之亦然。盡管根據(jù)要求每位數(shù)據(jù)工程師都能夠使用至少一種編碼語言,但傳統(tǒng)的編程僅占工程師工作內(nèi)容的一小部分。而另一方面,軟件開發(fā)人員也絕不能使用機器學(xué)習(xí)的算法來發(fā)布網(wǎng)站。
人工智能等機器學(xué)習(xí)技術(shù)不是傳統(tǒng)編程的替代品,而是一個補充。例如,可以借助機器學(xué)習(xí)為一個網(wǎng)上貿(mào)易平臺建立預(yù)測算法,但同時平臺的用戶界面、數(shù)據(jù)可視化以及其他元素則需要使用Ruby或Java等主流編程語言來實現(xiàn)。
因此,關(guān)鍵在于:機器學(xué)習(xí)可在傳統(tǒng)編程無法解決問題時用來輔助,但僅機器學(xué)習(xí)自身無法完全勝任某項特定任務(wù)。
這對于實踐有何借鑒意義?本文將通過對比預(yù)測匯率的兩種不同方法來列舉一個基于機器學(xué)習(xí)的典型案例。
傳統(tǒng)編程法
解決任何問題的首要任務(wù)都是創(chuàng)建最佳算法并編寫代碼。然后,必須設(shè)置輸入參數(shù),一般來說只要實現(xiàn)的算法沒問題,實際上就可以得到預(yù)期的結(jié)果。
軟件開發(fā)師如何解決問題
?、匍_發(fā)一個算法;②編寫算法代碼;③執(zhí)行該算法輸入?yún)?shù)-執(zhí)行算法-得出結(jié)果。
但是,要進行預(yù)測任務(wù)需要使用一個包含不同輸入?yún)?shù)的算法。具體到預(yù)測匯率,必須參照諸如前一天匯率、影響貨幣的國內(nèi)外經(jīng)濟變化以及其他各種因素。
之后,就能大致得出一個參照一系列參數(shù)的解決方案,這個方案能根據(jù)輸入數(shù)據(jù)預(yù)測未來匯率。
但是,關(guān)于這個方案,還有至關(guān)重要的一點需要考慮進去,或者說要解釋清楚。究竟是什么呢?
答案其實很簡單,我們需要添加數(shù)以萬計的參數(shù),而它們的有限集構(gòu)建了一個非?;A(chǔ)且不可擴展的模型。所以,處理如此龐大的數(shù)據(jù)數(shù)組對任何人而言都十分困難。
機器學(xué)習(xí)法解決這一任務(wù)的方式又有何不同呢?
為使用機器學(xué)習(xí)解決問題,數(shù)據(jù)工程師要采取另一套完全不同的流程。工程師們無需開發(fā)一個單獨的算法,只需收集一系列歷史數(shù)據(jù)以供半自動建模處理。
在處理了足夠多的數(shù)據(jù)之后,數(shù)據(jù)工程師將半自動模型運用到自定義好的機器學(xué)習(xí)算法。最終便得出一個能根據(jù)輸入新數(shù)據(jù)來預(yù)測結(jié)果的模型。
數(shù)據(jù)工程師如何借助機器學(xué)習(xí)開發(fā)解決方案?
機器學(xué)習(xí)的顯著特點是無需建立模型。這一復(fù)雜且重要的任務(wù)將由機器學(xué)習(xí)算法來執(zhí)行。機器學(xué)習(xí)專家在此基礎(chǔ)上簡單編輯即可。
機器學(xué)習(xí)和編程的另一顯著差異在于模型能夠處理的輸入?yún)?shù)數(shù)量。為保證預(yù)測準確性,必須添加數(shù)千個參數(shù)并且高精度執(zhí)行這些參數(shù),因為每一比特的運算都會影響最終結(jié)果。人類自身尚且無法創(chuàng)建能妥善處理全部參數(shù)細節(jié)的算法。
然而機器學(xué)習(xí)的處理能力沒有限制。只要處理器和內(nèi)存足夠大,就能輸入盡可能多的所需參數(shù)。毫無疑問,正因如此,如今機器學(xué)習(xí)才如此強大且應(yīng)用如此廣泛。
機器學(xué)習(xí)專家、數(shù)據(jù)科學(xué)家、
程序員和軟件工程師……究竟誰是誰?
根據(jù)維基百科,數(shù)據(jù)科學(xué)是“通過科學(xué)方法、程序、算法和系統(tǒng)從結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)中獲取知識和見解的多學(xué)科領(lǐng)域”。
這一定義聽起來似乎沒什么大不了的。
關(guān)鍵是接下來的解釋:
“使用最強硬件、最佳程序系統(tǒng)和最高效的算法來解決問題”。
更有意思的是:
2012年,《哈佛商業(yè)評論》將數(shù)據(jù)科學(xué)家稱為“21世紀最性感的工作”。
其實,數(shù)據(jù)科學(xué)就像計算機科學(xué)一樣,是另一把覆蓋面廣泛的大傘,只不過數(shù)據(jù)科學(xué)旨在處理數(shù)據(jù)并從中提取有用信息。
那編程是什么呢?如今的數(shù)據(jù)科學(xué)家們?yōu)榱诉M行研究都會做一些額外的編程工作。他們不僅僅是程序員,通常情況下還都有應(yīng)用統(tǒng)計學(xué)或科研學(xué)習(xí)背景。有些科學(xué)家,特別那些需要把數(shù)據(jù)科學(xué)或機器學(xué)習(xí)應(yīng)用到公司產(chǎn)品的專家們還會負責(zé)軟件工程。最關(guān)鍵的是,數(shù)據(jù)科學(xué)家不一定必須要擅長編程,但一定要會使用Matlab、SPSS、SAS等統(tǒng)計學(xué)軟件。
機器學(xué)習(xí)工程師又是什么樣的角色?
機器學(xué)習(xí)工程師更偏技術(shù)化。換句話說,相比數(shù)據(jù)科學(xué)家,機器學(xué)習(xí)工程師跟傳統(tǒng)軟件工程師在工作中的相同之處更多。
機器學(xué)習(xí)工程師的工作內(nèi)容和數(shù)據(jù)科學(xué)家大體相似。機器學(xué)習(xí)工程師也需要處理數(shù)據(jù),實踐各種機器學(xué)習(xí)算法,借助這些算法解決問題,創(chuàng)建原型和現(xiàn)成的解決方案。
關(guān)于對他們的能力要求,需要著重強調(diào):
·使用一種或多種計算機語言(通常為Python語言)編程的扎實能力。
·相比數(shù)據(jù)分析,更加看重處理機器學(xué)習(xí)算法的能力。
·在現(xiàn)成程序庫使用如NumPy/SciPy等Python包以組成不同模式堆棧的能力。
·使用Hadoop等創(chuàng)建分布式程序的能力。
現(xiàn)在重新回到編程這一話題并仔細研究一下:程序員都有哪些工作任務(wù)?
程序員實際上就像是數(shù)據(jù)分析師或者是業(yè)務(wù)系統(tǒng)開發(fā)人員。他們不必親自構(gòu)建系統(tǒng),只需針對現(xiàn)有系統(tǒng)編寫結(jié)構(gòu)松散的代碼。因此,可以把數(shù)據(jù)科學(xué)稱為新的編程浪潮,但是寫代碼只是其中的一小部分。別理解錯了哦!
繼續(xù)深究就會發(fā)現(xiàn),還有一些其他術(shù)語,如軟件工程師和軟件開發(fā)人員,二者的概念也不一樣。例如:軟件工程師必須要完成整項工程,工作內(nèi)容涉及產(chǎn)品應(yīng)用程序,分布式系統(tǒng),并發(fā)、構(gòu)建系統(tǒng)、微服務(wù)等各個方面。而軟件開發(fā)人員為準確起見則需要對軟件開發(fā)的各個周期都十分清楚,而不僅限于了解軟件的應(yīng)用(有時候這些工作不涉及任何編碼或代碼知識)。
所以,是編程還是機器學(xué)習(xí),現(xiàn)在你體會到二者差異了嗎?希望本文有助于理解這兩個容易混淆的概念。毫無疑問,編程和機器學(xué)習(xí)有共同之處,即都屬于技術(shù),但相比之下二者的區(qū)別大于共同點。因此,機器學(xué)習(xí)工程師、軟件工程師和軟件開發(fā)人員完全不能相互替代。
評論
查看更多