1. 程式人生 > >雲端計算,大資料,人工智慧三者有何關係?

雲端計算,大資料,人工智慧三者有何關係?

雲端計算最初的目標是對資源的管理,管理的主要是計算資源,網路資源,儲存資源三個方面。想象你有一大堆的伺服器,交換機,儲存裝置,放在你的機房裡面,你最想做的事情就是把這些東西統一的管理起來,最好能達到當別人向你請求分配資源的時候(例如1核1G記憶體,10G硬碟,1M頻寬的機器),能夠達到想什麼時候要就能什麼時候要,想要多少就有多少的狀態。

這就是所謂的彈性,俗話說就是靈活性。靈活性分兩個方面,想什麼時候要就什麼時候要,這叫做時間靈活性,想要多少就要多少,這叫做空間靈活性。

雲端計算,大資料,人工智慧的相遇,相識,相知

物理機顯然是做不到這一點的。雖然物理裝置是越來越牛了:

伺服器用的是物理機,例如戴爾,惠普,IBM,聯想等物理伺服器,隨著硬體裝置的進步,物理伺服器越來越強大了,64核128G記憶體都算是普通配置。

網路用的是硬體交換機和路由器,例如思科的,華為的,從1GE到10GE,現在有40GE和100GE,頻寬越來越牛。

儲存方面有的用普通的磁碟,也有了更快的SSD盤。容量從M,到G,連膝上型電腦都能配置到T,更何況磁碟陣列。

但是物理裝置有著大大的缺點:

1、人工運維:如果你在一臺伺服器上安裝軟體,把系統安裝壞了,怎麼辦?只有重灌。當你想配置一下交換機的引數,需要串列埠連上去進行配置。當你想增加一塊磁碟,總要買一塊插進伺服器。這些都需要人工來,而且很大可能要求機房。你們公司在北五環,機房在南六環,這酸爽。

2、浪費資源:其實你只想部署一個小小的網站,卻要用128G的記憶體。混著部署吧,就有隔離性的問題。

3、隔離性差:你把好多的應用部署在同一臺物理機上,他們之間搶記憶體,搶cpu,一個寫滿了硬碟,另一個就沒法用了,一個弄掛了核心,另一個也同時掛了,如果部署兩個相同的應用,埠還會衝突,動不動就會出錯。

所以人們想到的第一個辦法叫做虛擬化。所謂虛擬化,就是把實的變成虛的。

物理機變為虛擬機器:cpu是虛擬的,記憶體是虛擬的。

物理交換機變為虛擬交換機:網絡卡是虛擬的,交換機是虛擬的,頻寬也是虛擬的。

物理儲存變成虛擬儲存:多塊硬碟虛擬成一個儲存池,從中虛擬出多塊小硬碟。

虛擬化很好的解決了上面的三個問題:

人工運維:虛擬機器的建立和刪除都可以遠端操作,虛擬機器被玩壞了,刪了再建一個分鐘級別的。虛擬網路的配置也可以遠端操作,建立網絡卡,分配頻寬都是呼叫介面就能搞定的。

浪費資源:虛擬化了以後,資源可以分配的很小很小,比如1個cpu,1G記憶體,1M頻寬,1G硬碟,都可以被虛擬出來。

隔離性差:每個虛擬機器有獨立的cpu, 記憶體,硬碟,網絡卡,不同虛擬機器的應用互不干擾。

在虛擬化階段,領跑者是VMware,可以實現基本的計算,網路,儲存的虛擬化。

當然這個世界有閉源,就有開源,有Windows就有Linux,有iOS就有Andord,有VMware,就有Xen和KVM。在開源虛擬化方面,Citrix的Xen做的不錯,後來Redhat在KVM發力不少。

對於網路虛擬化,有Open vSwitch,可以通過命令建立網橋,網絡卡,設定VLAN,設定頻寬。

對於儲存虛擬化,對於本地盤,有LVM,可以將多個硬碟變成一大塊盤,然後在裡面切出一小塊給使用者。

