神经网络总结
Gradient Descent & Optimizer
梯度下降算法的思路是迭代更新参数,沿着目标函数的负梯度方向逐步减小目标函数的值。梯度表示目标函数在某一点的变化率,负梯度方向是目标函数下降最快的方向。
GD(gradient descent):计算目标函数关于参数的梯度 g t = ∇ θ J ( θ ) g_t = \nabla_{\theta}J(\theta) g t = ∇ θ J ( θ ) , 之后更新模型参数:θ t + 1 = θ t − α ∇ θ J ( θ ) \theta_{t +1} = \theta_{t} - \alpha \nabla_{\theta}J(\theta) θ t + 1 = θ t − α ∇ θ J ( θ ) 在此基础上衍生了BDG (批量梯度下降),一次考虑多对样本,考虑平均梯度:θ t + 1 = θ t − α t ⋅ 1 n ⋅ ∑ i = 1 n ∇ θ J i ( θ , x i , y i ) \theta_{t+1} = \theta_{t} - \alpha_{t}\cdot\frac{1}{n}\cdot\sum_{i= 1}^n \nabla_{\theta}J_{i}(\theta,x^i,y^i) θ t + 1 = θ t − α t ⋅ n 1 ⋅ i = 1 ∑ n ∇ θ J i ( θ , x i , y i ) 同样衍生出了SDG (随机梯度下降),每次随机选择一个样本计算梯度,训练速度快,但梯度下降的波动较大,容易从一个局部最优跳到另一个局部最优:θ t + 1 = θ t − α ⋅ ∇ θ J i ( θ , x i , y i ) \theta_{t+1} = \theta_{t} - \alpha\cdot \nabla_{\theta}J_{i}(\theta,x^i,y^i) θ t + 1 = θ t − α ⋅ ∇ θ J i ( θ , x i , y i )
Momentum:参数更新时在一定程度上保留之前更新的方向,同时又利用了GD算法中的梯度,公式形如:
m t + 1 = μ ⋅ m t + α ⋅ ∇ θ J ( θ ) θ t + 1 = θ t − m t + 1 (where μ usually be 0.9) m_{t +1} = \mu \cdot m_t + \alpha \cdot \nabla_{\theta}J(\theta) \\
\theta_{t+1} = \theta_{t} - m_{t+1}\text{ (where $\mu$ usually be 0.9)} m t + 1 = μ ⋅ m t + α ⋅ ∇ θ J ( θ ) θ t + 1 = θ t − m t + 1 (where μ usually be 0.9) 可以看出在梯度反向改变时,momentum能够降低参数更新速度,从而减少震荡;在梯度方向相同时,momentum可以加速参数更新,从而加速收敛。
AdaGrad: SGD和Momentum均以相同的学习率更新θ \theta θ 的各个分量,深度学习模型中涉及大量参数,我们希望不同的参数的更新速度能够有所区别。AdaGrad便对此做出了实现,具体地:
g ← ∇ θ J ( θ ) r ← r + g 2 Δ θ ← δ r + ϵ ⋅ g θ ← θ − Δ θ g \leftarrow \nabla_{\theta} J(\theta)\\
r \leftarrow r + g^2\\
\Delta \theta \leftarrow \frac{\delta}{\sqrt{r + \epsilon}}\cdot g\\
\theta \leftarrow \theta -\Delta \theta g ← ∇ θ J ( θ ) r ← r + g 2 Δ θ ← r + ϵ δ ⋅ g θ ← θ − Δ θ 其中δ \delta δ 是全局学习率,可以看出r = ∑ i = 1 t g i 2 r = \sum_{i = 1}^t g_{i}^2 r = ∑ i = 1 t g i 2 即梯度平方和,在前期梯度平方和较小,约束项δ r + ϵ \frac{\delta}{\sqrt{r + \epsilon}} r + ϵ δ 较大,梯度更新较快,后期更新量逐渐减小。
算法的缺点在于需要手工设置一个全局学习率,中后期梯度平方和越来越大,容易造成训练提前结束。
RMSProp:其实RMSprop依然依赖于全局学习率,RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间,适合处理非平稳目标(包括季节性和周期性)——对于RNN效果很好。
Adam:是RMSProp的动量版。
Adam可能不收敛,二阶动量是固定时间窗口内的累积,随着时间窗口的变化,遇到的数据可能发生巨变。深度神经网络往往包含大量的参数,在这样一个维度极高的空间内,非凸的目标函数往往起起伏伏,拥有无数个高地和洼地。有的是高峰,通过引入动量可能很容易越过;但有些是高原,可能探索很多次都出不来,于是停止训练。
SGD没有用到二阶动量,因此学习率是恒定的(实际使用过程中会采用学习率衰减策略,因此学习率递减)。AdaGrad的二阶动量不断累积,单调递增,因此学习率是单调递减的。因此,这两类算法会使得学习率不断递减,最终收敛到0,模型也得以收敛。
Back Propagation
一种用于训练神经网络的优化算法,其基本思想是通过计算目标函数对网络参数的梯度,然后利用梯度信息来更新参数以最小化目标函数。反向传播广泛用于深度学习中,特别是多层神经网络的训练过程。
通过链式求导法则计算损失函数对于每个参数的梯度,之后利用梯度下降算法来更新网络参数。BP和GD结合被用于大量神经网络的训练。
Loss Functions
用来度量模型的预测值f ( X ) f(X) f ( X ) 与真实值Y Y Y 的差异程度的运算函数,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数数值越小,模型的鲁棒性就越好。
MSE:1 n ∑ ( y i − f ( x i ) ) 2 \frac{1}{n}\sum (y_i - f(x_i))^2 n 1 ∑ ( y i − f ( x i ) ) 2 一个batch中n个样本的输出与期望输出的差的平方的均值。多用于回归问题。
L1 loss & L2 loss:曼哈顿距离(对于离群值更加鲁棒)和欧氏距离(具备凸性和可微性,是回归问题、模式识别、图像处理中最常用的损失函数)
NLL (negative log-likelyhood):在自然语言处理中,常用于分类任务。NLL结合logsoftmax就是cross entropy损失函数
cross entropy :− ∑ y i log ( f ( x i ) ) -\sum y_i \log (f(x_i)) − ∑ y i log ( f ( x i )) 评估当前训练得到的概率分布和真实分布的差距,交叉熵的值越小,概率分布越近。相较于MSE其更新的速度更快。多用于多分类问题。
KL 散度(KL divergence):a type of statistical distance: a measure of how one probability distribution P is different from a second, reference probability distribution Q.即衡量两个概率分布的差异。(在强化学习中很有用)。
设定义在采样空间X \mathcal{X} X 的两个概率分布P、Q,则从Q到P的KL散度定义为:D K L ( P ∣ ∣ Q ) = ∑ x ∈ X P ( x ) log ( P ( x ) Q ( x ) ) D_{KL}(P || Q) = \sum_{x\in \mathcal{X}} P(x)\log\left(\frac{P(x)}{Q(x)}\right) D K L ( P ∣∣ Q ) = x ∈ X ∑ P ( x ) log ( Q ( x ) P ( x ) ) 对于连续变量的概率分布,定义为:D K L ( P ∣ ∣ Q ) = ∫ − ∞ ∞ p ( x ) log ( p ( x ) q ( x ) ) d x D_{KL}(P||Q) = \int_{-\infty}^\infty p(x) \log\left(\frac{p(x)}{q(x)}\right)dx D K L ( P ∣∣ Q ) = ∫ − ∞ ∞ p ( x ) log ( q ( x ) p ( x ) ) d x
Convolution & CNN
卷积是一种数学运算,常用于信号处理,图像处理等领域。其定义为( f ∗ g ) ( t ) = ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ (f*g)(t) = \int_{-\infty}^\infty f(\tau)g(t-\tau)d\tau ( f ∗ g ) ( t ) = ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ 。深度学习中,卷积被拿来做特征提取、图像滤波等操作,即利用卷积核在图片上滑动做多次卷积操作得到抽取特征后的输出。相较于传统的全连接神经网络(FCN)优势在于大幅减少参数量,平移不变性。
宽卷积、窄卷积、等距卷积:分别为补零、不补零、保持维度相同补零。
特征映射:图像经过卷积后得到的特征,卷积核相当于特征提取器。
LeNet AlexNet VGG-net ResNet Inception:一个卷积层包含多个不同大小的卷积操作,堆叠后作为特征映射。
RNN
循环神经网络:一类专门用于处理序列数据的神经网络架构。
常用在自然语言、时间序列预测、音频、视频及其他序列数据的模型上。容易出现梯度消失和梯度爆炸的问题。
能够处理任意长度的时序数据,不具备长期记忆
LSTM
解决了梯度消失的问题,梯度爆炸问题仍然存在。可以捕捉长程依赖,但结构更加复杂,引入了记忆单元。
遗忘门、输入门、输出门三部分的计算公式类似:
I t = σ ( X t W x i + H t − 1 W h i + b i ) F t = σ ( X t W x f + H t − 1 W h f + b f ) O t = σ ( X t W x o + H t − 1 W h o + b o ) C ~ t = tanh ( X t W x c + H t − 1 W h c + b c ) \begin{align*}
&\mathbf{I}_t = \sigma(\mathbf{X}_t\mathbf{W}_{xi} + \mathbf{H}_{t-1}\mathbf{W}_{hi} + b_i)\\
& \mathbf{F}_t = \sigma(\mathbf{X}_t\mathbf{W}_{xf} + \mathbf{H}_{t-1}\mathbf{W}_{hf} + b_f)\\
& \mathbf{O}_t = \sigma(\mathbf{X}_t\mathbf{W}_{xo} + \mathbf{H}_{t-1}\mathbf{W}_{ho} + b_o)\\
& \tilde{\mathbf{C}}_t = \text{tanh}(\mathbf{X}_t \mathbf{W}_{xc} + \mathbf{H}_{t-1} \mathbf{W}_{hc} + \mathbf{b}_c)
\end{align*} I t = σ ( X t W x i + H t − 1 W hi + b i ) F t = σ ( X t W x f + H t − 1 W h f + b f ) O t = σ ( X t W x o + H t − 1 W h o + b o ) C ~ t = tanh ( X t W x c + H t − 1 W h c + b c )
LSTM既要存hidden state,也要存记忆元memory cell,记忆元与forget gate相互作用决定要保留多少过往的记忆。候选记忆元与记忆元一同决定本次记忆元的值:C t = F t ⊙ C t − 1 + I t ⊙ C ~ t \mathbf{C}_t = \mathbf{F}_t \odot \mathbf{C}_{t-1} + \mathbf{I}_t \odot \tilde{\mathbf{C}}_t C t = F t ⊙ C t − 1 + I t ⊙ C ~ t
之后再利用output gate得到隐状态 H t = O t ⊙ tanh ( C t ) \mathbf{H}_t = \mathbf{O}_t \odot\tanh(\mathbf{C}_t) H t = O t ⊙ tanh ( C t )
最终本次输出为 y t = f ( V y H t + b y ) y_t = f(\mathbf{V}_y \mathbf{H}_t + b_y) y t = f ( V y H t + b y )
semi-supervised learning
一种机器学习范式,它结合了监督学习和无监督学习的元素。在半监督学习中,模型在训练时同时使用有标签和无标签的数据。通常情况下,有标签的数据相对较少,而无标签的数据则相对较多。
Small portion of data is labeled, most of data is unlabeled.
大量数据无标注,部分数据有标注
平滑性假设:假设若x 1 , x 2 x_1,x_2 x 1 , x 2 在一个high density region,那么他们的标签应当一致。
simple self-training:用含标签的数据训练一个分类器,用这个分类器预测无标签数据,挑选一部分数据及其pseudo label进行模型的训练,需要指定挑选准则(例如预测概率大于90%)
co-training:一个数据可能包含多个属性(X的维度),在不同属性上训练多个学习器。协同训练正是很好地利用了多视图的“相容互补性”。假设数据拥有两个充分且条件独立的视图,“充分”是指每个视图都包含足以产生最优学习器的信息,“条件独立”则是指在给的类别标记条件下两个视图相互独立。一个学习器上得到的伪标签用来训练另一个学习器。
生成模型:利用GAN等模型生成新的无标签数据,增加数据多样性。判别模型用来捕获P ( Y ∣ X ) P(Y\mid X) P ( Y ∣ X ) ;生成器用来生成新样本,即捕获P ( X ) P(X) P ( X ) 或者有标签时P ( X , Y ) P(X,Y) P ( X , Y )
Graph-based approach:标签传播算法基于图中相邻节点的标签相似性来传播标签。它首先使用有标签的节点初始化标签,然后通过图中的连接关系不断传播标签,直到达到稳定状态。标签传播算法适用于图结构较为密集的情况。
transfer learning
现有的数据与目标任务并不直接匹配,迁移学习希望利用一定的额外数据和已有模型,将其用在新任务上。
适用领域:NLP,图像分类目标检测,语音识别,医学影像分析,机器人视觉导航。
source data和target data均有label时 :采用model fine-tuning 常用conservative training,即将神经网络中的某些层frozen(CV常冻结前几层,语音识别常冻结后几层);multitask learning (共用一部分网络,实验表明这样有助于提高训练效率)和progressive neural network(强化学习模型)。
source data有label和target data无label:采用domain adaptation 和zero shot learning ,后者处理不同的task,可沟通CV和NLP。
GAN
min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ log D ( x ) ] + E z ∼ p z ( z ) [ 1 − log ( D ( G ( z ) ) ) ] \min_G\max_D V(D,G)= \mathbb{E}_{x\sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z\sim p_{z}(z)}[1-\log(D(G(z)))] min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ log D ( x )] + E z ∼ p z ( z ) [ 1 − log ( D ( G ( z )))]
JS散度定义:J S ( P r ∣ ∣ P g ) = K L ( P r ∣ ∣ P m ) + K L ( P g ∣ ∣ P m ) w h e r e P m = P r + P g 2 JS(\mathbb{P}_r || \mathbb{P}_g) = KL(\mathbb{P}_r || \mathbb{P}_m) + KL(\mathbb{P}_g||\mathbb{P}_m)\ \ where\ \ \mathbb{P}_m = \frac{\mathbb{P}_r + \mathbb{P}_g}{2} J S ( P r ∣∣ P g ) = K L ( P r ∣∣ P m ) + K L ( P g ∣∣ P m ) w h ere P m = 2 P r + P g
wasserstein距离定义:W ( P r ∣ ∣ P g ) = inf γ ∼ Π ( P r , P g ) E ( x , y ) ∼ γ [ ∥ x − y ∥ ] W(\mathbb{P}_r||\mathbb{P}_g) = \inf_{\gamma \sim \Pi(\mathbb{P}_r,\mathbb{P}_g)}\mathbb{E}_{(x,y)\sim \gamma}[\|x-y\|] W ( P r ∣∣ P g ) = inf γ ∼ Π ( P r , P g ) E ( x , y ) ∼ γ [ ∥ x − y ∥ ]
生成器和判别器,零和博弈,对抗训练
WGAN:
不采用基于动量的优化器,推荐RMSProp;
判别器最后一层删除Sigmoid激活,容易梯度消失;
不用log的损失函数,而是采用了wasserstein距离,相对于JS散度和KL散度的优势在于:即使两个分布的支撑集没有重叠或重叠非常少,仍然能反映两个分布的远近,而JS散度在此情况下是常量,KL散度可能无意义;
判别器更新后参数绝对值截取到不超过一个常数c,满足lipschitz(利普希茨)条件