Questions tagged «softmax»

归一化指数函数,该函数可以转换数值向量,使其所有条目都变为0到1之间,并且总和为1。它通常用作执行分类任务的神经网络的最后一层。


6
使用Softmax /交叉熵进行反向传播
我试图了解反向传播如何用于softmax /交叉熵输出层。 交叉熵误差函数为 E(t,o)=−∑jtjlogojE(t,o)=−∑jtjlog⁡ojE(t,o)=-\sum_j t_j \log o_j 分别以和为目标,并在神经元处输出。总和在输出层的每个神经元上。本身是softmax函数的结果:tttooojjjojojo_j oj=softmax(zj)=ezj∑jezjoj=softmax(zj)=ezj∑jezjo_j=softmax(z_j)=\frac{e^{z_j}}{\sum_j e^{z_j}} 同样,总和在输出层的每个神经元上,是神经元的输入:zjzjz_jjjj zj=∑iwijoi+bzj=∑iwijoi+bz_j=\sum_i w_{ij}o_i+b 那是前一层中所有神经元的总和,其对应的输出为,权重朝向神经元加上偏差。oioio_iwijwijw_{ij}jjjbbb 现在,要更新连接输出层中的神经元和上一层中的神经元的权重,我需要使用链式规则来计算误差函数的偏导数:wijwijw_{ij}jjjiii ∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij\frac{\partial E} {\partial w_{ij}}=\frac{\partial E} {\partial o_j} \frac{\partial o_j} {\partial z_{j}} \frac{\partial z_j} {\partial w_{ij}} 用作为神经元的输入。zjzjz_jjjj 最后一个词很简单。由于和之间只有一个权重,因此导数为:iiijjj ∂zj∂wij=oi∂zj∂wij=oi\frac{\partial z_j} {\partial w_{ij}}=o_i 第一项是关于输出的误差函数的:ojojo_j ∂E∂oj=−tjoj∂E∂oj=−tjoj\frac{\partial E} {\partial o_j} = \frac{-t_j}{o_j} 中间项是softmax函数相对于其输入更难:zjzjz_j ∂oj∂zj=∂∂zjezj∑jezj∂oj∂zj=∂∂zjezj∑jezj\frac{\partial o_j} {\partial z_{j}}=\frac{\partial} {\partial z_{j}} …

1
输出层中的交叉熵或对数似然
我阅读了此页面:http : //neuralnetworksanddeeplearning.com/chap3.html 它说具有交叉熵的S形输出层与具有对数似然的softmax输出层非常相似。 如果我在输出层中使用具有对数似然的S型或具有交叉熵的softmax会发生什么?可以吗 因为我看到交叉熵(eq.57)之间的方程式几乎没有区别: C=−1n∑x(ylna+(1−y)ln(1−a))C=−1n∑x(yln⁡a+(1−y)ln⁡(1−a))C = -\frac{1}{n} \sum\limits_x (y \ln a + (1-y) \ln (1-a)) 和对数似然(eq.80): C=−1n∑x(lnaLy)C=−1n∑x(ln⁡ayL)C =-\frac{1}{n} \sum\limits_x(\ln a^L_y)

