天天看點

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

postgresql , ai , 人工智能 , 神經網絡 , 機器學習 , madlib , greenplum , 物聯網 , iot , pivotalr , r

想必很多朋友這幾天被鋪天蓋地的ai戰勝60位圍棋高手的新聞,我們不得不承認,人工智能真的越來越強了。

<a href="http://wallstreetcn.com/node/283152">http://wallstreetcn.com/node/283152</a>

1月4日晚,随着古力認輸,master對人類頂尖高手的戰績停留在60勝0負1和,而令人尴尬的是這唯一一場和棋還是因為棋手掉線系統自動判和,并不是棋盤上的局勢真的勢均力敵了。包括聶衛平、柯潔、樸廷桓、井山裕太在内的數十位中日韓圍棋高手,在30秒一手的快棋對決中落敗。master(最新版alphago)網測以60戰全勝的戰績收場!

在橫掃中日韓頂尖棋手,豪取47連勝之後,昨晚神秘的“master”再戰世界冠軍棋手樸廷桓,元晟溱,和中國第一人柯潔。随着柯潔黯然投子,master的連勝紀錄已擴大至50盤,難逢敵手。

今天早些時候,master挑戰人類頂尖高手第54局,中國棋聖、64歲的聶衛平出戰。《新聞晨報》報道,本局“master”特意把比賽用時調整為每方1分鐘一手,以示對聶衛平的尊敬,最終執白的聶衛平以7目半的劣勢落敗。神秘ai圍棋master戰勝棋聖聶衛平,54連勝。

内容請參考

<a href="http://mp.weixin.qq.com/s/chln4htacq1rqwtppgfyzg">http://mp.weixin.qq.com/s/chln4htacq1rqwtppgfyzg</a>

大概的思想就是通過模仿生物神經網絡的學習和訓練方法,讓計算掌握學習能力。

生物神經網絡的學習過程是這樣的,首先我們天生就有五官,能聽到聲音、看見世界、聞到氣味、嘗到酸甜苦辣、觸摸到一切。

五官是神經網絡的輸入之一,而另一方面,我們的長輩會教我們東西,比如你告訴小孩這是香蕉,小孩的神經會根據看到的形狀、顔色等特征,以及你告訴他的(事實)做一個碰撞,調整連接配接這兩個點之間的信号強弱,形成固定的模式,學習成功。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

人工神經網絡和生物神經網絡類似,也需要訓練,進而修正通道的信号強弱,掌握知識(判斷能力)。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

比如我們有一批水果的照片,并且人工将這些照片設定屬性,存入資料庫大概是這樣的。

表1

水果圖檔

水果名稱

水果唯一編号

圖檔1

香蕉

2

圖檔2

圖檔3

圖檔4

蘋果

-2

圖檔5

圖檔6

因為圖檔是數字化的,計算機可以讀取(識别)圖檔的特征(比如每個像素的三原色等資訊),同時第三個字段是水果的唯一編号,也就是說不通的香蕉圖檔,它們的編号都是一樣的。

1. 圖檔就和小寶寶眼睛看到的東西一樣。

2. 而水果編号就像大人教小寶寶的。

進而形成了與生物神經網絡類似的訓練模式,通過這樣的方式,來調整兩個輸入點之間通道的強弱,适配唯一編号,就達到了人工神經網絡的學習過程。

訓練完成後,計算機就可以從輸入(圖檔),就能識别它是什麼(通過輸入與不同通道相乘,在進行正負回報相加得到結果),結果與已有的水果唯一編号對比,即可知道它是什麼?

訓練過程有兩個輸入(圖檔、水果唯一編号),而處理過程是一個輸入(圖檔),一個輸出(計算得到的值,與水果編号進行比較進而知道它是什麼)。

上面介紹了最為簡單的人工神經網絡,那麼它與機器學習和人工智能的關系是什麼?

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

人工神經網絡是機器學習的一種技術,有關人工神經網絡的我們了解了,那麼不是人工神經網絡的機器學習是什麼呢?大資料這個詞大家都不陌生,大資料技術依賴的是資料中的資料關系,通過大資料訓練的算法中很多就是機器學習中不是人工神經網絡的部分,比如根據你購物的時候購買特定商品的頻率推送相應的廣告。

除了人工神經網絡,深度學習也是經常被提起的名詞,人工神經網絡與深度學習又是什麼關系?我們首先要對人工神經網絡有一個粗淺的了解,如下圖。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

在識别蘋果和香蕉的例子中,我們建構的其實是趨近于兩層的單層神經網絡,甚至形成了部分側向抑制的能力,如果四個輸入信号都被刺激,那麼最終的刺激為0。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

