作为机器学习的工业应用者,几年下来,对有监督学习的好感越来越低了。每天接收大量的数据,那个早期的标注数据会越来越落后。所以,现在要用有监督学习,首先会去看看自己的数据有没有天然的,并且一直更新的标注,如果没有,那就先考虑无监督学习,最后的策略才是找人标注数据。
无监督学习有好几种模式,目前笔者能总结出来的无监督学习有一下几种:
聚类
聚类是应用最广泛,历史最悠久的无监督学习吧。它依据特征向量的相似性或者向量空间位置对空间中的样本进行划分,从而形成不同类别。由于历史悠久,目前有很多种聚类方法,像最经典的kmeans,谱聚类之类的,想必大家也比较了解了,也就不赘述了。
自监督学习
你有一大堆数据,这对数据是天然形成的,不添加人工标注,但是,从这堆数据里,数据工作者经过处理能找到一个明确的学习目标并自动将数据转化成有groundtruth的数据,这就是自监督学习。这其中最具代表性的有如下几种:
- word2vec,以上下文为输入,以当前词为目标,或者以当前词为输入,以上下文为目标,进行训练,获得词的表征向量。
- BERT类的mask language model:以整个句子或者句子对为输入,输入前对句子中的字或词做随机mask,以预测mask掉的字或词为目标,进行训练,得到词,句子,句子对的表征模型。
- 以GPT为代表的自回归生成模型:设定一个窗口,以当前词之前的窗口内的文本作为输入,以当前词为生成目标,窗口往前滑动,从而不断更新生成目标,以此训练,得到词,句子的表征向量以及给少量输入,不断生成后续句子的生成模型。
- autoencoder类的以输入本身为目标
- autoencoder类的去噪模型,给原本优质的数据添加噪音,原数据作为目标,添加噪音的数据作为输入,学习去噪的方法。
基于统计学方法的概率模型
有一大堆(量非常大)现成的数据,你想从中得到一些规律或者语言习惯,就可以通过这种方法来。比如,无监督分词。笔者曾今做过特定领域的新词挖掘,利用PMI和gram内部一致性,效果挺好的。
生成模型
这里提到的生成模型和GPT这样的语言生成模型不同,这里的生成模型专门指根据样本生成参数化的分布,并使目标分布获得最大的对数似然。这类模型有
- 早期的直方图
- pixCNN
- Flow
- VAE
- GAN
以上几种方法想做的事情一样——概率密度估计,只是概率密度估计涉及到连续分布的积分,计算复杂度大,要么不便于训练,要么采样难,于是大牛们想了各种简化的方法,形成了不同的生成模型流派。
接下来的阶段,想跟着伯克利的cs294-158-sp20学习深度无监督学习中的几种经典的生成模型。