天天看點

雲計算、大資料、人工智能的關系

對一個大資料公司,積累了大量的資料,也會使用一些人工智能的算法提供一些服務。對于一個人工智能公司,也不可能沒有大資料平台支撐。是以雲計算,大資料,人工智能就這樣整合起來,完成了相遇,相識,相知。

網際網路科技發展蓬勃興起,人工智能時代來臨,抓住下一個風口。為幫助那些往想網際網路方向轉行想學習,

卻因為時間不夠,資源不足而放棄的人。我自己整理的一份最新的大資料進階資料和進階開發教程,大資料

學習群:199加上【427】最後加上210就可以找到組織學習  歡迎進階中和進想深入大資料的小夥伴加入。

如果你準備了解大資料開發或是正在學習大資料開發,歡迎加入我們的大資料學習q群378144993,群裡365天每天與大家分享免費的學習教程以及開發工具,你與大咖就差這個圈.

一、雲計算最初是實作資源管理的靈活性

我們首先來說雲計算,雲計算最初的目标是對資源的管理,管理的主要是計算,存儲,網絡資源。

1.1 管資料中心就像配電腦

什麼叫計算,存儲,網絡資源呢?就說你要買台筆記本電腦吧,你是不是要關心這台電腦什麼樣的CPU啊?多大的記憶體啊?這兩個我們稱為計算資源。您可能還會問硬碟多大啊?這就是存儲資源。網速有多快,帶寬多大啊?這就是網絡資源。

對于一台電腦是這個樣子的,對于一個資料中心也是同樣的。想象一個非常大的機房裡面有很多的伺服器,這些伺服器也是有CPU,記憶體,硬碟的,也是和網際網路連接配接的。這個時候的一個問題就是,資料中心的人是怎麼把這些裝置統一的管理起來的呢?

1.2 靈活就是想要多大的配置都行,想什麼時候用馬上就能用

比如有個人需要一台配置很小的電腦,隻有一個CPU,1G記憶體,10G的硬碟,1M的帶寬,你能給他嗎?像配置這麼小的電腦,很難買到了,家裡随便拉一個寬帶都要10M。然而如果去雲計算平台上,就可以很容易得到這個電腦。如果你需要一個配置很強大的電腦,也可以輕松得到。這就是在配置(計算能力)上的靈活性。

另外你想用的時候馬上就可以開通使用。這就是在時間上的靈活性。

這就是我們常說的雲計算的彈性。為了解決這個彈性的問題,經曆了漫長時間的發展。

1.3 實體裝置階段

首先第一個階段就是實體機,或者說實體裝置時期。這個時期相當于客戶需要一台電腦,我們就買一台放在資料中心裡。實體裝置當然是越來越牛,例如伺服器,記憶體動不動就是百G記憶體,例如網絡裝置,一個端口的帶寬就能有幾十G甚至上百G,例如存儲,在資料中心至少是PB級别的(一個P是1024個T,一個T是1024個G)。

然而實體裝置不能做到很好的靈活性。

首先時間不靈活,比如買台伺服器,都有采購的時間,如果和供應商關系一般,可能采購一個月,和供應商關系好也要一個星期。使用者等了一個星期後,這時候電腦才到位,使用者還要花時間部署自己的應用。

其次是配置不靈活,如果使用者要一個很小的電腦,現在哪有配置這麼低的電腦啊。但是如果買一個正常配置的電腦,花費就會高些,不劃算。

1.4 虛拟化階段

有人就想辦法了。就是虛拟化。使用者不是隻要一個很小的電腦麼?資料中心的實體裝置都很強大,我可以從實體的CPU,記憶體,硬碟中虛拟出一小塊來給客戶,其實每個客戶用的是整個裝置上的一小塊。虛拟化使不同客戶使用的資源是隔離的、獨立的,,實際上你的10G和他的10G硬碟都在一塊實體硬碟上。

另外虛拟出一個電腦是非常快的,基本上幾分鐘就能解決。是以在一個雲上要建立一台電腦,一般幾分鐘就出來了。

這樣靈活性的問題就解決了。

1.5 雲計算階段

虛拟化軟體解決了靈活性問題,其實不完全對。因為虛拟化軟體一般建立一台虛拟的電腦,是需要人工指定這台虛拟電腦放在哪台實體機上的,還需要比較複雜的人工配置。是以僅僅憑虛拟化軟體能管理的實體機的叢集規模都不是很大,一般在十幾台,幾十台,最多百台這麼一個規模。随着叢集規模越來越大,千台起步,動辄上萬台,甚至百萬台,如果了解一下BAT,谷歌,亞馬遜,會發現伺服器數目都大的驚人。這麼多機器要靠人工去建立和配置,幾乎是不可能的事情,還是需要程式去做這個事情。

