【自己笔记】逻辑回归代价函数导数求解过程,softmax loss

 

1)梯度下降θθ的更新过程,走梯度方向的反方向: 

 

 

 

 

Sigmoid函数求导:

函数:f(z) = 1 / (1 + exp( − z))

导数:f(z)' = f(z)(1 − f(z))

 

求导过程如下:

 

 

softmax的损失函数:

 

 

对于给定的测试输入 \textstyle x,我们想用假设函数针对每一个类别j估算出概率值 \textstyle p(y=j | x)。也就是说,我们想估计 \textstyle x 的每一种分类结果出现的概率。因此,我们的假设函数将要输出一个 \textstyle k 维的向量(向量元素的和为1)来表示这 \textstyle k 个估计的概率值。 具体地说,我们的假设函数 \textstyle h_{\theta}(x) 形式如下:

\begin{align}h_\theta(x^{(i)}) =\begin{bmatrix}p(y^{(i)} = 1 | x^{(i)}; \theta) \\p(y^{(i)} = 2 | x^{(i)}; \theta) \\\vdots \\p(y^{(i)} = k | x^{(i)}; \theta)\end{bmatrix}=\frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }\begin{bmatrix}e^{ \theta_1^T x^{(i)} } \\e^{ \theta_2^T x^{(i)} } \\\vdots \\e^{ \theta_k^T x^{(i)} } \\\end{bmatrix}\end{align}

 

其中 \theta_1, \theta_2, \ldots, \theta_k \in \Re^{n+1} 是模型的参数。请注意 \frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }这一项对概率分布进行归一化,使得所有概率之和为 1 

代价函数

现在我们来介绍 softmax 回归算法的代价函数。在下面的公式中,\textstyle 1\{\cdot\} 是示性函数,其取值规则为:

 值为真的表达式 

, \textstyle 1\{​ 值为假的表达式 \textstyle \}=0。举例来说,表达式 \textstyle 1\{2+2=4\} 的值为1 ,\textstyle 1\{1+1=5\}的值为 0。我们的代价函数为:

\begin{align}J(\theta) = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k}  1\left\{y^{(i)} = j\right\} \log \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)} }}\right]\end{align}


值得注意的是,上述公式是logistic回归代价函数的推广。logistic回归代价函数可以改为:

\begin{align}J(\theta) &= -\frac{1}{m} \left[ \sum_{i=1}^m   (1-y^{(i)}) \log (1-h_\theta(x^{(i)})) + y^{(i)} \log h_\theta(x^{(i)}) \right] \\&= - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=0}^{1} 1\left\{y^{(i)} = j\right\} \log p(y^{(i)} = j | x^{(i)} ; \theta) \right]\end{align}


可以看到,Softmax代价函数与logistic 代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的 \textstyle k 个可能值进行了累加。注意在Softmax回归中将 \textstyle x 分类为类别 \textstyle j 的概率为:

p(y^{(i)} = j | x^{(i)} ; \theta) = \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)}} }.


对于 \textstyle J(\theta) 的最小化问题,目前还没有闭式解法。因此,我们使用迭代的优化算法(例如梯度下降法,或 L-BFGS)。经过求导,我们得到梯度公式如下:

\begin{align}\nabla_{\theta_j} J(\theta) = - \frac{1}{m} \sum_{i=1}^{m}{ \left[ x^{(i)} \left( 1\{ y^{(i)} = j\}  - p(y^{(i)} = j | x^{(i)}; \theta) \right) \right]  }\end{align}


让我们来回顾一下符号 "\textstyle \nabla_{\theta_j}" 的含义。\textstyle \nabla_{\theta_j} J(\theta) 本身是一个向量,它的第 \textstyle l 个元素 \textstyle \frac{\partial J(\theta)}{\partial \theta_{jl}} 是 \textstyle J(\theta)\textstyle \theta_j 的第 \textstyle l 个分量的偏导数。