但是虛擬化也有缺點,通過虛擬化軟體建立虛擬機器,需要人工指定放在哪臺機器上,硬碟放在哪個儲存裝置上,網路的VLAN ID,頻寬具體的配置,都需要人工指定。所以單單使用虛擬化的運維工程師往往有一個Excel表格,有多少臺機器,每臺機器部署了哪些虛擬機器。所以,一般虛擬化的叢集數目都不是特別的大。

為了解決虛擬化階段的問題,人們想到的一個方式為池化,也就是說虛擬化已經將資源分的很細了,但是對於如此細粒度的資源靠Excel去管理,成本太高,能不能打成一個大的池,當需要資源的時候,幫助使用者自動的選擇,而非使用者指定。所以這個階段的關鍵點:排程器Scheduler。

於是VMware有了自己的vCloud。

於是基於Xen和KVM的私有云平臺CloudStack,後來Citrix將其收購後開源。

當這些私有云平臺在使用者的資料中心裡面賣的其貴無比,賺的盆滿鉢滿的時候。有其他的公司開始了另外的選擇,這就是AWS和Google,開始了公有云領域的探索。

AWS最初就是基於Xen技術進行虛擬化的,並且最終形成了公有云平臺。也許AWS最初只是不想讓自己的電商領域的利潤全部交給私有云廠商吧,於是自己的雲平臺首先支撐起了自己的業務,在這個過程中,AWS自己嚴肅的使用了自己的雲端計算平臺,使得公有云平臺不是對於資源的配置更加友好,而是對於應用的部署更加友好,最終大放異彩。

公有云的第一名AWS活的很爽,第二名Rackspace就不太爽了,沒錯,網際網路行業嘛,基本上就是一家獨大。第二名如何逆襲呢?開源是很好的辦法,讓整個行業大家一起為這個雲平臺出力,兄弟們,大家一起上。於是Rackspace與美國航空航天局(NASA)合作創始了開源雲平臺OpenStack。OpenStack現在發展的和AWS有點像了,所以從OpenStack的模組組成,可以看到雲端計算池化的方法。

雲端計算,大資料,人工智慧的相遇,相識,相知

OpenStack包含哪些元件呢?

計算池化模組Nova:OpenStack的計算虛擬化主要使用KVM,然而到底在那個物理機上開虛擬機器呢,這要靠nova-scheduler。

網路池化模組Neutron:OpenStack的網路虛擬化主要使用Openvswitch,然而對於每一個Openvswitch的虛擬網路,虛擬網絡卡,VLAN,頻寬的配置,不需要登入到叢集上配置,Neutron可以通過SDN的方式進行配置。

儲存池化模組Cinder:OpenStack的儲存虛擬化,如果使用本地盤,則基於LVM,使用哪個LVM上分配的盤,也是用過scheduler來的。後來就有了將多臺機器的硬碟打成一個池的方式Ceph,則排程的過程,則在Ceph層完成。

有了OpenStack,所有的私有云廠商都瘋了,原來VMware在私有云市場實在賺的太多了,眼巴巴的看著,沒有對應的平臺可以和他抗衡。現在有了現成的框架,再加上自己的硬體裝置,你可以想象到的所有的IT廠商的巨頭,全部加入到社群裡面來,將OpenStack開發為自己的產品,連同硬體裝置一起,殺入私有云市場。

網易當然也沒有錯過這次風口,上線了自己的OpenStack叢集,網易雲基礎服務(網易蜂巢)基於OpenStack自主研發了IaaS服務,在計算虛擬化方面,通過裁剪KVM映象,優化虛擬機器啟動流程等改進,實現了虛擬機器的秒級別啟動。在網路虛擬化方面,通過SDN和Openvswitch技術,實現了虛擬機器之間的高效能互訪。在儲存虛擬化方面,通過優化Ceph儲存,實現高效能雲盤。

但是網易並沒有殺進私有云市場,而是使用OpenStack支撐起了自己的應用,僅僅是資源層面彈性是不夠的,還需要開發出對應用部署友好的元件。

雲端計算,大資料,人工智慧的相遇,相識,相知

隨著公有云和基於OpenStack的私有云越來越成熟,構造一個成千上萬個物理節點的雲平臺以及不是問題,而且很多雲廠商都會採取多個數據中心部署多套雲平臺,總的規模數量就更加大了,在這個規模下,對於客戶感知來說,基本上可以實現想什麼時候要什麼時候要,想要多少要多少。

