Week7:半监督学习

发布时间:2026/7/20 15:06:46
Week7:半监督学习 目录摘要Abstract1 半监督学习1.1 半监督学习的产生1.2 实现半监督学习的方法2 迁移学习3 生成对抗网络4 总结摘要经过前几周已了解从线性回归到深度序列模型的技术本周重点探索一种以生成逼真数据为目标的创新框架。具体包括半监督学习的基本假设与方法、迁移学习的核心思路与常用策略以及生成对抗网络的基本原理与训练过程。AbstractHaving learned about the technologies ranging from linear regression to deep sequence models over the previous weeks, this week we will focus on exploring an innovative framework aimed at generating realistic data. This includes the basic assumptions and methods of semi-supervised learning, the core concepts and common strategies of transfer learning, as well as the fundamental principles and training process of generative adversarial networks.1 半监督学习1.1 半监督学习的产生现实中获取大量无标签数据相对容易但标注需要人工成本或专家知识。半监督学习旨在同时利用少量标注样本和大量未标注样本来训练模型提升泛化能力。故为了让未标注数据发挥作用通常需要满足以下一种或几种假设1、平滑假设如果两个样本在高密度区域中相近则它们的标签应相似。即使它们在输入空间中距离不远若穿过低密度区域则不应强制标签一致。2、低密度分离假设决策边界应位于数据密度较低的区域避免将高密度簇切分开。3、流形假设高维数据往往分布在低维流形上局部近邻的标签应一致。1.2 实现半监督学习的方法1、自训练方法用有标签数据训练初始模型然后用该模型对未标注数据进行预测将置信度高的伪标签样本加入训练集重新训练。此方法简单但容易放大初始模型的错误。2、基于图的半监督学习方法构建样本相似度图利用标签传播Label Propagation使标签沿图上的边扩散。两个样本之间的边权重由相似度决定如高斯核未标注节点的标签由邻居投票决定。3、一致性正则化方法强制模型对同一未标注样本的不同扰动版本如数据增强、Dropout噪声输出一致的预测。损失函数公式为其中是对施加扰动后的版本。核心思想是真实决策边界应位于数据低密度区且对噪声鲁棒。2 迁移学习传统监督学习要求训练和测试数据独立同分布。现实中源域Source Domain和目标域Target Domain往往存在分布差异且目标域标注数据极为有限甚至为零。迁移场景如下1、模型微调Fine-tuning目标域有少量标签。先在源域大数据上预训练模型再用目标域数据微调模型参数。具体操作为对于卷积神经网络源域训练好的模型前几层捕获通用的低级特征边缘、纹理后几层趋向于任务特定特征。因此在目标数据较少时可以冻结前几层权重只微调后面几层甚至仅替换分类头重新训练。若目标数据充足则可对全部网络进行小学习率微调。2、领域自适应Domain Adaptation在特征提取器之后引入一个域分类器目标函数包括两部分任务损失如分类和域分类损失。特征提取器试图混淆域分类器使得学到的特征对域差异不敏感即做到域不变性。通过梯度反转层Gradient Reversal Layer实现对抗训练使得整个网络端到端学习。3、零次学习Zero-shot Learning目标域无任何标签样本完全依赖属性描述或语义嵌入进行识别。3 生成对抗网络同时训练两个网络——生成器Generator, G和判别器Discriminator, D。生成器试图从随机噪声中生成逼真的假样本以“骗过”判别器判别器则努力分辨输入样本是真来自训练集还是假生成器产生。两者在零和博弈中相互促进。优化目标Minimax Game训练过程1. 固定生成器 G优化判别器 D使其对真实样本输出接近 1对生成样本输出接近 0。此时最大化目标函数。2. 固定判别器 D优化生成器 G使生成样本的判别概率尽量接近 1即试图让 D 误判。此时最小化但实践中常改为最大化以提供更强的梯度信号。3、将上述两步交替执行代码实现from keras.models import Sequential, Model from keras.layers import Dense, Activation, Input from keras.optimizers import Adam # 生成器 generator Sequential() generator.add(Dense(units1024, input_dim100)) generator.add(Activation(relu)) generator.add(Dense(units784)) # 输出28*28像素 generator.add(Activation(tanh)) # 判别器 discriminator Sequential() discriminator.add(Dense(units1024, input_dim784)) discriminator.add(Activation(relu)) discriminator.add(Dense(units1)) discriminator.add(Activation(sigmoid)) discriminator.compile(lossbinary_crossentropy, optimizerAdam(lr0.0002, beta_10.5)) # 组合 GAN discriminator.trainable False gan_input Input(shape(100,)) gan_output discriminator(generator(gan_input)) gan Model(inputsgan_input, outputsgan_output) gan.compile(lossbinary_crossentropy, optimizerAdam(lr0.0002, beta_10.5)) # 训练循环课堂展示的伪代码框架 # for epoch in range(epochs): # # 1. 训练判别器 # noise np.random.normal(0,1,(batch_size,100)) # generated generator.predict(noise) # real x_train[np.random.randint(0,x_train.shape[0],batch_size)] # X np.concatenate([real, generated]) # Y np.concatenate([np.ones(batch_size), np.zeros(batch_size)]) # d_loss discriminator.train_on_batch(X, Y) # # # 2. 训练生成器 # noise np.random.normal(0,1,(batch_size,100)) # g_loss gan.train_on_batch(noise, np.ones(batch_size))GAN 在课程中的讨论得出的问题1、训练不稳定平衡生成器和判别器的能力至关重要一方太强会压制另一方。2、模式坍塌Mode Collapse生成器可能只学会生成少数几种类型的样本缺乏多样性。3、评估困难没有像分类准确率那样统一的评价指标常靠人工视觉评估或 Inception Score、FID 等度量。4 总结半监督学习让我重新认识了数据价值迁移学习是现代深度学习的常态GAN 开拓了生成模型的新维度。从监督学习的回归/分类到表征学习的 CNN、RNN再到利用未标注数据的半监督、迁移、对抗生成课程框架呈现出一个清晰的如何用更少标注、更巧妙的方式获得更好的模型。