Categories

Calendar

January 2022
M T W T F S S
 12
3456789
10111213141516
17181920212223
24252627282930
31  

绘图板

作为一个 IT 人士,身边有各种数码潮人是很正常的,大家都在“败家”,什么 iphone 、ipad 、M9、Kindle、单反等等……我虽然对这些东西不抵制,但是似乎也一点提不起兴趣来。每次和大家站在一起,我就觉得自己是个摩登原始人呀!结果,那天我突然就有了这个想法,在咨询了小 lam 的意见之后,火速买了一个绘图板,快递也很迅速,第二天就到了,而且还是在早上把我从睡梦中叫醒。

Wacom Bamboo Pen Medium ,很喜欢这个名字,不知道为啥要叫 Bamboo ,听起来很可爱啊!不过在我拆开验货的时候,快递员问我这是什么玩意,我说是绘图的,他一副愤世嫉俗的表情看着我说,就一个画画的板?要那么贵?反而搞得我很不好意思,吞吞吐吐地说:“呃,这个……嗯,大致是……还有其他一些功能?”“能上网?”快递员立刻接过话去。于是我咕哝咕哝着就蒙混过关了…… =.=bb 在这种时候总是显得很无力,总不能说更贵的板子多了去了……

打开之后发现绘图板比我想象中的好用的——我原来以为是要“盲定位”的,结果发现不是这样子的,只要鼻尖不离开板子太远,就能感应到指针的移动。还有就是和鼠标的相对移动不一样的是,板子映射到屏幕是绝对位置的映射,一开始会不太习惯当鼠标来用,结果指针移来移去都还是在那里。当然我也没有指望一开始就适应,两大障碍:一是绘图板毕竟和纸不一样,要看着屏幕画,板子和电脑摆得不正的话经常会线条各种扭曲,桌子也得大,摆得下两个东西;二就是软件啦,我对图像处理的软件可以说是一窍不通…… >_< 不过反正我也没有指望能够一下子上手,这个是用板子画的第一幅图: » Continue reading 绘图板

求最小的几个特征值

在机器学习中经常都会遇到特征值问题,例如 Laplacian Eigenmaps 或者一大堆的 KernelPCA 派的降维方法,或者谱聚类之类的。通常都是对于一个很大并且比较稀疏的矩阵,求最大或者最小的几个特征值以及对应的特征向量。在 Matlab 里,eig 函数可以用来求得一个矩阵的全部特征值和特征向量,然而,如果我们只需要其中最大或者最小的那几个,用 eig 来求就显得杀鸡用牛刀了,费力还不讨好。而且,eig 还不能处理稀疏矩阵的情况,所以,这个时候通常就需要 eigs 出场了。

eigs 可以只求矩阵的几个最小的或者最大的(或者最接近某一个数值的)特征值和对应的特征向量,并且能够处理稀疏矩阵(如果矩阵规模很大而且稀疏程度有很高的话,使用稀疏矩阵速度会快很多)。当然它使用的算法和 eig 不一样,是迭代的方式(具体的细节我也不是很清楚,记得数值分析课上讲过 power method ,不过也忘得精光了 -.-)。这也造成了一个小缺点,就是当矩阵是 singular 或者 near-singular 的时候,如果求最小的几个特征值,就会有问题。例如下面这个极端的例子,我们造一个 rank 为 1 的矩阵:

a = rand(3,1);
A = a*a';
eigs(A, 2, 'SM');

Matlab 就会在这里出错。让人很痛苦,因为有时候会在数据中碰到矩阵 near-singular 的情况。一开始我找不到解决办法,因为 eig 是可以处理 singular 矩阵的,所以干脆在遇到 eigs 出错的时候转由 eig 来计算,然后手工选出最小的几个特征值和特征向量。

» Continue reading 求最小的几个特征值

人手移动的数据集

有一个人手移动的数据集,就是一个人坐在沙发上,身体不动,手移动到不同的方位。在不少流形学习的论文里都用到了这个数据集,基本上都是根据图像去 predict 人手的位置。最近的实验中希望用到这个数据集,其实之前不知道什么似乎下载到了那个 video 片段,但是人手位置的 label 却一直都没有,找别人要过,也没有要到,于是索性自己来标注一下。这里把标注的结果和标注用的程序都共享一下。

» Continue reading 人手移动的数据集

2010 关于

去年写总结的时候用了孙燕姿的一首歌为题,今年继续吧。《关于》这首歌是这么唱的:

关于 生活的选择题
答案在风里

