想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)-阿里云开发者社区

开发者社区> 德哥> 正文

想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)

简介: 标签 PostgreSQL , AI , 人工智能 , 神经网络 , 机器学习 , MADlib , Greenplum , 物联网 , IoT , pivotalR , R 背景 想必很多朋友这几天被铺天盖地的AI战胜60位围棋高手的新闻,我们不得不承认,人工智能真的越来越强了。 ht
+关注继续查看

标签

PostgreSQL , AI , 人工智能 , 神经网络 , 机器学习 , MADlib , Greenplum , 物联网 , IoT , pivotalR , R


背景

想必很多朋友这几天被铺天盖地的AI战胜60位围棋高手的新闻,我们不得不承认,人工智能真的越来越强了。

http://wallstreetcn.com/node/283152

1月4日晚,随着古力认输,Master对人类顶尖高手的战绩停留在60胜0负1和,而令人尴尬的是这唯一一场和棋还是因为棋手掉线系统自动判和,并不是棋盘上的局势真的势均力敌了。包括聂卫平、柯洁、朴廷桓、井山裕太在内的数十位中日韩围棋高手,在30秒一手的快棋对决中落败。Master(最新版AlphaGo)网测以60战全胜的战绩收场!

在横扫中日韩顶尖棋手,豪取47连胜之后,昨晚神秘的“Master”再战世界冠军棋手朴廷桓,元晟溱,和中国第一人柯洁。随着柯洁黯然投子,Master的连胜纪录已扩大至50盘,难逢敌手。

今天早些时候,Master挑战人类顶尖高手第54局,中国棋圣、64岁的聂卫平出战。《新闻晨报》报道,本局“Master”特意把比赛用时调整为每方1分钟一手,以示对聂卫平的尊敬,最终执白的聂卫平以7目半的劣势落败。神秘AI围棋Master战胜棋圣聂卫平,54连胜。

人工智能知识背景

内容请参考

http://mp.weixin.qq.com/s/Chln4htaCq1rQWTpPgFYZg

参考以上文章萃取后的内容

大概的思想就是通过模仿生物神经网络的学习和训练方法,让计算掌握学习能力。

生物神经网络的学习过程是这样的,首先我们天生就有五官,能听到声音、看见世界、闻到气味、尝到酸甜苦辣、触摸到一切。

五官是神经网络的输入之一,而另一方面,我们的长辈会教我们东西,比如你告诉小孩这是香蕉,小孩的神经会根据看到的形状、颜色等特征,以及你告诉他的(事实)做一个碰撞,调整连接这两个点之间的信号强弱,形成固定的模式,学习成功。

pic

人工神经网络和生物神经网络类似,也需要训练,从而修正通道的信号强弱,掌握知识(判断能力)。

pic

比如我们有一批水果的照片,并且人工将这些照片设置属性,存入数据库大概是这样的。

表1

水果图片 水果名称 水果唯一编号
图片1 香蕉 2
图片2 香蕉 2
图片3 香蕉 2
图片4 苹果 -2
图片5 苹果 -2
图片6 苹果 -2

因为图片是数字化的,计算机可以读取(识别)图片的特征(比如每个像素的三原色等信息),同时第三个字段是水果的唯一编号,也就是说不通的香蕉图片,它们的编号都是一样的。

1. 图片就和小宝宝眼睛看到的东西一样。

2. 而水果编号就像大人教小宝宝的。

从而形成了与生物神经网络类似的训练模式,通过这样的方式,来调整两个输入点之间通道的强弱,适配唯一编号,就达到了人工神经网络的学习过程。

训练完成后,计算机就可以从输入(图片),就能识别它是什么(通过输入与不同通道相乘,在进行正负反馈相加得到结果),结果与已有的水果唯一编号对比,即可知道它是什么?

训练过程有两个输入(图片、水果唯一编号),而处理过程是一个输入(图片),一个输出(计算得到的值,与水果编号进行比较从而知道它是什么)。

上面介绍了最为简单的人工神经网络,那么它与机器学习和人工智能的关系是什么?

pic

人工神经网络是机器学习的一种技术,有关人工神经网络的我们了解了,那么不是人工神经网络的机器学习是什么呢?大数据这个词大家都不陌生,大数据技术依赖的是数据中的数据关系,通过大数据训练的算法中很多就是机器学习中不是人工神经网络的部分,比如根据你购物的时候购买特定商品的频率推送相应的广告。

除了人工神经网络,深度学习也是经常被提起的名词,人工神经网络与深度学习又是什么关系?我们首先要对人工神经网络有一个粗浅的了解,如下图。

pic