人們發明了一些算法來做這個事情,算法的名字叫做排程(Scheduler)。通俗一點的說,就是有一個排程中心,幾千台機器都在一個池子裡面,使用者需要什麼配置的虛拟電腦,排程中心會自動從大池子裡面找一個能夠滿足使用者需求的地方,把虛拟電腦建立好并配置好,使用者就馬上能用了。這個階段,我們稱為池化,或者雲化,到了這個階段,才可以稱為雲計算,在這之前隻能叫虛拟化。

1.6 雲計算的私有與公有

雲計算大緻分兩種,一個是私有雲,一個是公有雲。私有雲就是把虛拟化和雲化的這套軟體部署在自己的資料中心裡面,使用私有雲的使用者往往很有錢,自己買地建機房,自己買伺服器。公有雲就是把虛拟化和雲化軟體部署在雲服務商的資料中心裡面,使用者不需要很大的投入,隻要注冊一個賬号,就能在一個網頁上建立一台虛拟電腦,例如亞馬遜的公有雲,阿裡雲,騰訊雲,網易雲等。

亞馬遜呢為什麼要做公有雲呢?我們知道亞馬遜原來是國外比較大的一個電商,它做電商的時候也肯定會遇到類似雙11的場景,在某一個時刻大家都沖上來買東西。當大家都沖上買東西的時候,就特别需要雲的靈活性。需要在雙十一的時候,建立一大批虛拟電腦來支撐電商應用,過了雙十一再把多餘的資源釋放掉去幹别的。是以亞馬遜就需要一個雲平台。

然而商用的虛拟化軟體太貴了,亞馬遜總不能把自己在電商賺的錢全部給了虛拟化廠商吧。于是亞馬遜基于開源的虛拟化技術,開發了一套自己的雲化軟體。沒想到亞馬遜後來電商越做越牛,雲平台也越做越牛。由于亞馬遜雲平台需要支撐自己的電商應用,而傳統的雲計算廠商多為IT廠商出身,沒有自己的應用,因而亞馬遜的雲平台對應用更加的友好,迅速發展成為雲計算的第一品牌。在亞馬遜公布其雲計算平台财報之前,人們都猜測,亞馬遜電商賺錢,雲也賺錢嗎?後來一公布财報,發現不是一般的賺錢,僅僅去年,亞馬遜AWS年營收達122億美元,營運利潤31億美元。

1.7 雲計算的賺錢與情懷

公有雲的第一名亞馬遜過得很爽,第二名Rackspace過的就一般了。沒辦法,這就是網際網路行業的殘酷性,多是赢者通吃的模式。第二名就想,我幹不過老大怎麼辦呢?開源吧。亞馬遜雖然使用了開源的虛拟化技術,但是雲化的代碼是閉源的,很多想做又做不了雲化平台的公司,隻能眼巴巴的看着亞馬遜掙大錢。Rackspace把源代碼一公開,整個行業就可以一起把這個平台越做越好,兄弟們大家一起上,和老大拼了。

于是Rackspace和美國航空航天局合作創辦了開源軟體OpenStack,如圖所示OpenStack的架構圖,能夠看到三個關鍵字,Compute計算,Networking網絡,Storage存儲。還是一個計算,網絡,存儲的雲化管理平台。

當然第二名的技術也是非常棒的,有了OpenStack之後,果真像Rackspace想象的一樣,所有想做雲的大企業都瘋了,你能想象到的所有如雷貫耳的大型IT企業,IBM,惠普,戴爾,華為,聯想等等。有了這樣一個開源的雲平台OpenStack,所有的IT廠商都加入到這個社群中來,對這個雲平台進行貢獻,包裝成自己的産品,連同自己的硬體裝置一起賣。有的做了私有雲,有的做了公有雲,OpenStack已經成為開源雲平台的标準。

1.8 IaaS, 資源層面的靈活性

随着OpenStack的技術越來越成熟,可以管理的規模也越來越大,并且可以部署多套,比如北京部署一套,杭州部署兩套,廣州部署一套,然後進行統一的管理。這樣整個規模就更大了。在這個規模下,對于普通使用者的感覺來講,想要多少就有多少。還是拿雲盤舉例子,每個使用者雲盤都配置設定了5T甚至更大的空間,如果有1億人,那加起來空間多大啊。其實背後的機制是這樣的,配置設定你的空間,你可能隻用了其中很少一點,比如說它配置設定給你了5個T,這麼大的空間僅僅是你看到的,而不是真的就給你了,你其實隻用了50個G,則真實給你的就是50個G,随着你檔案的不斷上傳,分給你的空間會越來越多。當大家都上傳,雲平台發現快滿了的時候(例如用了70%),會采購更多的伺服器,擴充背後的資源,這個對使用者來說是看不到的。其實有點像銀行,給儲戶的感覺是什麼時候取錢都有,隻要不同時擠兌,銀行就不會沒錢。

