深度学习中的损失函数
神经网络模型的效果及优化的目标是通过损失函数来定义的。1.平方差损失函数平方差函数是最常用的损失函数,也就是L2 loss再除以2。E=12(a−y)2E=12(a−y)2 E=\frac{1}{2}(a-y)^2其中y是我们期望的输出,a为神经元的实际输出 (a=σ(Wx+b)a=σ(Wx+b)a=\sigma(Wx+b), σσ\sigma 是激活函数) 。也就...
·
神经网络模型的效果及优化的目标是通过损失函数来定义的。
1.平方差损失函数
平方差函数是最常用的损失函数,也就是L2 loss再除以2。
E=12(a−y)2 E = 1 2 ( a − y ) 2
<script type="math/tex; mode=display" id="MathJax-Element-133"> E=\frac{1}{2}(a-y)^2 </script>
其中y是我们期望的输出,a为神经元的实际输出 ( a=σ(Wx+b) a = σ ( W x + b ) <script type="math/tex" id="MathJax-Element-134">a=\sigma(Wx+b)</script>, σ σ <script type="math/tex" id="MathJax-Element-135">\sigma</script> 是激活函数) 。也就是说,当神经元的实际输出与我们的期望输出差距越大,代价就越高。
2.交叉熵损失函数
我们知道,熵的定义公式是:
H(y)=−∑iyilog(yi) H ( y ) = − ∑ i y i l o g ( y i )
<script type="math/tex; mode=display" id="MathJax-Element-354">H(y)=-\sum_i y_i log(y_i)</script>
交叉熵的定义公式:
H(y,a)=−∑iyilog(ai) H ( y , a ) = − ∑ i y i l o g ( a i )
<script type="math/tex; mode=display" id="MathJax-Element-355">H(y,a)=-\sum_i y_i log(a_i)</script>
表示y和a的交叉熵。
如有多个样本,则挣个样本的平均交叉熵为:
H(y,a)=−1n∑n∑iyi,nlog(ai,n) H ( y , a ) = − 1 n ∑ n ∑ i y i , n l o g ( a i , n )
<script type="math/tex; mode=display" id="MathJax-Element-356">H(y,a)=-\frac{1}{n}\sum_n\sum_i y_{i,n} log(a_{i,n})</script>
其中n表示样本编号,i表示类别编号。
如果是二分类,则可以表示为:
J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))) J ( θ ) = − 1 m ∑ i = 1 m y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) )
<script type="math/tex; mode=display" id="MathJax-Element-357">J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))</script>
反向求导的过程如下: http://blog.csdn.net/jasonzzj/article/details/52017438
3.SVM Hinge Loss
定义如下:
Li=∑j≠yimax(0,fj−fyi+Δ) L i = ∑ j ≠ y i m a x ( 0 , f j − f y i + Δ )
<script type="math/tex; mode=display" id="MathJax-Element-435"> L_i = \sum_{j\neq y_i}max(0, f_j - f_{y_i} + \Delta) </script>
Δ 代表间隔,一般取1.
直观理解:
多类SVM“想要”正确类别的分类分数比其他不正确分类类别的分数要高,而且至少高出Δ 的边界值。如果其他分类分数进入了红色的区域,甚至更高,那么就开始计算损失。如果没有这些情况,损失值为0。我们的目标是找到一些权重,它们既能够让训练集中的数据样例满足这些限制,也能让总的损失值尽可能地低。
举一个具体的例子:
例子来源于 斯坦福CS231n 课件。第一张图片是猫,神经网络计算得出其三个类别的分值分别为 3.2, 5.1 和 -1.7。很明显,理想情况下猫的分值应该高与其他两种类别,但根据计算结果,car的分值最高,因此在当前的权值设置下,该 network 会把这张图片分类为 car。此时我们可以根据公式计算损失
损失计算如下:(S代表Score,即分值)
Li=max(0,Scar−Scat+Δ)+max(0,Sfrog−Scat+Δ)=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
<script type="math/tex; mode=display" id="MathJax-Element-436">L_i = max(0, S_{car} - S_{cat}+\Delta ) + max(0, S_{frog} - S_{cat} + \Delta) = 2.9 + 0</script>
梯度求导: http://blog.csdn.net/bcj296050240/article/details/53890704
4.Softmax 交叉熵Loss
Softmax 函数是 Logistic 函数的推广,用于多分类。
定义如下:
Li=−log(efyi∑jefj) L i = − l o g ( e f y i ∑ j e f j )
<script type="math/tex; mode=display" id="MathJax-Element-464">L_i = -log(\frac{e^{f_{y_i}}}{\sum_j e^{f_j}})</script>
表示第i个样本的loss,其中 fj f j <script type="math/tex" id="MathJax-Element-465">f_j</script>表示各类别的score, fyi f y i <script type="math/tex" id="MathJax-Element-466">f_{y_i}</script>表示该类的得分。
hinge loss和 softmax loss的示例:
更多推荐

所有评论(0)