人工神經網絡有一個非常重要的部分,深度神經網絡,是指含有多個隐層的神經網絡,如下圖。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

依賴深度神經網絡的機器學習被稱為深度學習。深度神經網絡本身有幾個重要的類型:遞歸神經網絡,卷積神經網絡,前饋神經網絡,這幾種神經網絡有不同的應用場景。深度學習又可以分為無監督學習和監督學習,如下圖。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

我們知道神經網絡是要通過資料來訓練(學習)的,是以如果先要通過具有相關性的标簽化的資料訓練網絡,那麼這部分資料就是通過人的監督來篩選的,比如我們建構的簡單的識别水果的神經網絡,就是先把蘋果和香蕉的資料準備好,再輸入進去,這就是監督學習。假如不去告訴人工神經網絡什麼是對,什麼是錯,什麼是蘋果,什麼是香蕉,而是通過神經網絡自己進行聚類學習,除了識别出一般的香蕉蘋果,甚至發現特殊品種,這種就是無監督學習,或者叫非監督學習。

從人工智能到無監督學習,整體的概念聯系圖就是這樣的。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

人工神經網絡的發展并非一帆風順,從最早的單層神經網絡到現在的多層神經網絡經曆了七十多年的研究,如下是人工神經網絡的發展簡史。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

如下是人工神經網絡所使用的算法。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

3. cnn與rnn的融合

機器從擷取到的資料集合,通過訓練,達到一定程度後,智力超過人類也屬于正常現象。甚至可能未來也能像人類一樣進化,冥想。

我們知道深度學習所采用的技術關鍵點之一是通過資料訓練網絡,那麼究竟需要多少資料?在2016年初,網際網路出現了一個引爆性的新聞,谷歌收購的deep mind公司通過以cnn為基礎的神經網絡形成的人工智能alphago在圍棋上擊敗了李世石,在這個網絡開始訓練的時候已經相當于下了三千萬的棋譜,而與李世石下棋的時候這個資料達到一億,當然人類完成一局要一小時,而alphago隻要一秒。

alphago的示例是不是說一定要海量的資料才能訓練神經網絡?這樣對于沒有大量計算資源(分布式的alphago調用了1202個cpu和176個gpu),以及龐大資料庫(3000萬棋譜)的小公司和個人是不是就意味着無法使用人工智能?

有另一家公司在deep mind公司被收購前與其齊名,vicarious,該公司的特點是大量借鑒神經科學家和腦科學家的科研成果進入人工智能領域,在其科研人員中有20%來自相關領域。我們在上文中提到了神經細胞的側向抑制作用對輪廓識别和馬太效應的影響,那麼如果把這種能力模拟成神經網絡中的某些函數會是什麼結果?

vicarious在nips、神經資訊處理系統大會(conference and workshop on neural information processing systems)上發表了這樣一篇論文,利用了腦科學上非常成熟的成果:人類的神經系統系統普遍存在的側向抑制的現象,在他們在模型上實作了側向限制(lateral constraints),如下圖。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

注意右下角的放大小圖中的灰色方塊一進制因子(unary factor),這是與水準細胞相似的關鍵。在字母驗證碼識别這個具體問題上,vicarious基于生成型形狀模型的系統能夠隻用1406張圖檔作為訓練集,就超越了利用深度學習的800萬圖檔達到的效果。

是以當模型足夠優化的時候可以大大減少對資料的需求量,而借鑒神經科學的發展無疑是一個有效的途徑。

雖然這個例子與ai無關,隻是簡單的自定義規則的棋類遊戲。但是它反映的是postgresql的開放性,以及擴充能力。

postgresql的使用者有點瘋狂,看看他們怎麼讓postgresql和你玩國際象棋吧。

<a href="http://pgxn.org/dist/pg2podg/">http://pgxn.org/dist/pg2podg/</a>

<a href="http://pgxn.org/dist/pgchess/">http://pgxn.org/dist/pgchess/</a>

部署結束

将遊戲加載到postgresql資料庫中

新增了3個資料類型

玩法參考

<a href="http://api.pgxn.org/src/pgchess/pgchess-0.1.7/doc/pgchess-quickstart.md">http://api.pgxn.org/src/pgchess/pgchess-0.1.7/doc/pgchess-quickstart.md</a>

遊戲在以下目錄

玩法如下

step 1

step 2

step 2a (optional)

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

step 3

由于我的終端問題,無法正确的顯示圖示

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

請使用9.4來把玩,9.5以後這個接口有變,需要修改以上兩個遊戲子產品的代碼。