到了這個階段,雲計算基本上實作了靈活性,實作了計算,網絡,存儲資源的彈性。

計算,網絡,存儲我們稱為基礎設施, 管理這些基礎設施的雲平台,我們稱為基礎設施服務,也就是我們常說的IaaS。

二、雲計算不光管資源,也要管應用

有了IaaS,實作了資源層面的彈性就夠了嗎?顯然不是。還有應用層面的彈性。這裡舉個例子,比如說實作一個電商的應用,平時十台機器就夠了,雙十一需要一百台。你可能覺得很好辦啊,有了IaaS,新建立九十台機器就可以了啊。但是90台機器建立出來是空的啊,電商應用并沒有放上去啊,隻能你公司的運維人員一台一台的弄,還是需要很長時間才能安裝好的。雖然資源層面實作了彈性,但是沒有應用層的彈性,依然靈活性是不夠的。

有沒有方法解決這個問題呢?于是人們在IaaS平台之上又加了一層,用于管理應用層面的彈性,這一層通常稱為PaaS(Platform As A Service)。這一層往往比較難了解,其實大緻分兩部分,一部分自己的應用自動安裝,一部分通用的應用不用安裝。

我們先來說第一部分,自己的應用自動安裝。比如電商應用是你自己開發的,除了你自己,其他人是不知道怎麼安裝的,比如電商應用,安裝的時候需要配置支付寶或者微信的賬号,才能别人在你的電商上買東西的時候,付的錢是打到你的賬戶裡面的,除了你,誰也不知道,是以安裝的過程平台幫不了忙,但是能夠幫你做的自動化,你需要做一些工作,将自己的配置資訊融入到自動化的安裝過程中方可。比如上面的例子,雙十一新建立出來的90台機器是空的,如果能夠提供一個工具,能夠自動在這新的90台機器上将電商應用安裝好,就能夠實作應用層面的真正彈性。例如Puppet, Chef, Ansible, Cloud Foundary都可以幹這件事情,最新的容器技術Docker能更好的幹這件事情,不做技術的可以不用管這些詞。

第二部分,通用的應用不用安裝。所謂通用的應用,一般指一些複雜性比較高,但是大家都在用的,例如資料庫。幾乎所有的應用都會用資料庫,但是資料庫軟體是标準的,雖然安裝和維護比較複雜,但是無論誰安裝都是一樣。這樣的應用可以變成标準的PaaS層的應用放在雲平台的界面上。當使用者需要一個資料庫的時候,一點就出來了,使用者就可以直接用了。大多數雲平台會提供Mysql這樣的開源資料庫,維護這個資料庫,卻需要一個很大的團隊,如果這個資料庫能夠優化到能夠支撐雙十一,也不是一年兩年能夠搞定的。比如您是一個做單車的,就沒必要招一個非常大的資料庫團隊來幹這件事情,應該交給雲平台來做這件事情,雲平台專門養了幾百人維護這套系統,您隻要專注于您的單車應用就可以了。

要麼是自動部署,要麼是不用部署,總的來說就是應用層你也要少操心,這就是PaaS層的重要作用。

雖說腳本的方式能夠解決自己的應用的部署問題,然而不同的環境千差萬别,一個腳本往往在一個環境上運作正确,到另一個環境就不正确了。而容器是能更好的解決這個問題的。

容器是 Container,Container另一個意思是集裝箱,其實容器的思想就是要變成軟體傳遞的集裝箱。集裝箱的特點,一是封裝,二是标準。

在沒有集裝箱的時代,假設将貨物從 A運到 B,中間要經過三個碼頭、換三次船。每次都要将貨物卸下船來,擺的七零八落,然後搬上船重新整齊擺好。是以在沒有集裝箱的時候,每次換船,船員們都要在岸上待幾天才能走。

有了集裝箱以後,所有的貨物都打包在一起了,并且集裝箱的尺寸全部一緻,是以每次換船的時候,一個箱子整體搬過去就行了,小時級别就能完成,船員再也不用上岸長時間耽擱了。

這是集裝箱“封裝”、“标準”兩大特點在生活中的應用。

那麼容器如何對應用打包呢?還是要學習集裝箱,首先要有個封閉的環境,将貨物封裝起來,讓貨物之間互不幹擾,互相隔離,這樣裝貨卸貨才友善。好在 Ubuntu中的LXC技術早就能做到這一點。