4
为什么对于深度学习模型,softmax输出不是一个好的不确定性度量?
我已经在卷积神经网络(CNN)上工作了一段时间,主要是用于语义分割/实例分割的图像数据。我经常将网络输出的softmax可视化为“热图”,以查看特定类别的每个像素激活的数量。我将低激活率解释为“不确定” /“不确定”,将高激活率解释为“某些” /“自信”的预测。基本上这意味着解释SOFTMAX输出(值的范围内)作为模型的概率或(未)确定性量度。(0 ,1 )(0,1个)(0,1) (例如,我已经解释了在其像素上平均具有低softmax激活的对象/区域,这样CNN很难检测到,因此CNN对于预测这种对象“不确定”。) 在我看来,这通常是有效的,将额外的“不确定”区域样本添加到训练结果中可以改善这些结果。但是,我现在从不同方面经常听到,使用/解释softmax输出作为(不确定性)度量不是一个好主意,并且通常不鼓励这样做。为什么? 编辑:为了澄清我在这里要问的问题,到目前为止,我将在回答这个问题时详细阐述我的见解。但是,以下所有论点都没有向我说明**为什么它通常是个坏主意**,正如同事,主管反复说明的那样,例如“ 1.5” 在分类模型中,在管道末端(softmax输出)获得的概率向量通常被错误地解释为模型置信度 或在“背景”部分中: 尽管将卷积神经网络的最终softmax层给出的值解释为置信度分数可能很诱人,但我们需要注意不要过多地阅读它。 上面的资料源认为将softmax输出用作不确定性度量是不好的,原因是: 对真实图像的不可察觉的扰动可以将深层网络的softmax输出更改为任意值 这意味着softmax输出对于“不可察觉的扰动”并不稳健,因此它的输出不能用作概率。 另一篇论文提到“ softmax输出=置信度”的想法,并认为通过这种直觉网络可以很容易地被愚弄,从而产生“无法识别图像的高置信度输出”。 (...)与特定类别相对应的区域(在输入域中)可能比该类别的训练示例所占用的该区域中的空间大得多。结果是,图像可能位于分配给某个类别的区域内,因此在softmax输出中被分类为具有较大的峰值,而仍然与训练集中该类别中自然出现的图像相距甚远。 这意味着与训练数据相距甚远的数据永远不应获得很高的置信度,因为模型“无法”确定它(因为它从未见过)。 但是:这不是简单地质疑整个NN的泛化特性吗?即,具有softmax损失的NN不能很好地推广到(1)“无法察觉的扰动”或(2)远离训练数据的输入数据样本,例如无法识别的图像。 按照这种推理,我仍然不明白,为什么在实践中,没有经过抽象和人为改变的数据与训练数据(即大多数“真实”应用程序)相比,将softmax输出解释为“伪概率”是一个不好的选择理念。毕竟,它们似乎很好地代表了我的模型所确定的内容,即使它是不正确的(在这种情况下,我需要修复我的模型)。而且模型不确定性是否总是“仅”为近似值?


1
如何设置神经网络输出序数数据?
我设置了神经网络来预测输出变量为序数的事物。我将在下面使用三个可能的输出A <B <C进行描述。 很明显,如何使用神经网络输出分类数据:输出只是最后一个(通常是完全连接的)层的softmax,每个类别一个,而预测类别是最大输出值的类别(这是许多流行型号的默认设置)。我一直在使用相同的顺序值设置。但是,在这种情况下,输出通常没有意义,例如,A和C的网络输出为高,而B的网络为低:这对于序数值是不合理的。 我对此有一个想法,即根据输出与A的1 0 0,B的1 1 0和C的1 1 1进行比较来计算损耗。确切的阈值可以稍后使用另一个分类器(例如,贝叶斯(Bayesian))进行调整。 ),但这似乎捕获了输入排序的基本思想,而没有规定任何特定的间隔比例。 解决此问题的标准方法是什么?是否有任何研究或参考文献描述了不同方法的利弊?

1
插入符glmnet与cv.glmnet
在glmnet内部caret使用搜索最佳lambda和cv.glmnet执行相同任务的比较中似乎有很多困惑。 提出了许多问题,例如: 分类模型train.glmnet与cv.glmnet? 在插入符号中使用glmnet的正确方法是什么? 使用`caret`交叉验证`glmnet` 但是没有给出答案,这可能是由于问题的可重复性。在第一个问题之后,我给出了一个非常相似的示例,但确实存在相同的问题:为什么估计的lambda如此不同? library(caret) library(glmnet) set.seed(849) training <- twoClassSim(50, linearVars = 2) set.seed(849) testing <- twoClassSim(500, linearVars = 2) trainX <- training[, -ncol(training)] testX <- testing[, -ncol(testing)] trainY <- training$Class # Using glmnet to directly perform CV set.seed(849) cvob1=cv.glmnet(x=as.matrix(trainX),y=trainY,family="binomial",alpha=1, type.measure="auc", nfolds = 3,lambda = seq(0.001,0.1,by = 0.001),standardize=FALSE) …


