《MATLAB Deep Learning》Ch4 & Ch5 学习笔记

Ch4 - Neural Network and Classification

Binary Classification

二分类问题只需要一个输出层结点,因为我们只需指定一个阈值 threshold 就可以把结果分为两类。

当我们使用 Sigmoid **函数 + 交叉熵损失函数时,输出层误差有着十分简洁的形式。详细推导可以参考 为什么sigmoid**函数,使用交叉熵损失函数更好
《MATLAB Deep Learning》Ch4 & Ch5 学习笔记

Multiclass Classification

在多分类问题中,我们通常使输出层的结点数目与分类数目相一致。

一个有效的策略是使用 one-hot 编码,这时每一个输出层结点都被映射到类向量的其中一个元素。
《MATLAB Deep Learning》Ch4 & Ch5 学习笔记
我们引入 Softmax 函数作为**函数,它不仅考虑了输入数据的加权和,也考虑到了其他输出结点的值。也就是说,对比 Sigmoid 函数,Softmax 函数考虑到了输出结点之间的相对量级(relative magnitudes)。
《MATLAB Deep Learning》Ch4 & Ch5 学习笔记
Softmax **函数 + 交叉熵损失函数的误差推导可以参考 简单易懂的softmax交叉熵损失函数求导。注意这里的误差计算虽然看起来跟前面的 Sigmoid + 交叉熵 一样,但这里的 delta 和 e 是向量(之前的是标量),另外这样的简洁形式其实是 one-hot 编码带来的。
《MATLAB Deep Learning》Ch4 & Ch5 学习笔记

Ch5 - Deep Learning

在使用后向传播算法时,添加额外的隐藏层反而常常导致较差的表现,深度学习为我们提供了解决方案。实际上,深度学习并没有任何关键技术上的革新,它带来的是一系列细微的技术改良(technical improvements)的集合。

更深的网络反而表现更差的原因是网络没有得到很好地训练,后向传播算法在训练过程中存在着以下三个问题:Vanishing gradient, Over-fitting, Computational load.

解决梯度弥散/消失(Vanishing gradient )的一项代表性技术是使用 Rectified Linear Unit (ReLU) **函数。
《MATLAB Deep Learning》Ch4 & Ch5 学习笔记
Sigmoid **函数将输出值限定在一定的范围内,而 Relu **函数没有此限制。另外,x > 0 时,导数为 1,可见此时它能将误差无衰减地向前传递。
《MATLAB Deep Learning》Ch4 & Ch5 学习笔记
解决过拟合问题的一项代表性技术是 Dropout(随机失活),此外,添加正则项和使用更大的数据集也可有效避免模型过拟合。

最后,由于高性能硬件产品(GPU)的发展和其他一些算法(Batch normalization,批归一化)的发现,深度学习的计算负荷(computational load)也被减轻到了一个可观的水平。