总的来说,就是一个线性组合再加上一个Activation Function激活函数。激活函数模拟了生物神经元中电位的相关机能。(注:虽然是模仿生物神经元的结构,但实际上完全不同,生物神经中传递的是脉冲序列,而非一个不包含时间的模拟值,参考https://neurophysics.ucsd.edu/courses/physics_171/annurev.neuro.28.061604.135703.pdf)
Binary Softmax classifier:对于一个二分类问题,可以只用一个神经元,输出直接定义为某一分类的概率。
Regularization interpretation:正则化可以理解为神经元的“遗忘”,因为它驱使W接近0。
参考Wiki可以看到很多的激活函数(https://en.wikipedia.org/wiki/Activation_function)。
Sigmoid(Logistic):上下限分别是1和0。由于在接近上下限时,导数趋于0,所以在计算梯度时,梯度会很小,在多层网络中,反向传播还会叠加这一影响。另外,它不是zero-centered而是恒正的,那么在计算参数梯度时,会导致梯度的所有元素全正或全负,不过当把batch中的梯度加在一起,还是能够出现不同的正负号。
Tanh:形状类似Sigmoid,但是是zero-centered。
ReLU:非常常用。收敛快,计算简单。但容易不可逆的死掉:当一个大的梯度反向传播通过ReLU并更新了W,可能导致ReLU的输入始终为负值,由于此处导数为0,W就无法再被更新,于是就不可恢复的死掉了。
Leaky ReLU:负值的部分有一定斜率,所以有可能恢复。同时,负值部分的斜率可以作为一个可更新的参数,参考PReLU(https://arxiv.org/abs/1502.01852),但此方法的泛用性不明。
Maxout:与其他激活函数不同,不是单值输入,而是max(w1 x + b1, w2 x + b2 , …)。
原文的建议:先试ReLU,小心learning rate和神经元死掉;如果不行试试ReLU的变种或Maxout;最后可以试Tanh但别用Sigmoid。
【?】最近好像出了一个叫Swish的激活函数,很神秘(https://arxiv.org/abs/1710.05941)。
神经网络由输入层,若干隐藏层和输出层构成。典型的层类型是全连接层。在说层数的时候不计输入层。输出层一般不用激活函数。网络的大小由神经元数或参数数衡量,现代的卷积网络大致有1亿的参数和10-20层。
任何连续函数可以用神经网络来近似。
It turnsout that Neural Networks with at least one hidden layer are universalapproximators.(see https://www.dartmouth.edu/~gvc/Cybenko_MCSS.pdf)
Deep : 3层网络往往比2层网络表现好,但3层以上就变化不大了。但在卷积网络中,深度变得很重要,往往需要至少10层可学习的层,原因可能在于图像包含的层级结构。
网络规模越大,表达能力越强。
表达能力强的网络容易把噪声也学习了,即overfitting,如图5的20神经元网络。
但是,不应为防止overfitting而选择减小规模。防止overfitting有许多其他方法:加入输入噪声、正则化、dropout等。且,小规模网络拥有的minima少而loss高,大规模网络minima多但loss小,即大规模网络的收敛更稳定。下图为正则化对过拟合的抑制作用。