封閉的環境主要使用了兩種技術,一種是看起來是隔離的技術,稱為 Namespace,也即每個 Namespace中的應用看到的是不同的 IP位址、使用者空間、程号等。另一種是用起來是隔離的技術,稱為 Cgroups,也即明明整台機器有很多的 CPU、記憶體,而一個應用隻能用其中的一部分。

所謂的鏡像,就是将你焊好集裝箱的那一刻,将集裝箱的狀态儲存下來,就像孫悟空說:“定”,集裝箱裡面就定在了那一刻,然後将這一刻的狀态儲存成一系列檔案。這些檔案的格式是标準的,誰看到這些檔案都能還原當時定住的那個時刻。将鏡像還原成運作時的過程(就是讀取鏡像檔案,還原那個時刻的過程)就是容器運作的過程。

有了容器,使得 PaaS層對于使用者自身應用的自動部署變得快速而優雅。

三、大資料擁抱雲計算

在PaaS層中一個複雜的通用應用就是大資料平台。大資料是如何一步一步融入雲計算的呢?

3.1 資料不大也包含智慧

一開始這個大資料并不大,你想象原來才有多少資料?現在大家都去看電子書,上網看新聞了,在我們80後小時候,資訊量沒有那麼大,也就看看書,看看報,一個星期的報紙加起來才有多少字啊,如果你不在一個大城市,一個普通的學校的圖書館加起來也沒幾個書架,是後來随着資訊化的到來,資訊才會越來越多。

首先我們來看一下大資料裡面的資料,就分三種類型,一種叫結構化的資料,一種叫非結構化的資料,還有一種叫半結構化的資料。什麼叫結構化的資料呢?叫有固定格式和有限長度的資料。例如填的表格就是結構化的資料,國籍:中華人民共和國,民族:漢,性别:男,這都叫結構化資料。現在越來越多的就是非結構化的資料,就是不定長,無固定格式的資料,例如網頁,有時候非常長,有時候幾句話就沒了,例如語音,視訊都是非結構化的資料。半結構化資料是一些xml或者html的格式的,不從事技術的可能不了解,但也沒有關系。

資料怎麼樣才能對人有用呢?其實資料本身不是有用的,必須要經過一定的處理。例如你每天跑步帶個手環收集的也是資料,網上這麼多網頁也是資料,我們稱為Data,資料本身沒有什麼用處,但是資料裡面包含一個很重要的東西,叫做資訊Information,資料十分雜亂,經過梳理和清洗,才能夠稱為資訊。資訊會包含很多規律,我們需要從資訊中将規律總結出來,稱為知識knowledge,知識改變命運。資訊是很多的,但是有人看到了資訊相當于白看,但是有人就從資訊中看到了電商的未來,有人看到了直播的未來,是以人家就牛了,你如果沒有從資訊中提取出知識,天天看朋友圈,也隻能在網際網路滾滾大潮中做個看客。有了知識,然後利用這些知識去應用于實戰,有的人會做得非常好,這個東西叫做智慧intelligence。有知識并不一定有智慧,例如好多學者很有知識,已經發生的事情可以從各個角度分析的頭頭是道,但一到實幹就歇菜,并不能轉化成為智慧。而很多的創業家之是以偉大,就是通過獲得的知識應用于實踐,最後做了很大的生意。

是以資料的應用分這四個步驟:資料,資訊,知識,智慧。這是很多商家都想要的,你看我收集了這麼多的資料,能不能基于這些資料來幫我做下一步的決策,改善我的産品,例如讓使用者看視訊的時候旁邊彈出廣告,正好是他想買的東西,再如讓使用者聽音樂的時候,另外推薦一些他非常想聽的其他音樂。使用者在我的應用或者網站上随便點點滑鼠,輸入文字對我來說都是資料,我就是要将其中某些東西提取出來,指導實踐,形成智慧,讓使用者陷入到我的應用裡面不可自拔,上了我的網就不想離開,手不停的點,不停的買,很多人說雙十一我都想斷網了,我老婆在上面不斷的買買買,買了A又推薦B,老婆大人說,“哎呀,B也是我喜歡的啊,老公我要買”。你說這個程式怎麼這麼牛,這麼有智慧,比我還了解我老婆,這件事情是怎麼做到的呢?

3.2 資料如何升華為智慧

資料的處理分幾個步驟,完成了才最後會有智慧。

