Changkun's Blog欧长坤的博客

Science and art, life in between.科学与艺术,生活在其间。

  • Home首页
  • Ideas想法
  • Posts文章
  • Tags标签
  • Bio关于
Changkun Ou

Changkun Ou

Human-AI interaction researcher, engineer, and writer.人机交互研究者、工程师、写作者。

Bridging HCI, AI, and systems programming. Building intelligent human-in-the-loop optimization systems. Informed by psychology, sociology, cognitive science, and philosophy.连接人机交互、AI 与系统编程。构建智能的人在环优化系统。融合心理学、社会学、认知科学与哲学。

Science and art, life in between.科学与艺术,生活在其间。

282 Blogs博客
171 Tags标签
Changkun's Blog欧长坤的博客

拙谈人工智能的未来

Published at发布于:: 2014-06-24   |   Reading阅读:: 1 min
序 从上个学期开始正式接触所谓“人工智能”,到这个学期差不多快一年了,陆陆续续逐步从感知机到SVM,从HMM到DL,逐步感受到这门学科的巨大深坑。我就来说说我的认识好了。 最初大一的时候第一次听说人工智能时是因为周伟老师(周老师确实厉害,我觉得应该是教过我的老师里面最有水平、最敬业的老师之一了),当时是和他谈到专业方向的问题,他随口提了一下他是做人工智能的。 不过当时大一计算机的皮毛都没接触到,C语言都还学得很残,也没有太在意这件事。直到后来当我接触计算机视觉之后,再后来随着对问题的深入才注意到,实际上原来这些东西我早有耳闻。 一、计算的复杂性 最开始的时候接触的是一门叫做计算复杂性理论的学科, 学到有关计算层次的东西,其中最最基础的一个东西叫做有限状态自动机,但后来才发现这玩意儿是一种非常弱的模型,只能处理正则文法正则表达式的东西,显然是不可能处理我们希望的所谓人工智能。 于是后来就出现了确定性下推自动机,但是这东西是一种上下文无关语言,尽管它后来给出了非确定性模型,能够处理的问题比确定性更广泛,但是仍然很鸡肋。最后到图灵机,不过很遗憾的事就是随着NP理论完善,图灵机也是有它自身的缺陷。 举个简单的例子,我们人脑能够处理的事情显然是指数级甚至阶乘级的复杂度甚至更复杂的问题,但是图灵机智能处理P类问题,而NP等于P吗?我个人还是很倾向于不等于的。因此,图灵机也就到P类问题截至了,还能继续突破吗?有人是这么评价图灵机的:图灵机奠定了人工智能的基础。但是,这个说法靠谱吗?实际上图灵机外面还有一些不可计算的问题,被称作不可判定问题,比如说停机问题(本质上就是罗素悖论)。 二、体系结构的硬伤 后来就接触到了计算机的结构体系——冯诺依曼体系,冯诺依曼干了什么事情呢?冯诺依曼提出了计算机的体系结构,其实就是一种实现通用图灵机的计算设备。 这种体系结构有一个很大的毛病,那就是这是一种串行的计算设备,无论你怎么改进,一个时刻永远只能处理一条指令,就这一点,几乎就给在这点上实现人工智能进行了第一道封喉。 另一方面,存取结构也存在巨大障碍尽管大脑记忆的存取方式尚不明确,但是我们能够明确的是,记忆至少是一种随机的非线性的存取结构。但是硬盘呢?尽管架构师们如何改进他们的内存硬盘架构,但是始终摆脱不了这样的尴尬——存储器始终是线性的,存取方法永远是索引的…(硬伤…这就叫硬伤…) 三、统计学的胜利 难道就没有什么办法了吗?这时候统计学的使用开始变的至关重要,尽管最初是非统计的方法应用较早,当时计算机科学家们数学功底一般,天真的以为能够找到一个解析解来解决问题。但后来科学家们很快就意识到,统计能够获得更好的效果,我们待会儿来看看是什么原因。 所以现在倡导的大数据的战略模式,就如同当年社交网络的诞生一样,似乎一夜之间所有的商业公司都开始拼了命的搜集用户隐私数据。一个很重要的基础就是:总体=样本。当这两个概念可以划等号的时,估计就没有了任何意义,因为我们在做决策的时候,依托现在的计算量,直接给出的就是全样本,只要特征选取正确,误差处理合理,则总能给出合理的预测。因为我们天真的认为,事物的变化总是有规律可循的。 一个我们实实在在能够感受到的例子就是语音识别技术,谷歌的Google Now、苹果的Siri、微软的Cortana,这些产品的背后用得不是别的,是数学,更精确一点,是统计学。一个非常基础的解决方案,就是HMM。甚至,在人机交互中有这样的观点:我们是否可以考虑会通过一些User Input来消除适当的计算量。 另一个例子是百度有个深度学习研究院,前阵子学术界的大牛吴恩达也加入其中,可见现在这套理论的火热程度。但是深度学习的本质上只是一种深层的神经网络,当时只不过计算量奇大,收敛速度也不能忍,早在上个世纪七十年代就被学术界给抛弃了。但是09年的时候,有位大牛做了一点点小的改进,于是把这堆死灰复燃了,而且,依据这套东西,学者们迅速改进,短短几年时间,Google做出了依托YouTube海量样本的惊艳产品——让计算机领悟了猫的概念。 为什么统计学会胜利?一个非常重要的原因就得益于这样一个人类行为:人脑是基于经验的。我们可以不假思索的对某些事物做出判断,就是因为我们在脑海中积累了大量的对于某件事物的分类信息。于是我们为何不把经验引入计算机体系当中呢?于是,便有了今天。(说一个打脸的事,百度依托它的这套系统,对这届世界杯进行了预测,不过这次葡萄牙的表现,也是妥妥的打脸了) 四、总结 所以,人工智能到底发展到什么地步了?前途有多大? 首先,谷歌苹果微软等涉足科技的公司做出来的产品看起来那么的智能,其实他们的本事简单得出奇——只是全样本下的数据分类而已。图灵机只是一种计算模型,它的数学本质在于集合论,基础靠的是ZFC公理系统,而图灵机这种基础计算模型的基础可以追溯到ZFC公理系统,但是在这个公理系统下,有着哥德尔定理在其决定性的压制。当然后来还诞生了诸如范畴论之类的东西,当然这些都是后话了。在这么多硬伤的状态下,人工智能还有多少前景? 其次,现在人工智能的实现,只不过是上个世纪六十年代就被数学家们玩烂了的东西,不过现在摩尔定律当道,解决了当时看似不可能的计算效率,才得以进步。这些东西,本质没有变,体系没有变,结果当然也不会有所改变。倘若不久的将来,摩尔定律也到头了,计算机科学的发展也可能到达第一个低谷了。 不仅如此,数学家们当时还给出了我们没办法处理全样本时的一系列解决方案(样本估计总体),这些方案在日后存储设备跟不上数据的生产速度时,计算机科学家们肯定会有一次重拾这一堆死灰,稍加改进,从而又会引发下一个巅峰吧。 再有,我很喜欢下面这个例子:当人类发明第一个梯子可以爬上树的时候,登月还有很远很远,更重要的是,整个方向就是错误的,梯子并不能登月。 现如今二十一世纪已经过去了十多年,真正的革命性突破还没有出现,但是,电池技术干翻了化学,可以预见的芯片技术将干翻物理,而人工智能也会干翻数学。回想一次次的理论大爆炸的起点,第一次是牛顿和莱布尼兹的微积分,第二次是伽罗华的群论,第三次则是勒贝格和它引领的测度理论,第四次会是什么呢? 总而言之,想要实现所谓高并发、高复杂度、随机存取等一系列复杂结构的人脑智能,有生之年,只能期待下一个伽罗华似的人物来革新整个数学基础体系了,到那时,无论是学术界,还是工业界,都将为之振奋。 进一步阅读的参考文献 [1]《计算理论基础(第二版)》Harry R.Lewis 等著 [2]《人工智能:一种现代方法(第三版)》 StuartRussell 著 [3]《算法导论(第三版)》Thomas H. Cormen 著 [4]《机器学习》 Tom Mitchell 著 [5]《Naive Set Theory》 Paul R. Halmos 著 [6]《用户界面设计——有效的人际交互策略(第五版)》 Ben Shneiderman 等著 [7]人工智能史 http://zh.wikipedia.org/wiki/人工智能史 [8]人工智能正在迈向技术的奇点吗?http://www.zhihu.com/question/24078012 [9]深度学习:推进人工智能的梦想 http://www.csdn.net/article/2013-05-29/2815479