这一年似乎是碰到许许多多“生活的选择题”吧,所谓人生的抉择,似乎到头来还是随心就好呢!另外还有就是这个歌的前奏是闹铃声,所以一直被我用来做手机上的起床闹铃了。 :p

年年岁岁岁岁年年,又是当你还没有习惯 2010 这样书写日期的时候,这一年就已经过去了。实际上这一年发生了很多事情。不知从何说起,但是纵观这一年,大概主要线索变成了出国的事吧,且不再论选择出国的原因了,但是既然选择了要念 PhD ,面临的许许多多的选择题,答案就变了。

» Continue reading 2010 关于

GRE 和机器学习

其实是在之前复习 GRE 的时候突然想到的一些好玩的事情,只是一直没有时间写出来,今天圣诞节,决定抽空把它写了。先祝大家圣诞快乐!

但凡是考过 GRE 的同学都知道,复习过程是很痛苦的。不过现在是信息时代,找资料确实很方便,除了各种复习材料之外,网上也不乏各种复习方法总结建议之类的,其中甚至还有帮你把每天的复习细节都具体安排好了的。当然其中也有许多很好的建议和经验,但是无论如何还是自己才知道什么方法适合自己啊。所以闲暇的时候我自己也在想,这个过程究竟是怎么一回事,后来越来越觉得和机器学习其实有相当多的地方。

最典型的就是类比反义了,GRE 里的类比就是给一个词对,让你分析出这两个词之间的关系,然后类比这个关系,在 5 个选项里找出同样关系的词对;反义则要简单得多,就是给一个词,找到它的反义词。其实是很简单的问题,我曾经尝试了一下,如果看着翻译过来的中文做题的话,错误率可以很小,所以最大的瓶颈其实就在词汇量了,词汇也应该是 GRE 笔试复习过程中最大的坎。一般复习方法分为两种,一种是被红宝书,或者其他各种“宝书”,甚至还有看字典的,另外一种则是突击看诸如“猴哥类反”之类的往年题目的正确答案列表,以及最近几年的机经之类的。

» Continue reading GRE 和机器学习

巨大的 Matlab 存储数据

好吧,我的标题越来越土了,本来想取个“XX之迷”或者“走进科学”啥的,不过其实是个小问题。总之,最近我在用 matlab 跑一些实验的时候,保存的结果比较大,其实也不算太大,就几百兆,但是由于有很多个这样的文件,所以占用空间还是比较大的,而且几百兆的 .mat 文件每次 load 进来画个图之类的也要等半天,非常不方便。于是我就想能不能有方法处理一下。

一开始我以为是因为我存储的数据里有一些位图,所以才会比较大,于是我写了一个工具来将位图压缩了一下,发现单张图片即使是无损 JPEG 压缩也可以变得比原来小很多,于是赶紧用来处理原来存储的文件,结果发现处理之后基本上没有任何改观。由于很久没有遇到这么神奇的“bug”了,我比较兴奋,把代码相关的地方都检查了一遍,发现其中有一个中间计算结果作为 cache 放在一个 struct 的 field 里,而这个 cache 理论上是可以丢掉的(虽然要再算一遍很耗时,但是基本上不会再重跑这个实验了),于是我果断把它咔嚓掉。再一运行,保存……结果发现居然一丁点改观都没有!

更为诡异地是,我用 whos 看 matlab 里那个 struct 占用的空间,得到的结果其实是很小,但是当我 save 它到文件的时候,它就莫名其妙地占用了大量空间。 -.-bb 我用一个赶紧的 matlab workspace 把这个文件加载进来,逐一删掉其中的变量做测试。

其实一开始我也比较怀疑其中的一个 function_handle 的 field ,我在想不会 matlab 聪明到为了保证 function handle 下次加载进来能够运行,把所有相关的代码和引用到的代码也一应打包了吧?-.-bb 但是 Matlab 的文档说得很清楚就是在其他地方 load function handle 的时候,如果原来的代码文件不存在或者被修改过的话,就会发生 unexpected 结果。但是呢,当我删去 struct 的那个 function handle 的时候,竟然真的就瞬间从几百兆变成几兆了。

虽然是大跌眼镜,但是我突然一下子又想明白了。原来那个 function handle 里引用了之前计算的那个 cache ,使其变成了一个 closure ,结果呢,这个 cache 就成了无法访问到的幽灵数据,看不见摸不着,但是却占据这空间,matlab 在保存的时候也把它一起保存了,结果就如此了!

鉴定结果:closure 这样的语言特性,即使不是神级别的也是幽灵级别的,其实我当初尝试在写 irobot2 的时候用 closure 来在 Python 里实现完全只读访问的成员变量的时候,就应该意识到这个问题了。看来,世界上最远的距离,不是 YQ 和 ZJG 之间的距离,而是我就藏在你的 closure 里…… :p

