1. 程式人生 > >雲計算,大數據,人工智能三者有何關系?【轉】

雲計算,大數據,人工智能三者有何關系?【轉】

能力 基於 永遠 箱子 理解 idc linux nts 相同

轉自:【http://cloud.idcquan.com/yjs/115806.shtml】原文:來源:今日頭條/領先網絡 2017-05-02 17:17

雲計算,大數據,和人工智能,最近火的不行不行的詞匯,似乎不相同,但又似乎相互關聯,到底是什麽樣的關系呢?其實他們本沒有什麽關系,各自活在不同的世界裏,然而隨著互聯網的發展,相互糾葛在了一起。

雲計算最初的目標是對資源的管理,管理的主要是計算資源,網絡資源,存儲資源三個方面。想象你有一大堆的服務器,交換機,存儲設備,放在你的機房裏面,你最想做的事情就是把這些東西統一的管理起來,最好能達到當別人向你請求分配資源的時候(例如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服務開放出來。

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

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

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

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

技術分享圖片

雲計算 大數據 人工智能

雲計算,大數據,人工智能三者有何關系?【轉】