雲端計算解決了基礎資源層的彈性伸縮,卻沒有解決應用隨基礎資源層彈性伸縮而帶來的批量、快速部署問題。比如在雙十一期間,10個節點要變成100個節點,如果使用物理裝置,再買90臺機器肯定來不及,僅僅有IaaS實現資源的彈性是不夠的,再建立90臺虛擬機器,也是空的,還是需要運維人員一臺一臺地部署。於是有了PaaS層,PaaS主要用於管理應用層。我總結為兩部分:一部分是你自己的應用應當自動部署,比如Puppet、Chef、Ansible、 Cloud Foundry,CloudFormation等,可以通過指令碼幫你部署;另一部分是你覺得複雜的通用應用不用部署,比如資料庫、快取等可以在雲平臺上一點即得。

要麼就是自動部署,要麼就是不用部署,總的來說就是應用層你也少操心,就是PaaS的作用。當然最好還是都不用去部署,一鍵可得,所以公有云平臺將通用的服務都做成了PaaS平臺。另一些你自己開發的應用,除了你自己其他人不會知道,所以你可以用工具變成自動部署。

當然這種部署方式也有一個問題,就是無論Puppet、 Chef、Ansible把安裝指令碼抽象的再好,說到底也是基於指令碼的,然而應用所在的環境千差萬別。檔案路徑的差別,檔案許可權的差別,依賴包的差別,應用環境的差別,Tomcat、 PHP、 Apache等軟體版本的差別,JDK、Python等版本的差別,是否安裝了一些系統軟體,是否佔用了哪些埠,都可能造成指令碼執行的不成功。所以看起來是一旦指令碼寫好,就能夠快速複製了,但是環境稍有改變,就需要把指令碼進行新一輪的修改、測試、聯調。例如在資料中心寫好的指令碼移到AWS上就不一定直接能用,在AWS上聯調好了,遷移到Google Cloud上也可能會再出問題。

雲端計算,大資料,人工智慧的相遇,相識,相知

容器是Container,Container另一個意思是集裝箱,其實容器的思想就是要變成軟體交付的集裝箱。集裝箱的特點,一是打包,二是標準。

雲端計算,大資料,人工智慧的相遇,相識,相知

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

雲端計算,大資料,人工智慧的相遇,相識,相知

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

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

部署任何一個應用,也包含很多零零散散的東西,許可權,使用者,路徑,配置,應用環境等!這就像很多零碎地貨物,如果不打包,就需要在開發、測試、生產的每個環境上重新檢視以保證環境的一致,有時甚至要將這些環境重新搭建一遍,就像每次將貨物解除安裝、重灌一樣麻煩。中間稍有差池,都可能導致程式的執行失敗。

雲端計算,大資料,人工智慧的相遇,相識,相知

那麼容器如何對應用打包呢?還是要學習集裝箱,首先要有個封閉的環境,將貨物封裝起來,讓貨物之間互不干擾,互相隔離,這樣裝貨卸貨才方便。

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

有了這兩項技術,集裝箱的鐵盒子我們是焊好了,接下來就是如何將這個集裝箱標準化,從而在哪艘船上都能運輸。這裡的標準一個是映象,一個是容器的執行環境。

所謂的映象,就是將你焊好集裝箱的那個時刻,將集裝箱的狀態儲存下來,就像孫悟空說定,集裝箱裡面就定在了那一刻,然後將這一刻的狀態儲存成一系列檔案。這些檔案的格式是標準的,誰看到這些檔案,都能還原當時定住的那個時刻。將映象還原成執行時的過程(就是讀取映象檔案,還原那個時刻的過程)就是容器的執行的過程。

有了容器,雲端計算才真正實現了應用層和資源層的完全彈性。

在雲端計算的發展過程中,雲端計算逐漸發現自己除了資源層面的管理,還能夠進行應用層面的管理,而大資料應用作為越來越重要的應用之一,雲端計算也可以放入PaaS層管理起來,而大資料也發現自己越來越需要大量的計算資源,而且想什麼時候要就什麼時候要,想要多少就要多少,於是兩者相遇,相識,相知,走在了一起。