一個小小的下棋插件,主要展現的是postgresql的開放性,不要把它當成單純的資料庫,它是一個真正的面向對象資料庫。

可以實作很多有趣的特性,能幫助業務解決很多的問題,比如本文末尾有很有很實用的例子,已經幫到了很多使用者。

<a href="http://www.infoq.com/cn/articles/in-database-analytics-sdg-arithmetic">http://www.infoq.com/cn/articles/in-database-analytics-sdg-arithmetic</a>

ps: 這篇文檔中有一些描述的點并不正确(比如udfa實際上是支援并行的)。

把機器學習庫内置到database中(通過database的udf)有許多優點,執行機器學習算法時隻需要編寫相應的sql語句就可以了,同時database本身作為分析的資料源,使用非常友善,大大降低了機器學習的應用門檻。

在資料庫中,如何編寫聚合,在greenplum如何編寫兩階段聚合:

<a href="https://github.com/digoal/blog/blob/master/201608/20160825_02.md">《hll插件在greenplum中的使用 以及 分布式聚合函數優化思路》</a>

<a href="https://github.com/digoal/blog/blob/master/201212/20121217_01.md">《performance tuning about multi-rows query aggregated to single-row query》</a>

<a href="https://github.com/digoal/blog/blob/master/201212/20121218_02.md">《postgresql aggregate function customize》</a>

實際上madlib庫中包含了大量的機器學習算法,可以通過已有的資料集合進行訓練(比如前面提到的蘋果、香蕉等水果的照片)。(類似前面提到的生物神經網絡的學習過程)

那麼madlib是什麼樣的呢?

<a href="http://blog.163.com/digoal@126/blog/static/163877040201510119148173">http://blog.163.com/digoal@126/blog/static/163877040201510119148173</a>

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

回歸分析,決策樹,随機森林,貝葉斯分類,向量機,風險模型,kmean聚集,文本挖掘,。。。等。

一個線性回歸的例子,對應上圖

supervised learning -&gt; generalized linear models -&gt; linear regression

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

如果你是r的資料科學家,并且不習慣使用sql的話,使用pivotalr的r包就可以了,左邊是r的寫法。右邊對應的是sql。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

話說如果要預測每個時間點的11.11銷售額,可以用到它了。 

postgresql使用者來搞資料挖掘有天然優勢。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

madlib的使用手冊:

<a href="http://doc.madlib.net/latest/index.html">http://doc.madlib.net/latest/index.html</a>

<a href="http://madlib.incubator.apache.org/docs/latest/group__grp__tsa.html">http://madlib.incubator.apache.org/docs/latest/group__grp__tsa.html</a>

pivotalr使用手冊

<a href="https://cran.r-project.org/web/packages/pivotalr/pivotalr.pdf">https://cran.r-project.org/web/packages/pivotalr/pivotalr.pdf</a>

人工智能的基礎是資料、學習算法。

1. 人的資料來自哪裡?

五官

2. 人工智能的資料來自哪裡?

iot,萬物産生的數字化資料

3. 人的資料存哪裡?如何處理?

大腦?

4. 人工智能的資料存哪裡?如何處理?

為了提高資料傳輸的速度,資料和計算單元越近越好,否則不僅需要傳輸,還需要在計算端暫存,耗時耗力。

是以資料庫本身具備計算能力是最好的,否則一次運算需要的資料在網絡上傳輸花的時間可能是無法想象的。

有了菜單,那麼就開始找食材吧:

greenplum, postgresql, madlib, r, pivotalr 是不錯的食材,可以燒出什麼樣的菜呢?

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)
想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

阿裡雲已提供postgresql(支援r, pivotalr, madlib), hybriddb(base on gpdb, 支援r, pivotalr, madlib), 使用者隻需要安心做好開發即可,不需要操心基礎設施本身的維護問題了。

postgresql也是一個 "很有愛" 的資料庫,用心學習它,用心回報社會吧。

想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)

<a href="https://github.com/digoal/blog/blob/master/201701/20170101_02.md">《元旦技術大禮包 - apsaradb的左右互搏術 - 解決企業痛處 tp+ap混合需求 - 無須再唱《愛你痛到不知痛》》</a>

<a href="https://github.com/digoal/blog/blob/master/201701/20170102_01.md">《leap second , 閏秒 , 資料庫 , postgresql , solar time , unix time , utc , ut1》</a>

