(二)Semi-supervised(半监督学习)李宏毅
介绍
半监督学习数据:{(xr,y^r)}r=1R,{xu}u=RR+U\{(x^r,\hat{y}^r)\}^R_{r=1},\{ x^u\}^{R+U}_{u=R}{(xr,y^r)}r=1R,{xu}u=RR+U。unlabled的数据集U远大于R。
因此,用于测试集的数据的特征也可以用来进行半监督学习,只不过不能使用它的标签,称之为Transductive learning;
如果没有标注的数据不是测试集特征,称之为Inductive learning。
参考:李宏毅2016机器学习Semi-supervised
大纲
- 普通模型的半监督学习
- 低密度low-density分离假设
- 平滑假设
普通模型的半监督学习
如下图所示是一个普遍意义的计算更新流程:
低密度分离假设
就是在分界处的数据量很少,是低密度的。
Self-training
两种类型label的不同。
是一种Hard label(一个数据属于一个类,向一个类贡献);
上一小节的模型是soft label(一个数据向多个标签贡献)。
对于神经网络来说,如果设置成soft label,是不能进行优化的,必须设置为Hard,这个就基于低密度分离假设。
熵正则化
使得在labeled的数据上尽可能准确,在unlabled数据上熵尽可能小
含义是几种分类的概率要尽可能的集中,越小越好。
平滑假设
- x的分布是不均匀的,有些地方很集中,有些地方很分散。
- 如果x1x^1x1和x2x^2x2在高密度区域非常接近(用基于图的路径描述),则y^1\hat{y}^1y^1和y^2\hat{y}^2y^2很相似。connected by high density path
用基于图的路径描述 - 基于k近邻
- 基于最大阈值
- 类别具有传递性
定义smoothness
S=12∑i,jwi,j(yi−yj)2S=\frac{1}{2}\sum_{i,j}{w_{i,j}(y^i-y^j)^2}S=21i,j∑wi,j(yi−yj)2
越小月smooth
矩阵化运算
新的损失函数
L=∑xrC(yr,y^r)+λSL=\sum_{x^r}{C(y^r,\hat{y}^r)} +\lambda SL=xr∑C(yr,y^r)+λS
第二部分就是依据于网络参数。
半监督学习代码
半监督的学习代码位置在每一个epoch循环刚开始的位置
- 对unlabled的数据使用model进行train得到伪数据集;
- 对train_set和pseudo_set使用
ConcatDataset
进行合并; - 使用
DataLoader
对合并后的数据集进行导入。
# Whether to do semi-supervised learning.
do_semi = Falsefor epoch in range(n_epochs):# ---------- TODO ----------# In each epoch, relabel the unlabeled dataset for semi-supervised learning.# Then you can combine the labeled dataset and pseudo-labeled dataset for the training.if do_semi:# Obtain pseudo-labels for unlabeled data using trained model.pseudo_set = get_pseudo_labels(unlabeled_set, model)# Construct a new dataset and a data loader for training.# This is used in semi-supervised learning only.concat_dataset = ConcatDataset([train_set, pseudo_set])train_loader = DataLoader(concat_dataset, batch_size=batch_size, shuffle=True, num_workers=8, pin_memory=True)# ---------- Training ----------# Make sure the model is in train mode before training.model.train()# 后面就是正常的训练流程
其中的get_pseudo_labels
为利用当前最新model得到伪标签的函数(还未看懂)。
def get_pseudo_labels(dataset, model, threshold=0.65):# This functions generates pseudo-labels of a dataset using given model.# It returns an instance of DatasetFolder containing images whose prediction confidences exceed a given threshold.# You are NOT allowed to use any models trained on external data for pseudo-labeling.device = "cuda" if torch.cuda.is_available() else "cpu"# Construct a data loader.data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=False)# Make sure the model is in eval mode.model.eval()# Define softmax function.softmax = nn.Softmax(dim=-1)# Iterate over the dataset by batches.for batch in tqdm(data_loader):img, _ = batch# Forward the data# Using torch.no_grad() accelerates the forward process.with torch.no_grad():logits = model(img.to(device))# Obtain the probability distributions by applying softmax on logits.probs = softmax(logits)# ---------- TODO ----------# Filter the data and construct a new dataset.# # Turn off the eval mode.model.train()return dataset
(二)Semi-supervised(半监督学习)李宏毅相关推荐
- 统计学习方法 -半监督学习
目录 一 引言 二 What is 半监督学习 三 半监督算法实战 1 自训练 2 自训练步骤 3 实现自训练 -准备阶段 4 改善自训练的实现 5 改良选择过程 四 对比悲观似然估计(CPLE) 一 ...
- [半监督学习] Virtual Adversarial Training: A Regularization Method for Supervised and SSL
提出一种基于虚拟对抗损失的新正则化方法, 虚拟对抗性损失被定义为每个输入数据点周围的条件标签分布对局部扰动的鲁棒性. 与对抗训练不同, VAT 方法在没有标签信息的情况下定义了对抗方向, 因此适用于半 ...
- 【李宏毅机器学习】Semi-supervised Learning 半监督学习(p24) 学习笔记
文章目录 Semi-supervised Learning Introduction Supervised Learning Semi-supervised Learning Why semi-sup ...
- 12、【李宏毅机器学习(2017)】Semi-supervised Learning(半监督学习)
在前面的博客中主要介绍的算法全部都是监督学习的算法,接下来的博客将开始介绍半监督学习算法. 目录 半监督学习介绍 半监督学习与监督学习 半监督学习的用处 Semi-supervised Learnin ...
- 系统学习机器学习之弱监督学习(二)--半监督学习综述
一.半监督学习 1-1.什么是半监督学习 让学习器不依赖外界交互.自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised learning). 要利用未标记样本,必然要做一 ...
- 机器学习概念 — 监督学习、无监督学习、半监督学习、强化学习、欠拟合、过拟合、后向传播、损失和优化函数、计算图、正向传播、反向传播
1. 监督学习和无监督学习 监督学习 ( Supervised Learning ) 和无监督学习 ( Unsupervised Learning ) 是在机器学习中经常被提及的两个重要的学习方法. ...
- 低耗时、高精度,微软提基于半监督学习的神经网络结构搜索算法
作者 | 罗人千.谭旭.王蕊.秦涛.陈恩红.刘铁岩 来源 | 微软研究院AI头条(ID:MSRAsia) 编者按:近年来,神经网络结构搜索(Neural Architecture Search, NA ...
- 手把手教你实现GAN半监督学习
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 本文主要介绍如何在tensorflow上仅使用200个带标 ...
- 该如何对「半监督学习算法」实际性应用进行评估?Google给出了新答案
原文来源:arXiv 作者:Avital Oliver.Augustus Odena.Colin Raffel.Ekin D. Cubuk.Ian J. Goodfellow 「雷克世界」编译:KAB ...
最新文章
- 隔年的衣服发黄处理方法
- hdu 4622 Reincarnation SAM模板题
- dos 命令与 C++的联合作业,有点意思~
- DOS下处理含特殊字符[如:]的字符串
- 基于linux的nas系统下载,OpenMediaVault 5.3.9 发布,基于Debian Linux的NAS解决方案
- spring cloud+.net core搭建微服务架构:Api授权认证(六)
- linux ll 按时间排序_Linux基本操作
- 智能判断图片中是否存在某物体_如果给猫披上象皮,神经网络将作何判断?
- 数据结构题集(c语言版)严蔚敏答案pdf
- python课程设计小结和体会_关于课程设计心得体会
- the JDBC Driver has been forcibly unregistered;tomcat总是memory leak问题 ,为了防止内存泄漏,jdbc驱动程序已强制取消注册
- 熊出没之奇幻空间里面的机器人图片_《熊出没之奇幻空间》小铁COCO智能机器人玩具...
- Java读取Excel表格公式对应的值
- 高科技玩具这么无趣,为何还要鼓励孩子玩?
- HDS存储给主机扩容步骤
- 如何实现给table表头加斜线
- FlyAI小课堂:python机器学习笔记:深入学习决策树算法原理
- 【调优方法】——warmup
- 时光不会辜负你一直以来的坚持——读《人生效率手册》
- 遇到问题---pod使用pvc存储时报错---had volume affinity conflict
热门文章
- RSSI 平面 三点定位算法(C语言、JS源码例程)
- Linux系统到底是什么?
- java获取键盘整数_Java中从键盘输入多个整数的方法
- mysql ping命令_Ping命令详解
- 邮箱android版,网易邮箱Android版手机通讯录将同步
- 《用微信测试公众号慰问你的好兄弟/姐妹》:用java简单实现微信公众号消息推送(入门且详细且有效)
- 如何制作饼图?制作步骤有哪些?专业的饼图制作软件
- 给在读研究生未来要读研同学们的一封受益匪浅的信
- 五面阿里拿下飞猪事业部offer,统统给你解决!
- AtCoder - agc005_b(单调栈)