1. 程式人生 > >“大資料”、“機器學習”、“深度學習”到底是什麼?

“大資料”、“機器學習”、“深度學習”到底是什麼?

“大資料”、“機器學習”、“深度學習”到底是什麼?

原創作者 https://mp.weixin.qq.com/s/8bcUEDcdr4Q5jH3-1hMSWQ

感覺很多朋友,對“大資料”、“機器學習”、“深度學習”等概念挺暈的,沒有感官的認識,這裡,我簡單說一下:“大資料”、“人工智慧”、“機器學習”、“神經網路”、“深度學習”。這幾個詞往往摻雜在一起,讓人不知所云,這裡我簡單說一下,不求細節上100%準確,只求能給各位一個感官上的印象,明白說起這幾詞時,通常都是說什麼。

首先,“人工智慧”這個詞。大家說,什麼是人工智慧?每個人在自己心裡,都有一個特定的人工智慧定義。有人認為,老版《星際迷航》裡“Datas上校”這個東西叫人工智慧;有人認為《機器公敵》裡機器人應該叫人工智慧;有人認為電影異形裡的“大衛”,這麼個東西叫人工智慧。近一點的,有人認為谷歌開發的下圍棋的系統“AlphaGo”,很吊,這玩意是人工智慧;谷歌大腦能通過自己看視訊,自動識別出貓,這就人工智慧了;還有公司,我們通過“人工智慧”幹了什麼事情”。因此,可以看出,這個詞大的沒邊,因此,真追究起來,誰要說這個詞,除裝逼外,你就當他什麼都沒說就行了。

當前,“大資料”這個詞,也跟“人工智慧”這個詞一樣,大的沒邊,虛無飄渺的沒邊,誰要是說這個詞而不說具體的東西,你也就當他什麼都沒說就好了。

回過頭來,我們再看“人工智慧”這個詞。究竟什麼是人工智慧?計算機的神級人物圖靈給出了“圖靈測試”,定義了人工智慧——圖靈測試(The Turing test)由艾倫·麥席森·圖靈發明,指測試者與被測試者(一個人和一臺機器)隔開的情況下,通過一些裝置(如鍵盤)向被測試者隨意提問,進行多次測試後,如果有超過30%的測試者不能確定出被測試者是人還是機器,那麼這臺機器就通過了測試,並被認為具有人類智慧。(摘自百度百科)

上面,圖靈神人說神話,凡人聽不懂。針對“人工智慧”,用人話講,如果,某個東西,具有了“學習”、“分類”、“預測”能力,我們就認為這個東西是智慧的。比如,我們說人。我們說諸葛亮,料事如神(預測能力強)、神機妙算(“分類”強)。。。因此,諸葛亮很智慧。

其實,現實中很多問題,都可以轉化為分類問題和迴歸問題,如何即“準”又“穩”的把事物分類,是我們追求。比如,我們根據一系列指標,把一個妹子分類為“漂亮”、“不漂亮”;把某件事根據一系列指標,分為“可以幹”、“不可以幹”;把某個人,分為“人品好,可以交”、“人渣,不可交”;這類就是二分類問題。也有多分類問題,比如,把一篇文章,分類到“財經新聞”、“娛樂八卦”、“武俠小說”、“黃色小說”。。。。等等多個類目下的一類中。

因此,為了給編個有“智慧”的軟體,賦予它分類能力呢。簡單,用程式語言語言裡的判斷語句都能行:
If XXX :
OOOO
elif XXXXX :
oooooo
else:
OOOOO

