神经网络基础理论

机器学习训练营——机器学习爱好者的*交流空间(入群联系qq:2279055353)

神经网络是什么?

神经网络(Neural Networks)专业术语,涵盖了一大类统计模型和学习算法。在这里,我们介绍最普遍使用的"vanilla"神经网络,有时也称单隐层后向传播网络,或者简称单层感知器(single layer perceptron).
一个神经网络,简单地说,就是一个非线性统计模型。具体地说,一个神经网络是一个两阶段回归或分类模型,也就是说,神经网络可以应用于回归或分类问题。典型的神经网络,用一个示意图表示如下:
神经网络基础理论
对于回归,通常只有一个因变量,即,神经网络的顶端只有一个输出变量 Y1Y_1. 对于K-类的分类问题,顶端有K个0-1型变量 Y1,Y2,,YKY_1, Y_2, \dots, Y_K.

中间层的导出特征 Zm(m=1,2,dots,M)Z_m (m=1,2,dots,M) 由输入 XX 的线性变换得到,然后目标变量 YkY_k 用一个 Z1,,ZMZ_1,\dots,Z_M 的线性组合的函数拟合。

Zm=σ(α0m+αmTX), m=1,2,,MZ_m=\sigma(\alpha_{0m}+\alpha_m^T X),\, m=1,2,\dots,M
Tk=β0k+βkTZ, k=1,2,,KT_k=\beta_{0k}+\beta_k^T Z,\, k=1,2,\dots,K
fk(X)=gk(T), k=1,2,,Kf_k(X)=g_k(T), \, k=1,2,\dots,K

这里,

Z=(Z1,Z2,,ZM), T=(T1,T2,,TK)Z=(Z_1, Z_2, \dots, Z_M)',\, T=(T_1, T_2, \dots, T_K)'
其中,**函数 σ()\sigma(\centerdot) 通常选择sigmoid函数,即
σ(v)=11+ev\sigma(v)=\dfrac{1}{1+e^{-v}}
输出函数 gk(T)g_k(T) 允许输出向量 TT 的最终变换。对于回归,通常选择 gk(T)=Tkg_k(T)=T_k; 而对于K-类分类,通常选择 gk(T)=eTkl=1KeTlg_k(T)=\dfrac{e^{T_k}}{\sum\limits_{l=1}^K e^{T_l}}.

在神经网络的中间层,ZmsZ_m's 被称作隐变量,因为它们不是直接观测得到的。我们可以把 ZZ 当作原始输入 XX 的基扩展,然后,使用这些变换作为输入,神经网络变成了一个标准的线性模型。这个过程里的参数是通过数据估计来的。

注意到,如果 σ()\sigma(\centerdot) 是恒等函数,那么整个模型退化成一个线性模型。从这个角度看,神经网络可以视为线性模型的推广。通过引入非线性变换 σ\sigma, 它扩展了线性模型。

拟合神经网络

神经网络的未知参数通常称为权(weights), 我们通过训练数据拟合它们。不妨记权集 θ\theta, 它由

{α0m,αm; m=1,2,,M}\{\alpha_{0m}, \alpha_m; \, m=1,2,\dots,M\}
β0k,βk; k=1,2,,K\beta_{0k}, \beta_k;\, k=1,2,\dots,K

对于回归,我们使用误差平方和作为拟合测度(损失函数)
R(θ)=k=1Ki=1N(yikfk(xi))2R(\theta)=\sum\limits_{k=1}^K \sum\limits_{i=1}^N (y_{ik}-f_k(x_i))^2
对于分类,我们使用平方误差或交叉熵
R(θ)=k=1Ki=1Nyiklogfk(xi)R(\theta)=-\sum\limits_{k=1}^K \sum\limits_{i=1}^N y_{ik}\log f_k(x_i)
则,对应的分类器 G(x)=argmaxkfk(x)G(x)=\arg\max\limits_k f_k(x).

所有的参数均由最大似然法估计得到。通常的全局最小 R(θ)R(\theta), 可能是参数的过度拟合解。这样,就需要加一个惩罚项,或者间接地设置终止。最小化 R(θ)R(\theta) 的通常方法是梯度下降(Gradient Descent), 也称为向后传播法。

向后传播算法

下面详细阐述向后传播在平方误差损失下的数学推导。令 zmi=σ(α0m+αmTxi)z_{mi}=\sigma(\alpha_{0m}+\alpha_m^T x_i), zi=(z1i,z2i,,zMi)z_i=(z_{1i},z_{2i},\dots,z_{Mi})'. 则
神经网络基础理论
神经网络基础理论

  • forward pass

固定当前权(参数), 使用(5)计算预测值 f^k(xi)\hat{f}_k (x_i)

  • backward pass

计算误差 δki\delta_{ki}, 使用(5)计算 smis_{mi}. 然后,代入(4)计算梯度。再根据(3)升级权,回到上步。迭代进行,直到达到收敛准则。

值得注意的问题

训练一个神经网络时,模型经常出现过度参数化,优化问题是非凸的、不稳定。在这里,我们总结几个值得注意的问题。

初始值

通常,权值选择0附近的随机数,因此,模型开始时接近线性,随着权增加,变成了非线性。

过度拟合

神经网络在训练时经常包括太多的权,因此倾向过度拟合数据。这时,一个验证集对于判断迭代何时停止是有用的。

输入规模

输入变量的数量会对最终的解质量产生影响。开始时,最好归一化所有输入变量(0均值、1标准差). 这样,使用标准化的输入,权初始值典型地在[-0.7, 0.7]内均匀取值。

隐单元与隐层

一般来讲,隐层变量数倾向于多好,数量太少会使模型捕捉数据里的非线性关系变得困难。随着输入变量数与训练样本数的增加,隐单元数典型的在5~100之间。也可以使用交叉验证的方法确定最优的隐单元数。而隐层数的选择,主要受背景知识和试验的影响。

更多精彩内容请关注微信公众号“统计学习与大数据