4. 深度学习-损失函数

  • 我们知道神经网络是一种非线性模型,激活函数就是用来映射为非线性的,激活函数是保证神经网络非线性的关键。但是模型的参数我们如何求得最优组合呢?用什么评价标准呢?

1. 经验风险,期望风险,结构风险

  • 如何选择最优参数和评价一组参数是最优的,这就是机器学习中的策略,也就是性能度量P,在李航的《统计学习方法》和周志华的《机器学习》中开篇都曾讲过,这里不再详细介绍。传统的机器学习的策略采用经验风险 最小化原则。要降低经验风险,就要提升模型的复杂度,但是回导致 VC 维很高(如果人类的智商水平可以用大脑的脑细胞数来衡量,那么机器的智商水平就可以用VC维比喻来衡量)。VC维高,置信风险越高,所以结构风险也就高。这就产生了过拟合现象,因此我们针对不同的问题选择不同的策略,使结构风险最小化。

  • 损失函数(Loss Function)是一种用来估算实际值与模型的预测值之间的不一样程度的函数式。通常,它是一种非负值的函数,其值越小,鲁棒性就越好,模型就越稳定。损失函数是针对一个样本而言的,通过损失函数,只能知道模型的决策函数对单个样本的预测能力,但是我们要知道其对整个训练集的预测能力,甚至对新数据的预测能力。如果想知道对整个训练集的预测能力,只需要对训练样本分别损失函数的值,然后进行累加,最后求一个均值即可。这就是经验风险

  • 经验风险越小,说明模型对训练集拟合的效果好,但是对测试集(新数据)的拟合效果如何,有待商榷。那我们如何去衡量所有样本(训练集,测试集,及后期线上产生的数据)的拟合效果呢?从概率论,我们首先想到的是使用期望风险,即假设 XY服从联合分布P(X,Y),期望风险的数学公式为:R_{exp}(f)=E_{p}[L(Y,f(x))]=\int L(f(x),y)*p(x,y)dxdy,其中L(f(x),y)表示损失函数f(x)表示预测值y表示实际值

  • 期望风险是全局的概念,而经验风险是局部的概念。理想的模型希望期望风险最小化,但是期望风险往往不可以得到(未知的数据具有不确定性), XY的联合分布P(X,Y)函数不易得到。为了期望风险最小化,我们采用局部最优代替全局最优的思想,这是因为训练数据足够大,根据大数定理,经验风险应该接近期望风险,这也是经验风险最小化的理论基础。

  • 如果只考虑经验风险,大多数出现过拟合的现象,考虑到期望风险,但是未知的数据不易得到和存在不确定性。两者不能兼顾也,这时该怎么办呢?这就引出了结构风险。结构风险是经验风险加上置信风险,其中置信风险是指模型对未知样本预测的误差。我们知道SVM能够在小样本上优于其他算法,就在于其优化策略使结构风险最小。

  • 置信风险的影响因素有两个:训练样本数量和模型的VC维。训练样本的数量越多,置信风险就越小;模型的VC维越大,模型的假设空间就越大,模型解的种类就越多,拟合能力就越差,置信风险就越大。因此我们增加训练集的数据量和降低模型的VC维,才能降低置信风险,从而使结构风险降低。通常降低模型的VC维的做法是模型加入一个正则化项(惩罚项)。这也是为什么我们建立的模型往往要加入L1,L2范式了。

  • 为了同时保证经验风险和置信风险都达到最小化,这时将两项通过一个权重系数\lambda,融合为一个式子,通过调节超参数\lambda的值,来平衡经验风险和置信风险,使结构风险最小。

  • 上面说那么多,总结起来就是下面几句:

    • 经验风险是局部的。损失函数基于训练数据最小化;
    • 期望风险是全局的。损失函数基于训练数据+测试数据最小化;
    • 置信风险是损失函数基于未知样本最小化,通常增加训练数据量和加入正则化项;
    • 结构风险是经验风险+置信风险。
  • 我们知道了结构风险的概念,但是我们的目的是使结构风险最小,如何让结构风险最小呢?通常我们使用目标函数,让目标函数最小化。目标函数的一般形式是J=arg min_{m}\sum _{i}L(y_{i},f(x_{i};w))+\lambda \Omega (w),其中L是损失函数,\Omega:正则化项

2. 损失函数

  • 有上面的知识,我们知道要建立一个很好的模型,需要损失函数。损失函数多种多样,但是一定满足两个原则。
    • 非负性;
    • 当预测值与真实值接近时,损失函数趋于0。