各位看官也許會笑,這TMD算哪門子的智慧。但是,在現實中,就這樣用程式語言的特性,編出來的軟體,在很多不懂計算機父輩們眼中,就很智慧,就能把他們鎮住。當然,這麼low的方案,計算機的神級人物們,是不屑的。畢竟,現實太複雜,對這個複雜的現實建模,對複雜的事物分類,豈能是幾個判斷語句所能夠描述的。所以,大神們,搞出來很多演算法策略來搞這件事。這下演算法,主流的也就那麼多,比如說:決策樹演算法、隨機森林演算法、邏輯迴歸、SVM、樸素貝葉斯、K最近鄰演算法、K均值演算法、Adaboost 演算法、神經網路演算法、馬爾可夫演算法,還有最近火的“深度學習”演算法、增強對抗網路演算法。。。等等。這些算都叫“機器學習”演算法。

講到這裡,各位看官,應該對我們經常講的“人工智慧”、“機器學習”、“深度學習”,這些虛無縹緲的詞大概是什麼意思,有個感官的認識了。
好了,現在我們討論“人工智慧”、“機器學習”、“深度學習”等等這些詞時,具體就討論這些演算法就行了,那些虛無縹緲的概念,留給裝逼的人、想要吸引投資的人去說吧。從總體理論方向來說,來說,這些演算法,大體上可分為兩類,“神經網路”演算法和“深度學習”演算法,算作一類,其它的演算法作為另一類。但是,不管怎麼分類,這些演算法要想正常的工作,對事物的分類能夠達到實用的水平,兩個條件是不可或缺的,那就是“資料”、“計算力”。計算力很好理解,這些演算法,都比較複雜,沒有強大的CPU、記憶體等硬體支撐,這些演算法,要麼不能執行,要麼猴年馬月也執行不完,給不出結果。如果你訓練模型,利用這些演算法編好程式後,扔給計算機,它花了半年才計算完,給你打印出結果。你心中,也一定是一萬個“草泥馬”飄過。。。。。對於資料的要求,這是因為,這些演算法的背後的數學原理,大部分都跟概率論有關。各位看官,如果興趣,可百度“VC維”理論,針對“深度學習”的可學習性的理論解釋,人類現在也沒有研究透,只知道這玩意挺管用,在很多方面效果挺好,科技前沿,給出的解釋是用“泛函空間概率論”來解釋。但不管怎麼說,就是概率論,就是瞎猜。瞎猜嘛,當然是依據越多,猜的的越準,猜的越穩。也就是資料越多,這些演算法就會猜的越準,猜的越穩。好了,現在“大資料”,就可以攙和進來了。沒有資料,或者資料很少、資料緯度較少,不夠詳細,這些演算法“巧婦”,也會無米下鍋,做不出可口的飯菜的。

有了所謂的“大資料”和雲端計算,我們就可以方便的命令這些演算法“巧婦”們給我們做飯了。從‘資料’這個“米”的角度說,我們可以HDFS儲存更多的米,更豐富的食材;從‘大資料元件’這個鍋碗瓢盆的‘工具’角度來說,我們有了spark等元件(利用深度學習演算法,比較強大的元件是TensorFlow),有了更強大的計算工具,我們可以利用這些元件呼叫這些高大上的分類演算法,再加上所謂的“大資料”、“深度學習”、“機器學習”,就可以做出更好吃的飯了。從系統架構上來說,猜嘛。猜對、猜錯都是很正常的,可能這麼猜不對,換個引數、換個演算法 重新猜一下,就猜對了。因此,也就有了“資料挖坑一身功,全靠調參”的說法。這就要求,我們的系統,有更好靈活性,方便我們對針對這些演算法“休妻再娶”。

有了上面大體的介紹,針對“大資料”、“人工智慧”、“深度學習”、“機器學習”等具體行業應用,我再簡單說兩句。 以電商行業為例,有一個概念叫“使用者畫像”,它是很多系統的基礎,比如推薦系統、精準廣告系統、大資料風控系統的等等。

使用者畫像,是什麼呢。說到底,就是對使用者的分類資料。比如說,ID011,性別:女,性格描述:萌妹子,性格特點描述,資產狀況描述,信用狀況描述,喜歡的顏色,鍾愛的品牌,大姨媽的日期,上週的購物。有了這些資訊,我們就可以針對這個使用者,進行精準的廣告營銷、精準的購物推薦、個性化的服務。

