李沐-动手学深度学习-softmax介绍

回归估计一个连续值

分类预测一个离散类别

1. softmax函数的解释:

Softmax从字面上来说,可以分成soft和max两个部分。max故名思议就是最大值的意思。Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。

hardmax最大的特点就是只选出其中一个最大的值,即非黑即白。但是往往在实际中这种方式是不合情理的,比如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章对于每个可能的文本类别的概率值(置信度),可以简单理解成属于对应类别的可信度。所以此时用到了soft的概念,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。

下面给出Softmax函数的定义(以第i个节点输出为例):

Softmax(z_{i})=\frac{e^{z_{i}}}{\sum_{c=1}^{C}e^{z_{i}}} ,其中 为第i个节点的输出值,C为输出节点的个数,即分类的类别个数。通过Softmax函数就可以将多分类的输出值转换为范围在[0, 1]和为1的概率分布。

引入指数函数对于Softmax函数是把双刃剑,即得到了优点也暴露出了缺点:

优点:指数函数曲线呈现递增趋势,可以将负值转化成为正值,最重要的是斜率逐渐增大,也就是说在x轴上一个很小的变化,可以导致y轴上很大的变化。这种函数曲线能够将输出的数值拉开距离。在深度学习中通常使用反向传播求解梯度进而使用梯度下降进行参数更新的过程,而指数函数在求导的时候比较方便。

缺点:

指数函数的曲线斜率逐渐增大虽然能够将输出值拉开距离,但是也带来了缺点,当 z_{i} 值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出。针对数值溢出有其对应的优化方法,将每一个输出值减去输出值中最大的值。当使用Softmax函数作为输出节点的激活函数的时候,一般使用交叉熵作为损失函数。由于Softmax函数的数值计算过程中,很容易因为输出节点的输出值比较大而发生数值溢出的现象,在计算交叉熵的时候也可能会出现数值溢出的问题。

2. Softmax函数求导

单个输出节点的二分类问题一般在输出节点上使用Sigmoid函数,拥有两个及其以上的输出节点的二分类或者多分类问题一般在输出节点上使用Softmax函数。

现在可以构建比较复杂的神经网络模型,最重要的原因之一得益于反向传播算法。反向传播算法从输出端也就是损失函数开始向输入端基于链式法则计算梯度,然后通过计算得到的梯度,应用梯度下降算法迭代更新待优化参数。

对于C个类别的分类问题,可以把输出结果定义为一个C维的向量zC=[z0,z1…zC]zC=[z0,z1…zC],其中,如C=3C=3可以认为输出结果是一个3维向量[2,3,4][2,3,4],但是我们需要的是概率,所以要使用Softmax把向量转换为概率,Softmax函数的定义如下:

李沐-动手学深度学习-softmax介绍_第1张图片

李沐-动手学深度学习-softmax介绍_第2张图片 

 2. 交叉熵损失函数

说起交叉熵损失函数「Cross Entropy Loss」,脑海中立马浮现出它的公式:

 在二分类问题模型:例如逻辑回归「Logistic Regression」、神经网络「Neural Network」等,真实样本的标签为 [0,1],分别表示负类和正类。模型的最后通常会经过一个 Sigmoid 函数,输出一个概率值,这个概率值反映了预测为正类的可能性:概率越大,可能性越大。

交叉熵常用来衡量两个概率的区别H(p,q)=\sum_{i}^{}-p_{i}log(q_{i})

将他作为损失,其梯度是真实概率和预测概率的区别

你可能感兴趣的:(深度学习,回归,人工智能)