第一個步驟叫資料的收集。首先得有資料,資料的收集有兩個方式,第一個方式是拿,專業點的說法叫抓取或者爬取,例如搜尋引擎就是這麼做的,它把網上的所有的資訊都下載下傳到它的資料中心,然後你一搜才能搜出來。比如你去搜尋的時候,結果會是一個清單,這個清單為什麼會在搜尋引擎的公司裡面呢,就是因為他把這個資料啊都拿下來了,但是你一點連結,點出來這個網站就不在搜尋引擎它們公司了。比如說新浪有個新聞,你拿百度搜出來,你不點的時候,那一頁在百度資料中心,一點出來的網頁就是在新浪的資料中心了。另外一個方式就是推送,有很多終端可以幫我收集資料,比如說小米手環,可以将你每天跑步的資料,心跳的資料,睡眠的資料都上傳到資料中心裡面。

第二個步驟是資料的傳輸。一般會通過隊列方式進行,因為資料量實在是太大了,資料必須經過處理才會有用,可是系統處理不過來,隻好排好隊,慢慢的處理。

第三個步驟是資料的存儲。現在資料就是金錢,掌握了資料就相當于掌握了錢。要不然網站怎麼知道你想買什麼呢?就是因為它有你曆史的交易的資料,這個資訊可不能給别人,十分寶貴,是以需要存儲下來。

第四個步驟是資料的處理和分析。上面存儲的資料是原始資料,原始資料多是雜亂無章的,有很多垃圾資料在裡面,因而需要清洗和過濾,得到一些高品質的資料。對于高品質的資料,就可以進行分析,進而對資料進行分類,或者發現資料之間的互相關系,得到知識。比如盛傳的沃爾瑪超市的啤酒和尿布的故事,就是通過對人們的購買資料進行分析,發現了男人一般買尿布的時候,會同時購買啤酒,這樣就發現了啤酒和尿布之間的互相關系,獲得知識,然後應用到實踐中,将啤酒和尿布的櫃台弄的很近,就獲得了智慧。

第五個步驟就是對于資料的檢索和挖掘。檢索就是搜尋,所謂外事不決問google,内事不決問百度。内外兩大搜尋引擎都是講分析後的資料放入搜尋引擎,進而人們想尋找資訊的時候,一搜就有了。另外就是挖掘,僅僅搜尋出來已經不能滿足人們的要求了,還需要從資訊中挖掘出互相的關系。比如财經搜尋,當搜尋某個公司股票的時候,該公司的高管是不是也應該被挖掘出來呢?如果僅僅搜尋出這個公司的股票發現漲的特别好,于是你就去買了,其實其高管發了一個聲明,對股票十分不利,第二天就跌了,這不坑害廣大股民麼?是以通過各種算法挖掘資料中的關系,形成知識庫,十分重要。

3.3 大資料時代,衆人拾柴火焰高

當資料量很小的時候,很少的幾台機器就能解決。慢慢的當資料量越來越大,最牛的伺服器都解決不了問題的時候,就想怎麼辦呢?要聚合多台機器的力量,大家齊心協力一起把這個事搞定,衆人拾柴火焰高。

對于資料的收集,對于IoT來講,外面部署這成千上萬的檢測裝置,将大量的溫度,适度,監控,電力等等資料統統收集上來,對于網際網路網頁的搜尋引擎來講,需要将整個網際網路所有的網頁都下載下傳下來,這顯然一台機器做不到,需要多台機器組成網絡爬蟲系統,每台機器下載下傳一部分,同時工作,才能在有限的時間内,将海量的網頁下載下傳完畢。

對于資料的傳輸,一個記憶體裡面的隊列肯定會被大量的資料擠爆掉,于是就産生了基于硬碟的分布式隊列,這樣隊列可以多台機器同時傳輸,随你資料量多大,隻要我的隊列足夠多,管道足夠粗,就能夠撐得住。

對于資料的存儲,一台機器的檔案系統肯定是放不下了,是以需要一個很大的分布式檔案系統來做這件事情,把多台機器的硬碟打成一塊大的檔案系統。

再如資料的分析,可能需要對大量的資料做分解,統計,彙總,一台機器肯定搞不定,處理到猴年馬月也分析不完,于是就有分布式計算的方法,将大量的資料分成小份,每台機器處理一小份,多台機器并行處理,很快就能算完。例如著名的Terasort對1個TB的資料排序,相當于1024G,如果單機處理,怎麼也要幾個小時,但是并行處理209秒就完成了。

是以說大資料平台,什麼叫做大資料,說白了就是一台機器幹不完,大家一起幹。随着資料量越來越大,很多不大的公司都需要處理相當多的資料,這些小公司沒有這麼多機器可怎麼辦呢?

3.4 大資料需要雲計算,雲計算需要大資料

