STEP0: 预设超参数
STEP1: 初始化模型参数
STEP2: 重复训练过程(次数为epoch)
STEP3: 保存模型
在上图这个简单的神经网络模型中,由链式法则推导, ∂ l ∂ w 1 = ∂ l ∂ h l ( ∂ h l ∂ u l ∂ u l ∂ h l − 1 ) . . . . . . ( ∂ h 1 ∂ u 1 ∂ u 1 ∂ w 1 ) = ∂ l ∂ h l ( g ′ ( u l ) w l ) . . . . . . ( g ′ ( u 1 ) x ) \frac{\partial l}{\partial w_1}=\frac{\partial l}{\partial h_l}(\frac{\partial h_l}{\partial u_l}\frac{\partial u_l}{\partial h_{l-1}})......(\frac{\partial h_1}{\partial u_1}\frac{\partial u_1}{\partial w_1})=\frac{\partial l}{\partial h_l}(g^{'}(u_l)w_l)......(g^{'}(u_1)x) ∂w1∂l=∂hl∂l(∂ul∂hl∂hl−1∂ul)......(∂u1∂h1∂w1∂u1)=∂hl∂l(g′(ul)wl)......(g′(u1)x)
若 g ′ ( u i ) w i > 1 g^{'}(u_i)w_i>1 g′(ui)wi>1恒成立,那么 ∣ ∂ l ∂ w 1 ∣ > > 1 |\frac{\partial l}{\partial w_1}| >>1 ∣∂w1∂l∣>>1,出现梯度爆炸(gradient exploding);
若 g ′ ( u i ) w i < 1 g^{'}(u_i)w_i<1 g′(ui)wi<1恒成立,那么 ∣ ∂ l ∂ w 1 ∣ < < 1 |\frac{\partial l}{\partial w_1}| <<1 ∣∂w1∂l∣<<1,出现梯度消失(gradient vanishing);
若 g ′ ( u i ) w i > 1 g^{'}(u_i)w_i>1 g′(ui)wi>1恒成立,出现梯度爆炸现象,使得训练过程不稳定,为了避免此类情况的发生,需要保证: ∣ g ′ ( u i ) ∣ < = 1 , ∣ w i ∣ < = 1 ; |g^{'}(u_i)|<=1,|w_i|<=1; ∣g′(ui)∣<=1,∣wi∣<=1;
对于 ∣ g ′ ( u i ) ∣ |g^{'}(u_i)| ∣g′(ui)∣,使用激活函数,将范围缩小,其中蓝线代表激活函数曲线,绿线代表其导函数曲线:
对于 ∣ w i ∣ |w_i| ∣wi∣,初始化权重时设置值不要超过1,同时在训练过程中做标准化处理,保证 ∣ w i ∣ < = 1 |w_i|<=1 ∣wi∣<=1
若 g ′ ( u i ) w i < 1 g^{'}(u_i)w_i<1 g′(ui)wi<1恒成立,出现梯度消失现象,使得训练过程极为缓慢,为了避免此类情况的发生,需要保证: ∣ g ′ ( u i ) w i ∣ |g^{'}(u_i)w_i| ∣g′(ui)wi∣不能过小;
对于 ∣ g ′ ( u i ) ∣ |g^{'}(u_i)| ∣g′(ui)∣,当 ∣ u i ∣ > 0 |u_i|>0 ∣ui∣>0使用ReLU激活函数;当 ∣ u i ∣ > > 1 |u_i|>>1 ∣ui∣>>1,使用Sigmoid或tanh激活函数;
对于 w i w_i wi,初始化过程: w i ∈ N ( 0 , σ 2 ) 或 U ( − a , a ) w_{i} \in N(0, \sigma^2)或U(-a, a) wi∈N(0,σ2)或U(−a,a),同时在训练过程中做标准化处理;
Xavier’s method’ goal:为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等;
如图是 l l l层的网络结构,我们假设 g ( u l , k ) g(u_l,k) g(ul,k)大致是 u l , k u_{l,k} ul,k的线性组合,那么在 l l l层, h l , k = ∑ h l − 1 , j w j , k h_{l,k}=\sum{h_{l-1,j}}{w_{j,k}} hl,k=∑hl−1,jwj,k;
根据上述公式, V a r ( h l , k ) = ∑ j = 1 n V a r ( h l − 1 , j ) V a r ( w j , k ) ≈ n V a r ( h l − 1 ) V a r ( w ) Var(h_{l,k})=\sum_{j=1}^{n}{Var(h_{l-1,j})}{Var(w_{j,k})} \approx nVar(h_{l-1})Var(w) Var(hl,k)=∑j=1nVar(hl−1,j)Var(wj,k)≈nVar(hl−1)Var(w);
为了保证 V a r ( h l , k ) ≈ V a r ( h l − 1 ) Var(h_{l,k})\approx Var(h_{l-1}) Var(hl,k)≈Var(hl−1),则 n V a r ( w ) = 1 , V a r ( w ) = 1 n nVar(w) = 1,Var(w)=\frac{1}{n} nVar(w)=1,Var(w)=n1;
类似地,考虑后向传播过程: V a r ( w ) = 1 m Var(w)=\frac{1}{m} Var(w)=m1;
由于输出层和输出层的数量常常不同,作为妥协,得到: V a r ( w ) = 2 m + n Var(w)=\frac{2}{m+n} Var(w)=m+n2;
基于 E ( w ) = 0 , V a r ( w ) = 2 m + n E(w)=0,Var(w)=\frac{2}{m+n} E(w)=0,Var(w)=m+n2,可从Gaussian distribution中采样,或从uniform distribution U [ − 6 m + n , + 6 m + n ] U[-\frac{\sqrt{6}}{\sqrt{m+n}},+\frac{\sqrt{6}}{\sqrt{m+n}}] U[−m+n6,+m+n6]中采样;
基于 E ( w ) = 0 , V a r ( w ) = 2 n E(w)=0,Var(w)=\frac{2}{n} E(w)=0,Var(w)=n2,可从Gaussian distribution中采样,或从uniform distribution U [ − 6 n , + 6 n ] U[-\frac{\sqrt{6}}{\sqrt{n}},+\frac{\sqrt{6}}{\sqrt{n}}] U[−n6,+n6]中采样;
训练过程采用随机的批量数据,然而,不同的批量数据往往具有不同的分布,一个小批的分布随着时间的推移而改变一层,每层都需要不断地适应新的数据的分布:
为此,我们需要让不同的小批量输入有相似的分布,即批量归一化(Batch normalization),
对任意的{ x n x_n xn}的每个维度进行规范化:
x ^ k = x k − E ( x k ) V a r ( x k ) + ϵ \hat x_k=\frac{x_k-E(x_k)}{\sqrt{Var(x_k)+\epsilon}} x^k=Var(xk)+ϵxk−E(xk)
这种规范化使得所有小批量数据具有相同的分布,但是降低了数据携带的信息的多样性和表达能力,需要在训练完成后进行数据的恢复:
y k = γ x ^ k + β k = B N γ k , β k ( x k ) y_k=\gamma \hat x_k+\beta_k=BN_{\gamma_k,\beta_k}(x_k) yk=γx^k+βk=BNγk,βk(xk)
模型在训练集上的准确度过高,导致它的泛化能力不强,不能准确地反应新数据的情况(过犹不及),例如图中红色虚线所示;
(1)提前终止训练
当模型在验证集(Validation Set)上的预测错误没有减少时,停止训练;
(2)正则化:引入LP范数
当模型参数过多时,如红线,造成过拟合问题;
因此,需要在过拟合与误差之间进行折中权衡,得到较好的结果,为此,引入LP范数;
LP正则化过程:
L ( θ ) = 1 N ∑ n = 1 N l ( y n , f ( x n ; θ ) ) + λ ∣ ∣ θ ∣ ∣ p L(\theta)=\frac{1}{N}\sum_{n=1}^Nl(y_n,f(x_n;\theta))+\lambda||\theta||_p L(θ)=N1∑n=1Nl(yn,f(xn;θ))+λ∣∣θ∣∣p
其中, ∣ ∣ θ ∣ ∣ p = ( ∑ i ∣ θ i ∣ p ) 1 p ||\theta||_p=(\sum_i{|\theta_i|^p})^{\frac{1}{p}} ∣∣θ∣∣p=(∑i∣θi∣p)p1; λ \lambda λ是超参数,用于平衡两组损失值;
当 p = 2 p=2 p=2,会导致 θ \theta θ不断地减小;
当 p = 1 p=1 p=1,会导致 θ \theta θ中权重分量趋于0;
(3)正则化:Dropout
在训练过程中,每个神经元以概率 p p p保留,因此不同mini-batch可以训练出不同结构的神经网络;
左图是一般情况下的神经网络,右图为使用dropout之后的情况,可以看到一部分神经元未参与训练;
在测试过程中,每个神经元都保留,但神经元上的权重 w w w以 p p p为概率衰减,替换为 p w pw pw;
Dropout工作原理:
在训练过程中,每个保留的神经元都致力于在缺少某些其他神经元帮助的情况下完成任务;
在测试过程中,权重以 p p p衰减,相当于训练过程中以 p p p为概率保留神经元;
缺陷:比一般过程多耗费2-3倍时间用于训练;