一、Sigmoid函数和Softmax函数是常用的激活函数,它们在神经网络中经常用于实现非线性映射。
-
Sigmoid函数:Sigmoid函数常用于二分类问题,它将输入的取值范围映射到一个介于0和1之间的输出。Sigmoid函数的公式是 f(x) = 1 / (1 + exp(-x)),其中exp(x)表示自然指数函数e的x次方。Sigmoid函数的输出可以看作是输入值的概率估计,适用于将输入映射到概率的情况。
-
Softmax函数:Softmax函数常用于多分类问题,它将输入的取值范围映射到一个概率分布上,使得所有概率的总和为1。Softmax函数的公式是 f(x_i) = exp(x_i) / (sum(exp(x_j))),其中x_i表示输入向量的第i个元素,sum(exp(x_j))表示所有输入向量元素的指数项之和。Softmax函数的输出可以看作是输入值对应不同类别的概率分布,适用于多分类问题。
总结来说,Sigmoid函数主要用于二分类问题,将输入映射到0到1之间的概率值;Softmax函数主要用于多分类问题,将输入映射到一个概率分布上。它们都能够将非线性的输入映射到一个可解释性强的输出。
二、问题讨论:
softmax到底有哪些作用?(来自知乎softmax到底有哪些作用? - 知乎)
- softmax除了使得网络输出更像是一个合法的概率分布还有什么作用?
- 为什么这种归一化要用softmax其它的归一化方式行不行? 例如[a,b] 归一化成[a^2/(a^2+b^2), b^2/(a^2+b^2)]
- 为什么一个分布在多次softmax后,每个值都会趋于相同? 例如[1,100]在大约10次softmax操作后会变成[0.5,0.5];[1,2,3,4]大约5次softmax操作后会变成[0.25,0.25,0.25,0.25]。 这是巧合还是因为softmax具有使得让某个分布熵增加的作用才让其作为归一化的操作?
来自苏剑林大佬的回答:
- 其实合法的概率分布也不是最终目的,最终目的是定义更合理的loss,最最终的目的则是定义更合理的梯度;
- 用其他方式当然可以,比如还有sparsemax等,但平方归一化可能不大好,因为 x2x^2 在实数范围内不是单调的,这解释原因又得联系到梯度了;至于为什么softmax最常用,大概是因为 exe^x 是能将任意实数映射到非负实数的最简单的、单调的、光滑的初等函数吧;
- 这是一个没什么实用价值的结果,因为对softmax的结果再次进行softmax没有什么物理意义。
三、再思考一下,神经网路常用的损失函数以及对应的应用场景
神经网络常用的损失函数有以下几种,每种损失函数都适用于不同的应用场景:
-
均方误差(Mean Squared Error, MSE):适用于回归问题,即预测连续值的问题。计算预测值与真实值之间的平方差,并取平均值作为损失值。
-
交叉熵损失(Cross Entropy Loss):适用于分类问题,即预测多个离散类别的问题。常用的交叉熵损失有二分类交叉熵(Binary Cross Entropy)和多分类交叉熵(Categorical Cross Entropy)。二分类交叉熵适用于两个类别的分类问题,多分类交叉熵适用于多个类别的分类问题。
-
负对数似然损失(Negative Log Likelihood, NLL):适用于概率预测问题,即给定输入条件下的概率预测。常用于文本生成、语言模型等任务。
-
KL散度损失(Kullback-Leibler Divergence, KLD):适用于模型优化时使用先验知识的情况,用于衡量两个概率分布之间的差异。
-
Hinge损失:适用于支持向量机(SVM)和最大间隔分类问题。
-
余弦相似度损失(Cosine Similarity Loss):适用于聚类和推荐系统等任务,用于衡量两个向量之间的余弦相似度。