如何向女朋友介绍损失函数

目录

交叉熵损失函数

均方误差

自定义损失函数


     

上篇文章咱们聊到了激活函数,在最后的时候又说到了输出层的一些东西。关于神经网络还有一点也是十分重要而又容易忽略的,那就是损失函数(loss function)。

      通俗的说,在神经网络中的损失函数是指寻找最优权重的依据指标。根据实际解决的问题不同,损失函数的形式往往也不相同。在神经网络中最常使用的损失函数有均方误差(mean squared error )和交叉熵误差(cross entropy error)。

       在介绍神经网络的时候,我们使用设置阈值的方式来实现逻辑电路(其实也就是分类问题),但在解决实际问题时,一般不这么处理。我们以手写数字识别为例子,比如手写数字1,我们将其表示为[0,1,0,0,0,0,0,0,0,0](这种表示方式称之为one-hot表示),于此对应的是输出结果越接近[0,1,0,0,0,0,0,0,0,0]越好,那么如何判断输出与其有多接近呢?类似于这种问题交叉熵是常用的判断方法之一,它衡量的是两个分布之间的距离,在分类问题中会经常使用到交叉熵损失函数。

交叉熵损失函数

给定两个概率分布分别为p和q,则使用q来表示p的交叉熵为:

 

      有小伙伴注意到了,交叉熵是衡量两个概率分布间的距离,当距离越小时,两个分布越接近。但是神经网络最后的输出不一定是一个概率分布。但是大管在上篇博文中和各位大佬聊了输出层,其中就说了使用softmax函数可以完美的将输出层的输出转变成概率分布。从公式中,可以看到,交叉熵并不是对称的即(H(p, q)≠H(q, p)),其表达的意义也不一样。它刻画的是通过概率分布 q 来表达概率分布 p 的困难程度。因为正确答案是希望得到的结果,所以当交叉熵作为神经网络的损失函数时,p 代表的是正确答案, q 代表的是预测值(即用预测值来表示正确值)。纸上得来终觉浅,绝知此事要躬行,还是通过一个小例子来看看交叉熵到底是如何运算的。

      假设有一个三分类问题,正确的结果应该是(1,0,0)。现在有两个模型,模型1预测的结果为(0.5,0.4,0.1),模型2预测的结果为(0.8,0.1,0.1),下面分别计算两个模型和正确结果之间的交叉熵:

模型1:

模型2:

可以看到,第二个模型要比第一个模型好。通过上面的计算,我们仿佛能发现一个问题,就是交叉熵的值是由正确标签对应的结果决定的。同时从交叉熵的公式中可以看出,负的自然对数可以避免梯度消失的问题,因为很多输出都会包含指数函数,而交叉熵中的自然对数却刚好笑出了输出单元中的指数效果。

然而对于回归问题,是对具体数值的预测。预测的结果往往是一个连续的实数,解决这种问题的神经网络一般只有一个输出结点。类似于这种回归问题最常用的损失函数是均方误差。

均方误差

其中yi为一个bach中正确的标签值,yi'为预测标签值。

      均方误差可能比较简单、好理解,但是在使用梯度优化的方法时,效果往往不好,一些饱和的输出单元在使用均方误差时会产生非常小的梯度。这也解释了为什么交叉熵误差比均方误差更受欢迎的原因之一(划重点)。

自定义损失函数

      回到开头的一句话,“实际解决的问题不同,损失函数的形式往往也不相同”,那现在我们就可以自己定义损失函数。

      例如,如果一件衣服的成本是1元,但是利润是10元,那么少预测一个就少挣 10 元,而多预测一个才少挣1元。自定义损失函数为:

 其中:

即当预测值大于实际生产值的时候,系数为10,当预测值小于实际生产值时系数为1。

所以对于相同的神经网络,不同的损失函数会产生重大的影响。

多内容下载机器学习资料请扫描下方二维码关注小编公众号:程序员大管

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章