說到這裡,大家想起雲計算了吧。當想要幹這些活的時候,需要好多好多的機器一塊做,真的是想什麼時候要,想要多少就要多少。例如大資料分析公司的财務情況,可能一周分析一次,如果要把這一百台機器或者一千台機器都在那放着,一周用一次對吧,非常浪費。那能不能需要計算的時候,把這一千台機器拿出來,然後不算的時候,這一千台機器可以去幹别的事情。誰能做這個事兒呢?隻有雲計算,可以為大資料的運算提供資源層的靈活性。而雲計算也會部署大資料放到它的PaaS平台上,作為一個非常非常重要的通用應用。因為大資料平台能夠使得多台機器一起幹一個事兒,這個東西不是一般人能開發出來的,也不是一般人玩得轉的,怎麼也得雇個幾十上百号人才能把這個玩起來,是以說就像資料庫一樣,其實還是需要有一幫專業的人來玩這個東西。現在公有雲上基本上都會有大資料的解決方案了,一個小公司我需要大資料平台的時候,不需要采購一千台機器,隻要到公有雲上一點,這一千台機器都出來了,并且上面已經部署好了的大資料平台,隻要把資料放進去算就可以了。

雲計算需要大資料,大資料需要雲計算,兩個人就這樣結合了。

四、人工智能擁抱大資料

4.1 機器什麼時候才能懂人心

雖說有了大資料,人的欲望總是這個不能夠滿足。雖說在大資料平台裡面有搜尋引擎這個東西,想要什麼東西我一搜就出來了。但是也存在這樣的情況,我想要的東西不會搜,表達不出來,搜尋出來的又不是我想要的。例如音樂軟體裡面推薦一首歌,這首歌我沒聽過,當然不知道名字,也沒法搜,但是軟體推薦給我,我的确喜歡,這就是搜尋做不到的事情。當人們使用這種應用的時候,會發現機器知道我想要什麼,而不是說當我想要的時候,去機器裡面搜尋。這個機器真像我的朋友一樣懂我,這就有點人工智能的意思了。

人們很早就在想這個事情了。最早的時候,人們想象,如果要是有一堵牆,牆後面是個機器,我給它說話,它就給我回應,我如果感覺不出它那邊是人還是機器,那它就真的是一個人工智能的東西了。

4.2 讓機器學會推理

怎麼才能做到這一點呢?人們就想:我首先要告訴計算機人類的推理的能力。你看人重要的是什麼呀,人和動物的差別在什麼呀,就是能推理。我要是把我這個推理的能力啊告訴機器,機器就能根據你的提問,推理出相應的回答,真能這樣多好。推理其實人們慢慢的讓機器能夠做到一些了,例如證明數學公式。這是一個非常讓人驚喜的一個過程,機器竟然能夠證明數學公式。但是慢慢發現其實這個結果,也沒有那麼令人驚喜,因為大家發現了一個問題,數學公式非常嚴謹,推理過程也非常嚴謹,而且數學公式很容易拿機器來進行表達,程式也相對容易表達。然而人類的語言就沒這麼簡單了,比如今天晚上,你和你女朋友約會,你女朋友說:如果你早來,我沒來,你等着,如果我早來,你沒來,你等着。這個機器就比比較難了解了,但是人都懂,是以你和女朋友約會,你是不敢遲到的。

4.3 教給機器知識

是以僅僅告訴機器嚴格的推理是不夠的,還要告訴機器一些知識。但是知識這個事兒,一般人可能就做不來了,可能專家可以,比如語言領域的專家,或者财經領域的專家。語言領域和财經領域知識能不能表示成像數學公式一樣稍微嚴格點呢?例如語言專家可能會總結出主謂賓定狀補這些文法規則,主語後面一定是謂語,謂語後面一定是賓語,将這些總結出來,并嚴格表達出來不久行了嗎?後來發現這個不行,太難總結了,語言表達千變萬化。就拿主謂賓的例子,很多時候在口語裡面就省略了謂語,别人問:你誰啊?我回答:我劉超。但是你不能規定在語音語義識别的時候,要求對着機器說标準的書面語,這樣還是不夠智能,就像羅永浩在一次演講中說的那樣,每次對着手機,用書面語說:請幫我呼叫某某某,這是一件很尴尬的事情。

人工智能這個階段叫做專家系統。專家系統不易成功,一方面是知識比較難總結,另一方面總結出來的知識難以教給計算機。因為你自己還迷迷糊糊,似乎覺得有規律,就是說不出來,就怎麼能夠通過程式設計教給計算機呢?

4.4 算了,教不會你自己學吧