2
交叉熵损失函数的不同定义
我从使用Neuronetworksanddeeplearning点com教程开始学习神经网络。特别是在第三章中,有一节关于交叉熵函数,并将交叉熵损失定义为: C= - 1ñ∑X∑Ĵ(yĴln一种大号Ĵ+ (1 − yĴ)ln(1 − a大号Ĵ))C=-1个ñ∑X∑Ĵ(ÿĴln⁡一种Ĵ大号+(1个-ÿĴ)ln⁡(1个-一种Ĵ大号))C = -\frac{1}{n} \sum\limits_x \sum\limits_j (y_j \ln a^L_j + (1-y_j) \ln (1 - a^L_j)) 但是,阅读Tensorflow简介后,交叉熵损失定义为: C= - 1ñ∑X∑Ĵ(yĴln一种大号Ĵ)C=-1个ñ∑X∑Ĵ(ÿĴln⁡一种Ĵ大号)C = -\frac{1}{n} \sum\limits_x \sum\limits_j (y_j \ln a^L_j)(使用与上面相同的符号时) 然后四处搜寻以查找发生了什么事情,我发现了另一组注释:(https://cs231n.github.io/linear-classify/#softmax-classifier),它使用了完全不同的交叉熵损失定义,尽管这时间用于softmax分类器,而不是神经网络。 有人可以告诉我这是怎么回事吗?为什么会有差异。人们将交叉熵损失定义为什么?是否有一些总体原则?

2
ML中的softmax函数与热力学中的玻耳兹曼分布之间的联系有多深?
softmax函数通常在神经网络中用于将实数转换为概率,它与Boltzmann分布(在热力学中在给定温度T时,在整个能量平衡中,处于热平衡状态的粒子的概率分布)具有相同的函数。 我可以看到一些明显的启发性原因,这是可行的: 无论输入值是否为负,softmax都会输出正值,总和为1。 它总是可区分的,对于反向传播很方便。 它具有一个“温度”参数,用于控制网络对较小值的宽容度(当T很大时,所有结果均可能发生,当T很小时,仅选择输入最大的值)。 出于实际原因,玻尔兹曼函数是否仅用作softmax,还是与热力学/统计物理学有更深的联系?

3
卷积神经网络中最终Softmax层之前的非线性
我正在研究并尝试实现卷积神经网络,但是我想这个问题通常适用于多层感知器。 我网络中的输出神经元代表每个类别的激活:最活跃的神经元对应于给定输入的预测类别。为了考虑训练的交叉熵成本,我在网络的末端添加了softmax层,以便将每个神经元的激活值解释为概率值。 我的问题是:输出层中的神经元是否应该对输入应用非线性函数?我的直觉是没有必要: 如果第一世一世i个输出神经元的输入是向量(来自上一层)与该神经元权重之间的点积, X θ 我XŤθ一世XŤθ一世x^T\theta_iXXxθ一世θ一世\theta_i 如果我采用单调非线性函数(如S型或ReLU) 那么较大的激活输出仍将对应于最大,因此从这个角度来看,非线性函数不会改变预测。XŤθ一世XŤθ一世x^T\theta_i 这种解释有问题吗?我是否忽略了一些训练因素,这些因素使输出非线性成为必要? 如果我是对的,那么如果不是使用Sigmoid函数而是使用ReLU函数(不是严格单调的函数,会发生什么变化吗?最大值(0 ,XŤθ一世)最大值(0,XŤθ一世)\max(0,x^T\theta_i) 编辑 关于Karel的答案,其答案主要是“取决于”,这是对我的网络和疑问的更详细描述: 假设我有N个隐藏层,而我的输出层只是代表类的一组神经元上的softmax层(所以我的预期输出是输入数据属于每个类的概率)。假设第一个N-1层具有非线性神经元,那么在第N个隐藏层中使用非线性与线性神经元有什么区别?


3
如何在scikit-learn的多层感知器中将Softmax用作激活功能?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为交叉验证的主题。 11个月前关闭。 我需要在scikit中将Softmax激活功能应用于多层Perceptron。关于神经网络模型(受监督)的scikit 文档指出:“ MLPClassifier通过将Softmax用作输出函数来支持多类分类。” 问题是如何应用功能? 在下面的代码片段中,当我在激活参数下添加Softmax时,它不接受。 MLPClassifier(activation='Softmax', alpha=1e-05, batch_size='auto', beta_1=0.9, beta_2=0.999, early_stopping=False, epsilon=1e-08, hidden_layer_sizes=(15,), learning_rate='constant', learning_rate_init=0.001, max_iter=200, momentum=0.9, nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True, solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False, warm_start=False) 错误代码为: ValueError:不支持激活“ Softmax”。支持的激活是(“身份”,“物流”,“ tanh”,“ relu”)。 有没有办法在scikit-learn中将Softmax激活函数应用于多类分类?

2
多项式逻辑损失vs(交叉熵vs平方误差)
我观察到Caffe(深度学习框架)使用Softmax损失层 SoftmaxWithLoss作为大多数模型样本的输出层。 据我所知,Softmax损失层是多项逻辑损失层和Softmax层的组合。 他们从Caffe说 Softmax损失层梯度计算在数值上更稳定 但是,这种解释不是我想要的答案,它只是比较多项逻辑损失层和Softmax损失层的组合,而不是逐层进行比较。但是不能与其他类型的损失函数相比较。 但是,我想更多地了解在监督学习的角度来看这3个误差函数(即多项式Lo​​gistic损失,交叉熵(CE)和平方误差(SE))的区别/优点/缺点是什么?有支持文章吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.