Mac下新安装的MySQL无法登陆root用户解决方法

Published at发布于:: 2014-05-18   |   Reading阅读:: 1 min
也不知是何原因,新安装好的MySQL,如果尝试用mysql -u root -p登陆就会出现这样的错误,但是root用户根本就没有设置密码。 1 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 下面是解决方案: 1、先在系统偏好设置中关闭MySQL服务; 2、在终端中输入: 1 2 sudo su mysqld_safe --skip-grant-tables --skip-networking & 这时便能越过权限表,直接登陆MySQL了。 3、新建一个终端,输入 1 mysql -u root 4、 在MySQL中修改root用户密码即可: 1 2 mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’; mysql> FLUSH PRIVILEGES; 下面是在Mac中安装MySQLdb的方法: 由于要在Python里使用MySQL,但是Python内建的库中没有操作MySQL的玩意。所以得单独装一个,在安装下面的内容之前你首先得装一个MySQL。 在这里下载MySQLdb for Python,现在的最新版本是1.2.3,下载 MySQL-python-1.2.3.tar.gz 文件。(大视窗就直接 MySQL-python-1.2.3.win32-py2.7.msi 安装把) 在Finder直接双击压缩包或者 tar zxvf 解压之后,打开里面的 site.
Read More阅读更多 »