于是人們想到,看來機器是和人完全不一樣的物種,幹脆讓機器自己學習好了。機器怎麼學習呢?既然機器的統計能力這麼強,基于統計學習,一定能從大量的數字中發現一定的規律。

其實在娛樂圈有很好的一個例子,可見一斑

有一位網友統計了知名歌手在大陸發行的 9 張專輯中 117 首歌曲的歌詞,同一詞語在一首歌出現隻算一次,形容詞、名詞和動詞的前十名如下表所示(詞語後面的數字是出現的次數):

如果我們随便寫一串數字,然後按照數位依次在形容詞、名詞和動詞中取出一個詞,連在一起會怎麼樣呢?

例如取圓周率 3.1415926,對應的詞語是:堅強,路,飛,自由,雨,埋,迷惘。稍微連接配接和潤色一下:

堅強的孩子,

依然前行在路上,

張開翅膀飛向自由,

讓雨水埋葬他的迷惘。

是不是有點感覺了?當然真正基于統計的學習算法比這個簡單的統計複雜的多。

然而統計學習比較容易了解簡單的相關性,例如一個詞和另一個詞總是一起出現,兩個詞應該有關系,而無法表達複雜的相關性,并且統計方法的公式往往非常複雜,為了簡化計算,常常做出各種獨立性的假設,來降低公式的計算難度,然而現實生活中,具有獨立性的事件是相對較少的。

4.5 模拟大腦的工作方式

于是人類開始從機器的世界,反思人類的世界是怎麼工作的。

人類的腦子裡面不是存儲着大量的規則,也不是記錄着大量的統計資料,而是通過神經元的觸發實作的,每個神經元有從其他神經元的輸入,當接收到輸入的時候,會産生一個輸出來刺激其他的神經元,于是大量的神經元互相反應,最終形成各種輸出的結果。例如當人們看到美女瞳孔放大,絕不是大腦根據身材比例進行規則判斷,也不是将人生中看過的所有的美女都統計一遍,而是神經元從視網膜觸發到大腦再回到瞳孔。在這個過程中,其實很難總結出每個神經元對最終的結果起到了哪些作用,反正就是起作用了。

于是人們開始用一個數學單元模拟神經元

這個神經元有輸入,有輸出,輸入和輸出之間通過一個公式來表示,輸入根據重要程度不同(權重),影響着輸出。

于是将n個神經元通過像一張神經網絡一樣連接配接在一起,n這個數字可以很大很大,所有的神經元可以分成很多列,每一列很多個排列起來,每個神經元的對于輸入的權重可以都不相同,進而每個神經元的公式也不相同。當人們從這張網絡中輸入一個東西的時候,希望輸出一個對人類來講正确的結果。例如上面的例子,輸入一個寫着2的圖檔,輸出的清單裡面第二個數字最大,其實從機器來講,它既不知道輸入的這個圖檔寫的是2,也不知道輸出的這一系列數字的意義,沒關系,人知道意義就可以了。正如對于神經元來說,他們既不知道視網膜看到的是美女,也不知道瞳孔放大是為了看的清楚,反正看到美女,瞳孔放大了,就可以了。

對于任何一張神經網絡,誰也不敢保證輸入是2,輸出一定是第二個數字最大,要保證這個結果,需要訓練和學習。畢竟看到美女而瞳孔放大也是人類很多年進化的結果。學習的過程就是,輸入大量的圖檔,如果結果不是想要的結果,則進行調整。如何調整呢,就是每個神經元的每個權重都向目标進行微調,由于神經元和權重實在是太多了,是以整張網絡産生的結果很難表現出非此即彼的結果,而是向着結果微微的進步,最終能夠達到目标結果。當然這些調整的政策還是非常有技巧的,需要算法的高手來仔細的調整。正如人類見到美女,瞳孔一開始沒有放大到能看清楚,于是美女跟别人跑了,下次學習的結果是瞳孔放大一點點,而不是放大鼻孔。

4.6 沒道理但做得到

聽起來也沒有那麼有道理,但是的确能做到,就是這麼任性。

神經網絡的普遍性定理是這樣說的,假設某個人給你某種複雜奇特的函數,f(x):

不管這個函數是什麼樣的,總會確定有個神經網絡能夠對任何可能的輸入x,其值f(x)(或者某個能夠準确的近似)是神經網絡的輸出。

如果在函數代表着規律,也意味着這個規律無論多麼奇妙,多麼不能了解,都是能通過大量的神經元,通過大量權重的調整,表示出來的。

4.7 人工智能的經濟學解釋

這讓我想到了經濟學,于是比較容易了解了。

如果你準備了解大資料開發或是正在學習大資料開發,歡迎加入我們的大資料學習q群378144993,群裡365天每天與大家分享免費的學習教程以及開發工具,你與大咖就差這個圈.

