说说代价函数的作用?
1.为得到训练模型的参数,需要一个代价函数,通过训练代价函数来得到参数。
2.用于找到最优解的目的函数。
说说代价函数为什么要非负?
因为目标函数存在下界,在优化过程当中,如果优化算法能够使目标函数不断减小,根据单调有界准则,这个优化算法就能证明是收敛有效的。 只要设计的目标函数有下界,基本上都可以,代价函数非负更为方便。
说说你知道的代价函数?
1.二次代价函数(quadratic cost):
b调整就越快,训练的速度也就越快。
二次代价函数适合输出神经元是线性的情况,交叉熵代价函数适合输出神经元是S型函数的情况。3.对数似然代价函数(log-likelihood cost):
对数似然函数常用来作为softmax回归的代价函数。深度学习中普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数似然代价函数。
对数似然代价函数与softmax的组合和交叉熵与sigmoid函数的组合非常相似。对数似然代价函数在二分类时可以化简为交叉熵代价函数的形式。
说说损失函数是什么?
损失函数(Loss Function)又称误差函数,用来衡量算法的运行情况,评估模型预测值与真实值的差异程度,是一个非负实值函数,通常使用
L ( Y , f ( x ) )L(Y, f(x))
L(Y,f(x))来表示。损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。
说说损失函数作用?
损失函数用来评价模型的预测值和真实值不一样的程度,在模型正常拟合的情况下,损失函数值越低,模型的性能越好。不同的模型用的损失函数一般也不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差值,结构风险损失函数是指经验风险损失函数加上正则项。
说说你知道的损失函数?
1.用于回归的损失函数:
1)绝对值损失函数
2)平方损失函数(squared loss):常用于线性回归2.用于分类的损失函数:
1)0-1损失函数(zero-one loss):在感知机中,使用的该损失函数
2)对数损失函数(log loss):用于最大似然估计,等价于交叉熵损失函数
3)指数损失函数(exponential loss):在adaboost中使用的该损失函数
4)合页损失函数(hinge loss):在SVM中使用的该损失函数
5)交叉熵损失函数(cross-entropy loss):用于分类任务3.用于视觉的损失函数:
1)Smooth L1 Loss :融合绝对值损失函数和平方损失函数,faster RCNN用的该损失函数
2)Focal loss :用于单阶段目标检测方法中样本极端不平衡的情况
3)IOU loss:就是交集和并集的比值,常用于分割任务、回归任务
4)Dice loss
5)Tversky Loss :引入α \alpha
α和
P ( Y ∣ X ) P(Y \mid X)
P(Y∣X) 是条件概率。即在样本
X X
X 的条件下,正确分类为
Y Y
Y 的概率。
P ( Y ∣ X ) P(Y \mid X)
P(Y∣X) 越大越好,因为模型预测越准,求得的模型参数越符合样本分布。
因为习惯损失函数求最小,这就是为什么要加个负号“-”。P ( Y ∣ X ) P(Y \mid X)
P(Y∣X) 越大,
L ( Y , P ( Y ∣ X ) ) L(Y, P(Y \mid X))
L(Y,P(Y∣X)) 越小。
为什么要使用对数? 这和最大(极大)似然估计有关,对数损失是用于最大似然估计的。最大似然估计,就是利用已知的样本结果信息,反推最具有可能 (最大概率) 导致这些样本结果出现的模型参数值。
假定一组参数在一堆数据(样本结果)下的似然值为:
P ( θ ∣ × 1 , × 2 , … , × n ) = P ( × 1 ∣ θ ) ∗ P ( × 2 ∣ θ ) ∗ … ∗ P ( × n ∣ θ ) \mathrm{P}(\theta \mid \times 1, \times 2, \ldots, \times \mathrm{n})=\mathrm{P}(\times 1 \mid \theta) * \mathrm{P}(\times 2 \mid \theta) * \ldots * \mathrm{P}(\times \mathrm{n} \mid \theta)
P(θ∣×1,×2,…,×n)=P(×1∣θ)∗P(×2∣θ)∗…∗P(×n∣θ)
可以看出,似然值等于每一条数据在这组参数下的条件概率之积。求概率是乘性,而求损失是加性,所以才需要借助log(对数)来转积为和,也是为了简化运算。
对数损失在逻辑回归和多分类任务上广泛使用。交叉樀损失函数的标准型就是对数损失函数,本质没有区别。3. 指数损失函数 (exponential loss)
L ( Y , f ( x ) ) = exp ( − Y ⋅ f ( x ) ) L(Y, f(x))=\exp (-Y \cdot f(x))
L(Y,f(x))=exp(−Y⋅f(x))
AdaBoost算法就是使用的指数损失函数。
4. 合页损失函数 (hinge loss)
L ( Y , f ( x ) ) = max ( 0 , 1 − Y ⋅ f ( x ) ) L(Y, f(x))=\max (0, \quad 1-Y \cdot f(x))
L(Y,f(x))=max(0,1−Y⋅f(x))
SVM使用合页损失,还加了正则项。公式意义是当样本被正确分类且函数间隔大于1时,合页损失是 0 ,否则损失是1 − Y ⋅ f ( x ) 1-Y \cdot f(x)
1−Y⋅f(x) 。
5. 交叉熵损失函数 (cross-entropy loss)
L ( Y , f ( x ) ) = − [ Y ln f ( x ) + ( 1 − Y ) ln ( 1 − f ( x ) ) ] L(Y, f(x))=-[Y \ln f(x)+(1-Y) \ln (1-f(x))]
L(Y,f(x))=−[Ylnf(x)+(1−Y)ln(1−f(x))]
本质上是一种对数似然函数,用于二分类和多分类任务中。
二分类问题中的loss函数(配合sigmoid):
L ( Y , f ( x ) ) = − [ Y ln f ( x ) + ( 1 − Y ) ln ( 1 − f ( x ) ) ] L(Y, f(x))=-[Y \ln f(x)+(1-Y) \ln (1-f(x))]
L(Y,f(x))=−[Ylnf(x)+(1−Y)ln(1−f(x))]
多分类问题中的loss函数(配合softmax):
L ( Y , f ( x ) ) = − Y ln f ( x ) L(Y, f(x))=-Y \ln f(x)
L(Y,f(x))=−Ylnf(x)
注: 以上损失函数都是标准型,针对单个数据。针对所有数据还应该加和求平均。
说说检测与分割中的损失函数?
1.Smooth L1 Loss
Smooth L1 Loss结合了L1和L2两种损失函数。公式如下:
L 1 ( x ) = ∣ x ∣ L 2 ( x ) = x 2 smooth L 1 ( x ) = { 0.5 x 2 if ∣ x ∣ < 1 ∣ x ∣ − 0.5 otherwise
L1
其实就是增加权重,控制Recall和Precision
说说交叉熵函数与最大似然函数的联系和区别?
区别:使用交叉熵函数描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。
用公式说明下交叉熵函数与最大似然函数联系?
设随机变量
p p
p
说说Sigmoid作为激活函数时为什么要用交叉熵损失函数而不用均方误差损失函数?
因为交叉熵损失函数可以完美解决均方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。
Sigmoid作为激活函数的时候,如果采用均方误差损失函数,那么这是一个非凸优化问题,不宜求解。而采用交叉熵损失函数依然是一个凸优化问题,更容易优化求解。
分析:均方误差损失函数定义:
C = 1 2 N ∑ x ( a − y ) 2 C=\frac{1}{2 N} \sum_{x}(a-y)^{2}
C=
2. 参数更新速度不同
均方差损失函数受Sigmoid函数影响,导数更新缓慢。交叉樀损失函数参数更新只和误差有关,当误差大的时候,权重更新快;当误差小的时候,权重更新慢。
3. sigmoid作为激活函数的时候,如果采用均方误差损失函数,那么这是一个非凸优化问题,不宜求解。而采用交叉嫡损失函数依然是一 个凸优化问题,更容易优化求解。
4. 使用场景不同:MSE更适合回归问题,交叉熵损失函数更适合分类问题。
推导交叉熵损失函数?
以偏置
b b
b 的梯度计算为例,推导交叉熵代价函数。
前置知识为Sigmoid函数求导为σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma^{'}(z)=\sigma(z)(1-\sigma(z))
σ
′
对两侧求积分,可得:C = − [ y l n a + ( 1 − y ) ln ( 1 − a ) ] + constant C=-[y l n a+(1-y) \ln (1-a)]+\text { constant }
C=−[ylna+(1−y)ln(1−a)]+ constant
即推出交叉熵损失函数。
说说交叉熵的思想?
1.交叉熵函数的本质是对数函数。
2.交叉熵函数描述模型预测值和真实值的差距大小,越大代表越不相近。
3.交叉熵损失函数可以完美解决均方损失函数权重更新过慢的问题。
4.对数损失在逻辑回归和多分类任务上广泛使用。交叉熵损失函数的标准型就是对数损失函数,本质没有区别。
说说交叉熵损失函数为什么有log项?
1.为解决均方误差损失函数搭配Sigmoid时更新慢问题而推导出的(如上一问)
2.通过最大似然估计的方式求得交叉熵公式,这个时候引入log项。这是因为似然函数(概率)是乘性的,而loss函数是加性的,所以需要引入log项“转积为和”。而且也是为了简化运算。
说说KL散度?
相对熵 (Relative entropy),又被称为Kullback-Leibler散度(Kullback-Leibler divergence)或信息散度(Information divergence),是两个概率分布(Probability distribution)间差异的非对称性度量。在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy) 的差值。
设P ( x ) , Q ( x ) P(x) , Q(x)
P(x),Q(x) 是随机变量
X X
X 上的两个概率分布,则在离散和连续随机变量的情形下,相对熵的定义分别为:
K L ( P ∥ Q ) = ∑ P ( x ) log P ( x ) Q ( x ) K L ( P ∥ Q ) = ∫ P ( x ) log P ( x ) Q ( x ) d x
KL(P∥Q)KL(P∥Q)P ( x ) P(x)
P(x) 为模型预测概率分布,而KL就是度量这两个分布的差异性,差异越小越好,所以KL也可以用作损失函数。
说说深度神经网络(DNN)的损失函数是什么?
深度神经网络(DNN)涉及到梯度消失的问题,如果使用均方误差作为损失函数配合sigmoid激活函数,那么参数更新缓慢。这个时候应该考虑使用交叉熵作为损失函数,可以避免参数更新缓慢的问题。
手撕IoU?
定义:
I O U = J accard = ∣ A ∩ B ∣ ∣ A ∪ B ∣ = ∣ A ∩ B ∣ ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ I O U=J \text { accard }=\frac{|A \cap B|}{|A \cup B|}=\frac{|A \cap B|}{|A|+|B|-|A \cap B|}
IOU=J accard =
∣A∪B∣
∣A∩B∣