分类 - 机器学习

2019-09-23 18:59:21    357    0    0

Aims

To match the joint distribution P(Ys,Xs) with P(Yt,Xt).

Solution

Find a matrix A to let P(ATXs),P(ATXt) as close as possible.
So is P(Ys|ATXs),P(Yt|ATXt).

For the first pair, we use a method called TCA to minimize

title

this equals to

title

where M0 is

title

For the next part, because we don't have Yt, so we train a classfier C to learn

2019-09-23 17:30:59    362    0    0

Background

We have (Xs,Ys) and Xt, but Xs,Xt are not from the same ditribution, i.e. P(Ys|Xs)P(Yt|Xt). To solve this, we use the following method.

Assumption

There exist a transformation ϕ that P(Ys|ϕ(Xs))P(Yt|ϕ(Xt)).

Solutioin

To find ϕ, we try to minimize following distance called MMD(maximum mean discrepancy).

title

To solve

2019-09-20 21:24:53    399    0    0

要打Kaggle可惜手上没有很强的服务器怎么办呢?

Google Colab! 良心首选

方案一

  • 上传数据到Google Drive,然后Colab Link到Google Drive即可。

  • 从Kaggle下载数据(校园网流量-1.3G TAT)

  • 解压Kaggle数据(......此处等待10分钟)
  • 上传数据到Google Drive(....................................预计还剩11个小时)
  • 弃疗

方案二

  • Colab上使用Kaggle API,直接在Google 服务器上下载+解压数据。

  • 从Kaggle -> Account -> Create New API Token

  • 往Colab 填入以下内容
  1. !mkdir ~/.kaggle
  2. import json
  3. token = {"username":"username","key":"yourtoken"}
  4. with open('/content/.kaggle/kaggle.json', 'w') as file:
  5. json.dump(token, file)
  6. !cp /content/.kaggle/kaggle.json ~/.kaggle/kaggle.json
  7. !chmod 600 /root/.kaggle/kaggle.json
  8. !kaggle config set -n path -v{/content}
  • 然后你就可以开始下载并解压数据集啦
  1. !kaggle competitions download -c severstal-steel-defect-detection -p /content
  2. !ls
  3. !unzip -d ./test test_images.zip >/dev/null 2>&1
  4. !unzip -d ./train train_images.zip >/dev/null 2>&1
  5. !ls
  • 下载(准备去玩局游戏看看什么时候能下完,等等什么?! 133MB/S ?!)这就下完了???!!!
  • 解压 10s 没到(还是服务器SSD NB啊,笔记本里的TLC真实垃圾)
2019-09-20 18:54:09    373    0    0

Introduction

CVPR2017. They want to do Adversarial Discriminative Domain Adaptation.

Structure

As usual, there's Source Domain(the old one) S and Target Domain(the new one) T, and a Classifier C on Source Domain, Target Representations Mt and Ms, a Discriminator D. The loss is straight forward.

title

Training method

title

  1. Train Ms and C on S.
  2. Keep Ms, initialize
2019-09-19 15:52:33    515    0    0

Introduction

ICML2018, 建立分布A到分布B的一一映射,使得原来训练的模型在新环境下不会变差太多。

Changing of domain usually affect the model's performance , so they want to adapte the images frome source domain to target domain.

title

Model Structure

title

模型由四部分组成,第一部分是映射Cycle,第二部分是语义一致性,第三部分是生成对抗(包括图片生成的辨别DT和经过fT提取feature后的辨别Dfeat),第四部分是分类。

The modle consist of four parts, one is mapping cycle, the second is semantic consistency, the third is GAN part of DT and Dfeature after fT, the fourth is the origin task.

title

title

title

title

title

Experiments

title

  • Below is a model trained on GTA5 test on real image.

title

title

The FCNs in t

2019-09-18 22:31:05    337    0    0

这是一个Semi-Supervised Learning Model

title

左侧输入图片,然后每层之间的feature加入一个高斯噪音,然后左边编码层,编码完后可以用于有监督学习,然后右侧对比解码层和右侧不加噪音的编码层数据的差来作为loss进行无监督学习。然后中间有Skip Connection把有噪音的数据给过去。

  • 这不就是之前说的,用GAN来做无监督学习,只是加入了Skip Connection.
  • 类似的还有:Π 模型认为同一个输入,在不同的正则和数据增强条件下,网络对其预测应该是一致的,所以最小化不同变化后同一样本最后输出的MSE。

Consistency Regularization

  • 这一系列思想都是对于一个输入,即使受到一定干扰,其预测都应该是一致的。
  • [1]中认为对于一个输入,受到扰动后,其所有的中间表示,都应该一致。
  • [2]其通过最小化对同一个样本的多次预测差异来达到更好的泛化性能。
  • [3]同一个输入,在不同的正则和数据增强条件下,网络对其预测应该是一致的。在网络的初始阶段,网络的预测十分不准,所以惩罚项较小。
  • [4]其除了 consistency 这个思想外,还有“模型成功的关键在于 target 的质量”这个动机。其想法就是,我从当前的模型(Student model),构造出一个比 Student model 更好一些的 Teather model,然后用这个 Teacher model 的预测来训练 Student model(即 consistency regularization)。无监督部分代价是Teacher预测出与Student预测差的L2。Teacher Model 的构建直接使用Student Model的参数移动平均,即
2019-09-18 10:19:32    332    0    0

啊~开始看听说过很多遍的CycleGAN的paper了!久仰大名不如登门造访

简介

作用

  • 建立两个图片分布(A,B)之间的一一映射。具体来说是Image-to-Image translation。(类似的,SeqGAN做机器翻译,用强化学习解决了连续性问题,蒙特卡罗搜索+LSTM解决部分序列评分问题)