雲端計算,大資料,人工智慧的相遇,相識,相知

說到大資料,首先我們來看一下資料的分類,我們生活中的資料總體分為兩種: 結構化資料和非結構化資料。

結構化資料:指具有固定格式或有限長度的資料,如資料庫,元資料等。

非結構化資料:指不定長或無固定格式的資料,如郵件, word 文件等

當然有的地方還會提到第三種,半結構化資料,如 XML, HTML 等,當根據需要可按結構化資料來處理,也可抽取出純文字按非結構化資料來處理。

隨著網際網路的發展,非結構化資料越來越多,當我們遇到這麼多資料的時候,怎麼辦呢?分為以下的步驟:

資料的收集:即將散落在網際網路世界的資料放到咱們的系統中來。資料收集分兩個模式,推和拉,所謂的推,即推送,是在網際網路世界裡面放很多自己的小弟程式,這些小弟程式收集了資料後,主動傳送給咱們的系統。所謂的拉,即爬取,通過執行程式,將網際網路世界的資料下載到咱們的系統中。

資料的傳輸:收到的資料需要通過一個載體進行傳輸,多采用佇列的方式,因為大量的資料同時過來,肯定處理不過來,通過佇列,讓資訊排好隊,一部分一部分的處理即可。

資料的儲存:好不容易收集到的資料,對於公司來講是一筆財富,當然不能丟掉,需要找一個很大很大的空間將資料儲存下來。

資料的分析:收到的大量的資料,裡面肯定有很多的垃圾資料,或者很多對我們沒有用的資料,我們希望對這些資料首先進行清洗。另外我們希望挖掘出資料之間的相互關係,或者對資料做一定的統計,從而得到一定的知識,比如盛傳的啤酒和尿布的關係。

資料的檢索和挖掘:分析完畢的資料我們希望能夠隨時把我們想要的部分找出來,搜尋引擎是一個很好的方式。另外對於搜尋的結果,可以根據資料的分析階段打的標籤進行分類和聚類,從而將資料之間的關係展現給使用者。

當資料量很少的時候,以上的幾個步驟其實都不需要雲端計算,一臺機器就能夠解決。然而量大了以後,一臺機器就沒有辦法了。

所以大資料想了一個方式,就是聚合多臺機器的力量,眾人拾柴火焰高,看能不能通過多臺機器齊心協力,把事情很快的搞定。

對於資料的收集,對於IoT來講,外面部署這成千上萬的檢測裝置,將大量的溫度,適度,監控,電力等等資料統統收集上來,對於網際網路網頁的搜尋引擎來講,需要將整個網際網路所有的網頁都下載下來,這顯然一臺機器做不到,需要多臺機器組成網路爬蟲系統,每臺機器下載一部分,同時工作,才能在有限的時間內,將海量的網頁下載完畢。開源的網路爬蟲大家可以關注一下Nutch。

對於資料的傳輸,一個記憶體裡面的佇列肯定會被大量的資料擠爆掉,於是就產生了Kafka這樣基於硬碟的分散式佇列,也即kafka的佇列可以多臺機器同時傳輸,隨你資料量多大,只要我的佇列足夠多,管道足夠粗,就能夠撐得住。

對於資料的儲存,一臺機器的硬碟肯定是放不下了,所以需要一個很大的分散式儲存來做這件事情,把多臺機器的硬碟打成一塊大硬碟(而非儲存池,注意兩者的區別),hadoop的HDFS可以做到,也有很多地方用物件儲存,同樣可以有非常大的空間儲存海量的資料。

雲端計算,大資料,人工智慧的相遇,相識,相知

這個圖描述的HDFS的一個架構,可以產出來,HDFS將很多個DataNode管理在一起,將資料分成很多小塊,分佈在多臺機器上,從而實現了海量資料的儲存。

雲端計算,大資料,人工智慧的相遇,相識,相知

這個圖描述的是swift物件儲存的架構,也是將很多的storage node聚合在一起,實現海量的儲存。