在识别苹果和香蕉的例子中,我们构建的其实是趋近于两层的单层神经网络,甚至形成了部分侧向抑制的能力,如果四个输入信号都被刺激,那么最终的刺激为0。

pic

人工神经网络有一个非常重要的部分,深度神经网络,是指含有多个隐层的神经网络,如下图。

pic

依赖深度神经网络的机器学习被称为深度学习。深度神经网络本身有几个重要的类型:递归神经网络,卷积神经网络,前馈神经网络,这几种神经网络有不同的应用场景。深度学习又可以分为无监督学习和监督学习,如下图。

pic

我们知道神经网络是要通过数据来训练(学习)的,所以如果先要通过具有相关性的标签化的数据训练网络,那么这部分数据就是通过人的监督来筛选的,比如我们构建的简单的识别水果的神经网络,就是先把苹果和香蕉的数据准备好,再输入进去,这就是监督学习。假如不去告诉人工神经网络什么是对,什么是错,什么是苹果,什么是香蕉,而是通过神经网络自己进行聚类学习,除了识别出一般的香蕉苹果,甚至发现特殊品种,这种就是无监督学习,或者叫非监督学习。

从人工智能到无监督学习,整体的概念联系图就是这样的。

pic

人工神经网络的发展并非一帆风顺,从最早的单层神经网络到现在的多层神经网络经历了七十多年的研究,如下是人工神经网络的发展简史。

pic

如下是人工神经网络所使用的算法。

pic

深度神经网络的两个应用领域

1. CNN—图像识别(参考 用CNN来识别鸟or飞机的图像 )

2. RNN-语音/语义识别 (参考 循环神经网络RNN打开手册 )

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),如下图。

pic

注意右下角的放大小图中的灰色方块一元因子(Unary factor),这是与水平细胞相似的关键。在字母验证码识别这个具体问题上,Vicarious基于生成型形状模型的系统能够只用1406张图片作为训练集,就超越了利用深度学习的800万图片达到的效果。

所以当模型足够优化的时候可以大大减少对数据的需求量,而借鉴神经科学的发展无疑是一个有效的途径。

与PostgreSQL数据库下一场国际象棋

虽然这个例子与AI无关,只是简单的自定义规则的棋类游戏。但是它反映的是PostgreSQL的开放性,以及扩展能力。

PostgreSQL的用户有点疯狂,看看他们怎么让PostgreSQL和你玩国际象棋吧。

http://pgxn.org/dist/pg2podg/

http://pgxn.org/dist/pgchess/

部署

wget http://api.pgxn.org/dist/pg2podg/0.1.3/pg2podg-0.1.3.zip     
wget http://api.pgxn.org/dist/pgchess/0.1.7/pgchess-0.1.7.zip    

unzip pg2podg-0.1.3.zip     
unzip pgchess-0.1.7.zip    

cd pg2podg-0.1.3    
make clean; make; make install    

cd ../pgchess-0.1.7    
make clean; make; make install    

部署结束

-rw-r--r-- 1 digoal users   94 Jan  6 10:05 pg2podg.control    
-rw-r--r-- 1 digoal users  21K Jan  6 10:05 pg2podg--0.1.3.sql    
-rw-r--r-- 1 digoal users  131 Jan  6 10:05 pgchess.control    
-rw-r--r-- 1 digoal users  14K Jan  6 10:05 pgchess--0.1.7.sql    

-rwxr-xr-x 1 digoal users  22K Jan  6 10:05 chess.so    

将游戏加载到PostgreSQL数据库中

psql -h 127.0.0.1    
psql (9.4.5)    
Type "help" for help.    

postgres=# create extension pgchess;    
CREATE EXTENSION    
postgres=# create extension pg2podg;    
CREATE EXTENSION    

新增了3个数据类型

postgres=# \dT    
                                    List of data types    
 Schema |   Name   |                              Description                                  
--------+----------+-----------------------------------------------------------------------    
 public | game     | "moves" is encoded via the %% operators, which throughout this file  +    
        |          | represent a compact textual encoding of a game or a move.            +    
        |          |                                                                      +    
        |          | "board" could be computed from "moves", but only for standard games  +    
        |          | (e.g. not for chess problems). Also, remembering "board" is efficient+    
        |          | and simpler.                                                         +    
        |          |                                                                      +    
        |          | The first 64 characters of "board" represent the chessgame locations;+    
        |          | the next four characters encode castling information, and the last   +    
        |          | character is the piece captured in the last move (if any).    
 public | location |     
 public | move     |     
(3 rows)    

玩法参考

http://api.pgxn.org/src/pgchess/pgchess-0.1.7/doc/pgchess-QUICKSTART.md

游戏在以下目录

pgchess-0.1.7/test/sql/play    

