君は春の中にいる、かけがえのない春の中にいる.

你驻足于春色中,于那独一无二的春色之中.

基于递归神经网络的监督序列标记(1)

机器学习小白的阅读笔记,《Supervised Sequence Labelling with Recurrent Neural Networks》翻译,个人认为比较通俗易懂的相关英文文章~~

0x01 监督学习

是的,我们直接从第二章开始。

监督学习是使用一批带有标记的数据来进行训练的任务。这也是它和强化学习以及无监督学习的区别,强化学习是只使用一个标量奖励来训练,而无监督学习则是试图在没有标志的情况下发现整个数据的结构特点。

监督学习由一组元素和标签组成训练集,输入元素组成输入空间,标签组成目标空间,另一组互斥组成测试集。也就是说训练集和测试集一起组成了我们的数据集。当然,有些时候,我们还会引入验证集这个概念,验证集来源于训练集,用来验证训练期间算法的性能,验证集也可以用来决定训练是否应终止以防止过拟合。学习的目标就是通过训练集训练模型来减小某些在测试集上的错误指标。比如回归问题,通常的错误衡量指标是模型测试集输出与测试集标签之间的平方和或者平方欧氏距离。对于那些参数化的算法来说,一般的误差最小化的方法是渐进地调整算法参数,以优化训练集上的损失函数。这种从训练集到测试集的转化就是泛化。

根据监督学习任务的不同,我们需要选择不同标签的数据。

0x02 模式识别

模式识别是机器学习的一大领域,一些模式识别分类器,如多层感知机和支持向量机在研究领域被广泛使用。

模式识别通常使用在非序列额数据上,但是一些实践和理论框架依然可以被借鉴到序列数据案例中。因此,先回顾一下这些框架。

对于监督模式识别的输入空间,我们需要找到一个函数关系,使得输入空间可以映射到目标空间,也就是说把输入的向量数据映射到标签值上。这时,我们就可以用错误率来衡量分类器的性能。

概率分类

一部分分类器通过判别函数输出分类标签,与之对应的,我们还可以选择概率分类来输出一个概率值。使用概率分类的好处在于我们衡量分类问题不再是单一的0或1,这丰富了我们对输出结果的认知,我们可以知道同样是标签1,被判别为1和1的输入之间彼此还有不同。另一个好处是,概率分类使得我们可以合并分类器结果。

训练概率分类器

如果把一个分类器看成是输入和参数对于分类标签的条件概率分布,我们可以得到一个概率公式,通过贝叶斯法则,我们可以推导出一个新的公式。

再通过对于参数的积分,我们可以得到一个关于输入的后验分布。

由于真实的参数是高维的,所以我们通过数学推导得到的公式并不好计算。因此我们引入一个叫最大先验近似的参数来简化这个积分公式。

在最大先验近似参数的计算公式中,有一个奥卡姆因子,用来改变一些权重,也就是说对于复杂的参数,我们认为它出现的可能性很低。当我们去掉这个因子,就得到最大似然参数。

到这里,我们就可以摆脱真实参数,而去讨论我们得到的更好用来计算的参数。

最大似然损失函数

这个函数用来找到最大似然参数,它是分类器对输入空间预测的负自然对数和。由于对数的单调递增性,最小化这个负对数和,相当于在求真数的最大值。

而这个函数的导数就是网络权重。

生成方法与判别方法

通过模型对输入得到一个概率,这就是判别方法。但是,有时我们有需要根据分类条件密度,再通过贝叶斯法则结合先验概率来找到后验值,这种方法就是生成。生成方法可以独立训练每个类别,而判别的方法一旦有新的类别加入就需要重新训练模型。但是,判别方法会有更好的分类结果,因为它的目标就是找到合适的分类边界。

这里主要关注判别序列标记。当然,也会讨论广为人知的生成方法——隐马尔科夫模型。

0x03 序列标记

序列标记的目标是从固定字母表中提取标签序列分配给输入数据序列。比如通过一段手写图片或者声音序列得到它们的内容标记。虽然此类任务通常在和时间序列有关,但也存在于非时序序列的情况,比如蛋白质二级结构的预测。

如果假设序列是独立同分布的,那么我们就可以使用模式分类的基本框架,用序列代替模式。在实践中,这种假设可能并不完全正确,比如一些对于序列边界的讨论。进一步,我们假设标签序列与输入序列一样长,那么我们就有一个简单的识别任务。

某些情况下,我们可以应用一些附加的约束在标签序列上。这可能会影响算法所做的标签选择以及对性能的衡量。下面几节描述了三种序列标记任务,时间分类、段分类、序列分类。逐步放宽对应于输入和标签序列之间关系的假设,并讨论适用于每个序列的算法和算法性能。

序列分类

最极端的例子是标签序列长度为1。也就是说每一个输入序列对应一个单一分类。这包括单个的语音识别和手写识别。这类任务的特点是在分类前可以先处理整个序列。

如果输入序列是定长的或者容易处理成定长的格式,它们就可以转换成输入向量来进行模式识别。这里面有名的测试集是MNIST。卷积神经网络和支持向量机等大量方法都被应用于它的识别。

和模式识别相似,我们使用序列错误率来衡量一个分类器的性能。

段分类

段分类指的是目标序列由多个标签组成的分类任务,但是标签的位置是预先知道的。段分类常见于自然语言处理和生物信息学等领域中,这些领域的输入是离散的且容易被分段。当然,如果能够完成繁琐的手工分割操作,它也可以被用在音频和图像识别领域。

段分类的一个关键要素是,段与段之间的上下文是否进行分类。上下文的有效使用对于段分类来说至关重要。标准的分类算法一次只能有一个输入,解决这个问题的简单方法就是使用时间窗。但是时间窗会造成数据的移位和扭曲,而且不同时间窗对于段的影响也是未知的。

段分类的衡量指标是段错误率

在语音识别中,每个声音帧的语音分类作为一个单独的片段,通常称为帧音位分类。在这种情况下,段错误率就可以被称为帧错误率。很多神经网络结构被应用在这一领域。在图像处理中,通过图像分割把图像分成每一个像素或像素块。多维循环神经网络应用于这种情况。

时间分类

在一些情况下,我们不好对于标签序列做出什么假设,这种情况就可以用时间分类。

时间分类和段分类的关键区别在于前者需要确定输入序列应当被分类的位置。这就需要一个隐式或显式的序列全局结构模型。

显然,在这里我们需要新的衡量标准,我们通过计算将一个序列转换为另一个序列所需的替换、插入和删除的总数,给出了标签错误率来衡量。