首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习漫谈:损失函数

介绍损失函数前,先简单说一下数据驱动的机器学习基本思路。

在前面介绍神经网络的前向计算时,网络中的权重值都是事先给定的。这相当于我们知道了要拟合的函数的系数。在实际应用中,这些权重才是我们要想方设法确定的。确定这些权重的过程,我们可以称为“机器学习”。

机器要从数据中学习,有一个重要的前提,就是数据中隐含的知识是要符合某种概率统计规律的,这是我们应用机器学习方法时经常忽视的一个隐含假设。

当我们有了一个满足某种统计规律的数据集合后,让机器从中学习(本质上就是拟合一个复杂函数),自然就有一个如何来衡量学习结果的问题,就像我们人类的学习会有考试作为衡量。这里我们引入了损失函数作为衡量的手段。

以有监督学习来解释。

我们有一个带有标签的数据集(相当于有了标准答案的试题集),假设我们用神经网络作为问题的模型,学习的问题就是从这些带有标签的数据出发,通过一定的手段去找到神经网络中合适的权重,这些权重使得对每一组输入,经过前向计算后,神经网络输出的结果和对应的标签一致。我们可以设想一下,假设数据集里面有一万条数据,这一万条数据依次输入神经网络,最终会有一万个结果(标签),这些结果和实际标签之间一般来说会有部分是不一致的(就相当于考试时做的题目有一部分和标准答案不一样),而衡量这些不一致的严重程度就是损失函数承担的功能。

这里介绍两种常用的损失函数:均方误差和交叉熵误差。

(1)均方误差

熟悉最小二乘法(膜拜一下勒让德和高斯)的同学,对此应该不陌生。它的数学表达式如下:

这里,yk表示神经网络的输出,tk表示经验数据给定的标签值,k表示数据的维数。这里其实也可以从距离的角度来看,就是相当于神经网络输出结果和真实结果之间的距离。

(2)交叉熵误差

误差表达式如下所示:

这里,yk表示神经网络的输出;tk表示经验数据给定的标签值,并且只有正确解标签的值为1,其他均为0(one-hot表示)。也就说,交叉熵误差的值只与正确解标签所对应的输出结果有关。

特别解释一下one-hot表示。这是常用的一种编码方式。假设输出结果有10个类,对应10个输出神经元。经验数据中的标签,正常是用0~9之间的整数表示该记录所属的类别。用one-hot表示时,假设一条输入数据的标签类别是3,那么用one-hot编码,它的类别就是[0001000000], 神经网络输出可能是这样10个数字 [0.0,0.0,0.05,0.7,0.0,0.1,0.0,0.05,0.2,0]。计算交叉熵误差时,其实只是计算了-log0.7.

(3)深入理解损失函数

定义损失函数的目的是为了衡量神经网络对一组输入数据的判断结果和真实结果之间的误差。从这个角度考虑,只要能够满足距离定义的函数都可以作为损失函数,那么我们为何要选择上述两种常用函数呢?

这跟我们后面将要采用的权重优化策略有关。通常的优化方法都是通过求导进行的,因为函数优化时,导数指明了寻优的方向。而导数真实的含义是什么呢?它表达的是当自变量有微小变化时,因变量是如何变化的。在这里,就是当神经网络的权重参数有微小变化时,损失函数的值是如何变化的。当我们找到了这个变化的方向,也就知道了该如何调整权重达到损失函数值最小。这就是算法优化过程。

顺道吐槽一下,关于“函数”一词的翻译。真的不知道为啥会用这么个词,害的我好多年对这个词有误解。不知道其他同学怎么想的。知道有一天我看英文原版的书,发现“function”的真正含义时,才算彻底明白了“函数”一词,其实就是对某个变量施加了“作用”,让“它”变化。有好多数学名词,比如导数也是,在英文里面其实是很直白的,但在翻译时不知道出于什么原因变味了,因此建议大家看一些数学概念时,可以再回去找找英文原词。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190212G0LQ3H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券