参考教程
模型选择、欠拟合和过拟合
K折交叉验证
当训练数据稀缺时,我们甚至可能无法提供足够的数据来构成一个合适的验证集。这个问题的一个流行的解决方案是采用K折交叉验证。这里,原始训练数据被分成K个不重叠的子集。然后执行K次模型训练和验证,每次在K−1个子集上进行训练,并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。最后,通过对K次实验的结果取平均来估计训练和验证误差。
正向传播、反向传播和计算图
正向传播
- 假设输入样本是x∈Rd,并且隐藏层不包括偏置项。这里的中间变量是:
z=W(1)x,
- 其中W(1)∈Rh×d是隐藏层的权重参数。然后将中间变量 z∈Rh通过激活函数ϕ后,我们得到长度为h的隐藏激活向量:
h=ϕ(z).
- 隐藏变量h也是一个中间变量。假设输出层的参数只有权重W(2)∈Rq×h,我们可以得到输出层变量,它是一个长度为q的向量:
o=W(2)h.
- 假设损失函数为l,样本标签为y,我们可以计算单个数据样本的损失项,
L=l(o,y).
- 根据L2正则化的定义,给定超参数λ,正则化项为
s=2λ(∥W(1)∥F2+∥W(2)∥F2)
- 其中,矩阵的弗罗贝尼乌斯范数是将矩阵展平为向量后应用的L2范数。最后,模型在给定数据样本上的正则化损失为:
J=L+s.
将J称为目标函数。
反向传播
- 第一步是计算目标函数J=L+s相对于损失项 L 和正则项 s 的梯度:
∂L∂J=1and∂s∂J=1
- 根据链式法则计算目标函数关于输出层变量o的梯度:
∂o∂J=prod(∂L∂J,∂o∂L)=∂o∂L∈Rq
- 计算正则化项相对于两个参数的梯度:
∂W(1)∂s=λW(1)and∂W(2)∂s=λW(2).
- 计算最接近输出层的模型参数的梯度∂J/∂W(2)∈Rq×h。使用链式法则得出:
∂W(2)∂J=prod(∂o∂J,∂W(2)∂o)+prod(∂s∂J,∂W(2)∂s)=∂o∂Jh⊤+λW(2).
- 为了获得关于W(1)的梯度,我们需要继续沿着输出层到隐藏层反向传播。关于隐藏层输出的梯度∂J/∂h∈Rh由下式给出:
∂h∂J=prod(∂o∂J,∂h∂o)=W(2)⊤∂o∂J.
- 由于激活函数ϕ是按元素计算的,计算中间变量z的梯度∂J/∂z∈Rh需要使用按元素乘法运算符,我们用⊙表示:
∂z∂J=prod(∂h∂J,∂z∂h)=∂h∂J⊙ϕ′(z).
- 最后,得到最接近输入层的模型参数的梯度∂J/∂W(1)∈Rh×d。根据链式法则:
∂W(1)∂J=prod(∂z∂J,∂W(1)∂z)+prod(∂s∂J,∂W(1)∂s)=∂z∂Jx⊤+λW(1).
参数初始化
默认初始化
- 使用正态分布来初始化权重值,若不指定框架将使用默认的随机初始化方法
Xavier初始化
- 对于某些没有非线性的全连接层输出(例如隐藏变量)oi的尺度分布。对于该层nin输入xj及其相关权重wij,输出为:
oi=j=1∑ninwijxj
- 权重 wij都是从同一分布中独立抽取的。此外,假设该分布具有零均值和方差σ2。假设层xj 的输入也具有零均值和方差γ2 ,并且它们独立于wij 并且彼此独立。在这种情况下,我们可以按如下方式计算$o_i} 的平均值和方差:
E[oi]Var[oi]=j=1∑ninE[wijxj]=j=1∑ninE[wij]E[xj]=0,=E[oi2]−(E[oi])2=j=1∑ninE[wij2xj2]−0=j=1∑ninE[wij2]E[xj2]=ninσ2γ2.
- 保持方差不变的一种方法是设置ninσ2=1 。现在考虑反向传播过程,我们面临着类似的问题,尽管梯度是从更靠近输出的层传播的。使用与正向传播相同的推理,我们可以看到,除非noutσ2=1,否则梯度的方差可能会增大,其中nout是该层的输出的数量。这使我们进退两难:我们不可能同时满足这两个条件。相反,我们只需满足:
21(nin+nout)σ2=1 或等价于 σ=nin+nout2.
- 通常Xavier初始化从均值为零,方差σ2=nin+nout2的高斯分布中采样权重。