回过头再来看深度学习的基础知识,才发现之前掌握的根本不牢,许多基础的概念都没有深刻理解。

机器学习、深度学习的基本原理

f(x) is{scalar:regressionlabel:classificationtext/imagesf(x) \text{ is} \left\{ \begin{aligned} &\text{scalar} : \text{regression}\\ &\text{label} : \text{classification}\\ &\text{text/images} \end{aligned} \right.

模型的复杂度:模型的参数有多少种选择

loss=1Nn=1Nl(param,xn,y^n)\text{loss}=\frac{1}{N}\sum_{n=1}^N l(\text{param},x^n,\hat{y}^n)

最好的参数

param=arg minparamloss\text{param}_*=\argmin_{\text{param}} \text{loss}

我们希望训练集DtrainD_{\text{train}}的数据分布与DallD_{\text{all}}中数据分布相同,训练集中的数据之间 是i.i.d.i.i.d.的,即 independently and identically distributed,独立同分布。

数学地描述训练集与总数据集合

我们希望训练集能近似替代总数据集,即:

L(htrain,Dall)L(hall,Dall)<δL(h^{\text{train}},D_{\text{all}})-L(h^{\text{all}},D_{\text{all}})<\delta

其充分条件如下:

h:L(h,Dall)L(h,Dtrain)<δ2\forall h : |L(h,D_{\text{all}})-L(h,D_{\text{train}})|<\frac{\delta}{2}

proof:

L(htrain,Dall)L(htrain,Dtrain)<δ2(1)L(h_{\text{train}},D_{\text{all}})-L(h_{\text{train}},D_{\text{train}})<\frac{\delta}{2} \quad\cdots (1)

L(hall,Dtrain)L(hall,Dall)<δ2(2)L(h_{\text{all}},D_{\text{train}})-L(h_{\text{all}},D_{\text{all}})<\frac{\delta}{2} \quad\cdots (2)

(1)+(2)L(htrain,Dall)+[L(htrain,Dtrain)+L(hall,Dtrain)]L(hall,Dall)<δ(1)+(2)\Rightarrow L(h_{\text{train}},D_{\text{all}}) +[-L(h_{\text{train}},D_{\text{train}})+ L(h_{\text{all}},D_{\text{train}})]-L(h_{\text{all}},D_{\text{all}})<\delta

due to the fact that

L(htrain,Dtrain)<L(hall,Dtrain)L(h_{\text{train}},D_{\text{train}})<L(h_{\text{all}},D_{\text{train}})

therefore

L(htrain,Dall)L(hall,Dall)<δL(h^{\text{train}},D_{\text{all}})-L(h^{\text{all}},D_{\text{all}})<\delta

数据集的好与坏

只要存在一个参数param1使得:L(param1,Dtrain)L(param1,Dall)>ϵ|L(\text{param}_1,D_{\text{train}})-L(\text{param}_1,D_{\text{all}})|>\epsilon,则这个数据集是不好的。

任意挑选一个数据集是坏的的概率上限推导如下(认为模型参数的参数空间为HH):

P(Dtrain is bad)=PparamH{Di is bad due to param}paramHP(Di is bad due to param)paramH2exp(2Nϵ2)Hoeffding’s Inequality=2exp(2Nϵ2)H\begin{aligned} P(D_{\text{train}}\text{ is bad})=&P(\bigcup_{\text{param}\in H}\{D_i \text{ is bad due to param}\})\\ \leq&\sum_{\text{param}\in H}P(D_i\text{ is bad due to param})\\ \leq&\sum_{\text{param}\in H} 2\exp(-2N\epsilon^2)\qquad \text{Hoeffding’s Inequality}\\ =&2\exp(-2N\epsilon^2)|H| \end{aligned}

因此,模型的参数空间越小,训练集的样本越大,得到一个好的训练集的概率越大。

为什么选择deep learning 而不是wide learning

一个函数可以通过若干个简单的函数叠加出来:表明神经网络有能力拟合任意函数。

若需要拟合同一个函数,那么更深的网络能比更宽的网络需要更少的参数量。(可以看作函数的嵌套)

套用数字逻辑的理论,要表达一个奇偶校验函数,对于深层网络(每层门电路数量固定),只需要O(n)O(n)个神经元即可,而对于浅层网络(层的数量固定),需要O(2n)O(2^{n})个神经元。
因此,深层的神经网络需要更少的参数就能达到相同的效果。

对于最优参数param=arg minparamHL(param,D)\text{param}_*=\argmin_{\text{param}\in H}L(\text{param},D_{\text{}})

我们希望参数空间尽可能少(减少搜索时间并增强稳定性),并且loss也尽可能少。而深度学习在保持loss基本不变的情况下显著减少了参数量,是一个非常好的方法。

生成式模型

Generater: 能够输出一个复杂的分布(将一个简单的分布变换而来的)

为什么是分布

在进行预测任务时,答案可能不止一种,有好几种可能的答案,我们希望模型能够输出一个分布,而不是一个确定的答案(否则模型容易投机取巧,将几种可能的情况揉在一起)。

为模型的输入加入一些噪声(从简单的分布采样),就能为模型的输出增加不确定性(本质是从复杂的分布采样)。

拿图片生成为例,有意义的图片的熵是比较低的(相对于噪音而言),有意义的图片一定符合某种规律,也就是一种分布。但是我们无法直接训练生成器学到这种分布,因为我们其实也不知道这个分布到底长啥样,更别说在数学上计算这个模型的输出与真实分布之间的散度了。

为了解决这个问题,GAN便应运而生了,我们只需要分布的采样,而不是分布本身。

Generative Adversarial Network: GAN

Discriminator: 判断目标是真实的还是生成的(假的)

imageDiscriminatorscalar[0,1]\text{image} \rightarrow \boxed{\text{Discriminator}}\rightarrow \text{scalar} \in [0,1]

训练过程

  1. 冻结生成器,训练判别器:将真实的图片打上标签1,将生成的图片打上标签0,训练判别器
  2. 冻结判别器,训练生成器:我们希望生成器能“骗过”判别器,得到高的分数。即,希望D(G(z))D(G(z))的输出值为1,但此时判别器的参数是被冻结的,模型会强迫让生成器学到能骗过判别器的方法。

重复以上过程

数学原理

对于判别器,我们的优化目标如下:

V(G,V)=EyPdatalogD(y)+EzPGlog(1D(G(z)))V(G,V)=E_{y\sim P_{\text{data}}}\log D(y)+E_{z\sim P_G}\log(1-D(G(z)))\\

那么就是说,最优的判别器如下:

D=arg maxDV(D,G)D^*=\argmax_D V(D,G)\\

最优的生成器如下(最小化模型分布与真实分布之间的差异):

G=arg minGDiv(PG,Pdata)但是我们不知道如何计算这个散度G^*=\argmin_G Div(P_G,P_{\text{data}})\quad \text{但是我们不知道如何计算这个散度}

但是进一步可以证明maxV\max VJSDiv(PG,Pdata)JSDiv(P_G,P_{\text{data}})存在的正相关性

那么,优化生成器可以使用maxV\max V来替代散度,即

G=arg minGmaxV(D,G)G^*=\argmin_G \max V(D,G)

这与上述训练过程是对应的。

特点

生成器的生成的分布甚至具有连续性,在一定程度上是光滑的。将输入做插值,生成器的输出也会做展现出渐变效果。

训练

GAN的训练通常比较困难,但有一些技巧。

GAN使用的是js散度,对于两个无交集的分布,其输出始终为定值,导致梯度消失。而且由于生成器的参数是随机初始化的,其与真实分布大概率就是没有交集的。随之而来的另一个问题是,对于两个没有交集的分布,判别器可以非常容易判断真假,导致显示的判别准确率非常容易达到100%,但这实际上是没有意义的。

这可以通过更换散度函数改善(实际上是更换了优化目标),并加入一些限制条件(足够平滑,避免发散)

参考

https://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.php