支持向量机:Duality

本文是“支持向量机系列”的番外篇(1),参见本系列的其他文章

之前关于 support vector 的推导中,我们提到了 dual ,这里再来补充一点相关的知识。这套理论不仅适用于 SVM 的优化问题,而是对于所有带约束的优化问题都适用的,是优化理论中的一个重要部分。简单来说,对于任意一个带约束的优化都可以写成这样的形式:

\[
\begin{aligned}
\min&f_0(x) \\
s.t. &f_i(x)\leq 0, \quad i=1,\ldots,m\\
&h_i(x)=0, \quad i=1,\ldots,p
\end{aligned}
\]

形式统一能够简化推导过程中不必要的复杂性。其他的形式都可以归约到这样的标准形式,例如一个 $\max f(x)$ 可以转化为 $\min -f(x)$ 等。假如 $f_0,f_1,\ldots,f_m$ 全都是凸函数,并且 $h_1,\ldots,h_p$ 全都是仿射函数(就是形如 $Ax+b$ 的形式),那么这个问题就叫做凸优化(Convex Optimization)问题。凸优化问题有许多优良的性质,例如它的极值是唯一的。不过,这里我们并没有假定需要处理的优化问题是一个凸优化问题。

» Continue reading 支持向量机:Duality

悼念 Partha Niyogi

突然得到 Partha Niyogi 过世的消息,都说不好自己是什么反应了,又有些震惊吧,又有些伤心吧——虽说我们非亲非故,虽然是导师的导师,但是也从未见过面也没有过任何直接的交流——但是总还是觉得有些难过。其实今年年初听到 Sam Roweis 过世的消息(同样是英年早逝)时都还没有这样强烈的反应,但是后来屡屡在论文中看到 Roweis 的名字,想起来,也有些触动,所以大概这次才会倍感沉重吧!其实我昨天还在读 Niyogi 的一篇论文呢。 >_< 他现在才四十来岁,听说死因是 brain cancer ,我在看到相关的 blog 消息和后面许多认识他的人都说一些和他相处的经历,但是许多人似乎都不知道他原来一直在和如此严重的病魔搏斗。 其他的我也不知道说什么好了。各位各行各业的都要注意身体最要紧呀! >_<

支持向量机:Numerical Optimization

本文是“支持向量机系列”的第五篇,参见本系列的其他文章

作为支持向量机系列的基本篇的最后一篇文章,我在这里打算简单地介绍一下用于优化 dual 问题的 Sequential Minimal Optimization (SMO) 方法。确确实实只是简单介绍一下,原因主要有两个:第一这类优化算法,特别是牵涉到实现细节的时候,干巴巴地讲算法不太好玩,有时候讲出来每个人实现得结果还不一样,提一下方法,再结合实际的实现代码的话,应该会更加明了,而且也能看出理论和实践之间的差别;另外(其实这个是主要原因)我自己对这一块也确实不太懂。 :p

» Continue reading 支持向量机:Numerical Optimization

数学公式识别

在电脑上输入公式一直不是一件很愉快的事情,经历过 Word 的公式编辑器时代,还有 MathType ,只能说输入不方便而且结果非常难看。LaTeX 虽然号称是“所想即所得”,书写数学公式也相对流畅,然而有时候稍微复杂的公式写出来变成一堆结构不明显的代码,实在是比较难以继续——又不是所见即所得的,LaTeX 的错误信息又是那么让人摸不着头脑,遇到复杂的公式总是忍不住写一部分又编译一下看看是不是有问题,结果弄得很麻烦。但总归 LaTeX 渲染出来的公式目前来说还是最好看的,而且所见即所得的公司编辑确实也比较难做。Office 2007 开始有了新的公式编辑器,可以使用类似 LaTeX 的语法,渲染结果也比以前的那种要漂亮许多,不过那个所见即所得的编辑实在是非常难以驾驭,经常出现的结果是写了一大坨公式想要删掉其中的一个符号却删不掉,Office 只准你把这一整坨一起删掉,实在是很恶心,而且有时候还会有一些诡异的 bug 。就目前我尝试过的解决方案来说,我个人觉得 Emacs + CDLaTeX.el 是输入起来最迅速的,各种常用的符号、加粗斜体等操作都可以迅速完成;而最好用的是 LyX ,所见即所得的 LaTeX 公式编辑,总的编辑体验比 TeXmacs 要好。

» Continue reading 数学公式识别