深度学习中的损失函数

神经网络模型的效果及优化的目标是通过损失函数来定义的。

1.平方差损失函数

平方差函数是最常用的损失函数,也就是L2 loss再除以2。

E=12(ay)2 E = 1 2 ( a − y ) 2

其中y是我们期望的输出,a为神经元的实际输出 ( a=σ(Wx+b) a = σ ( W x + b ) , σ σ 是激活函数) 。也就是说,当神经元的实际输出与我们的期望输出差距越大,代价就越高。

2.交叉熵损失函数

我们知道,熵的定义公式是:

H(y)=iyilog(yi) H ( y ) = − ∑ i y i l o g ( y i )

交叉熵的定义公式:
H(y,a)=iyilog(ai) H ( y , a ) = − ∑ i y i l o g ( a i )

表示y和a的交叉熵。
如有多个样本,则挣个样本的平均交叉熵为:
H(y,a)=1nniyi,nlog(ai,n) H ( y , a ) = − 1 n ∑ n ∑ i y i , n l o g ( a i , n )

其中n表示样本编号,i表示类别编号。
如果是二分类,则可以表示为:
J(θ)=1mi=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i))) J ( θ ) = − 1 m ∑ i = 1 m y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) )

反向求导的过程如下: http://blog.csdn.net/jasonzzj/article/details/52017438

3.SVM Hinge Loss

定义如下:

Li=jyimax(0,fjfyi+Δ) L i = ∑ j ≠ y i m a x ( 0 , f j − f y i + Δ )

Δ 代表间隔,一般取1.

直观理解:
多类SVM“想要”正确类别的分类分数比其他不正确分类类别的分数要高,而且至少高出Δ 的边界值。如果其他分类分数进入了红色的区域,甚至更高,那么就开始计算损失。如果没有这些情况,损失值为0。我们的目标是找到一些权重,它们既能够让训练集中的数据样例满足这些限制,也能让总的损失值尽可能地低。
这里写图片描述

举一个具体的例子:
例子来源于 斯坦福CS231n 课件。第一张图片是猫,神经网络计算得出其三个类别的分值分别为 3.2, 5.1 和 -1.7。很明显,理想情况下猫的分值应该高与其他两种类别,但根据计算结果,car的分值最高,因此在当前的权值设置下,该 network 会把这张图片分类为 car。此时我们可以根据公式计算损失

损失计算如下:(S代表Score,即分值)

Li=max(0,ScarScat+Δ)+max(0,SfrogScat+Δ)=2.9+0 L i = m a x ( 0 , S c a r − S c a t + Δ ) + m a x ( 0 , S f r o g − S c a t + Δ ) = 2.9 + 0

深度学习中的损失函数_第1张图片
梯度求导: http://blog.csdn.net/bcj296050240/article/details/53890704

4.Softmax 交叉熵Loss

Softmax 函数是 Logistic 函数的推广,用于多分类。

定义如下:

Li=log(efyijefj) L i = − l o g ( e f y i ∑ j e f j )

表示第i个样本的loss,其中 fj f j 表示各类别的score, fyi f y i 表示该类的得分。

hinge loss和 softmax loss的示例:
深度学习中的损失函数_第2张图片

你可能感兴趣的:(深度学习)