介绍神经网络的基本概念以及Backprop的推导。
输入为x, 首先对x做一个线性变换到s,然后对s做(通常是非线性的)变换,作为下一层的输入。如果对s也是线性的,那整个网络就是线性的,就不需要那么多层了。
对 s 经常使用的一个是双曲余弦的变换tanh
在离原点比较远的地方,它比较像阶梯函数,在接近原点的地方,接近线性函数。
网络的计算过程
可以分两步看,一个是算score,一个是做transform.
如何学习网络中的权重呢?
学习的最终目标仍然是让Ein最小,Ein可以看做是关于全部的w_ij的函数,使用梯度下降法对w_ij进行迭代。
如何计算
这里的关键一点是对s_j的偏导可以由后一层的所有s_k的偏导得来。
所以对w_ij的更新是从后向前进行的,叫做backpropagation
NN的最优化问题,首先不是凸优化,另外不同的初始值会让结果收敛在不同的局部最优处,对初值是比较敏感的。
如果w_ij比较大,tanh函数就会在比较靠近+-1的地方,这时候梯度变化非常小,那么更新很缓慢。
NN的VC维大致等于神经元乘以权重的个数.
只要神经元个数足够多,就能拟合任何函数,当然也会overfit.
NN的正则化
L1正则不可微,通常选用L2正则,L2是一种weight decay的方法,通常会对大的weight进行更大的shrink,小的weight进行小的shrink。这里希望能达到L1特征稀疏的效果,就采用了一种 scaled L2,在小的weight上也进行一个中等的shrink,最后这些小的weight就会消失掉。
另外一个正则方法是 early stopping. 进行GD的步数可以看做vc维的一个反映。可以使用validation来选择走多少步。
所有和GD有关的算法都能使用early stopping.