對於資料的分析,一臺機器一篇一篇的分析,那要處理到猴年馬月也分析不完,於是就有了map-reduce演算法,將海量的資料分成多個部分,使用大規模的hadoop叢集,每臺機器分析一部分,這個過程叫做map,分析完畢之後,還需要彙總一下,得到最終結果,彙總的過程稱為reduce。最初的map-reduce演算法是每一輪分析都將結果寫入檔案系統的,後來人們發現往往復雜的分析需要多輪計算才能有結果,而每一輪計算都落盤對速度影響比較大,於是有了Spark這種中間計算全部放入記憶體的分散式計算框架。對於資料的分析有全量的離線的計算,例如將所有的使用者的購買行為進行分類,也有需要實時處理實時分析的,例如股票資訊的分類,實時的計算框架有storm,spark streaming等等。

雲端計算,大資料,人工智慧的相遇,相識,相知

對於資料的搜尋,如果使用順序掃描法 (Serial Scanning), 比如要找內容包含某一個字串的檔案,就是一個文件一個文件的看,對於每一個文件,從頭看到尾,如果此文件包含此字串,則此文件為我們要找的檔案,接著看下一個檔案,直到掃描完所有的檔案。如利用windows的搜尋也可以搜尋檔案內容,只是相當的慢。為什麼慢呢?其實是由於我們想要搜尋的資訊和非結構化資料中所儲存的資訊不一致造成的。

非結構化資料中所儲存的資訊是每個檔案包含哪些字串,也即已知檔案,欲求字串相對容易,也即是從檔案到字串的對映。而我們想搜尋的資訊是哪些檔案包含此字串,也即已知字串,欲求檔案,也即從字串到檔案的對映。兩者恰恰相反。

如果我們通過對於非結構化資料進行處理,形成索引檔案,裡面儲存從字串到檔案的對映,則會大大提高搜尋速度。

由於從字串到檔案的對映是檔案到字串對映的反向過程,於是儲存這種資訊的索引稱為反向索引 。

雲端計算,大資料,人工智慧的相遇,相識,相知

當資料量非常大的時候,一個索引檔案已經不能滿足大資料量的搜尋,所以要分成多臺機器一起搜尋,如圖所示,將索引分成了多個shard也即分片,分不到不同的機器上,進行並行的搜尋。

雲端計算,大資料,人工智慧的相遇,相識,相知

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

於是大資料人員想起來想要多少要多少,想什麼時候要什麼時候要的雲平臺。空間的靈活性讓大資料使用者隨時能夠建立一大批機器來計算,而時間的靈活性可以保證整個雲平臺的資源,不同的租戶你用完了我用,我用完了他用,大家都不浪費資源。

於是很多人會利用公有云或者私有云平臺部署大資料叢集,但是完成叢集的部署還是有難度的,雲端計算的人員想,既然大家都需要,那我就把他整合在我的雲端計算平臺裡面,當大家需要一個大資料平臺的時候,無論是Nutch, Kafka,hadoop,ElasticSearch等,我能夠馬上給你部署出來一套。我們管這個叫做PaaS平臺。

大資料平臺於是作為PaaS融入了雲端計算的大家庭。

雲端計算,大資料,人工智慧的相遇,相識,相知

作為國內最早誕生的網際網路公司之一,網易在過去十餘年的產品研發、孵化和運維過程中,各個部門對資料有著不同且繁雜的需求。而如何把這些繁雜的需求用統一的手段來解決,網易在大資料分析方面同樣進行了十餘年的探索,並自去年開始通過“網易雲”將這些能力開放出來

“網易猛獁”與“網易有數”兩大資料分析平臺就是在這個階段逐漸成型的。

網易猛獁大資料平臺可以實現從各種不同資料來源提取資料,同步到核心儲存系統,同時對外提供便捷的操作體驗。現在每天約有130億條資料進入網易猛獁平臺,經過資料建模和清洗,進行資料分析預測。

網易的另一大資料分析平臺,網易有數則可以極大簡化資料探索,提高資料視覺化方面的效率,提供靈活報表製作等,以幫助分析師專注於自己的工作內容。

有了大資料平臺,對於資料的處理和搜尋已經沒有問題了,搜尋引擎著實火了一陣,當很多人覺得搜尋引擎能夠一下子幫助使用者搜出自己想要的東西的時候,還是非常的開心的。

