Teuvo Kohonen和他的SOM

Teuvo Kohonen是一位芬兰的科学家, 介绍满街都是,可以自行google, 我就贴一个google scholar (https://scholar.google.com/scholar?hl=en&q=Teuvo+Kohonen&btnG=&as_sdt=1%2C16&as_sdtp=)

Kohonen博士为什么那么伟大呢? 让我慢慢道来, 在deep learning中, 无监督学习(unsupervised learning)一直是最受关注的焦点, 其中, 各种算法不计其数, 但是人工神经网络算法中, 最著名的算法, 就当属Kohonen博士开发的Kohonen SOM(Self-Organizing Maps), 这个著名有几个理由:

首先, Kohonen SOM是当今运用最广泛, 最贴近真实的神经激活方式的一种模拟人工神经网络, 这种真实体现在Kohonen博士对神经激活时, 状态的转换方程和激活后, 神经元之间关系的特殊理解. 举个栗子: 当你手指扎刺的时候, 神经传输到大脑, 你会感到疼痛, 但是当你脚趾扎刺的时候, 同样的疼痛, 你大脑反应会和手指不同, 因为神经元之间的固定初始位置,导致了神经冲动的传输有了衰减, 这种衰减可以被看做是learning rate的递减, 也可以想象成是一种regularization, 这种regularization是一种常态的regularization, 也就是说, 他并不是人为干预的衰减, 而是取决于神经元本身的固定属性(比如神经元之间的初始固定位置). 这也就是为什么Kohonen SOM是模仿人类神经冲动传导最好的人工神经网络.

其次, Kohonen SOM的neighborhood function, 在每次调用的时候, 更新当前随机选中的神经元,然后传导至所有的神经元. 这种全局更新的方法, 虽然很浪费时间, 但是保证了传导的准确性,举个栗子: 还是上面的例子, 虽然脚趾扎了个刺没有手指痛, 但是你不能不告诉大脑, 脚趾扎刺了. 当然, 有时候,真的因为这个神经冲动太小了, 脚上干裂了个小口子, 很多时候人自己感觉不到. 但是即使是很小的冲动, 也要更新所有的神经元, 这个思路是没错的.

displaymath1981

这个就是neighborhood function, a(t) 是个递减函数, 没啥大意思, 我就用了一个线性递减, ri和rc是两个神经元, theta(t) 是个衰减参数.

最后, Kohonen network的本质是由两个hidden layer的神经网络组成, 首先是一个Hamming network, input是低维vector的数组(n-tuple), 然后通过全联通网络, 返回互相直接的weight. 然后是一个maxnet network, maxnet的input是一个weight vector, 通过递归的方法, 返回最大weight神经元的index, 并且让其它的神经元同比衰减. 因为有maxnet的存在, 所以Kohonen SOM是Winner Take-All learning.

"Talk is cheap. Show me the code."
    - Linus Torvalds

下面是一个用KNN实现的模拟解决TSP(Travelling Salesman Problem)的demo:

http://localhost:8000/project/tsp.html