众所周知,写博客或日记有两种方式,一种是使用Web2.0时代的UGC平台网站(如豆瓣、新浪博客等),另一种是自己搭建个人网站。 第一种选择门槛低,可以立即开始写作,但缺点是无法控制所有细节,对富文本格式(尤其是程序员喜欢的Markdown)支持有限。 第二种选择,如Hexo,则需要折腾一些代码,配置大量细节选项,写博客如同开发一个小型项目。如果只是作为个人备忘性质的日志,就过于繁琐了。
本文提供了一种新的折衷思路,即直接把Github当作UGC平台,兼取两者优点,可谓懒人良方。

本篇是笔者多年前刚刚接触深度学习时的一些思考,最近才抽空整理出来, 顺便也引用了一些近年新出现的网络结构作为例子。 希望能给同行带来一些有益的启发。
早些年读深度学习论文的时候经常有一种感觉,作者已经在深入描述网络结构的细节,但笔者自己连其应用环境的大致图景还没有清晰概念。 固然有对其前置工作了解不足的因素,但笔者认为还有一个重要原因是深度学习领域还缺少一种成熟的建模图示标准,类似UML。 一个统一直观的图示系统应该有力地体现出神经网络的一些通用的基本要素,并对建模问题分析有辅助作用。 本文可以视为笔者针对有向图模型通用图示的一个尝试性的提议。
首先我们尝试从一个简单模型结构入手。
考虑一个拍照识物应用[1],我们可以将其建模为一个简单的分类模型, 用数学语言描述,我们的目标是想获得这样一个函数:
$$ y’=f_\theta(x) $$
其中x代表输入的图像,y’是模型输出的类别概率向量。 函数f是我们建模的一套计算图(譬如CNN网络),其下标θ代表模型权重,可以理解为计算图中待填入的知识。 下文中笔者将计算图函数均写作二元函数,即接受权重和输入数据两个参数。
模型的训练是一个数值优化问题,通常记作如下表达式的求解:
$$ \arg \min_\theta { \mathbb{E}_{(x,y)\sim (X,Y)} [l(f(\theta, x), y)] } $$
其中(X, Y)是一个有标注数据集,即特征-标签(图像-类别)集合。 小写的x,y是来自数据集中的 (特征, 标签) 采样。 $l$是损失函数,是某种度量模型输出值与标签的距离的函数,针对不同模态的数据可以有不同的选择。 argmin代表求解某个θ的取值,使得右侧的期望表达式达成最小化。
数学表达式晦涩难读,但却是理解很多论文的最佳途径,因为其精确给出了问题的全景。 有没有更直观的表达方式?针对上式笔者脑补了如下的图形:
其中竖着写的~是数学中的服从分布符号,可以理解为从数据集(或某种先验分布)中采集一个样本。
f上的*代表其中具有可训练参数[2],即权重θ。 这里其实笔者可以使用颜色来标注,但为了与平时在草纸上手写时的记号习惯保持一致,仍保留了星号。
圆圈中的ce即损失函数$l$,这里采用分类任务常用的交叉熵(Cross Entropy)。
loss左侧的尖朝下三角形▽代表优化目标[2:1]为最小化loss的值。
整个计算图的方向为由上至下,与很多paper作者采纳的习惯相反。 这是出于以下考虑:数据是绝大多数深度学习任务的基础,因此分析建模问题时我们可以先列出可资利用的各种数据资源。 (按自然的方式)在草稿上把所有数据项列在最上一行,然后从上至下画出可能的模型结构。
关于模块的形状,笔者考虑把数值模块和纯解析模块区分开来,纯解析模块用圆圈表示,提示其中不含权重(不论是当前训练中的还是来自预训练)。 在笔者想象中,纯解析计算像是一种柏拉图实在(不似尘世之物),而数据集和权重则来自物理实在,充满各种细节和随机性。
如果是由我们自己来搭建一个针对某个任务的模型计算图,我们只要掌握其中的要点就可以确保做出一个实际可行的方案。[3] 为了看出这其中的要点在哪里(同时也为了不失一般性),下面笔者简化了刚才的数学表达式。 由于X, Y都是数据,可以合并为一个符号X来表示;而$f$, $l$都是计算图中的函数,可以合并为函数$g$,于是上式改写成:
$$ \arg \min_\theta { \mathbb{E}_{x\sim X} [ g(\theta, x) ] } $$
我们把右侧的期望表达式记为优化目标A:
$$ A = \mathbb{E}_{x\sim X} [ g(\theta, x) ] $$
刚才说了,模型训练是一个数值优化过程。 具体说是把计算图中每个环节对训练权重θ求导,然后反向传播梯度,这个过程可以(略为粗糙地)记作下式:
$$ \theta \gets \theta - \gamma \cdot \frac{\mathrm{d} }{\mathrm{d} \theta} A $$
其中$\gamma$是学习率,对我们的讨论不重要。
这里$g$就是我们想要搭建的计算图,它的组成部分我们暂时可以当作黑箱。 现在我们可以看出,约束计算图g的三个要素是数据集X、训练权重θ和优化目标A。 这是因为X和θ都是$g$的参数,而A决定了θ怎样得到更新。
这里还有一个重要的观察是,虽然计算图是从上至下的,但优化过程里只有θ是变量,所以信息的流动方向其实是从X流向θ。 因此,有向图模型的范式可以概括为:凭借目标A,信息由数据X注入权重θ,以此获得智能。 这里的“智能”指的是某种信息编码/解码能力,类似于人类处理问题的快速反应能力,或者叫直觉。
以下我们使用三要素分析方法,来考察一下各种常见的有向图模型结构。 这里我们仍把计算图中各模块的细节当作黑箱,只关注大框架上各种模型与数据之间的作用方式。
more >>基于VAE的音乐编码器
以本篇作为起始,计划写一个算法作曲相关的系列,记录一些音乐算法研发中的想法。
2018年Google发布的Music Transformer是算法作曲中具有里程碑意义的工作。 它证明了自回归模型在音乐领域中的巨大潜力。 其中一个值得重视的基础性工作在其paper附录中,关于如何把MIDI格式编码成易于自回归模型训练的token序列。
后来在笔者的OMR项目上线完成后(OMR项目的心得笔者将另开系列分享), 笔者发现借助OMR技术的能力,完全可以另辟蹊径,尝试开发一套基于五线谱的音乐生成模型。 相对MIDI来说,由于直接来自于作曲家,五线谱的符号系统更接近自然语言。 从信息科学角度来说,其编码形式的信息熵密度更大,这是有利于机器学习的。 当然缺点也很明显,作为音乐格式,五线谱不像MIDI可以直接播放成声音,阅读门槛较高。 不过这个可以靠开发曲谱演奏模型来弥补。 而反过来,由于五线谱易于表达音乐构思和指导演奏,把音频和MIDI转成曲谱(即扒谱)也是一个很有价值的方向。 无论如何,开发一个可以写作曲谱的AI agent的想法总是很诱人的。
more >>语言学提示:
沿虚轴扩展国际音标元音平面,由此生成"复元音"
——一种凡人无法理解的晦气声音。
国际音标中的元音可以按发音位置(前-后)和口型(闭-开)两个维度分类, 即所谓’VOWEL PLANE’. 如下图:
作者借用了数学上的解析延拓概念, 设想在元音平面基础上再加上虚轴, 即得到了"复元音". 这里的"复"是复数的复. (双元音的英文是’diphthong’.)
视角直径拐点
(图中用手机代替星系,亮度和红移已调整到可见范围)
近大远小,离我们越远的物体看起来越小,但非常非常远的物体看起来反而会变大!
因为当它们的光线刚刚发射出来的时候宇宙还很小,当时它们距离我们(现在的空间位置)更近。
由于光速有限, 眺望远方其实也是眺望过去(字面意义上的). 所以整个夜空其实是展示给我们的一部宇宙历史, 有意思的是这历史的最外层其实是宇宙早期的显微结构(参见解耦). 设想, 从地球向外, 把夜空(过去光锥)划分成一圈圈包围我们的天球球层, 在地球附近这些球层半径不断变大, 最后又变得很小, 那么中间一定会经历一个拐点. 我有点好奇这拐点具体发生在什么时间, 从这篇xkcd的漫画图中来看, 大概是发生在再电离事件之前的.
好久没有更新博客了, 去年至今其实有一些酝酿中的想法, 没时间整理成paper, 只能再往后推了. 最近打算先翻译一些有趣的xkcd漫画作品.