title

框架

  • 有两个mapping function和 对应的discriminators。以及训练时的重要假设是F(G(x))x.

title

  • Adversarial Loss 正常定义为crossentropy (实际训练时替换为了MSE,但听说MSE会让生成的图像更加模糊[1]): LGAN(G,DY,X,Y)=Eypdata(y)[logDY(y)]+Expdata(x)[log(1DY(G(x))]
  • Cycle Consistency Loss 定义为
2019-09-17 21:28:57    997    0    0

由于梯度消失问题,导致神经网络深度加深之后更难训练以及性能下降。

KeyPoint

  • 引入 identity shortcut connection

最有名的结构:

resnet

  • 有论文提到说,将resnet的一个块改为如下架构能够在上千层深的网络中,得到更好的训练效果。

title

  • 基于resnet基础上,有了ResNeXt,并联了多个块。

title

  • DenseNet,多个跨层链接,但这样的多个跨层链接多了效果并不好,于是分成多个块。

title

title

  • ResNet训练时间较长,按一定概率训练时直接drop掉一个块,会得到更少性能和使用更少时间。

title

  • 有实验表明,ResNet 中不同路径的集合有类似集成的行为。有实验表示101层的ResNet大多数贡献来自于长度为 9 到 18 的路径,但它们只占所有路径的一小部分。表明 ResNet 并没有解决长路径的梯度消失问题,而是通过缩短有效路径的长度训练非常深层的 ResNet 网络。

代码

  1. import torch.nn as nn
  2. import torch.utils.model_zoo as model_zoo
  3. __all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101',
  4. 'resnet152']
  5. model_urls = {
  6. 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
  7. 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
  8. 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
  9. 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
  10. 'resnet152': 'https://downl
2019-09-17 21:04:53    409    0    0

看了看2012年里程碑式的AlexNet,发现还是挺不错的,我以前意味就只有简单几层CNN积一下就完了,发现trick还是不少(原来这些trick这么早就有了啊,看来那时候我在玩泥巴)。

框架

图片版框架

AlexNet

  • 为什么长这么奇怪呢?因为图之大,一卡装不下。当时只有可怜的3G的GTX580,所以需要两张卡。
  • 下面这个图就清爽很多。

这有一个清爽很多的图

  • 第一层:卷积-->ReLU-->池化-->归一化
  • 第二层:卷积-->ReLU-->池化-->归一化
  • 第三层:卷积-->ReLU
  • 第四层:卷积-->ReLU
  • 第五层:卷积-->ReLU-->池化
  • 第六层:卷积(全连接)-->ReLU-->Dropout
  • 第七层:全连接-->ReLU-->Dropout
  • 第八层:全连接

  • 有个奇怪的问题是,为什么前两层卷积后加了Local Contrast Norm 后面就没有了呢?估计是测试了发现图太小后效果不行。

使用的所有Tricks:

  • ReLU: ReLU首次出现,并且收敛速度远快于Sigmoid。需要注意权重初始化问题。
  • 重叠Pooling: 池化运算的尺寸为3×3,步长为2。听说这样可以减少overfitting,提高精度。
  • 局部归一化LRN:被激活的神经元抑制相邻神经元,这东西到底有没有道理可能有待商讨(看了看知乎,都说没用,这个生物学特征可能和能量供给不足有关?)。title
  • Dropout:Dropout原来是在这里出现的,只出现在第6、7层。
  • Data augmentation: 随机裁剪,对256×256的图片进行随机裁剪到224×224,然后进行水平翻转,相当于将样本数量增加了2048倍。测试的时候,对左上、右上、左下、右下、中间分别做了5次裁剪,然后翻转,共10个裁剪,之后对结果求平均。作者说,如果不做随机裁剪,大网络基本上都过拟合;对RGB空间做PCA,然后对主成分做一个(0,0.1)的高斯扰动,也就是对颜色、光照作变换,结果使错误率又下降了1%。

Pytorch代码

  • LRN和模型
  1. import torch
  2. import torch.nn as nn
  3. from torch.nn import functional as F
  4. from torc
2019-09-17 21:04:53    316    0    0

深度学习权值初始化问题

一下主要参考自聊一聊深度学习的weight initialization

  • 至今才发现自己的权值初始化原来基本没学。
  • 全初始化为0是肯定不对的,因为梯度多半也是0.
  • 随机初始化在深度网络下不靠谱,因为链式法则,前向传播权值到后面会是初始权值的一些连乘,导致后面几层权值几乎为0,BP时基本没有梯度。同样,比1大会导致另一个极端结果,也是无法接受的。
  • Xavier initialization:基本思想是保持输入和输出的方差一致,解决上述问题。ReLU函数上会跪。
  • He initialization: 在ReLU网络中,假定每一层有一半的神经元被激活,另一半为0,所以,要保持variance不变,只需要在Xavier的基础上再除以2。
  • 使用Batch Normalization可以减少不靠谱的初始化带来的问题。

Z=γ×Zμσ+β

Batch Normalization

Batch Normalization 的作用:

  • 允许网络使用较高的 learning rate。
  • 具有一定的 regularization 作用。

以下是pytorch自带的batchnorm 示例

  1. x = torch.randn(1, 16, 7, 7) # 1张16通道的7乘7的图像
  2. # Batch Normalization层,因为输入是有高度H和宽度W的,所以这里用2d
  3. layer = nn.BatchNorm2d(16) # 传入通道数
  4. out = layer(x)
  5. print(out.shape)
  6. print(layer.running_mean) # 全局的均值mu
  7. print(layer.running_var) # 全局的方差sigma^2
  8. print(layer.weight) # weight也就是前面学的公式里的gamma
  9. p