Matlab 2013a for Mac 帮助文档卡死解决方案

Published at发布于:: 2014-04-28   |   Reading阅读:: 1 min
有两种方法,不过都有自己的缺点。 方法1: R2013a在命令窗口中输入: 1 com.mathworks.mlwidgets.html.HtmlComponentFactory.setBrowserProperty('JxBrowser.BrowserType','Mozilla15'); 缺点:会使得Menubar菜单消失。 如果想还原运行的上面命令: 1 com.mathworks.mlwidgets.html.HtmlComponentFactory.setBrowserProperty('JxBrowser.BrowserType','Safari'); 方法2: 在防火墙中禁止matlab访问网络,这样不需要任何改动就可以避免帮助文档卡死。 缺点:需要matlab进行网络访问则会失效。

Put color on Mac terminal

Published at发布于:: 2014-04-22   |   Reading阅读:: 1 min
Mac中的ls命令可以使用-G参数彩色化输出的文件列表,需要配置LSCOLORS环境变量定义颜色,具体配置方法可以输入man ls查看。 不过,我查到这篇文章:http://linfan.info/blog/2012/02/27/colorful-terminal-in-mac/ 这篇文章的博主推荐安装Linux使用的GNU Coreutils替换Mac的ls命令,因为: Coreutils提供了配置工具,定义颜色代码更加方便; Coreutils包含的不仅仅是ls,同时作为Linux用户,他更习惯于使用GNU的各种shell工具。 (好吧,其实我也是一样) Coreutils的安装与配置方法如下: 通过Homebrew安装Coreutils 1 brew install xz coreutils 注:Coreutils并不依赖于xz,但它的源码是用xz格式压缩的,安装xz才能解压。 生成颜色定义文件 1 gdircolors --print-database > ~/.dir_colors 在~/.bash_profile配置文件中加入以下代码 1 2 3 4 5 if brew list | grep coreutils > /dev/null ; then PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH" alias ls='ls -F --show-control-chars --color=auto' eval `gdircolors -b $HOME/.dir_colors` fi gdircolor的作用就是设置ls命令使用的环境变量LS_COLORS(BSD是LSCOLORS),我们可以修改~/.dir_colors自定义文件的颜色,此文件中的注释已经包含各种颜色取值的说明。 grep高亮显示关键字: 这个很简单,加上–color参数就可以了,为了使用方便,可以在~/.bash_profile配置文件中加上alias定义。 1 2 3 alias grep='grep --color' alias egrep='egrep --color' alias fgrep='fgrep --color' Vim语法高亮: 在Vim中输入命令:syntax on激活语法高亮,若需要Vim启动时自动激活,在~/.
Read More阅读更多 »