有了上面的偏导数公式以后,我们就可以将它代入到梯度下降法等算法中,来最小化 \textstyle J(\theta)。 例如,在梯度下降法的标准实现中,每一次迭代需要进行如下更新: \textstyle \theta_j := \theta_j - \alpha \nabla_{\theta_j} J(\theta)(\textstyle j=1,\ldots,k)。

 

其中 \theta_1, \theta_2, \ldots, \theta_k \in \Re^{n+1} 是模型的参数。请注意 \frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }这一项对概率分布进行归一化,使得所有概率之和为 1 

 

1)线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。 
2)线性回归要求因变量是连续性数值变量,而logistic回归要求因变量是分类型变量。 
3)线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系 
4)logistic回归是分析因变量取某个值的概率与自变量的关系,而线性回归是直接分析因变量与自变量的关系

softmax is a generalization of logistic function that “squashes”(maps) a K-dimensional vector z of arbitrary real values to a K-dimensional vector σ(z) of real values in the range (0, 1) that add up to 1.

sigmoid将一个real value映射到(0,1)的区间,用来做二分类。

而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。

二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题

softmax是sigmoid的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。具体地说,当 k=2 时,softmax 回归的假设函数为:

利用softmax回归参数冗余的特点,从两个参数向量中都减去向量θ1 ,得到:

最后,用 θ′ 来表示 θ2−θ1,上述公式可以表示为 softmax 回归器预测其中一个类别的概率为

另一个类别概率的为

这与 logistic回归是一致的。

softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布
  
多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。

 

 LR 损失函数为什么用极大似然函数?

  1. 因为我们想要让 每一个 样本的预测都要得到最大的概率, 
    即将所有的样本预测后的概率进行相乘都最大,也就是极大似然函数.

  2. 对极大似然函数取对数以后相当于对数损失函数, 
    由上面 梯度更新 的公式可以看出, 
    对数损失函数的训练求解参数的速度是比较快的, 
    而且更新速度只和x,y有关,比较的稳定,

  3. 为什么不用平方损失函数 
    如果使用平方损失函数,梯度更新的速度会和 sigmod 函数的梯度相关,sigmod 函数在定义域内的梯度都不大于0.25,导致训练速度会非常慢。 
    而且平方损失会导致损失函数是 theta 的非凸函数,不利于求解,因为非凸函数存在很多局部最优解

 

均方误差和交叉熵损失函数比较

一.前言

 

在做神经网络的训练学习过程中,一开始,经常是喜欢用二次代价函数来做损失函数,因为比较通俗易懂,后面在大部分的项目实践中却很少用到二次代价函数作为损失函数,而是用交叉熵作为损失函数。为什么?一直在思考这个问题,这两者有什么区别,那个更好?下面通过数学的角度来解释下。

 

思考:

1.我们希望我们损失函数能够做到,当我们预测的值跟目标值越远时,在修改参数时候,减去一个更大的值,做到更加快速的下降。

2.哪个函数更不容易陷入局部最优解

 

二.两种代价函数的表达式

 

二次代价损失函数:

交叉熵损失函数:

针对二分类来说,其中:

 

ai第Xi个样本经过前向传播之后到达最后一个节点的值

 

三.收敛速度比较

 

两个函数反向传播梯度比较

 

1.二次代价函数

为了方便只取一个样本,那么损失为:

那么w,b的梯度为:

 

 

2.交叉熵

为了方便只取一个样本,损失为:

 

计算w,b的梯度:

 

 

 

分析和结论

 

由此可看出,在做后向传播时

1.对于square mean在更新w,b时候,w,b的梯度跟激活函数的梯度成正比,激活函数梯度越大,w,b调整就越快,训练收敛就越快,但是Simoid函数在值非常高时候,梯度是很小的,比较平缓。

2.对于cross entropy在更新w,b时候,w,b的梯度跟激活函数的梯度没有关系了,bz已经表抵消掉了,其中bz-y表示的是预测值跟实际值差距,如果差距越大,那么w,b调整就越快,收敛就越快。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值