常见的调试方式:
通过对深层神经网络的每一层中的 z 都进行正则化,我们可以减少神经网络不同层之间的连接关系(因为正则化参数的均值和方差都可以经过训练得出),这样增强了模型在不同训练集上的稳定性。归一化使得即使因为训练集的输入发生了改变,但由于正则化这一步骤的存在,使得每层网络之间训练的独立性增强。
同时 batch norm 由轻微的正则化效果,因为不同的 mini-bacth 的均值与方差均不同,所以在训练的过程中给模型增加了噪声,一定程度上减少了过拟合
在 mini-batch 下,对每层网络的 $z^{l}$ 进行正则化并根据需求训练新的均值与方差参数
总体正向传播训练框架:
$A^{l-1}$ -> $Z^{l}$ -> $\tilde{Z^{l}}$ -> $A^{l}$
正向传播过程:
$$
\begin{align}
& Z^{l} = W^{l}A^{l-1} + b^{l} \\
& \mu = \frac{1}{t}\sum_{i=1}^{t}z^{i}
& \sigma^{2} = \frac{1}{t}\sum_{i}(z^{i}-\mu)^{2}
& \tilde{Z^{l}} = \frac{Z^{l} - \mu }{\sqrt{ \sigma ^{2} + \epsilon}}
& \tilde{Z^{l}} = \beta ^{l}\tilde{Z^{l}} + \gamma ^{l}
& A^{l} = g^{l}(\tilde{Z^{l}})
\end{align}
$$
Notice: 由于我们对于整体训练对象进行了了正则化,所以 $b^{l}$ 作为偏置参数最终不会对结果有任何影响,所以我们可以直接将其删去或者默认设为 0
利用梯度下降更新 $d\beta$ 与 $d\gamma$ (也可采用 momentum 或 Adam 或 RMSprop)
$$
\begin{align}
\beta = \beta -\alpha d\beta
\gamma = \gamma -\alpha d\gamma
\end{align}
$$
当我们采用 mini-batch 训练时,由于我们并没有遍历整个数据集,所以不同 mini-batch 的归一化时采用的均值方差不同 -> 我们采用指数加权平均的方式来寻找这些参数的均值
$$
\begin{align}
& v_{\mu} = \beta v_{\mu} +(1-\beta)\theta_{\mu}
& v_{\sigma ^{2}} = \beta v_{\sigma ^{2}} + (1-\beta)\theta_{\sigma ^{2}}
\end{align}
$$
nn.BatchNorm2d(num_features)
在二分类问题中,通常我们的输出仅为 0 或 1,但是当我们在实际问题中需要分类的对象多于两个,那么我们就需要调整神经网络最后一层的输出函数,使其输出对于不同所分类的概率
Softmax 得名原因:相比于 hardmax 之间输出 hot-encoding 向量(直接将最大输出概率可能设为 1,其余均为 0)
在最后一层中,通过用指数函数对其中向量进行加权:
$$ a^{l} = \frac{e^{z^{l}}}{ \sum_{i=1}^{t}e^{z_{i}}} $$
Loss Function:
$$ \mathcal{L}(\hat{y},y) = -\sum_{i=1}^{t}y_{i}\ln(\hat{y_{i}}) $$
Cost Function:
$$ J = \frac{1}{m}\sum_{i=1}^{m}\mathcal{L}(\hat{y^{i}},y^{i}) $$
Derivative:
$$ dz^{L} = \hat{y} - y $$