2.1 0-1 损失函数

  • 假设在二分类问题中,正类 Y=+1,负类 Y=-1,对于一个二分类模型f(x)

  • 定义 0-1 损失函数:

    • L(Y,f(x)) = \left\{\begin{matrix} 1, & Y*f(x)<0\\ 0, & Y*f(x)\geq 0 \end{matrix}\right.
  • 另一种形式:

    • L(Y,f(x)) = \frac{1}{2}(1-sign(y*f(x)))
  • 0-1 损失函数的意思是,预测对的时候,函数为0,预测错的时候,函数为1。更简单的理解就是0-1函数只取决于预测值与实际值乘积的正负号。很明显0-1损失函数是一个在定义域为0时,不可导,也不是一个连续函数,更不是一个非凸函数(这里不再解释这些概念,都是数学的基础知识)。因此该损失函数在求解模型参数时,存在很多不足之处。

2.2 交叉熵损失函数

  • 交叉熵损失函数是0-1函数的一种替换形式,。函数的形式如下:
    • L(Y,p(Y|X)) = -logP(Y|X)

2.2.1 表达式一

  • 运用交叉熵损失函数的典型算法是logistic回归算法(激活函数是sigmoid函数)。logistic不用均方差函数,使用logistic是有原因的。在推到均方差误差函数的时候,我们有一个假设前提,预测值与真实值的误差是白噪声,其实就是服从正态分布(高斯分布)。为什么假设误差是个白噪声呢?这就涉及到大学所学的概率论了,根据中心极限定理,我们知道数据足够多的时候,误差近似服从正态分布。而在推到logistic算法时,它假设样本服从0-1分布(伯努利分布),然后根据最大似然估计,求其最优解。逻辑回归没有极大化似然函数,我们将其转化为最小化负的似然函数。

  • logistic(Sigmoid)表达式为:

    • h_{\Theta }(x)=\frac{1}{1+e^{-\theta ^{\tau }x}}
  • logistic的Log损失函数表达式:

    • L( h_{\Theta }(x),y)=\left\{\begin{matrix} -log( h_{\Theta }(x)), & y=1\\ -log( 1-h_{\Theta }(x)),& y =0 \end{matrix}\right.
  • 我们知道,当真实值y=1时,我们希望自己的模型预测的也接近于1,即h_{\Theta }(x)在1的附近,这时损失函数L( h_{\Theta }(x),y)就趋于0,同理真实值y=0时,损失函数也趋于0。说明此函数满足损失函数的第二个原则。对于第一个原则,我们易知,log函数在定义域(0,1)内小于0,但是损失函数前面有一个负号,因此该损失函数也满足非负性。

  • 此处说明一下,该指数函数有的教材是以e为底,有的是以2为底,仔细想一下,每个编写教材的思考角度不一样,如果从数学推理的角度,设计算法时应该以e为底,因为自然常数e有着特殊的意义,可以推导出很多有意义的东西,比如幂级数,欧拉公式,素数定理等等。如果从计算机的角度,计算机喜欢0,1,也只识别0,1 我们使用2为底,能够加快我们的运算速度。这只是自己的浅理解,没有查看过相关文献,没有理论支撑。

  • logistic的损失函数整体表达式:

    • L( h_{\Theta }(x),y)=-y_{i}*log( h_{\Theta }(x))-(1-y_{i})*log( 1-h_{\Theta }(x))
  • 考虑到经验风险,损失函数为:

    • J(\theta )=\frac{1}{m}\sum_{i=1}^{m}-y_{i}*log( h_{\Theta }(x))-(1-y_{i})*log( 1-h_{\Theta }(x))
  • 上试就是交叉熵函数。

2.2.2 表达式二

  • 对于sigmoid函数,有

    • h_{\theta }(-x)=\frac{1}{1+e^{-\theta ^{T}(-x)}}
          =\frac{1}{1+e^{\theta ^{T}x}}
          =1-\frac{e^{\theta ^{T}(x)}}{1+e^{\theta ^{T}(x)}}
          =1-\frac{1}{1+1/e^{\theta ^{T}(x)}}
          =1-\frac{1}{1+e^{-\theta ^{T}(x)}}
          =1-h_{\theta }(x)
  • 有了上试对sigmoid函数的推导,下面就容易处理了。我们知道在二分类中,假设y的取值,正类时:y=1,负类时:y=-1。对于sigmoid函数,我们将y也放入变量中,P(Y|X) = h_{\theta }(yx),其损失函数的形式如下:

    • L(Y,p(Y|X)) = -logP(Y|X)
          =-log(h_{\theta }(yx))
          =\left\{\begin{matrix} -log(h_{\theta }(x)), &y=1 \\ -log(h_{\theta }(-x))=-log(1-h_{\theta }(x)), & y=-1 \end{matrix}\right.
  • 经验风险的损失函数为:

    • J(\theta )=\frac{1}{m}\sum_{i=1}^{m}-log(h_{\theta }(yx))
         =\frac{1}{m}\sum_{i=1}^{m}-log(1/(1+e^{-\theta ^{T}yx}))

2.2.3 交叉熵损失函数+Sigmoid激活函数

  • 有了激活函数的基础,我们知道在做二分类的时候,通常输出层选择sigmoid激活函数。现在谈谈为什么在激活函数为sigmoid下,我们要选择交叉熵损失函数,而不选择均方误差损失函数。其实有两方面原因:

    • 第一原因。先天条件不满足,sigmoid假设样本服从伯努利分布,而均方误差函数假设服从白噪声。
    • 第二个原因。sigmoid激活函数 + MSE(均方误差)损失函数收敛速度慢。这里不再陈述为何收敛速度慢,上一遍文章讲激活函数的时候,就是在MSE损失函数下,sigmoid函数为何梯度消失的问题。
  • 那疑问来了,为何在交叉熵损失函数下,为何sigmoid的收敛速度快了呢?这里不再介绍过程了,这涉及到前向传播和后向传播,不是几句话能说明白的。它收敛变化的原因就是它的梯度不含有激活函数的导数,在最后一层是预测值与实际值的差,差值大的时候,梯度大些,能快速靠近收敛点差值小了,梯度小些,缓慢的靠近收敛点,防止在收敛点震荡。

2.3 对数似然损失函数

  • 对数似然损失函数其实是交叉熵损失函数的推广。

  • 对数似然损失函数的表达式;

    • J(\theta )=\sum_{k=1}^{K}y_{k}log(f(x))
         =\sum_{k=1}^{K}y_{k}log(\frac{e^{\theta_{l}^{T}x}}{\sum_{l=1}^{K}e^{\theta_{l}^{T}x}})
  • 常常激活函数选择softmax时,我们选用对数似然损失函数。这是因为我们在选择模型函数的时候,选择的是softmax函数。我们知道softmax激活函数,通常用来解决多分类并且类与类之间是互斥的。因此当我们的某一个样本x_{i},实际标签属于2类(假设类别有1,2,3,...),从而只有y_{2}=1,其他的都为0(y_{k}=0,k\neq 2),导致损失函数为J(\theta )=\sum_{k=1}^{K}y_{k}log(f(x))=log(\frac{e^{\theta_{l}^{T}x}}{\sum_{l=1}^{K}e^{\theta_{l}^{T}x}})

2.4 Hinge 损失函数

  • 对于二分类问题,假设输出的y=1,-1。Hinge (合页)损失函数的表达式:
    • L(y,f(x))=max(0,1-f(x)*y)
  • 运用Hinge损失函数的典型分类器是SVM算法,f(x)\geq 1。我们可以知道,当预测对的时候,同号,hinge loss为0;当预测错的时候,异号,hinge loss为1。
  • Hinge损失函数对判定边界附近点(错误越大的点)和离群点的惩罚力度较高,由于错分导致分类误差会很大,如此便会影响整个分类超平面的学习,从而降低模型泛化能力。

2.5 指数损失

  • exp-loss主要用于以boosting思想,设计的算法,主要有AdaBoost算法和提升树(boosting tree)系列算法。
  • 具体形式:
    • L(y,f(x))=exp(-y*f(x))

2.6 均方误差损失函数

  • 均方误差损失函数较多用于回归任务,它假设样本和噪声都是服从正态分布的。它也是一个连续函数。
  • MSE 公式:
    • L(y,f(x))=(y-f(x))^{2}
  • 特点:
    • 计算方便,只是平方运算,不含较为复杂的幂运算;
    • 欧氏距离是一种很好的相似度度量标准;
    • 在不同的表示域变换后特征性质不变。

2.7 绝对值损失函数

  • 具体公式

    • L(y,f(x))=\left | (y-f(x)) \right |
  • 绝对值损失和 MSE 损失类似,不同之处在于平方损失函数更平滑。绝对值损失在预测值等于真实值时,存在间断点,实际中几乎不用,因为在间断点时,损失函数不可导。

2.8 自定义损失函数

  • Tensorflow 不仅支持常用的损失函数,还支持自己定义函数。因为在实际项目中,有的损失函数不适用,需要自己去定义函数。比如,在预测商品销量的时候,假设商品的成本是1元,销售价是10元,如果预测少一个,意味着少挣9元,但是预测多一个,意味着损失1元,客户希望利润最大化,那该如何选择损失函数?
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容