论文都是逼出来的

Published at发布于:: 2014-04-04   |   Reading阅读:: 1 min
美赛成绩出来了,应该算是相比去年来说算是进步了很多吧。 去年苦逼的只拿到了Successfully Participation,今年查到成绩的时候还是小激动了一下:Meritorious Winner。 不过后来听到居然有大神拿到了Outstanding Winner,瞬间感觉自己仍然还是弱渣一枚,做什么都是渣,欣喜感荡然无存= =。 说来也奇,今年比赛的时候我和队友居然都错误的把一个四天的比赛认为只有三天,结果提前了24小时就提交了论文,现在想想觉得也很惊悚。 事实上距离比赛结束(2月10号)才两个月不到的时间,但我已经完全想不起来比赛论文写了什么东西了。 查完成绩后回寝室看了看这两篇论文,感觉差距还是超级的大,大一满怀论文信手拈来的那种激情已经完全不存在了。 遂先回过头来看大一的那篇《The Ultimate Brownie Pan》,无论从排版上的品位还是最后模型的建立,都只觉得稚嫩与无知。 刚才重读了今年的这篇论文《A Study in Keep-Right-Except-To-Pass Rule》(你有没有觉得这篇名字的命名借鉴了Sherlock..回答正确..=-=)更多的是在理论上的一些思考,甚至我现在再回过去读这篇论文发现已经不太能看懂自己的观点了。当然,今年这片在整片论文的排版上下了很大的功夫,直接导致了我这两个月都毫无写论文的欲望。 于是我慢慢理解了那些评委面对上万份的论文,究竟耐下了多少性子审核了这么大一堆论文。因为我自己再回过头去看我自己的论文(30多页),都觉得毫无耐心,几乎是一路翻看过去的。 大一大二这两年论文写了不少,真正获得认同的文章却没有几篇,综合起来看,凡是激情澎湃洋洋洒洒敲下来的论文,基本上都属于废材系列,没有一篇是别人同意靠谱的。相反这些在短时间内逼出来的文章,倒是含金量不少?说不准了。 好吧,想想自己还是弱渣一枚,滚去图书馆看书去了..

Python QuickStart

Published at发布于:: 2014-03-27   |   Reading阅读:: 1 min
Python Version: 2.7 We use python for rapid development. Mainly using the matrix operations, so we quickly introduce python collection type and control structure. List 1 2 3 4 >>> wow=[] >>> wow.append(1) >>> wow.append('nice hat') >>> wow python has arryay data type, which similar to c/cpp/java/…, can contain only one type of data. This array type is faster than list when you are looping. Dicthinaries 1 2 3 4 >>> wow={} >>> wow['name']='euryugasaki' >>> wow[123]=456 >>> wow Set 1 2 3 4 5 6 7 8 >>> Set1 = [1,2,3,4,5,6,7,8,9] >>> pSet1 = set(Set1) >>> pSet1 >>> pSet2 = set([4,5,6,7]) >>> pSet2 >>> pSet1-pSet2 >>> pSet1|pSet2 >>> pSet1&pSet2 if 1 2 3 4 5 >>> val=10 >>> if val<9: print "hehe" >>> if val<9: .
Read More阅读更多 »

谈谈对编程语言的一般性认识

