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