但是過了一陣人們就不滿足於資訊僅僅被搜尋出來了。資訊的搜尋還是一個人需要適應機器的思維的過程,要想搜到想要的資訊,有時候需要懂得一些搜尋或者分詞的技巧。機器還是沒有那麼懂人。什麼時候機器能夠像人一樣懂人呢,我告訴機器我想要什麼,機器就會像人一樣的體會,並且做出人一樣的反饋,多好啊。

這個思想已經不是一天兩天了,在雲端計算還不十分興起的時候,人們就有了這樣的想法。那怎麼做的這件事情呢?

人們首先想到的是,人類的思維方式有固有的規律在裡面,如果我們能夠將這種規律表達出來,告訴機器,機器不就能理解人了嗎?

人們首先想到的是告訴計算機人類的推理能力,在這個階段,人們慢慢的能夠讓機器來證明數學公式了,多麼令人欣喜的過程啊。然而,數學公式表達相對嚴謹的,推理的過程也是相對嚴謹,所以比較容易總結出嚴格個規律來。然而一旦涉及到沒有辦法那麼嚴謹的方面,比如財經領域,比如語言理解領域,就難以總結出嚴格的規律來了。

看來僅僅告知機器如何推理還不夠,還需要告訴機器很多很多的知識,很多知識是有領域的,所以一般人做不來,專家可以,如果我們請財經領域的專家或者語言領域的專家來總結規律,並且將規律相對嚴格的表達出來,然後告知機器不就可以了麼?所以誕生了一大批專家系統。然而專家系統遭遇的瓶頸是,由人來把知識總結出來再教給計算機是相當困難的,即便這個人是專家。

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

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

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

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

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

堅強的孩子,

依然前行在路上,

張開翅膀飛向自由,

讓雨水埋葬他的迷惘。

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

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

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

雲端計算,大資料,人工智慧的相遇,相識,相知

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

於是人們開始用一個數學單元模擬神經元

雲端計算,大資料,人工智慧的相遇,相識,相知

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

雲端計算,大資料,人工智慧的相遇,相識,相知

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

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

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

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

雲端計算,大資料,人工智慧的相遇,相識,相知

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

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

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

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

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

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

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

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

於是工智慧程式作為SaaS平臺進入了雲端計算。

雲端計算,大資料,人工智慧的相遇,相識,相知

網易將人工智慧這個強大的技術,應用於反垃圾工作中,從網易1997年推出郵箱產品開始,我們的反垃圾技術就在不停的進化升級,並且成功應用到各個億量級使用者的產品線中,包括影音娛樂,遊戲,社交,電商等產品線。比如網易新聞、部落格相簿、雲音樂、雲閱讀、有道、BOBO、考拉、遊戲等產品。總的來說,反垃圾技術在網易已經積累了19年的實踐經驗,一直在背後默默的為網易產品保駕護航。現在作為雲平臺的SaaS服務開放出來。

回顧網易反垃圾技術發展歷程,大致上我們可以把他分為三個關鍵階段,也基本對應著人工智慧發展的三個時期:

第一階段主要是依賴關鍵詞,黑白名單和各種過濾器技術,來做一些內容的偵測和攔截,這也是最基礎的階段,受限於當時計算能力瓶頸以及演算法理論的發展,第一階段的技術也能勉強滿足使用。

第二個階段時,基於計算機行業裡有一些更新的演算法,比如說貝葉斯過濾(基於概率論的演算法),一些膚色的識別,紋理的識別等等,這些比較優秀成熟的論文出來,我們可以基於這些演算法做更好的特徵匹配和技術改造,達到更優的反垃圾效果。

最後,隨著人工智慧演算法的進步和計算機運算能力的突飛猛進,反垃圾技術進化到第三個階段:大資料和人工智慧的階段。我們會用海量大資料做使用者的行為分析,對使用者做畫像,評估使用者是一個垃圾使用者還是一個正常使用者,增加使用者體驗更好的人機識別手段,以及對語義文字進行理解。還有基於人工智慧的影象識別技術,更準確識別是否是色情圖片,廣告圖片以及一些違禁品圖片等等。

雲端計算,大資料,人工智慧的相遇,相識,相知

好文章轉自:http://cloud.idcquan.com/yjs/115806.shtml