Published at发布于:: 2014-03-22   |   Reading阅读:: 1 min
前段时间做了个无聊的事情,算了算我大概学会使用了多少门编程语言,最后的结果是:十二门。(C, C++, Objective-C, Mathematica, Maple, Linux Shell, Java, Matlab, Lua, Python, assembly, R.) 然而细细一想又觉得很不靠谱,因为真正我自己觉得可能算是精通的的语言只有两门:Mathematica(我把它简称为MM) 和 Objective-C(我把它简称为OC)。 OC学起来很快,它和C++、Java这些面向对象的语言十分类似,不过,差距也显得比较突兀,我自己的学习顺序是:C -> C++ -> Java -> OC,好在我在学习OC之前对Java有了一个较为全面的了解,加之对C++一些肤浅的理解,算是稍微理解了一些OC的范式与模板了。 OC采用的是一种叫做“Messaging Structure”而非"Function Calling"的机制。我们可以对比一下下面的代码: 1 2 3 // Function Calling (c++) Person *person = new Person; person-&gt;walk(parameter1, parameter2); 1 2 3 #pragma mark Messaging Structure (oc) Person *person = [Person new]; [person walkWith:parameter1 and:parameter2]; 他们一个比较本质的区别在于,使用Messaging Structure的语言,运行时所应执行的代码是由运行环境决定的,而使用函数调用的语言,则是由编译器决定的。如果调用的函数是多态的,那么运行时就需要一种叫做“Virtual Table”的机制来检查到底应该执行哪个寒素实现。采用消息结构的语言,不论是否多态,总是在运行时才会去查找所需执行的方法。其实,编译器都不会去关心接受消息的对象是什么类型。接受消息的对象问题也需要再运行时处理,其实这样的一个过程就是我们所熟知的“Dynamic Binding”。 OC的重要工作都是由运行期组件而非编译器完成的。举个例子,运行期组件里面含有全套内存管理的方法,运行期组件本质上就是一种与开发者所编代码相链接的一个所谓的"Dynamic Library",其代码能把开发者编写的所有程序粘合起来。这样的话,只要更新相应的运行期组件,马上就可以获得性能的提升,而那些很多工作都是处于编译期完成的语言(比如C++),想要获得类似的性能提升,就需要重新编译了。 下面配一张动态绑定这一特性,c++的OOP和其他语言的OOP的态度。

写 App & 与打砖块:无尽版

Published at发布于:: 2014-03-20   |   Reading阅读:: 1 min
→ → 明早没课嘿嘿嘿嘿 第一次写app是打砖块,因为好像人生中第一个玩的游戏就是打砖块= =,所以看了点知识就开始下手了,感触比较深刻的是不真机调试有些bug还真不知道。。今天晚上趁着写FlappyFlat脑子比较热,熟悉了一下以前写的源码,顺便就改了改代码,算是把目前已知的Bug清理完毕了。算是比较完整的版本了。。目测以后不会去屌这个了。。 今天第二次写app,是现在这股FlappyBird热,看到别人写app,突然自己也想试一试,再加上寒假整个荒废,干脆写一个来祭奠逝去的寒假。 构思了约莫十分钟,后来越写越奇葩,越写越觉得要处理的东西多,比如说重力啊,块在上下过程运动时候的旋转啊,管子间距的随机生成啊,渲染管子在视图层的运动啊等等。 但是感触最较多还是编程本身,语言仅仅只是语法,各类API就好比单词,所谓开发经验,估计就是所谓的API掌握的熟练度了,这次代码逻辑上实现估计不过一个小时可能,除开在脑子里纠结混乱的逻辑,估计真正编码时间应该只有半个小时不到。那还有两个小时花在哪里去了呢。。没错,查文档= =记不住API真是太糟糕了。虽然花了三个小时,但是Bug仍然存在,重力方面好像我自己想的模拟方法达不到原版的那种粘滞感,估计是摸你得太真实了把,不过短期内不想碰它了= = p.s. 还是老实系统搞一遍好了,高级特性神马的完全就没有用到啊,这种简单玩意儿都要花这么长时间,弱成渣啊。 版本号:0.2.0 (无尽版) 更新以下功能: 增加社交化功能,统计历史砖块数,显示您击败了全球多少小伙伴; 随机生成的关卡难度,砖块打得越多,小球速度越大,难度越高; 两次都没有击中砖块时,惩罚玩家,增加随机多个砖块; 有一定几率触发智能模式:闪现,此模式下砖块具备闪现能力,砖块当预测到自身将被击中时,有一定几率完成闪现; 有一定几率触发智能模式:无尽,此模式下砖块具备无尽能力,每当有砖块被击中时,有几率增加随机多个砖块; 更多玩法求提意见。 历史版本: 版本号:0.1.1 修复若干Bug 版本号:0.1.0 初步完成

