您的位置:首頁>科技>正文

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

雲計算, 大資料, 和人工智慧, 最近火的不行不行的詞彙, 似乎不相同, 但又似乎相互關聯, 到底是什麼樣的關係呢?

其實他們本沒有什麼關係, 各自活在不同的世界裡, 然而隨著互聯網的發展, 相互糾葛在了一起。

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

能夠達到想什麼時候要就能什麼時候要, 想要多少就有多少的狀態。

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

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

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

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

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

但是物理設備有著大大的缺點:

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

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

隔離性差:你把好多的應用部署在同一台物理機上, 他們之間搶記憶體, 搶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 等,當根據需要可按結構化資料來處理,也可抽取出純文字按非結構化資料來處理。

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

資料的收集:

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

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

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

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

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

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

對於資料的傳輸,一個記憶體裡面的佇列肯定會被大量的資料擠爆掉,於是就產生了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://163.hn.cn)是網易憑藉其20年品牌優勢與經驗打造的企業級產品矩陣,致力於提供一站式企業資訊化解決方案。網易企業服務的推出,是網易在企業郵箱的基礎上,對企業市場的進一步重要佈局。主要內容有:

於是自己的雲平臺首先支撐起了自己的業務,在這個過程中,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 等,當根據需要可按結構化資料來處理,也可抽取出純文字按非結構化資料來處理。

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

資料的收集:

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

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

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

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

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

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

對於資料的傳輸,一個記憶體裡面的佇列肯定會被大量的資料擠爆掉,於是就產生了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://163.hn.cn)是網易憑藉其20年品牌優勢與經驗打造的企業級產品矩陣,致力於提供一站式企業資訊化解決方案。網易企業服務的推出,是網易在企業郵箱的基礎上,對企業市場的進一步重要佈局。主要內容有:

Next Article
喜欢就按个赞吧!!!
点击关闭提示