那麼問題來了。現實中,這位妹子註冊資訊時,性別欄裡,可能填的是“男”,年齡欄裡填了“5”或者“150”。你怎麼知道這個妹子,可能喜歡相宜本草的面膜,她又沒明確告訴你。沒辦法了,只能猜。如果,我們有了關於這位妹子的各類“大資料”,再結合上面的各種演算法,就可以猜了。如果這個ID的使用者,上購物網站時,經常瀏覽的是“胸罩”、“衛生巾”等女性用品,我們的演算法(機器學習、深度學習等)把他猜成“女性”,是可以理解的。當然,如果是位暖男,為他女朋友、老婆買這些東西,也是可以理解的。如果我們再增加一個緯度的“大資料”,這個ID使用者,最近經常看韓劇,那麼他是女性可能性,就又提高了。再增加一個緯度的“大資料”,這個ID在某個評論裡說“最近剛生完寶寶,聽老公說XXXX,我覺的XXXX”。這裡,針對這個ID的畫像,把他的性別改為“女”,是可以的,是有99.99%的把握的。但也無法排除0.01%的變態。

這個例子中,就把“大資料”、“機器學習”等等熱門的概念都搞一塊了。
實際工作的過程中,情況和限制,也就更多更復雜了。針對各類企業、每個企業,我想都在某些時刻,有去猜(也就是去分類)某些事情的需求。此時,找猜的“米”時,一看,之前很多資料沒儲存,無米下鍋。沒有人才,沒多少人會利用這些牛逼的“演算法+資料”去猜。更多是沒有資料意識,針對馬雲口中“DT時代”,沒有感官認識,不明白具體是什麼意思。

在具體落地的解決方案過程中,資料收集、儲存、計算工具等等方面,現在技術發展的還是可以的。再具體“怎麼猜”(是利用if elif else與語句猜,是利用線性模型猜,還是利用“深度學習”猜)的過程中,那就要具體情況具體分析了:
總共才兩三中情況,看一眼就知道怎麼回事,提煉出規則,程式設計成固定規則就行了,上深度學習,純屬腦子有病;但像BAT這種大公司,有很多牛叉的研究員,整天研究如何利用盡可能對的資料(“大資料”),比較牛逼的演算法策略(比如“深度學習”等),儘可能多猜的更準、更穩。哪怕猜準確率提高1%,那麼可能多銷售幾個億的商品。

目前,語音識別、機器翻譯。等等,本質上,也是“猜”嘛。英語中某個句話猜成中文的意思,有30%準確率,用上深度學習後,猜對的可能性提高到了45%。。。。。某段錄音,根據記錄的音波,之前猜對概率是85%,積累的資料多了,用的演算法牛逼了,引數調的好點了,猜對概率95%了,這就是進步啊。等到,你說依據話,計算機猜你的意思,猜對的概率是99%了,我想那時,你百度什麼東西,就不用輸關鍵詞了,對這電腦說就行了。

但無論怎麼樣,即便是BAT、谷歌等大公司,前沿研究除外,能為資本家帶來直接利潤的機器學習演算法,目前還是比較簡單的機器學習演算法為主,比如一些線性模型類的演算法(我記得我第一次學線性迴歸時,在初中數學裡的內容),所以,這些演算法的原理也是比較簡單的。上世界90年代各方面就研究的很透了,只不過那時候,人類積累的資料少(資料就在那裡,每天都在產成,只不過,那是沒有價效比高的記錄手段)、計算機的計算能力不足。至於更高大上一些的演算法,比如深度學習等,主要用來對系統裡的某一些環節改造,增加猜對的概率。嚴格意義說,跟所謂的“大資料”,沒多少直接關係。即便是沒有“深度學習”,用其他的演算法,要想達到實用效果,所需要的資料量也不一定少。

