欢迎来到 Free Mind ,这是由 pluskid 所维护的 blog ,主要记录一些机器学习、程序设计以及各种技术和非技术的相关内容。如非特别指明,本站的文章遵循 Attribution-ShareAlike Creative Commons 协议。更多文章索引请浏览 Archive, Categories, 和 Tags。 部分文章前后有一定的关联,也可在 Series 中找到索引。早期的博客文章请参见 Free Mind 2009~2012Free Mind 2007~2009

Distributed Learning in Julia

我之前在这里介绍过 Julia 这个语言,提到了它的许多好的(和不好的)特性,不过有一点没有提到的是它方便的并行和分布式计算的能力,结合优质的数值计算能力,其实让它非常方便用于做分布式数据处理——比如 distributed optimization、learning 之类的任务。虽然 Julia 这些年一直在稳步发展并且每个版本都会 break 一些东西,让人需要不断地维护和修改代码有点心累,同时 community 里的第三方库也还不够强大,不过最近在做一点点 distributed optimization 相关的东西中体会到它在这方面的好处,在这里简单分享一下。一方面因为 Julia 的文档虽然比较全,但是似乎还是比较难找到一个完整的例子。本文相关的完整代码会放在这里

Plotting 3D Surfaces in Python

最近需要 visualize 一些三维的曲面数据,于是简单调查了一下 Python 绘制三维曲面的一些常用的办法,贴在这里以免自己将来再需要用到的时候又想不起来了。比如我们想要画这个样子的 3D 曲面图。

2016 无限大

那一年留在膝盖粉红的伤疤 还刻着
那些在学会奔跑疼痛的过程 都过了
好几年终于碰到肩膀的长发 刺刺的
我要的 爱情在距离永恒最靠近那次 毁灭了
像一篇还没懂得分辨谎言的 笨心得

朋友们开始问起我今年准备用哪一首歌的时候,我发现 2016 年又到了尾巴上。现在发在博客上的文章数量越来越少,以至于都快要只剩下年度总结了,不过至少年度总结是要认真写的。我想以一张今年的照片开头,但是好像虽然一年只在一转眼,要用单单一张照片来总结也还是不容易,于是就随便找一次喜欢的经历吧:深秋踩着冰凉的浪在沙滩上疯跑,裤子湿透了,爬满沙子。

Could a neuroscientist understand a microprocessor?

最近看到一篇有趣的文章叫做 Could a neuroscientist understand a microprocessor? (DOI: 10.1101/055624)。讲的是用神经科学的分析方法来把计算机微处理器当做一个黑盒子来研究。这让我想起之前听过的一个 talk,里面有提到这篇叫做 A search for life on Earth from the Galileo spacecraft 的文章。

Disable OS X System Integrity Protection

大学时代曾经一度在 Linux 和 Windows 之间挣扎徘徊,直到后来开始用 Mac,几乎是瞬间就觉得各种满意。好用的命令行加上好用的 UI,基本上不能奢求更多了。不过近年来感觉 Mac OS X 好像在某些奇怪的路上越走越远,特别是在命令行的兼容性方面经常出各种各样的事情。比如之前某次由于一个奇怪的原因需要手工恢复一部分 dotfile 配置文件,于是直接用 cp 命令从 Time Machine 的备份里把一堆文件复制过来,结果系统各种 run 不起来,后来发现好像是奇怪的权限问题,总而言之似乎是 OS X 在 shell 的基础权限之外又做了其他的权限,而 cp 不知道这些东西,所以拷贝过来的东西也用不了。由于我也不是 sys admin,对这些东西也不感兴趣,最后就用 Finder 比较麻烦地重新拷贝了一遍才好了。

不过今天要 fix 的是这个叫做 System Integrity Protection (SIP) 的东西,又叫 rootless,总之就是保护系统了。听上去感觉很有用的样子,似乎确实也很有用,不过刚出来的时候好像导致 homebrew 出了很多问题,然后最近由于 DYLD_LIBRARY_PATH 的问题终于忍无可忍决定要把它 disable 掉。

Optimization and Assumptions

因为想要熬夜看 Alpha Go 和 Lee Sedol 的围棋比赛,自己的围棋知识又没有达到能全盘 follow 看懂的地步,所以决定一边看一边写点东西。跟 AI 没有什么关系,当然非要扯上一点关系的话,可以这样来 motivate 一个话题。我们都知道人和电脑各自有一些各自擅长的东西,比如电脑擅长计算,而人脑擅长……呃,这里先留白,等我想到了再补上。总之我在最初接触 optimization 这个问题的时候其实也是这样的概念:计算机算法在这里似乎相当笨拙,比如我们经常看到类似图中的例子被用来说明当计算机面临 non-convex 问题的时候会如何陷入 local minimum 出不来。

相反对于这个例子,人“一眼”就能找到 global minimum 的位置。但是其实仔细想一想大概只是自我感觉良好而已。

The Volume of High-dimensional Unit Ball

高维度数据是现代机器学习的一个重要特点,而人脑无法直观地对超过三维的东西进行 visualize (至少我自己做不到)一直是我觉得作为一个人类最痛苦的事情之一,如果什么时候有机会做一回超人或者宇宙人什么的,能够选择技能树的话,我大概会优先选择这一项吧。正因为如此在高维空间中的许多现象看起来非常“反直觉”。比如今天我们要讲的结论是:高维空间的单位球(半径为 1 的球)的体积随着维度的增大趋向于 0。我跟一个朋友提起这件事情的时候她说这是她在听说了“奇数和整数一样多”这件事以来让她最为震惊的事情。

2015 就是这样

今年是老歌《就是这样》。

不穿鞋子 体会真的感觉 环游世界 不在乎明天天气 我的世纪 梦与我没有距离 说去就去 发出讯息 接收我的频率 冒险前进 顺从心里的好奇

Denoising Lena

在之前讲 Projected Gradient Method 的文章中,我们举了一个对加了白噪声的 Lena 的照片进行 denoising 的例子,文中提到了两种方法,一种是直接对 DWT 的系数进行 hard thresholding,将数值较小的值设为零,再用逆向离散小波变换得到 denoising 之后的图片。另一种方法是解一个 Can't decipher request parameter 正则化的线性回归,我们选了后者因为刚好那个优化问题经过变化之后可以用 Projected Gradient Method 来解,这也是当时选这个问题作为那篇文章的原因。但是当时并没有解释为什么这些算法可以实现降噪,而这就是今天的话题。

关于知识整理、积累与记忆

去年的年度总结中有提到过一个关于知识积累方面的困惑,最近被问起今年的年度总结中怎么没有再提及去年提出的那些问题,实际的原因是忘记了……这也正说明了对于像我这种忘性巨大的人来说知识积累真是一件迫在眉睫的事情,实际上在过去的一年中其实也做过各种尝试,虽然并没有算解决了这个问题,但是也不妨趁此机会分享一下我的一些尝试和想法吧。