deepleanrningai深度学习笔记

中文课程教案

第一门课 神经网络和深度学习(Neural Networks and Deep Learning)

激活函数

如果不使用激活函数或者使用线性激活函数,那么NN的效果只是一个线性模型,可以和LR等价

tanh在各种场景下一般都优于sigmoid,因此除了在而分类问题的输出层上使用sigmoid外,隐藏层基本都应该选择tanh而非sigmoid

Relu是最常用的激活函数,在不确定使用何种类型激活函数的情况下,可以优先选择Relu或者leaky relu(一般效果更好但是很少用,可能的原因或许是Apart from efficiency, ReLUs have sparse activations, for whatever that’s worth.)。
$$
Relu: g(z) = \max(0, z) \\
Leaky Relu: g(z) = \max(\alpha z, z)
$$

sigmoid和tanh的导数:
$$
\frac{\mathrm{d}\sigma(z)}{\mathrm{d}z} = \sigma(z)(1-\sigma(z)) \\
\frac{\mathrm{d}\tanh z}{\mathrm{d}z} = 1-(\tanh z)^2
$$
可以看到,这两个函数的导数都只和函数自身的取值有关,因此非常方便计算!但是需要注意他们存在饱和区。

参数初始化

如果将参数全部初始化为0,那么就会存在神经元之间的对称问题(symmetry breaking problem),同层的神经元一致变化,从而优化无效,没层其实只有一个神经元的效果。

一般采用随机初始化,再乘以一个很小的值。因为如果权重过大,那么一旦使用sigmoid或者tanh激活函数,很可能激活值落在饱和区域,从而使得梯度下降学习缓慢。

神经网络搭建

多隐藏层,单层少隐藏单元的深层神经网络实现一个复杂函数拟合需要的隐藏单元数量指数级小于少隐藏层,单层多隐藏单元的情况。

第二门课 改善深层神经网络:超参数调试、正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)

L2正则化

L2正则化会导致参数绝对值变小,接近0。从而会导致激活函数的输入也会非常小。考虑一个非常强的正则化要求(正则化系数极大),激活函数的输入值将集中在0的小邻域内,从而激活函数在该邻域内可以视为线性的。故而整个神经网络退化为线性模型,复杂度大大降低,不再有能力拟合非线性函数。

dropout

dropout方法是在训练过程中针对神经元引入了随机失活的处理。从而使得权重不会集中到个别的神经元上(因为随机失活的缘故,不会有机会形成这样的强势神经元)。从而可以起到类似于l2正则化的权重衰减效果。

[TODO]why?L2正则化与dropout的区别:L2对不同权重的衰减是不同的,它取决于激活函数倍增的大小。dropout更适用于不同的输入范围。

正则化方法是为了应对过拟合。因此并不应该一上来进行正则化,对于dropout尤其如此。因为dropout每轮迭代的随机失活会导致代价函数不再被明确定义,从而难以检查梯度下降的性能。