文章目录
- 一、简介
- 二、L1 范数损失 L1Loss
- 三、均方误差损失函数(MSE)
- 四、交叉熵损失(CrossEntropy Loss)
- 五、KL 散度损失(KLDivLoss)
- 六、二进制交叉熵损失(BCELoss)
- 七、BCEWithLogitsLoss
- 八、MarginRankingLoss
- 九、HingeEmbeddingLoss
- 十、多标签分类损失 MultiLabelMarginLoss
- 十一、平滑版L1损失 SmoothL1Loss [ Huber 损失函数]
- 十二、2分类的logistic损失 SoftMarginLoss
- 十三、多标签 one-versus-all 损失 MultiLabelSoftMarginLoss
- 十四、cosine 损失 CosineEmbeddingLoss
- 十五、多类别分类的hinge损失 MultiMarginLoss
- 十六、三元组损失 TripletMarginLoss
- 十七、连接时序分类损失 CTCLoss
- 十八、负对数似然损失 NLLLoss
- 十九、NLLLoss2d
- 二十、PoissonNLLLoss
- 参考资料
一、简介
常见的机器学习可以分为三个部分:
{
1
、
网
络
结
构
2
、
损
失
函
数
3
、
优
化
策
略
\begin{cases} 1、网络结构 \\ 2、损失函数 \\ 3、优化策略 \end{cases}
⎩⎪⎨⎪⎧1、网络结构2、损失函数3、优化策略
本文主要介绍的是损失函数的部分。
- 损失函数理解最重要的是数学基础。
- 数学基础中最重要的是 参数估计 和 矩阵分析计算。
1.1 参数估计
- 定义:
- 在机器学习中指的是:在已知数据集( x 1 , x 2 . . . . . . x n x_{1},x_{2}......x_{n} x1,x2......xn) 和 模型(分布函数) 的情况下;
- 估计 出最适合该模型的参数(权重)
- 所谓 参数估计 就是:
- 对未知参数 θ θ θ 进行估计时,在参数可能的取值范围内选取;
- 使 样本获得此观测值 x 1 , x 2 . . . . . . x n x_{1},x_{2}......x_{n} x1,x2......xn 的概率最大的参数 θ ^ \hat{\theta } θ^ 作为 θ θ θ 的估计;
- 这样选定的 θ ^ \hat{\theta} θ^ 有利于 x 1 , x 2 . . . . . . x n x_{1},x_{2}......x_{n} x1,x2......xn 的出现。
1.2 最大似然估计(Maximum likelihood estimation)
最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数(权重)未知”。通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,则称为最大似然估计。
1.2.1 定义:
最大似然估计就是指,
- 在已知样本结果的情况下,
- 推断出最有可能使得该结果出现的参数的过程。
- 也就是说最大似然估计是,用来估计出某个模型的参数,而这些参数能使得已知样本的结果最可能发生。
1.2.2 最大似然估计的重要前提:
- 训练样本的分布能代表样本的真实分布。
- 每个样本集中的样本都是所谓独立同分布的随机变量 (iid条件),
- 有充分的训练样本。
1.2.3 具体的数学定义
对未知参数
θ
θ
θ 进行估计时,在参数可能的取值范围内选取;
使 样本获得此观测值
x
1
,
x
2
.
.
.
.
.
.
x
n
x_{1},x_{2}......x_{n}
x1,x2......xn 的概率最大的参数
θ
^
\hat{\theta }
θ^ 作为
θ
θ
θ 的估计;
这样选定的
θ
^
\hat{\theta}
θ^ 有利于
x
1
,
x
2
.
.
.
.
.
.
x
n
x_{1},x_{2}......x_{n}
x1,x2......xn 的出现。
-
假设总体 X X X 是离散型,其概率分布为 P { X = x } = p ( x ; θ ) P\{ X = x\}=p(x; \theta) P{X=x}=p(x;θ), θ \theta θ 为未知参数, X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn 为 X X X的一个样本,则 X 1 , X 2 , . . . , X n 取 值 为 x 1 , . . . x n 的 概 率 是 : X_1,X_2,...,X_n 取值为x_1,...x_n 的概率是: X1,X2,...,Xn取值为x1,...xn的概率是:
P { X 1 = x 1 , . . . , X n = x n } = ∏ i = 1 n P { X i = x i } = ∏ i = 1 n p { x i ; θ } P\{ X_1 = x_1,...,X_n = x_n \}=\prod_{i=1}^nP\{ X_i = x_i\}=\prod_{i=1}^np\{x_i;\theta \} P{X1=x1,...,Xn=xn}=i=1∏nP{Xi=xi}=i=1∏np{xi;θ}
显然这个概率值是 θ \theta θ 的函数,将其记为
L ( θ ) = L ( x 1 , . . . , x n ; θ ) = ∏ i = 1 n p { x i ; θ } L(\theta)=L(x_1,...,x_n;\theta)=\prod_{i=1}^np\{x_i;\theta \} L(θ)=L(x1,...,xn;θ)=i=1∏np{xi;θ}
称 L ( θ ) 为 样 本 ( x 1 , . . . , x n ) L(\theta) 为样本(x_1,...,x_n) L(θ)为样本(x1,...,xn) 的似然函数。
若 θ ^ \hat{\theta} θ^ 使得
L ( x 1 , . . . , x n ; θ ^ ) = m a x L ( x 1 , . . . , x n ; θ ^ ) L(x_1,...,x_n;\hat{\theta})=max\ L(x_1,...,x_n;\hat{\theta}) L(x1,...,xn;θ^)=max L(x1,...,xn;θ^)
称 θ ^ = θ ^ ( x 1 , . . . , x n ) \hat{\theta} = \hat{\theta}(x_1, ... ,x_n) θ^=θ^(x1,...,xn) 为未知函数 θ \theta θ 的最大似然估计值 -
同理,如果总体 X X X 是连续型随机变量, 其概率密度为 f ( x , θ ) f(x,\theta) f(x,θ),则样本的 似然函数
L ( θ ) = L ( x 1 , . . . , x n ; θ ) = ∏ i = 1 n f { x i ; θ } L(\theta)=L(x_1,...,x_n;\theta)=\prod_{i=1}^n f \{x_i;\theta \} L(θ)=L(x1,...,xn;θ)=i=1∏nf{xi;θ}
若 θ ^ \hat{\theta} θ^ 使得
L ( x 1 , . . . , x n ; θ ^ ) = m a x ∏ i = 1 n f { x ; θ } L(x_1,...,x_n;\hat{\theta})=max \prod_{i=1}^n f \{x ;\theta \} L(x1,...,xn;θ^)=maxi=1∏nf{x;θ}
称 θ ^ = θ ^ ( x 1 , . . . , x n ) \hat{\theta} = \hat{\theta}(x_1, ... ,x_n) θ^=θ^(x1,...,xn) 为未知函数 θ \theta θ 的最大似然估计值
1.2.4 求解步骤
- 写出似然函数;
- 方程两边同时取出 l n ln ln 的对数;
- 令 ∂ l n L ∂ θ i = 0 \frac{\partial ln \ L}{\partial \theta_i} = 0 ∂θi∂ln L=0,求得参数。
1.2.5 举例
在
L
o
g
i
s
t
i
c
Logistic
Logistic 回归中,所有样本点也服从二项分布; 设有
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3 三个样本点,其类标为
1
,
1
,
0
1,1,0
1,1,0; 同时假设样本点为
1
的
概
率
为
P
=
h
θ
(
x
)
1 的概率为 P=h_{\theta}(x)
1的概率为P=hθ(x), 那么当
P
P
P 等于多少时,其结果才最可能出现
1
,
1
,
0
1, 1, 0
1,1,0呢?于是问题就变成最大化:
P
∗
P
(
1
−
P
)
=
h
θ
(
x
)
∗
h
θ
(
x
)
∗
(
1
−
h
θ
(
x
)
)
P * P(1-P) = h_{\theta}(x) * h_{\theta}(x) * (1 - h_{\theta}(x))
P∗P(1−P)=hθ(x)∗hθ(x)∗(1−hθ(x))
而这就是最大似然估计(求解参数估计的一个方法。)
1.3 信息熵
信息量的定义:
- 信息的大小跟随机事件的概率有关。越小概率的事情发生了产生的信息量越大。
- 所以 信息的量度应该依赖于概率分布 p ( x ) p(x) p(x)
- 事件
x
0
x_0
x0 的 信息量定义如下(其中
p
(
x
0
)
p(x_0)
p(x0) 表示事件
x
0
x_0
x0 发生的概率):
I ( x 0 ) = − l o g ( p ( x 0 ) ) I(x_0) = - log(p(x_0)) I(x0)=−log(p(x0))
- 性质:
- 单调性:发生概率越高的事件,其携带的信息量越低;
- 非负性:信息熵可以看作为一种广度量,非负性是一种合理的必然;
- 累加性:即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和,这也是广度量的一种体现。
1.3.0 信息熵的定义:
- 熵 是关于不确定性的数学描述。
- 熵描述的是整个系统内部样本之间的一个距离,或者称之为系统内样本分布的集中程度(一致程度)、分散程度、混乱程度(不一致程度)。
- 系统内样本分布越分散(或者说分布越平均),信息熵就越大。
- 分布越有序(或者说分布越集中),信息熵就越小。
- 数学公式表示:
H ( X ) = − ∑ i = 1 n p ( x i ) l o g p ( x i ) H(X) = - \sum_{i=1}^n p(x_i)\ log\ p(x_i) H(X)=−i=1∑np(xi) log p(xi)- 对概率取负对数表示了一种可能事件发生时候携带出的信息量。
- 把各种可能表示出的信息量乘以其发生的概率之后求和,就表示了整个系统所有信息量的一种期望值。
1.3.1 KL散度 (Kullback–Leibler divergence)
- 作用:
- 用于衡量两个概率分布之间的差异。值越小,表示两个分布越接近。
- 数学形式
- 离散形式: D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q) = \sum_{i=1}^n p(x_i) log(\frac{p(x_i)}{q(x_i)}) DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
- 连续形式: D K L ( A ∣ ∣ B ) = ∫ a ( x ) l o g ( a ( x ) b ( x ) ) D_{KL}(A||B) = \int a(x) log(\frac{a(x)}{b(x)}) DKL(A∣∣B)=∫a(x)log(b(x)a(x))
- 特点
- 非对称性 K L ( p ∣ ∣ q ) ≠ K L ( q ∣ ∣ p ) KL(p || q) \neq KL(q || p) KL(p∣∣q)=KL(q∣∣p),KL散度尽管被用来度量两个分布的相似度或者说距离,但是KL散度本身不是距离。
- 非负性,【当 p ( x ) 和 q ( x ) p(x) 和 q(x) p(x)和q(x)两个分部完全相同时,其值=0,】
- 不满足三角不等式性
1.3.1.1 为什么 KL散度可以度量两个分布之间的距离?
本质上,KL散度度量的是两者之间的信息损失,而不是两者之间的距离。
1.3.2 JS 散度(Jensen-Shannon divergence)
- JS散度度量两个概率分布的差异度,它基于KL散度的变体,
- 解决了KL散度非对称的问题
- 其取值是 0 到 1 之间。
定义如下:
J S ( p ∣ ∣ q ) = 1 2 K L ( p , p + q 2 ) + 1 2 K L ( q , p + q 2 ) J S ( p ∣ ∣ q ) = \frac{1}{2} KL( p , \frac{p + q}{ 2 }) + \frac{1}{2} K L ( q , \frac{p + q}{ 2 } ) JS(p∣∣q)=21KL(p,2p+q)+21KL(q,2p+q)
1.3.3 KL散度和JS散度存在的问题:
- 如果两个分配 𝑃,𝑄 离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。
- 这在学习算法中是比较致命的,这就意味这这一点的梯度为 0。梯度消失了。
1.3.4 Wasserstein距离(EM距离):解决JS和KL距离的缺点
- Wessertein距离相比KL散度和JS散度的优势在于:
- 即使两个分布的支撑集没有重叠或者重叠非常少,仍然能反映两个分布的远近。
- 而JS散度在此情况下是常量,KL散度可能无意义。
- 数学公式:
W a s s e r s t e i n Wasserstein Wasserstein 距离度量两个概率分布之间的距离,定义如下:
W ( P 1 , P 2 ) = inf γ − ∏ ( P 1 , P 2 ) E ( x , y ) − γ [ ∣ ∣ x − y ∣ ∣ ] W(P_1,P_2)=\inf_{γ−∏(P_1,P_2)}E(x,y)−γ[||x−y||] W(P1,P2)=γ−∏(P1,P2)infE(x,y)−γ[∣∣x−y∣∣]- 其中 ∏ ( P 1 , P 2 ) ∏(P_1,P_2) ∏(P1,P2) 是 P 1 , P 2 P_1, P_2 P1,P2组合起来的,所有可能的联合分布。
- 对于每一个可能的分布 γ γ γ 而言,我们都可以采样到 x , y x,y x,y,并计算他们的距离的期望值。
- 一般而言,在代码实现的时候,会直接取平均值。
参考WGAN,真实数据与生成数据的概率分部距离.
二、L1 范数损失 L1Loss
- 目的:
计算 Output 和 Target 之差的绝对值。
代码
torch.nn.L1Loss(reduction='mean')
'''
reduction-三个值,
none: 不使用约简;
mean:返回loss和的平均值;
sum:返回loss的和。
默认:mean。
'''
三、均方误差损失函数(MSE)
-
详细资料机器学习— 均方误差损失(Mean Squared Error, MSE)【附代码】
欧氏距离损失经常用在线性回归问题(求解的是连续问题) -
数学公式:
L o s s = 1 2 m ∑ i = 1 m ( y i − y i ^ ) 2 Loss = \frac{1}{2m} \sum_{i=1}^m (y_i - \hat{y_i})^2 Loss=2m1i=1∑m(yi−yi^)2- m 表 示 样 本 个 数 。 m 表示样本个数。 m表示样本个数。
- l o s s 表 示 的 是 m 个 样 本 的 均 值 。 loss 表示的是 m 个样本的均值。 loss表示的是m个样本的均值。
代码
torch.nn.MSELoss(reduction='mean')
'''
reduction-三个值,
none: 不使用约简;
mean:返回loss和的平均值;
sum:返回loss的和。
默认:mean。
'''
四、交叉熵损失(CrossEntropy Loss)
交叉熵损失经常用在逻辑回归问题(求解的是离散的分类问题)上,用来作为预测值和真实标签值的距离度量。
-
定义:
给定两个概率分布 p , q p,q p,q ,其交叉熵为:
H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g q ( x i ) H(p,q) = -\sum_{i=1}^n p(x_i) \ log \ q(x_i) H(p,q)=−i=1∑np(xi) log q(xi)
其 中 p ( x ) 表 示 正 确 分 布 , q ( x ) 表 示 预 测 分 布 。 其中 p(x) 表示正确分布,q(x) 表示预测分布。 其中p(x)表示正确分布,q(x)表示预测分布。- 根据公式的形式,也可以理解为:
- 表示信息量的项来自于非真实分布 q ( x ) q(x) q(x),【要传递的信息】
- 对其期望值的计算 采用的是真实分布 p ( x ) p(x) p(x)。【信息传递的方式】
-
作用:
- 描述两个概率分布之间的距离。
- 交叉熵越小,两个概率的分布越接近。
五、KL 散度损失(KLDivLoss)
- 目的:
计算 Output 和 Target 之间的KL散度。- KL 散度可用于衡量不同的连续分布之间的距离,;
- 在连续的输出分布的空间上(离散采样)上进行直接回归时 很有效.
代码
torch.nn.KLDivLoss(reduction='mean')
'''
reduction-三个值,
none: 不使用约简;
mean:返回loss和的平均值;
sum:返回loss的和。
默认:mean。
'''
六、二进制交叉熵损失(BCELoss)
- 二分类任务时的交叉熵计算函数。
- 用于测量重构的误差,
- 例如自动编码机. 注意目标的值 t[i] 的范围为0到1之间.
代码
torch.nn.BCELoss(weight = None, reduction='mean')
'''
weight (Tensor, optional)
– 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度为 “nbatch” 的 的 Tensor
'''
七、BCEWithLogitsLoss
- B C E W i t h L o g i t s L o s s BCEWithLogitsLoss BCEWithLogitsLoss损失函数把 S i g m o i d Sigmoid Sigmoid 层集成到了 B C E L o s s 类 中 . BCELoss 类中. BCELoss类中.
- 该版比用一个简单的
S
i
g
m
o
i
d
Sigmoid
Sigmoid 层和
B
C
E
L
o
s
s
BCELoss
BCELoss 在数值上更稳定,
- 因为把这两个操作合并为一个层之后, 可以 利 用 l o g − s u m − e x p 的 技 巧 来 实 现 数 值 稳 定 利用 log-sum-exp 的 技巧来实现数值稳定 利用log−sum−exp的技巧来实现数值稳定.
代码
torch.nn.BCEWithLogitsLoss(weight = None, reduction='mean', pos_weight=None)
'''
weight (Tensor, optional)
– 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度为 “nbatch” 的 的 Tensor
'''
八、MarginRankingLoss
对于 mini-batch(小批量) 中每个实例的损失函数如下:
l
o
s
s
(
x
,
y
)
=
m
a
x
(
0
,
−
y
∗
(
x
1
−
x
2
)
+
m
a
r
g
i
n
)
loss(x,y) = max(0, -y *(x_1 - x_2) + margin)
loss(x,y)=max(0,−y∗(x1−x2)+margin)
代码
torch.nn.MarginRankingLoss(margin = 0.0, reduction='mean')
'''
margin:默认值0
'''
九、HingeEmbeddingLoss
对于 mini-batch(小批量) 中每个实例的损失函数如下:
l
n
=
{
x
n
,
i
f
y
n
=
1
m
a
x
{
0
,
Δ
−
x
n
}
,
i
f
y
n
=
−
1
ln = \begin{cases} x_n, & if y_n = 1 \\ max \{ 0, \Delta - x_n \}, & if y_n =-1 \end{cases}
ln={xn,max{0,Δ−xn},ifyn=1ifyn=−1
代码
torch.nn.HingeEmbeddingLoss(margin = 1.0, reduction='mean')
'''
margin:默认值1
'''
十、多标签分类损失 MultiLabelMarginLoss
对于 mini-batch(小批量) 中每个实例的损失函数如下:
l
o
s
s
(
x
,
y
)
=
∑
i
,
j
m
a
x
(
0
,
1
−
(
x
∣
y
(
j
)
∣
−
x
(
i
)
)
)
x
.
s
i
z
e
(
0
)
loss(x,y) = \sum_{i,j} \frac{max(0, 1-(x|y(j)| - x(i) )) }{x.size(0)}
loss(x,y)=i,j∑x.size(0)max(0,1−(x∣y(j)∣−x(i)))
代码
torch.nn.MultiLabelMarginLoss(reduction='mean')
十一、平滑版L1损失 SmoothL1Loss [ Huber 损失函数]
l
o
s
s
(
x
,
y
)
=
1
n
∑
i
z
i
,
其
中
,
loss(x,y) = \frac{1}{n} \sum_i z_i, \\ 其中,
loss(x,y)=n1i∑zi,其中,
z
i
=
{
0.5
(
x
i
−
y
i
)
2
,
i
f
∣
x
i
−
y
i
∣
<
1
∣
x
i
−
y
i
∣
−
0.5.
o
t
h
e
r
w
i
s
e
z_i = \begin{cases} 0.5(x_i - y_i)^2, & if|x_i - y_i| < 1 \\ |x_i - y_i| - 0.5. & otherwise \end{cases}
zi={0.5(xi−yi)2,∣xi−yi∣−0.5.if∣xi−yi∣<1otherwise
代码
torch.nn.SmoothL1Loss(reduction='mean')
十二、2分类的logistic损失 SoftMarginLoss
l o s s ( x , y ) = ∑ i l o g ( 1 + e x p ( − y ( i ) ∗ x ( i ) ) ) x . n e l e m e n t ( ) loss(x,y) = \sum_i \frac{log(1 + exp(- y(i) * x(i)))}{x.nelement()} loss(x,y)=i∑x.nelement()log(1+exp(−y(i)∗x(i)))
代码
torch.nn.SoftMarginLoss(reduction='mean')
十三、多标签 one-versus-all 损失 MultiLabelSoftMarginLoss
l o s s ( x , y ) = − 1 C ∗ ∑ i y i ∗ l o g ( ( 1 + e x p ( − x i ) ) − 1 ) + ( 1 − y i ) ∗ l o g ( e x p ( − x i ) 1 + e x p ( − x i ) ) loss(x,y) = - \frac{1}{C} * \sum_i y_i * log((1 + exp(-x_i))^{-1}) + (1 - y_i) * log(\frac{exp(-x_i)}{1 + exp(-x_i)}) loss(x,y)=−C1∗i∑yi∗log((1+exp(−xi))−1)+(1−yi)∗log(1+exp(−xi)exp(−xi))
代码
torch.nn.MultiLabelSoftMarginLoss(weight=None, reduction='mean')
十四、cosine 损失 CosineEmbeddingLoss
l o s s ( x , y ) = { 1 − c o s ( x 1 , x 2 ) , i f y = = 1 m a x ( 0 , c o s ( x 1 , x 2 ) − m a r g i n ) , i f y = = − 1 loss(x,y) = \begin{cases} 1- cos(x_1, x_2), & if y == 1 \\ max(0, cos(x_1, x_2) - margin), & if y == -1 \end{cases} loss(x,y)={1−cos(x1,x2),max(0,cos(x1,x2)−margin),ify==1ify==−1
代码
torch.nn.CosineEmbeddingLoss(margin=0.0, reduction='mean')
'''
margin:默认值0
'''
十五、多类别分类的hinge损失 MultiMarginLoss
l o s s ( x , y ) = ∑ i m a x ( 0 , w [ y ] ∗ ( m a r g i n − x [ y ] + x i ) ) p x . s i z e ( 0 ) loss(x,y) = \frac{\sum_i max(0, w[y] * (margin - x[y] + x_i))^p}{x.size(0)} loss(x,y)=x.size(0)∑imax(0,w[y]∗(margin−x[y]+xi))p
代码
torch.nn.MultiMarginLoss(p=1, margin=1.0, weight=None, reduction='mean')
'''
p=1或者2 默认值:1
margin:默认值1
'''
十六、三元组损失 TripletMarginLoss
和孪生网络相似,具体例子:给一个A,然后再给B、C,看看B、C谁和A更像。
L
(
a
,
p
,
n
)
=
m
a
x
{
d
(
a
i
,
p
i
)
−
d
(
a
i
,
n
i
)
+
m
a
r
g
i
n
,
0
}
L(a,p,n) = max\{ d(a_i, p_i) - d(a_i, n_i) + margin, 0 \}
L(a,p,n)=max{d(ai,pi)−d(ai,ni)+margin,0}
其中,
d
(
x
i
,
y
i
)
=
∣
∣
x
i
−
y
i
∣
∣
p
d(x_i, y_i) = ||x_i - y_i||_p
d(xi,yi)=∣∣xi−yi∣∣p
代码
torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, reduction='mean')
十七、连接时序分类损失 CTCLoss
CTC连接时序分类损失,可以对没有对齐的数据进行自动对齐,主要用在没有事先对齐的序列化数据训练上。比如语音识别、ocr识别等等。
代码
torch.nn.CTCLoss(blank=0, reduction='mean')
'''
reduction-三个值,
none: 不使用约简;
mean:返回loss和的平均值;
sum:返回loss的和。
默认:mean。
'''
十八、负对数似然损失 NLLLoss
负对数似然损失. 用于训练 C 个类别的分类问题.
代码
torch.nn.NLLLoss(weight=None, ignore_index=-100, reduction='mean')
'''
weight (Tensor, optional)
– 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
ignore_index (int, optional)
– 设置一个目标值, 该目标值会被忽略, 从而不会影响到 输入的梯度.
'''
十九、NLLLoss2d
对于图片输入的负对数似然损失. 它计算每个像素的负对数似然损失.
代码
torch.nn.NLLLoss2d(weight=None, ignore_index=-100, reduction='mean')
'''
weight (Tensor, optional)
– 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
ignore_index (int, optional)
– 设置一个目标值, 该目标值会被忽略, 从而不会影响到 输入的梯度.
'''
二十、PoissonNLLLoss
目标值为泊松分布的负对数似然损失
代码
torch.nn.PoissonNLLLoss(log_input=True, full=False, eps=1e-08, reduction='mean')
'''
log_input (bool, optional)
- 如果设置为 True , loss 将会按照公 式 exp(input) - target * input 来计算,
- 如果设置为 False , loss 将会按照 input - target * log(input+eps) 计算.
full (bool, optional)
– 是否计算全部的 loss,
i.e. 加上 Stirling 近似项 target * log(target) - target + 0.5 * log(2 * pi * target).
eps (float, optional) – 默认值: 1e-8
'''
参考资料
机器学习—Logistic损失函数以及神经网络损失函数详解
机器学习— 均方误差损失(Mean Squared Error, MSE)【附代码】
机器学习— 交叉熵损失(CrossEntropy Loss)–(附代码)
深度学习19个损失函数汇总