## 分类 - 机器学习

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

# Aims

To match the joint distribution $P\left({Y}_{s},{X}_{s}\right)$$P(Y_s,X_s)$ with $P\left({Y}_{t},{X}_{t}\right)$$P(Y_t,X_t)$.

# Solution

Find a matrix $A$$A$ to let $P\left({A}^{T}{X}_{s}\right),P\left({A}^{T}{X}_{t}\right)$$P(A^T X_s), P(A^T X_t)$ as close as possible.
So is $P\left({Y}_{s}|{A}^{T}{X}_{s}\right),P\left({Y}_{t}|{A}^{T}{X}_{t}\right)$$P(Y_s|A^T X_s), P(Y_t|A^T X_t)$.

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

this equals to

where ${M}_{0}$$M_0$ is

For the next part, because we don't have ${Y}_{t}$$Y_t$, so we train a classfier C to learn

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

# Background

We have $\left({X}_{s},{Y}_{s}\right)$$(X_s,Y_s)$ and ${X}_{t}$$X_t$, but ${X}_{s},{X}_{t}$$X_s, X_t$ are not from the same ditribution, i.e. $P\left({Y}_{s}|{X}_{s}\right)\ne P\left({Y}_{t}|{X}_{t}\right)$$P(Y_s|X_s) \neq P(Y_t|X_t)$. To solve this, we use the following method.

# Assumption

There exist a transformation $\varphi$$\phi$ that $P\left({Y}_{s}|\varphi \left({X}_{s}\right)\right)\approx P\left({Y}_{t}|\varphi \left({X}_{t}\right)\right)$$P(Y_s|\phi(X_s)) \approx P(Y_t|\phi(X_t))$.

# Solutioin

To find $\varphi$$\phi$, we try to minimize following distance called MMD(maximum mean discrepancy).

To solve

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

# 方案一

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

• 解压Kaggle数据(......此处等待10分钟)
• 弃疗

# 方案二

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

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

# Structure

As usual, there's Source Domain(the old one) $S$$S$ and Target Domain(the new one) $T$$T$, and a Classifier $C$$C$ on Source Domain, Target Representations ${M}_{t}$$M_t$ and ${M}_{s}$$M_s$, a Discriminator $D$$D$. The loss is straight forward.

# Training method

1. Train ${M}_{s}$$M_s$ and $C$$C$ on $S$$S$.
2. Keep ${M}_{s}$$M_s$, 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.

# Model Structure

The modle consist of four parts, one is mapping cycle, the second is semantic consistency, the third is GAN part of ${D}_{T}$$D_T$ and $D_{feature \ after\ f_T}$, the fourth is the origin task.

# Experiments

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

The FCNs in t

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

• 这不就是之前说的，用GAN来做无监督学习，只是加入了Skip Connection.
• 类似的还有：$\mathrm{\Pi }$$\Pi$ 模型认为同一个输入，在不同的正则和数据增强条件下，网络对其预测应该是一致的，所以最小化不同变化后同一样本最后输出的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

# 简介

## 作用

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

## 框架

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

• Adversarial Loss 正常定义为crossentropy (实际训练时替换为了MSE，但听说MSE会让生成的图像更加模糊[1]): $LGAN\left(G,DY,X,Y\right)={E}_{y\sim pdata\left(y\right)}\left[\mathrm{log}{D}_{Y}\left(y\right)\right]+{E}_{x\sim pdata\left(x\right)}\left[log\left(1-{D}_{Y}\left(G\left(x\right)\right)\right]$$LGAN(G, DY , X, Y ) = E_{y\sim pdata(y)}[\log D_Y(y)] + E_{x\sim pdata(x)}[log(1 − D_Y(G(x))]$
• Cycle Consistency Loss 定义为
2019-09-17 21:28:57    997    0    0

# KeyPoint

• 引入 identity shortcut connection

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

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

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

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

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

# 代码

import torch.nn as nnimport torch.utils.model_zoo as model_zoo__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101',           'resnet152']model_urls = {    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',    'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',    'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',    'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',    'resnet152': 'https://downl
2019-09-17 21:04:53    409    0    0

# 框架

## 图片版框架

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

• 第一层：卷积-->ReLU-->池化-->归一化
• 第二层：卷积-->ReLU-->池化-->归一化
• 第三层：卷积-->ReLU
• 第四层：卷积-->ReLU
• 第五层：卷积-->ReLU-->池化
• 第六层：卷积（全连接）-->ReLU-->Dropout
• 第七层：全连接-->ReLU-->Dropout
• 第八层：全连接

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

## 使用的所有Tricks:

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

# Pytorch代码

• LRN和模型
import torchimport torch.nn as nnfrom torch.nn import functional as Ffrom torc
2019-09-17 21:04:53    316    0    0

# 深度学习权值初始化问题

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

${Z}^{\prime }=\gamma ×\frac{Z-\mu }{\sigma }+\beta$

# Batch Normalization

Batch Normalization 的作用：

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

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