zoukankan      html  css  js  c++  java
  • 【笔记】机器学习

    半监督学习

    在监督学习中,通常训练数据有input (x^r), 也有output (hat{y}^r)
    但是在实际情况下,数据不难收集,但做数据的标记需要花费很大的功夫。
    所以半监督学习,就是利用了很多没有标记的数据(x^u),通常U >> R。
    transductive learning: unlabeled data就是testing data,
    inductive learning: 不用这些unlabeled data做testing data.
    其实人的学习过程也是一个半监督的学习过程,小时候有爸妈教,长大点需要自己学。

    半监督学习中,虽然unlabeled data不会提供直接的训练样本,但它的input的分布可以帮助分类更好地划分边界。
    但是semi-supervised learning使用unlabel的方式往往伴随着一些假设,其实semi-supervised learning有没有用,是取决于你这个假设符不符合实际/精不精确。

    课程框架

    生成模型

    监督生成模型

    监督学习的情况下,如何用生成模型做分类。

    半监督生成模型

    有了unlabeled data之后,分类的分界线就不一样了,需要重新算。

    计算方法就是EM算法,在计算的过程中用上unlabeled data C1的后验概率。
    最终结果会收敛,但跟gradient descent一样,初始值的选取会影响最终收敛的结果。

    用labeled data计算最大似然,计算出来的是闭式解(解析解)。
    用labeled和unlabeled data计算的话需要迭代计算。

    假设1:Low-desity Separation

    假设两类之间有明确的分界线。

    自学习:self-training

    先用监督学习得到一个模型,然后用这个模型预测unlabeled data,然后这些unlabeled data就有了pseudo-label。
    然后再把其中一些unlabeled data添加到labeled data中,再去训练模型。
    这里,1,怎么选取unlabeled data可以有很多方式,2,不同的data可以赋予权重。

    在做regression时是不能用这一招的,主要因为把unlabeled data加入到训练数据中,(f*) 并不会受影响。

    在做self-training的时候,用的是hard label;在做generative mode时,用的是soft model。
    soft这个方法是没有用的,一定要用hard label。因为本来输出就是0.7和0.3,目标又设成0.7和0.3,相当于自己证明自己,所以没用。
    但我们用hard label 是什么意思呢?我们用hard label的时候,就是用low-density separation的概念。

    基于熵的正则化

    如果是neural network,这个output distribution一定要是很集中。
    如果分布很均匀的话,是不好的,不符合low-density separation的假设。
    label data的部分,计算交叉熵,unlabel data的部分,你会加上每一笔unlabel data的output distribution的entropy,那你会希望这些unlabel data的entropy越小越好。
    中间会乘上一个weight,来调节两者的比重。
    在训练的时候,用GD来一直minimize。unlabel data的角色就很像regularization,所以它被称之为entropy-based regulariztion。
    之前我们说regularization是在原来的loss function后面加一个惩罚项(L2,L1),让它不要overfitting;现在加上根据unlabel data得到的entropy 来让它不要overfitting。

    半监督SVM

    SVM做的事情就是:给你两个class的data,找一个boundary,这个boundary一方面要做有最大的margin(最大margin就是让这两个class分的越开越好)同时也要有最小的分类的错误。
    穷举所有的unlabel data label,这是非常多的事情。这篇paper提出了一个approximate的方法,基本精神是:
    一开始得到一些label,然后你每次改一笔unlabel data,看可不可以让margin变大,变大了就改一下。

    假设二:Smoothness Assumption

    Smoothness Assumption的假设是这样的,你的相似是要透过一个high density region。

    比如,手写数字识别,以及人脸识别的应用。

    以及文本相似性的传播。

    如何实践这个smoothness assumption,最简单的方法是cluster and then label。
    之前讲过说,为什么要用deep learning,不同class可能会长的很像,也有可能长的不像,你单纯只有pixel来做class,你结果是会坏掉的。
    如果你要让class and then label这个方法有用,你的class要很强。你要用很好的方法来描述image,我们自己试的时候我们会用deep autoendcoder,用这个来提取特征,然后再进行聚类。

    基于图的方法

    图表示通常更自然一些,比如网页之间的链接,paper之间的引用。

    通常你要定义怎样计算 (x^i,x^j) 的相似度,影像的话可以用pixel来算相似度,但是performance不太好。用auto-encoder算相似度可能表现就会比较好。
    算完相似度就可以建graph,有K Nearest Neighbor,e-Neighborhood,后者的话,e不止有相连或者不相连两种,还可以加上权重,最好是用Gaussian Radial Basis function来计算。
    这里用exponential的话,每一个点只能与非常近的点离,它跟稍微远一点就不连了。

    如果相似只是近邻之间的,那么是没有用的,因为本身算相似就会得到这样的结果。
    基于图的方法,最重要的是,相似可以传递。同时要求数据量要大,否则传播过程中会断掉。

    定量描述相似性,可以用边的权重来表示,然后计算。所以左边的连接图要比右边的更加smooth。

    计算可以做矩阵分解,这个y是label,这个label的值也就是neural network output的值,是取决于neural parameters,L叫做Graph Laplacian。
    这个L的定义是:两个matrix相减(L=D-W)。W就是你把这些data point两两之间weight connection建成一个matrix,D是你把w的每组row合起来。
    如果是deep neural network的话,可以把smothness放在network任何地方。

    Better Representation

    最后一个方法是:Better Representation,这个方法的精神是:“去无存青,化繁为简”,等到unsupervised的时候再讲。
    它的精神是这样子的:我们观察到的世界其实是很复杂的,我们在我们观察到的世界背后其实是有一些比较简单的东西在操控着我们这个复杂的世界,所以你只要能看透这个世界的假象,直指它的核心的话就可以让训练变得容易。

  • 相关阅读:
    Java8时间处理
    yii2.0上传图片
    将字符串不足长度的填充到指定长度
    通过PHPExcel将Excel表文件中数据导入数据库
    css万能清除原理
    浮动+清除浮动
    DIV滚动条设置添加 CSS滚动条显示与滚动条隐藏
    地图上显示点在点上标注当前点的id
    百度地图点击地址后显示图标,保存到数据库之后,页面显示的是保存的坐标图标
    百度地图API
  • 原文地址:https://www.cnblogs.com/yanqiang/p/11585298.html
Copyright © 2011-2022 走看看