改进神经网络学习方法-柔性最大值、L规范化方法以及其他技术
《Neural Networks and Deep Learning》 (Michael Nielsen) \text{(Michael Nielsen)} (Michael Nielsen)笔记 (四)
柔性最大值( softmax \text{softmax} softmax)
柔性最大值是为神经网络定义一种新式的输出层。开始是和 S S S型层一样,首先计算带权输入 z j L = ∑ k w j k L a k L − 1 + b j L z_{j}^{L}=\sum_{k} w_{j k}^{L} a_{k}^{L-1}+b_{j}^{L} zjL=∑kwjkLakL−1+bjL,而后通过 a j L = e z j L ∑ k e z k L a_{j}^{L}=\frac{e^{z_{j}^{L}}}{\sum_{k} e^{z_{k}^{L}}} ajL=∑kezkLezjL获取第 j j j个神经元的激活值 a j L a_{j}^{L} ajL
由 ∑ j a j L = ∑ j e z j L ∑ k e z k L = 1 \sum_{j} a_{j}^{L}=\frac{\sum_{j} e^{z_{j}^{L}}}{\sum_{k} e^{z_{k}^{L}}}=1 j∑ajL=∑kezkL∑jezjL=1且激活值都是正数,柔性最大值可以看做是一种概率分布。
柔性最大值的单调性:如果 j = k j=k j=k则 ∂ a j L ∂ z k L \frac{\partial a_{j}^{L} }{ \partial z_{k}^{L}} ∂zkL∂ajL为正, j ≠ k j \neq k j̸=k时为负,增加 z j L z_{j}^{L} zjL会提高相应的输出激活值 a j L a_{j}^{L} ajL并降低其他所有输出激活值。
学习缓慢问题:柔性最大层解决学习缓慢问题
对数似然函数( log-likelihood \text{log-likelihood} log-likelihood)代价函数
我们使用 x x x表示网络的训练输入, y y y表示对应的目标输出,关联这个训练输入的对数似然代价函数是 C ≡ − ln a y L C \equiv-\ln a_{y}^{L} C≡−lnayL对权重和偏置求偏导得: ∂ C ∂ w j k L = a k L − 1 ( a j L − y j ) \frac{\partial C}{\partial w_{j k}^{L}}=a_{k}^{L-1}\left(a_{j}^{L}-y_{j}\right) ∂wjkL∂C=akL−1(ajL−yj) ∂ C ∂ b j L = a j L − y j \frac{\partial C}{\partial b_{j}^{L}}=a_{j}^{L}-y_{j} ∂bjL∂C=ajL−yj偏导数的分析结果与交叉熵得到的类似,这些表达式确保我们不会遇到学习缓慢问题。
把一个具有对数似然代价的柔性最大值输出层,看作与一个具有交叉熵代价的 S S S型输出层非常相似,在实际应用场景中,两种方式的效果都不错。
柔性最大值加上对数似然的组合更加适用于那些需要将输出激活值解释作为概率的场景。
过度拟合和规范化
L2 \text{L2} L2规范化
L2 \text{L2} L2规范化的想法是增加一个额外的项到代价函数上,这个项叫做规范化项。规范化的交叉熵: C = − 1 n ∑ x j [ y j ln