<a href="https://github.com/digoal/blog/blob/master/201701/20170101_01.md">《元旦技術大禮包 - 2017金秋将要釋出的postgresql 10.0已裝備了哪些核武器?》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161228_01.md">《從天津濱海新區大爆炸、危化品監管聊聊 it人背負的社會責任感》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161230_01.md">《postgresql 重複 資料清洗 優化教程》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161231_01.md">《從難纏的模糊查詢聊開 - postgresql獨門絕招之一 gin , gist , sp-gist , rum 索引原理與技術背景》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161227_01.md">《從真假美猴王談起 - 讓套牌車、克隆x 無處遁形的技術手段思考》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161225_01.md">《恭迎萬億級營銷(圈人)潇灑的邁入毫秒時代 - 萬億user_tags級實時推薦系統資料庫設計》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161224_01.md">《dba專供 岡本003系列 - 資料庫安全第一,過個好年》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161223_01.md">《聊一下postgresql優化器 - in裡面有重複值時postgresql如何處理?》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161222_02.md">《從相似度算法談起 - effective similarity search in postgresql》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161222_01.md">《一場it民工 與 人販子 之間的戰争 - 隻要人人都獻出一點愛》</a>

<a href="https://github.com/digoal/blog/blob/master/201512/20151215_01.md">《"物聯網"流式處理應用 - 用postgresql實時處理(萬億每天)》</a>

<a href="https://github.com/digoal/blog/blob/master/201606/20160621_1.md">《為了部落 - 如何通過postgresql基因配對,産生優良下一代》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161220_01.md">《流計算風雲再起 - postgresql攜pipelinedb力挺iot》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161216_01.md">《分析加速引擎黑科技 - llvm、列存、多核并行、算子複用 大聯姻 - 一起來開啟postgresql的百寶箱》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161213_01.md">《金融風控、公安刑偵、社會關系、人脈分析等需求分析與資料庫實作 - postgresql圖資料庫場景應用》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161205_02.md">《實時資料交換平台 - bottledwater-pg with confluent》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161126_01.md">《postgresql 在視訊、圖檔去重,圖像搜尋業務中的應用》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161021_01.md">《基于 阿裡雲 rds postgresql 打造實時使用者畫像推薦系統》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161124_02.md">《postgresql 與 12306 搶火車票的思考》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161124_01.md">《門禁廣告銷售系統需求剖析 與 postgresql資料庫實作》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161114_01.md">《聊一聊雙十一背後的技術 - 物流、動态路徑規劃》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161115_01.md">《聊一聊雙十一背後的技術 - 分詞和搜尋》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161117_01.md">《聊一聊雙十一背後的技術 - 不一樣的秒殺技術, 裸秒》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161118_01.md">《聊一聊雙十一背後的技術 - 毫秒分詞算啥, 試試正則和相似度》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161001_01.md">《postgresql 9.6 引領開源資料庫攻克多核并行計算難題》</a>

<a href="https://github.com/digoal/blog/blob/master/201609/20160929_02.md">《postgresql 前世今生》</a>

<a href="https://github.com/digoal/blog/blob/master/201609/20160906_01.md">《如何建立gis測試環境 - 将openstreetmap的樣本資料導入postgresql postgis庫》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161004_01.md">《postgresql 9.6 單元化,sharding (based on postgres_fdw) - 核心層支援前傳》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161005_01.md">《postgresql 9.6 sharding + 單元化 (based on postgres_fdw) 最佳實踐 - 通用水準分庫場景設計與實踐》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161027_01.md">《postgresql 9.6 sharding based on fdw &amp; pg_pathman》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161024_01.md">《postgresql 9.5+ 高效分區表實作 - pg_pathman》</a>

<a href="https://github.com/digoal/blog/blob/master/201506/20150601_01.md">《postgresql 資料庫安全指南》</a>

<a href="https://github.com/digoal/blog/blob/master/201605/20160523_01.md">《postgresql 9.6 黑科技 bloom 算法索引,一個索引支撐任意列組合查詢》</a>

<a href="https://github.com/digoal/blog/blob/master/201607/20160725_01.md">《postgresql 使用遞歸sql 找出資料庫對象之間的依賴關系》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161203_01.md">《用postgresql描繪人生的高潮、尿點、低谷 - 視窗/幀 or 斜率/導數/曲率/微積分?》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161201_01.md">《用postgresql找回618秒逝去的青春 - 遞歸收斂優化》</a>

<a href="https://yq.aliyun.com/articles/50922">《postgis 在 o2o應用中的優勢》</a>

<a href="https://yq.aliyun.com/articles/2999">《postgresql 百億地理位置資料 近鄰查詢性能》</a>

<a href="https://yq.aliyun.com/articles/66902">《hybriddb最佳實踐, 實作olap和oltp一體化》</a>