量化百科

【深度学习之美15】如何感性认识损失函数?

由ypyu创建,最终由ypyu 被浏览 9 用户

损失函数的定义

我们知道,在机器学习中的“有监督学习”算法里,在假设空间 中,构造一个决策函数 ,对于给定的输入 ,由 给出相应的输出 ,这个实际输出值 和原先预期值 可能不一致。

于是,我们需要定义一个损失函数(loss function) ,也有人称损失函数为代价函数(cost function)来度量预期和实际二者之间的“落差”程度 。这个损失函数通常记作

$L(Y,\overline Y ) = L(Y,f(X))$

,其中

$Y$

为预期输出值(也称标签),

$\overline Y =f(X)$

为实际输出值,

$X$

为样本。为了方便起见,这个函数的值为非负数。

常见的损失函数有如下3类:

(1)0-1损失函数(0-1 loss function):

L(Y,f(X)) = \left\{ \begin{array}{l} 1,{\rm{ }}Y \n ef(X){\rm{ }} \\ 0,{\rm{ }}Y = f(X) \\ \end{array} \right

(2)绝对损失函数(absolute loss function)

$L(Y,f(X)) = |Y - f(X)|$

(3)平方损失函数(quadratic loss function)

$L(Y,f(X)) = {(Y - f(X))^2}$

损失函数值越小,说明实际输出 和预期输出 的差值就越小,也就说明我们构建的模型越好。对于第一类损失函数,我们用减肥的例子很容易解释。

图8-5 损失函数与减肥

就是减肥目标达到没?达到了,输出为0(没有落差嘛),没有达到输出1(减肥尚未成功,胖纸还需努力!)

对于第二类损失函数就更具体了。当前体重秤上读数和减肥目标的差值,这个差值有可能为正,但还有可能为负值,比如说,减肥目标为150磅,但一不小心减肥过猛,减到140磅,这是值就是“-10”磅,为了避免这样的正负值干扰,干脆就取一个绝对值好了。

对于第三类损失函数,类似于第二类。同样达到了避免正负值干扰,但是为了计算方便(主要是为了求导),有时还会在前面加一个系数“1/2”,这样一求导,指数上的“2”和“1/2”就可以相乘为“1”了:

$L(Y,f(X)) = \frac{1}{2}{(Y - f(X))^2}$

当然,为了计算方面,还可以用对数损失函数(logarithmic loss function)。这样做的目的在于,可以使用最大似然估计的方法来求极值(将难以计算的乘除变成容易计算的加减)。一句话,咋个方便咋样来!

或许你会问,有了这些损失函数?有啥用呢?当然有用了!因为可以用它反向调整网络中的权值(weight),让损失(loss)最小啊。

我们都知道,神经网络学习的本质,在很大成大上,其实就是利用“损失函数(loss function)”,来调节网络中的权重(weight)。而“减肥”的英文是“weight loss”,所以你看,我用减肥的案例来讲这个“损失函数”,是不是很应景啊?

或许你又会说,就算应景,那神经网络的权值,到底该咋个调法咧?

总体来讲,有两大类方法比较好使。第一类方法从后至前调整网络参数,第二类方法正好相反,从前至后调整参数。第一类方法的典型代表就是“误差反向传播”。第二类方法的代表就是目前流行的“深度学习”。

对于第一类方法,简单说来,就是首先随机设定初值,然后计算当前网络的输出,然后根据网络输出与预期输出之间的差值,采用迭代的算法,反方向地去改变前面各层的参数,直至网络收敛稳定。

这个例子说起来很抽象,我们用减肥的例子感性认识一下。比如说,影响减肥的两个主要因素是“运动”和“饮食”,但它们在减肥历程中的权值,并不了然。如果我减肥目标是150磅,而体重秤上给出实际值是180磅,这个30磅的落差,反过来调整我“运动”和“饮食”在减肥过程中的权值(是多运动呢,还是多吃点低卡食物呢?)。

大名鼎鼎的BP算法,是由杰弗里•辛顿(Geoffrey Hinton)和大卫•鲁姆哈特(David Rumelhart)等人1986年提出来的 ,其论文 “通过反向传播错误学习特征(Learning Representations by Back-propagating errors)”发表在著名学术期刊《Nature》(自然)上。该论文首次系统而简洁地阐述了反向传播算法在神经网络模型上的应用。

BP反向传播算法非常好使,它直接把纠错的运算量,降低到只和神经元数目本身成正比的程度。现在,我们可以回答上一章中提出的问答了,是哪位“王子”把人工智能这位“白雪公主”吻醒的呢?是的,没错,他就是当前的这位“深度学习”教父杰弗里•辛顿!

图 8-6 吻醒“人工智能”的白马王子:杰弗里•辛顿


热力学定律与梯度扩散

BP算法非常经典,在很多领域都有着经典的应用。在当年,它的火爆程度在绝不输给现在的“深度学习”。但后来,人们发现,实际用起来,BP算法还是有些问题。比如说,在一个层数较多网络中,当它的残差反向传播到最前面的层(即输入层),其影响已经变得非常之小,甚至出现梯度扩散(gradient-diffusion),导致参数调整失去方向性。

其实,这也是容易理解的。因为在“信息论”中有个信息逐层缺失的说法,就是说信息在逐层处理时,信息量是不断减少的。例如,处理A信息而得到B,那么B所带的信息量一定是小于A的。这个说法,再往深层次的探寻,那就是信息熵的概念了。推荐读者阅读一部影响我世界观的著作**《熵:一种新的世界观》**。

根据热力学第二定律,我们知道,能量虽然可以转化,但是无法100%利用。在转化过程中,必然会有一部分能量会被浪费掉。这部分无效的能量,就是“熵”。把“熵”的概念,迁移到信息理论,它就表示“无序的程度”。

当一种形式的“有序化(即信息)”,转化为另一种形式的“有序化”,必然伴随产生某种程度上的“无序化(即熵)”。依据这个理论,当神经网络层数较多时,BP反向传播算法中“误差信息”,就会慢慢“消磨殆尽”,渐渐全部变成无序的“熵”,因此就无法指导神经网络的参数调整了。

图8-7 熵-->无序化

因为这个特性,早期凡是基于BP算法的人工神经网络基本没有操作7层的。所以网络的层次也就被定格在“浅度网络”这个级别。

再后来,第二类神经网络参数调整方法就孕育而生了。它就是当前主流的方法,也就是“深度学习”常用的“逐层初始化”(layer-wise pre-training)训练机制,不同于BP的“从后至前”的训练参数方法,“深度学习”采取的是一种从“从前至后”的逐层训练方法。


\

标签

深度学习损失函数深度学习算法函数