回望,很多概念,“火”與不“火”的歷程也是有規律可循的。07、08、09年時,與“雲”有關的很火,什麼“公有云”、“私有云”、“混合雲”,12、13、14年時,“大資料”很火;現在,16、17年,“機器學習”、“人工智慧”很火。有了“雲”架構,我們有了靈活手段的去排程硬體資源,所以要利用搞點事情啊,再加上谷歌的工程師發表了著名的三篇論文,全世界的工程師開發了相關軟體;因此,後來的“大資料”火了,這時的“火”,更多是建立“資料倉庫”等儲存等階段,針對資料利用、處理,也是普通簡單演算法範圍,如統計一下資料,出一些Top榜什麼的。後來,有了積累了多資料、更多資源了,我們有什麼理由不把跟牛逼的策略、演算法搬出來,對資料挖的更深、利用的更好呢。從中可以看出,這些概念火起來,是計算力的進步,是人類收集、儲存、加工、處理、利用資訊能力的進步。

————————————————————————————————————————
根據個人的行業經驗來看。現在很多人,對大資料的理解都有些偏了。目前,對大資料的主流看法就是"深度學習","人工智慧"等很火,很高大上的東西,都需要大量的資料,所以大資料會怎樣、怎樣。

其實,大資料的背後,是人類處理資訊(也就是資料,大家不要認為大資料,這個概念中的"資料",是12345等阿拉伯數字組成的東西,凡是能存電腦裡的東西,都是資料)的IT系統的一次革命性升級。這次技術的升級,是繼資料庫系統後,人類處理資料手段和技能的提升。下面,我以一個例子,來說明我們資訊處理手段的提升。

張三是個創業者,每晚到夜市擺攤。由於攤子很小,每天回家後,找一隻筆,一個香菸盒子紙,就能把賬算了、把貨盤了,這時,憑藉著一隻鉛筆,一張破紙,就能把該處理的資料資訊處理了。後來,攤子稍微大了一點,張三到門口小超市花幾塊錢買了個計算器,每天在計算器"為零"的幫助下,再加上一隻筆、一張紙把資訊處理了。再後來,張三開了個小超市,他處理資訊的能力也增強了,用上了Excel、word等軟體來處理資訊。後來,張三開開了個大超市,其資訊處理工具也鳥槍換炮了,用上了進銷存管理系統、財務管理系統、人事管理系統。這些系統,在資料儲存方面,用資料庫,如mysql。在業務處理方面,招幾個程式設計師,用php、python或java,寫具體的業務處理邏輯(也就是當年張三在紙上寫寫畫畫的處理過程)。這一階段的IT處理段位,是目前大多數中小企業所在的段位。可以看出,這個段位的IT系統和處理能力有以下不足:

1、只能處理結構化資料,對大量非結構化資料(文字、語音、視訊等),處理能力嚴重不足。
2、能處理的資料量還是太小,比如,用張破紙,你處理10條資料沒問題,給你個計算器,你處理100條資料沒壓力。用Excel,你處理10萬條無壓力。給你個mysql,你在千萬條資料的級別範圍內增刪改查無壓力。但是,當你要面對的資料是100億條級別時,你的資料庫、儲存、業務處理程式碼等,就有可能分分鐘鬧毛病給你看。 注意:利用各種中介軟體構建分散式關係型資料庫叢集,是能應付的。此處,各位看官領會我說的什麼意思就好,先不要糾結具體技術解決方案。
3、處理的手段單一,只能跑程式設計師編好的程式,比較死板。只能按著程式碼邏輯跑,一點都不"智慧"。
4、從技術上講,靈活性還是不足。你的進銷存、財務、人事等系統。程式設計師編完,能用了,也就完了。沒有重要問題和需求變更,也不會去頻繁升級、重構和迭代更新。從這方面講,也會造成企業在想要XX資料時,發現沒有。想要XX功能時,發現要實現的成本太大。或者,在你的威嚴下,你手下的程式設計師辭職了,你滿心委屈"我不就是想要個這麼小、這麼簡單的功能麼。這小子居然花了那麼長時間弄,還TMD辭職了,90後,真是一代不如一代"。所以,這些,到最後,大多都不了了之。
5、從具體的實際流程上看,流程太長、太慢。比如說,您是集團公司的老總,有一天突發奇想,想到了一個專案,想"看看相關資料"。此時,你的祕書幫你去搞資料了,北京分公司的資料,很快上來了,上海分公司的資料,祕書打了好幾遍電話,才要來。山東分公司的說,我們這邊忙著陪客戶吃飯喝酒了,具體資料沒收集呢,您稍等,我幫您問問、查一下。浙江分公司的,資料報上來了,剛放你辦公桌上,你剛翻了一下,他們打電話說,資料報錯了、漏報了,您稍等,我們組織人力物力,重新幫你核查。。。此時,時間上,少說也一個月過去了,還不一定保證資料都正確。資料收集上來,您也不用"分析"了。市場風雲變幻,黃花菜都涼了。

鑑於此,大資料處理系統來了。有了hadoop、spark、storm、hbase、 Elasticsearch、zookeeper等等大資料工具搭建起來的資料處理叢集,張三終於炮換導彈了。

1、有了hdfs,張三可以把以前覺得沒太大價值的資料儲存起來。未來的事,誰知道呢,資料總是要的,說不定以後用的到呢。如果阿里巴巴沒有儲存、整理使用者的交易資料等,花唄、借唄等業務,開展起來,簡直就是做夢。巧婦難為無米之炊。
2、有了spark等程式設計框架,你的業務處理流程,也更加靈活和牛逼了。你可以用python、java,scala等編寫一些指令碼似的資料分析程式,盡情地挖掘出有價值的東西。這一個個的job,寫完後,扔給排程系統,定時,每天晚上讓叢集幫你跑出來就好了。挺靈活的。
3、呼叫一些開發庫,你可以玩一些機器學習等高大上的東西。出去吹牛逼也有料了。
4、建立統一的資料處理中心,再加上網際網路的力量,終於可以在可接受的時間範圍內獲得你想要的資料了,而且資料還能詳細,方方面面的資料都有,最後還附有機器人"小優"的"智慧"建議和溫馨提示。
5、藉助比如storm等實時處理框架,很多結果可以秒級回饋。效能遇到瓶頸了,大不了加機器。反正一切都是分散式的。

業內目前討論"大資料",應該更傾向於看它背後的技術對當前企業IT系統的革新。就如同目前大多數企業以關係型資料庫為中心的IT系統一樣,現在,我們處理資訊的手段中,又添加了新的成員。現在,如果你向老大建議,我們不要以關係型資料庫為核心的各類"進銷存"、財務等系統了,全體回退到以Excel、word來處理資訊,我相信,他會分分鐘扇死你。我相信,20年後,你向老闆建議,我們放棄各類以大資料處理叢集為核心的精準營銷系統、智慧客服系統、使用者智慧分析系統等等,大家集體回退到以純關係型資料庫為核心的時代;我相信,他也一定會分分鐘扇死你。
當前,我們對大資料的理解,越來越清晰和接地氣。阿里巴巴已經把他們的大資料系統,改名為了"maxComputer"。從名字不難看出,大資料就是大電腦,這意味著更大的資訊處理能力、更高的靈活性。

大資料能火多久,如同穿越到上世紀80年代,去問個人電腦能火多久一樣。現在,我們都不會認為"個人電腦"很"火"。因為,它已經成為了人類工具箱裡一件強大的工具,提高了人類的生產力。我相信,“大資料”,也會成為我們的工具箱裡的這麼一樣工具的。