(LXTML笔记)Neural Network

神经网络的话,向前计算是容易地,基本上就是矩阵的乘法加上一点点**函数的变换,所以这里不做笔记。

Backprop on NNet

下面对学习过程做一点笔记,backprop实际上就是偏导的链式法则
(LXTML笔记)Neural Network

我们考虑的是平方误差,即
(LXTML笔记)Neural Network

对于输出层,如下图绿框所示,我们对en关于第L层的权重做偏导
(LXTML笔记)Neural Network

对于中间的隐含层,如红色框所示做偏导,有暂时不知道ensj(l)是什么,暂时设为δj(l)

下面再来处理δj(l),如下图所示
(LXTML笔记)Neural Network

我们发现δj(l)需要由所有的δj(l+1)得到,这样的话,结合GD,我们可以给出NN的权重更新算法
(LXTML笔记)Neural Network
更新公式即

wij(l)=wij(l)ηenwij(l)=wij(l)ηxi(l1)δj(l),

有时候不能让权重Wij过大,这是因为这会导致tanh函数的结果基本上集中在1附近,所以我们需要对Ein
(LXTML笔记)Neural Network

做点正则化,比如容易想到的是(wij(l))2,不过似乎不是太好效果,往往使用下面这个标准化后的正则化条件。
(LXTML笔记)Neural Network

autoencoder预训练

与PLA一样,如果一开始给定了合适的初值的话,收敛也好性能也好时间也好都有可能有较好的提升,所以我们也可以对NN进行预训练
(LXTML笔记)Neural Network
即,首先仅仅依赖相近的两层,先将其权重预处理好,而不是random几个参数,
(LXTML笔记)Neural Network
基本思想是:

weight就代表了把上一层的输出的信息做一个转换,亦或者说做一个编码,然后传输给下一层。如果我们能够让下一层接收到编码之后的信息所代表的信息是和上一层是基本一样的话,我们认为这就是好的weight

即如下图所示,我们希望能训练处g(x)=x一个不动点变换,这个思想还是蛮新颖的,隐含层保留了特征信息,那么由这些特征信息理论上也应该容易还原原来的信息。
(LXTML笔记)Neural Network

可以采用平方误差,而输入则是{(xn,xn)}这样的形式,有时候如果要求更强一些,可以要求Wij1=Wji2,即解码器和编码器的权重是一样的,不过如何才能设置这个限制呢?还没做思考
(LXTML笔记)Neural Network

有的时候为了让权重更加strong,我们可以对数据{(xn,xn)}加入一些噪声,比如令(xn^=xn+noise),这样训练的话鲁棒性更好,这也属于一种regularization.
(LXTML笔记)Neural Network

课程后面对将所有**函数换成h(x)=x之后的情况进行了分析,直接变成了一个数值分析或者高等代数的习题2333(由此可以导出类似PCA的结果),这里不做赘述。可以查看这里