我們把每個神經元當成社會中從事經濟活動的個體。于是神經網絡相當于整個經濟社會,每個神經元對于社會的輸入,都有權重的調整,做出相應的輸出,比如工資漲了,菜價也漲了,股票跌了,我應該怎麼辦,怎麼花自己的錢。這裡面沒有規律麼?肯定有,但是具體什麼規律呢?卻很難說清楚。

基于專家系統的經濟屬于計劃經濟,整個經濟規律的表示不希望通過每個經濟個體的獨立決策表現出來,而是希望通過專家的高屋建瓴和遠見卓識總結出來。專家永遠不可能知道哪個城市的哪個街道缺少一個賣甜豆腐腦的。于是專家說應該産多少鋼鐵,産多少饅頭,往往距離人民生活的真正需求有較大的差距,就算整個計劃書寫個幾百頁,也無法表達隐藏在人民生活中的小規律。

基于統計的宏觀調控就靠譜的多了,每年統計局都會統計整個社會的就業率,通脹率,GDP等等名額,這些名額往往代表着很多的内在規律,雖然不能夠精确表達,但是相對靠譜。然而基于統計的規律總結表達相對比較粗糙,比如經濟學家看到這些統計資料可以總結出長期來看房價是漲還是跌,股票長期來看是漲還是跌,如果經濟總體上揚,房價和股票應該都是漲的。但是基于統計資料,無法總結出股票,物價的微小波動規律。

基于神經網絡的微觀經濟學才是對整個經濟規律最最準确的表達,每個人對于從社會中的輸入,進行各自的調整,并且調整同樣會作為輸入回報到社會中。想象一下股市行情細微的波動曲線,正是每個獨立的個體各自不斷交易的結果,沒有統一的規律可循。而每個人根據整個社會的輸入進行獨立決策,當某些因素經過多次訓練,也會形成宏觀上的統計性的規律,這也就是宏觀經濟學所能看到的。例如每次貨币大量發行,最後房價都會上漲,多次訓練後,人們也就都學會了。

4.8 人工智能需要大資料

然而神經網絡包含這麼多的節點,每個節點包含非常多的參數,整個參數量實在是太大了,需要的計算量實在太大,但是沒有關系啊,我們有大資料平台,可以彙聚多台機器的力量一起來計算,才能在有限的時間内得到想要的結果。

人工智能可以做的事情非常多,例如可以鑒别垃圾郵件,鑒别黃色暴力文字和圖檔等。這也是經曆了三個階段的。第一個階段依賴于關鍵詞黑白名單和過濾技術,包含哪些詞就是黃色或者暴力的文字。随着這個網絡語言越來越多,詞也不斷的變化,不斷的更新這個詞庫就有點顧不過來。第二個階段時,基于一些新的算法,比如說貝葉斯過濾等,你不用管貝葉斯算法是什麼,但是這個名字你應該聽過,這個一個基于機率的算法。第三個階段就是基于大資料和人工智能,進行更加精準的使用者畫像和文本了解和圖像了解。

由于人工智能算法多是依賴于大量的資料的,這些資料往往需要面向某個特定的領域(例如電商,郵箱)進行長期的積累,如果沒有資料,就算有人工智能算法也白搭,是以人工智能程式很少像前面的IaaS和PaaS一樣,将人工智能程式給某個客戶安裝一套讓客戶去用,因為給某個客戶單獨安裝一套,客戶沒有相關的資料做訓練,結果往往是很差的。但是雲計算廠商往往是積累了大量資料的,于是就在雲計算廠商裡面安裝一套,暴露一個服務接口,比如您想鑒别一個文本是不是涉及黃色和暴力,直接用這個線上服務就可以了。這種形勢的服務,在雲計算裡面稱為軟體即服務,SaaS (Software AS A Service)

于是工智能程式作為SaaS平台進入了雲計算。

五、雲計算,大資料,人工智能過上了美好的生活

終于雲計算的三兄弟湊齊了,分别是IaaS,PaaS和SaaS,是以一般在一個雲計算平台上,雲,大資料,人工智能都能找得到。對一個大資料公司,積累了大量的資料,也會使用一些人工智能的算法提供一些服務。對于一個人工智能公司,也不可能沒有大資料平台支撐。是以雲計算,大資料,人工智能就這樣整合起來,完成了相遇,相識,相知。

--------------------- 

如果你準備了解大資料開發或是正在學習大資料開發,歡迎加入我們的大資料學習q群378144993,群裡365天每天與大家分享免費的學習教程以及開發工具,你與大咖就差這個圈.

繼續閱讀