-rw-r--r-- 1 digoal users 160 Oct 19  2012 Human_v_PG.sql    
-rw-r--r-- 1 digoal users 148 Oct 19  2012 new-game.sql    
-rw-r--r-- 1 digoal users 160 Oct 19  2012 PG_v_Human.sql    
-rw-r--r-- 1 digoal users 160 Oct 19  2012 PG_v_PG.sql    
-rw-r--r-- 1 digoal users 242 Oct 19  2012 reset-stats.sql    
-rw-r--r-- 1 digoal users 933 Oct 19  2012 _.sql    
-rw-r--r-- 1 digoal users 854 Oct 19  2012 view-stats.sql    

玩法如下

Step 1

------    

Load a default game in the chessboard:    

    \i /home/dege.zzz/pgchess-0.1.7/test/sql/play/new-game.sql    

Step 2

------    

View the game in FEN notation    

    gianni=# select %% game from status;    
                             ?column?                             
    ----------------------------------------------------------    
     rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1    
    (1 row)    

Step 2a (optional)

------------------    

If you are using a VT100-compatible terminal, you can use an enhanced    
graphical display.    

First make sure that the background is lighter than the foreground (e.g.    
black on white); then issue    

    gianni=# \pset format unaligned    
    Output format is unaligned.    

and check that it is working by displaying the current game:    

gianni=# select # game from status;    

pic

Step 3

------    

Now you can start a CPU v CPU game:    

    \i play/PG_v_PG.sql    

you can interrupt the game with CTRL-C.     

Since each half-move is executed in a separate transaction, the game will be left in the state corresponding to the last completed move.    

由于我的终端问题,无法正确的显示图标

pic

请使用9.4来把玩,9.5以后这个接口有变,需要修改以上两个游戏模块的代码。

extern ArrayIterator array_create_iterator(ArrayType *arr, int slice_ndim);    

一个小小的下棋插件,主要体现的是PostgreSQL的开放性,不要把它当成单纯的数据库,它是一个真正的面向对象数据库。

可以实现很多有趣的特性,能帮助业务解决很多的问题,比如本文末尾有很有很实用的例子,已经帮到了很多用户。

Greenplum与PostgreSQL 的机器学习库MADlib

数据库中的人工神经网络体现

http://www.infoq.com/cn/articles/in-database-analytics-sdg-arithmetic

PS: 这篇文档中有一些描述的点并不正确(比如UDFA实际上是支持并行的)。

把机器学习库内置到database中(通过database的UDF)有许多优点,执行机器学习算法时只需要编写相应的SQL语句就可以了,同时database本身作为分析的数据源,使用非常方便,大大降低了机器学习的应用门槛。

在数据库中,如何编写聚合,在Greenplum如何编写两阶段聚合:

《hll插件在Greenplum中的使用 以及 分布式聚合函数优化思路》

《performance tuning about multi-rows query aggregated to single-row query》

《PostgreSQL aggregate function customize》

实际上MADlib库中包含了大量的机器学习算法,可以通过已有的数据集合进行训练(比如前面提到的苹果、香蕉等水果的照片)。(类似前面提到的生物神经网络的学习过程)

那么madlib是什么样的呢?

一张图读懂madlib

http://blog.163.com/digoal@126/blog/static/163877040201510119148173

pic

回归分析,决策树,随机森林,贝叶斯分类,向量机,风险模型,KMEAN聚集,文本挖掘,。。。等。

一个线性回归的例子,对应上图

supervised learning -> generalized linear models -> linear regression

pic

如果你是R的数据科学家,并且不习惯使用SQL的话,使用pivotalR的R包就可以了,左边是R的写法。右边对应的是SQL。

pic

话说如果要预测每个时间点的11.11销售额,可以用到它了。 

PostgreSQL用户来搞数据挖掘有天然优势。

pic

madlib的使用手册:

http://doc.madlib.net/latest/index.html

http://madlib.incubator.apache.org/docs/latest/group__grp__tsa.html

pivotalR使用手册

https://cran.r-project.org/web/packages/PivotalR/PivotalR.pdf

IoT、大数据与人工智能的结合

人工智能的基础是数据、学习算法。

1. 人的数据来自哪里?

五官

2. 人工智能的数据来自哪里?

IoT,万物产生的数字化数据

3. 人的数据存哪里?如何处理?

大脑?

4. 人工智能的数据存哪里?如何处理?

为了提高数据传输的速度,数据和计算单元越近越好,否则不仅需要传输,还需要在计算端暂存,耗时耗力。

所以数据库本身具备计算能力是最好的,否则一次运算需要的数据在网络上传输花的时间可能是无法想象的。

