深度学习入门—理论杂谈(2)

前言
当我们对某些事情出现严重错误时,我们人类往往学得最快。但是人工神经元在严重错误的情况下学习是很困难的。更重要的是,事实证明,这种行为不仅发生在简单模型中,而且还发生在更一般的网络中。为什么学习这么慢?我们能找到避免这种放缓的方法吗?
一、交叉熵成本函数
为了解决在异常情况下,二次成本函数(即基于最小二乘法的损失函数)学习的慢的问题,引入了交叉熵成本损失函数。
首先,我们二话不说,先放出交叉熵的公式:
在这里插入图片描述
以及J(θ)对参数θ的偏导数(用于诸如梯度下降法等优化算法的参数更新),如下:
在这里插入图片描述
这里就不详细证明了,若有兴趣可参考这篇不错的博客,证明的非常棒:https://blog.csdn.net/jasonzzj/article/details/52017438
那么问题又来了,我们应该什么时候使用二次成本函数,什么时候使用交叉熵成本函数呢?一句话结论:**当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢。**不过你也许会问,数中不带σ′(z)项的函数有无数种,怎么就想到用交叉熵函数?这自然是有来头的,更深入的讨论就不写了,少年请自行了解。
二、softmax激活函数
上面我们提到了交叉熵函数可以解决学习速率放缓的问题,softmax函数是另外一种也可以解决学习速率放缓问题的方式。它是一种与sigmoid函数类似的激活函数,可以形成输出的概率分布。在人工神经网络(ANN)中,Softmax通常被用作输出层的激活函数。这不仅是因为它的效果好,而且因为它使得ANN的输出值更易于理解。同时,softmax配合log似然代价函数,其训练效果也要比采用二次代价函数的方式好。softmax函数公式如下:
在这里插入图片描述
深度学习入门—理论杂谈(2)_第1张图片
softmax函数最明显的特点在于:它把每个神经元的输入占当前层所有神经元输入之和的比值,当作该神经元的输出。这使得输出更容易被解释:神经元的输出值越大,则该神经元对应的类别是真实类别的可能性更高。
另外,softmax不仅把神经元输出构造成概率分布,而且还起到了归一化的作用,适用于很多需要进行归一化处理的分类问题。

sigmoid函数极其导数我们都比较熟悉了,那么softmax的导数是怎么样的呢? 由于softmax在ANN算法中的求导结果比较特别,分为两种情况。希望能帮助到正在学习此类算法的朋友们。求导过程如下所示:
深度学习入门—理论杂谈(2)_第2张图片
深度学习入门—理论杂谈(2)_第3张图片
为了检验softmax和这个代价函数也可以解决上述所说的训练速度变慢问题,接下来的重点就是推导ANN的权重w和偏置b的梯度公式。以偏置b为例:
深度学习入门—理论杂谈(2)_第4张图片
深度学习入门—理论杂谈(2)_第5张图片

你可能感兴趣的:(深度学习)