softmax的log似然代价函数(公式求导)

        在人工神经网络(ANN)中,Softmax通常被用作输出层的激活函数。这不仅是因为它的效果好,而且因为它使得ANN的输出值更易于理解。同时,softmax配合log似然代价函数,其训练效果也要比采用二次代价函数的方式好。




1. softmax函数及其求导

        softmax的函数公式如下:



        中,表示第L层(通常是最后一层)第j个神经元的输入,表示第L层第j个神经元的输出,表示自然常数。注意看,表示了第L层所有神经元的输入之和。

        softmax函数最明显的特点在于:它把每个神经元的输入占当前层所有神经元输入之和的比值,当作该神经元的输出。这使得输出更容易被解释:神经元的输出值越大,则该神经元对应的类别是真实类别的可能性更高。

        另外,softmax不仅把神经元输出构造成概率分布,而且还起到了归一化的作用,适用于很多需要进行归一化处理的分类问题。

        由于softmax在ANN算法中的求导结果比较特别,分为两种情况。希望能帮助到正在学习此类算法的朋友们。求导过程如下所示:




2. softmax配合log似然代价函数训练ANN


        在上一篇博文“交叉熵代价函数”中讲到,二次代价函数在训练ANN时可能会导致训练速度变慢的问题。那就是,初始的输出值离真实值越远,训练速度就越慢。这个问题可以通过采用交叉熵代价函数来解决。其实,这个问题也可以采用另外一种方法解决,那就是采用softmax激活函数,并采用log似然代价函数(log-likelihood cost function)来解决。

        log似然代价函数的公式为:


        其中,表示第k个神经元的输出值,表示第k个神经元对应的真实值,取值为0或1。

        我们来简单理解一下这个代价函数的含义。在ANN中输入一个样本,那么只有一个神经元对应了该样本的正确类别;若这个神经元输出的概率值越高,则按照以上的代价函数公式,其产生的代价就越小;反之,则产生的代价就越高。

        为了检验softmax和这个代价函数也可以解决上述所说的训练速度变慢问题,接下来的重点就是推导ANN的权重w和偏置b的梯度公式。以偏置b为例:



        同理可得:



        从上述梯度公式可知,softmax函数配合log似然代价函数可以很好地训练ANN,不存在学习速度变慢的问题。










要求解softmax回归的导数,我们首先需要明确softmax函数的定义和softmax回归的目标函数。 1. softmax函数定义: 对于一个具有K个类别的输入向量z,softmax函数将其转化为一个概率分布向量p,其中每个元素表示属于对应类别的概率。softmax函数的表达式如下: p_i = exp(z_i) / (sum(exp(z_j))), 其中 i = 1,2,...,K 2. softmax回归的目标函数: softmax回归是一种多类别分类模型,它通过最大化训练数据集中观测样本的似然函数来进行训练。假设训练数据集包含N个样本,每个样本的输入为x,输出为对应的类别y。softmax回归的目标函数可以定义为: J(w,b) = -1/N * sum(log(p(y|x;w,b))), 其中 p(y|x;w,b) 是给定输入x时预测为类别y的概率,w和b分别是模型的权重和偏置。 现在我们来求解目标函数对权重 w 的导数: 需要使用链式法则来求解导数。首先,我们令 z = w * x + b,并对 z 求导数。 ∂z_i / ∂w_j = ∂(w_j * x + b_i) / ∂w_j = x_j 然后,我们计算 p_i 对 z_j 的导数。 ∂p_i / ∂z_j = (∂(exp(z_i) / (sum(exp(z_k)))) / ∂z_j 对于 i = j,导数为: ∂p_i / ∂z_j = (exp(z_i) * sum(exp(z_k)) - exp(z_i) * exp(z_j)) / (sum(exp(z_k)))^2 = exp(z_i) * (sum(exp(z_k)) - exp(z_j)) / (sum(exp(z_k)))^2 = p_i * (1 - p_j) 对于 i ≠ j,导数为: ∂p_i / ∂z_j = (-exp(z_i) * exp(z_j)) / (sum(exp(z_k)))^2 = -p_i * p_j 接下来,我们计算目标函数对 z_i 的导数。 ∂J / ∂z_i = (∂(-1/N * sum(log(p(y|x;w,b)))) / ∂z_i = -1/N * sum(∂(log(p(y|x;w,b)))) / ∂z_i 如果 y = i,则上式可以写为: ∂J / ∂z_i = -1/N * (1/p_i) * ∂p_i / ∂z_i = -1/N * (1/p_i) * p_i * (1 - p_i) = 1/N * (p_i - 1) 如果 y ≠ i,则上式可以写为: ∂J / ∂z_i = -1/N * (1/p_y) * ∂p_y / ∂z_i = 1/N * (-p_i * p_y) 最后,我们可以得到目标函数对权重 w_j 的导数: ∂J / ∂w_j = ∂J / ∂z_i * ∂z_i / ∂w_j = x_j * (1/N * (p_i - 1)), if y = i = x_j * (1/N * (-p_i)), if y ≠ i 综上所述,softmax回归的目标函数对权重 w 的导数为 ∂J / ∂w_j = x_j * (1/N * (p_i - 1)),其中 p_i 表示模型预测为类别 i 的概率。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值