有了菜谱,那么就开始找食材吧:

Greenplum, PostgreSQL, MADLib, R, pivotalR 是不错的食材,可以烧出什么样的菜呢?

pic

pic

阿里云已提供PostgreSQL(支持R, pivotalR, MADlib), HybridDB(base on GPDB, 支持R, pivotalR, MADlib), 用户只需要安心做好开发即可,不需要操心基础设施本身的维护问题了。

参考文档

PostgreSQL也是一个 "很有爱" 的数据库,用心学习它,用心回报社会吧。

pic

《元旦技术大礼包 - ApsaraDB的左右互搏术 - 解决企业痛处 TP+AP混合需求 - 无须再唱《爱你痛到不知痛》》

《Leap second , 闰秒 , 数据库 , PostgreSQL , Solar time , UNIX time , UTC , UT1》

《元旦技术大礼包 - 2017金秋将要发布的PostgreSQL 10.0已装备了哪些核武器?》

《从天津滨海新区大爆炸、危化品监管聊聊 IT人背负的社会责任感》

《PostgreSQL 重复 数据清洗 优化教程》

《从难缠的模糊查询聊开 - PostgreSQL独门绝招之一 GIN , GiST , SP-GiST , RUM 索引原理与技术背景》

《从真假美猴王谈起 - 让套牌车、克隆x 无处遁形的技术手段思考》

《恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计》

《DBA专供 冈本003系列 - 数据库安全第一,过个好年》

《聊一下PostgreSQL优化器 - in里面有重复值时PostgreSQL如何处理?》

《从相似度算法谈起 - Effective similarity search in PostgreSQL》

《一场IT民工 与 人贩子 之间的战争 - 只要人人都献出一点爱》

《"物联网"流式处理应用 - 用PostgreSQL实时处理(万亿每天)》

《为了部落 - 如何通过PostgreSQL基因配对,产生优良下一代》

《流计算风云再起 - PostgreSQL携PipelineDB力挺IoT》

《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》

《金融风控、公安刑侦、社会关系、人脉分析等需求分析与数据库实现 - PostgreSQL图数据库场景应用》

《实时数据交换平台 - BottledWater-pg with confluent》

《PostgreSQL 在视频、图片去重,图像搜索业务中的应用》

《基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统》

《PostgreSQL 与 12306 抢火车票的思考》

《门禁广告销售系统需求剖析 与 PostgreSQL数据库实现》

《聊一聊双十一背后的技术 - 物流、动态路径规划》

《聊一聊双十一背后的技术 - 分词和搜索》

《聊一聊双十一背后的技术 - 不一样的秒杀技术, 裸秒》

《聊一聊双十一背后的技术 - 毫秒分词算啥, 试试正则和相似度》

《PostgreSQL 9.6 引领开源数据库攻克多核并行计算难题》

《PostgreSQL 前世今生》

《如何建立GIS测试环境 - 将openstreetmap的样本数据导入PostgreSQL PostGIS库》

《PostgreSQL 9.6 单元化,sharding (based on postgres_fdw) - 内核层支持前传》

《PostgreSQL 9.6 sharding + 单元化 (based on postgres_fdw) 最佳实践 - 通用水平分库场景设计与实践》

《PostgreSQL 9.6 sharding based on FDW & pg_pathman》

《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》

《PostgreSQL 数据库安全指南》

《PostgreSQL 9.6 黑科技 bloom 算法索引,一个索引支撑任意列组合查询》

《PostgreSQL 使用递归SQL 找出数据库对象之间的依赖关系》

《用PostgreSQL描绘人生的高潮、尿点、低谷 - 窗口/帧 or 斜率/导数/曲率/微积分?》

《用PostgreSQL找回618秒逝去的青春 - 递归收敛优化》

《PostGIS 在 O2O应用中的优势》

《PostgreSQL 百亿地理位置数据 近邻查询性能》

《HybridDB最佳实践, 实现OLAP和OLTP一体化》

《hll插件在Greenplum中的使用 以及 分布式聚合函数优化思路》

《performance tuning about multi-rows query aggregated to single-row query》

《PostgreSQL aggregate function customize》

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【AlphaGo之后会是什么】一文读懂人工智能打德扑
攻克围棋后,什么是AI的下一个征程?打扑克!相比信息完全可见的围棋,能够猜疑、虚张声势的德扑要困难得多。冷扑大师Libratus是首个在无限手一对一德扑中战胜人类职业玩家的AI,相关论文也在NIPS 2017获得了最佳论文奖。
1569 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
3492 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4615 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9513 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
846 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
4265 0
+关注
德哥
公益是一辈子的事, I'm digoal, just do it.
2153
文章
245
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载