MacTeX 卸载方法

Published at发布于:: 2014-03-09   |   Reading阅读:: 1 min
在Mac中,不支持卸载器,所以像这种pkg安装的奇葩软件,到底在哪些地方安装了也就不得而知。 不过幸运的是,官网上都写出了这个安装文件的安装位置,所以我们来看一下怎么才能卸载它。 官网上一开始说用户想要卸载掉这个占用高达几个G的软件的用户,一般是下下来看看怎么样,另一方面是可能想要升级到新版本(2013),所以不知道怎么把原来的版本(2012)卸载掉。 首先,我们需要卸载掉Tex: 官网上说,我们可以在 1 2 /usr/local/texlive/2013 中找到2013版本的卸载位置 /usr/local/texlive/2012 中找到2012版本的卸载位置 而且,2013的版本完完整整的安装在那个目录下,但是我们怎样才能打开这个文件夹呢,因为Mac是Unix系统,/usr中被隐藏一般情况下是看不到的,所以我们可以在终端中输入 open /usr/local/texlive来打开这个路径。(我们可以使用sudo rm -r来删掉整个目录,期间会请求root权限) 一般情况下,我们还可以看到texlive目录下还有一个目录叫做texmf-local,官网上说这只是一个空得目录树,如果你有强迫症,那么,删掉它就彻底完事了。 第二步需要卸载图形界面的程序: 这个步骤非常简单,只需要删除掉: 1 /Applications/Tex 目录下的文件就可以了。 如果你没有强迫症,那么整个卸载工作就完成了。 如果你有强迫症,那么我们还将继续: 第三步 我们需要卸载掉Tex得Distribution Data Structure,官网上声称这个空间非常非常的小,你删除它没有任何意义,但是,我们既然是强迫症患者,那么删除它就显得十分的必要了。 我们在删掉 1 /libray/tex 这个目录之前,一定要注意检查这个目录里面的每个文件,官方给出我们一个警告,这个数据结构,很可能存放了你删掉这个目录后就可能再也找不到的文件,所以我们需要逐个删除这个目录下中不是快捷方式存在的文件。 最后一步 最后这步是最恶心的,我们需要打开MacTex.pkg这个安装包(删掉了的再去下载吧= =),我们需要在最上面的菜单栏里找到“显示文件”,然后就会出现完整的安装文件位置。我们要做的,就是查找文件的相关内容和ImageMagick,删掉它们,大功告成。 官网:http://www.tug.org/mactex/uninstalling.html 图文版:http://pan.baidu.com/s/1gd20JWB

Lua一日游:(5) cocos2dx 与 Lua

Published at发布于:: 2014-03-09   |   Reading阅读:: 1 min
Cocos2d-X.org是cocos2d-x的官网,我们可以在官网上下载到它的最新版本,据说现在正在测试的版本3.0相比2.0会有比较大的改动,所以我们这里直接下载的3.0版本。 下载完毕后,我们可以知道这样一个readme的文件,如图所示。 这里面已经写好了如何去创建一个cocos2d-x的工程,所以我们按照他所说的,运行这个py脚本,得到一个新的窗口,如图所示。 创建完成后,我们打开mac平台下的xcode工程文件,如图所示。 打开工程后,可以看到Xcode不支持lua的高亮形式,我们等会儿采用LDT进行lua脚本的编写,我们先尝试编译一下这个工程,因为是第一次编译,所以会花较长时间,如图。 我们把LDT的workspace切换到工程的目录下,然后删除掉Resources里面多余的文件。 删除完成后,我们使用LDT创建一个名为main.lua( 写上一行代码:print(“hello lua”) )的文件,并在Xcode里面更改调用的文件,可以看到在控制台处,输出了Lua的调用结果。 下面我们试一下使用cocos2d来添加一个文本到屏幕上,如图示。
17 18 19 20 21 22 23 24 25
© 2008 - 2026 Changkun Ou. All rights reserved.保留所有权利。 | PV/UV: /
0%