目录

一.损失函数、代价函数和目标函数

损失函数与代价函数

目标函数

常用损失函数

1.0-1 损失函数

2.平方损失函数

3.均方误差损失函数

4.交叉熵损失函数

5.Softmax 损失函数

二.优化方法之梯度下降

批量梯度下降法(Batch Gradient Descent,BGD)

随机梯度下降法(Stochastic Gradient Descent,SGD)

小批量梯度下降法(Mini-Batch Gradient Descent, MBGD)


​​​​​​​

一.损失函数、代价函数和目标函数

模型的学习,实际上就是对参数的学习。参数学习的过程需要一系列的约束,这个约束就是损失函数

损失函数与代价函数

咱们回想一下人类的学习过程。假设我们要跟小朋友介绍狮子,我们会给他几张狮子的照片,并告诉他狮子都有哪些特征。小朋友以后就知道,当看到一只动物满足这些特征的时候,它就是狮子。但是小朋友一般要多看几次才能记住狮子的样子,并且狮子尾巴的长短,皮毛颜色的深浅,鬃毛的浓密程度等,都会影响他的判断。不断认清狮子的过程就是一个不断调整自己认知的过程。

训练模型也是一样的。模型一开始什么也不知道,此时如果我们输入一个数据,模型的输出是没有意义的,所以,我们要给它更多的数据。模型每次拿到数据,都要将自己的输出和真实的结果进行比较,如果偏差很大,它就要对这个偏差进行反馈,想办法减少这种偏差,也就是学习更多的特征,直到学会如何对输入数据进行正确的判断。

这就是机器学习的一个抽象的过程。说起来很简单,但其中需要很多知识和概念。
例子:


我们现在有一些数据样本,需要用一条函数曲线去拟合它的分布,经过某种方式学习后,我们得到了 3 种曲线:

f1欠拟合                                                        f2过拟合                                                         f3正好

假定这几个样本点的真实函数式为 F(x),我们拟合出来的函数式为 f(x)。那么,对于每一个样本点,真实值和拟合值之间就存在了一个误差,我们可以通过一个公式来表示这个误差:
损失函数(loss fuction):L(x)=(F(x)-f(x))2。
通过这个计算函数,我们可以知道用这个拟合函数去表示真实函数时,表示效果的好坏。损失函数越小,拟合函数就能越好的拟合真实函数。
但实际上,我们手里的样本点还是挺多的,它们构成了一个训练集。我们将训练集上所有点的拟合误差做一个平均,可以用如下的函数进行表示:
代价函数(cost function):

这个函数我们称为代价函数(cost function),这种训练集数据的平均损失,我们称为经验风险。同样,只要我们将经验风险最小化,那么拟合出来的函数就会更接近实际的函数。

一般来说,损失函数是针对一个样本,而代价函数是针对一个数据集,即所有样本的,但我们在实际工作中并不会严格区分它们


目标函数

当我们把经验风险最小化的同时,就意味着我们要尽力照顾到所有的样本点,那我们得到的函数有可能就成为前面红色的曲线,产生“过拟合”。同时也会让曲线变得复杂,带来更多的参数。

于是我们就需要解决两个问题:如何尽可能地减少参数,以及如何不要产生过拟合?

想一想,是不是我们在损失函数后面加上一个能够衡量模型复杂度的函数,让模型简单点,参数少一点就好了?

那什么函数可以让模型变得简单,或者让模型尽量不要过拟合呢?对的,就是我在“01 课时”提到的范数:
L1 范数可以实现权值稀疏,L2 范数则用来防止过拟合

我们在损失函数后面加上度量模型复杂度的函数 J(f),称作正则化(regularization)。L1 和 L2 范数是较为常用的度量模型复杂度的函数。训练集的平均损失为经验风险这个度量模型的复杂度函数项我们就称为结构风险

由此,我们将经验风险和结构风险同时最小化,就得到了如下的函数:

函数的第一部分就是刚才说的损失函数,J(f)就是正则化项,λ 为正则化项系数。

我们可以把 λ 看成是一种惩罚因子,如果我们不希望模型的结构风险(平均损失)太大,那么就可以增大 λ,这样模型就会朝着减小参数复杂度的方向训练。在实际项目开发中,正则化项不用在一开始添加,可以先只用带有经验风险项的损失函数来训练模型,模型训练结束后,再尝试加入正则化项,且 λ 也需要人为或者按照一定规律进行不断的调整和尝试。

常用损失函数

前面提到,损失函数是用来估量模型的预测值与真实值的不一致的程度。为了衡量这种不一致,人们提出了很多不同类型的损失函数,用于不同的场景和问题。这里我会介绍几个最常用的损失函数:0-1 损失函数、平方损失函数、均方差损失函数、交叉熵损失函数和 Softmax 损失函数。我们依次来看。

1.0-1 损失函数

我们评估一个分类模型的时候,最简单的评估方法就是:如果模型预测对了,我们就认为损失函数的值为 0,如果模型预测错了就给出 1。这个就是最简单的 0-1 损失函数,公式化的表示就是:

但 0-1 损失函数不能求导,所以在深度学习中,无法被应用于反向传播。0-1 损失函数是最简单的损失函数,它具有十分重要的意义。

2.平方损失函数

上文中咱们在介绍损失函数的时候,讲到这样一个公式:L(x)=(F(x)-f(x))2。这个就是平方损失函数,它直接测量了机器学习模型的输出与实际结果之间的距离,一般多用于回归问题

3.均方误差损失函数

均方误差(Mean Squared Error,MSE)是回归损失函数中最常用的误差,它是预测值与目标值之间差值的平方和/数目。其公式化表示为:


其中 s 为目标值的向量表示,y 为预测值的向量表示。

4.交叉熵损失函数

说到交叉熵,你是不是想到了之前咱们在“01 课时”中提到的熵,也就是如下函数:


我们把函数的格式稍微改变一下就得到了交叉熵损失函数(Cross entropy loss)的公式:

其中,p(x) 表示真实概率分布,q(x) 表示预测概率分布。

通过函数不难发现,交叉熵损失函数实际上就是通过缩小两个概率分布的差异(误差),来使预测的概率分布尽可能达到真实的概率分布一般多用于分类问题

5.Softmax 损失函数

在学习 Softmax 损失函数之前,我们先来回顾一下我在《02 | 从神经元说起:结构篇》中讲到的 Softmax 函数。Softmax 函数是深度学习中使用非常频繁的一个函数,它可以把输入的几个数映射为 0-1 之间的实数,并且归一化后仍能够保证几个数的和为 1。它的公式化表示为:

假设有一个数组,共有 T 个元素,其中第 j 个元素的 Softmax 值就可以通过上面的公式计算得到,即该元素的指数与所有元素指数和的比值。

回到刚才的交叉熵损失函数公式中的 q(xi),也就是预测的概率分布,如果我们换成 Softmax 方式的表示,即为:

该损失函数我们就称为Softmax 损失函数(Softmax loss),也称为 Softmax with cross-entropy loss,它是交叉熵损失函数的一个特例,和交叉熵损失函数一样,一般也用于分类问题。

二.优化方法之梯度下降

有了约束(损失函数),模型就可以根据它来学习,而这个学习又要使用到优化方法,也就是模型如何学习或更新。

优化算法实际上做的就是如何在模型表征的空间中找到模型评估效果指标最好的模型的过程。具体来说,假定我们有一个函数 f(x), 我们需要找到一组参数权重,使 f(x)的值最小。常见的优化方法包括梯度下降法牛顿法拟牛顿法共轭梯度法等,种类和变体非常多,不同的优化方法适用场景有所不同,但目的都是为了寻找最优的模型。

这些优化方法,在实际的深度学习模型研发过程中,都已经有了现成的封装好的函数,直接使用即可。但是为了更好地理解深度学习模型的内部机制,我们有必要了解它们。这一课时,我就来带你了解最经典的梯度下降法(Gradient Descent)。

梯度下降法是最早、最简单,也是使用最多的优化方法。为了便于理解,我们通过一个下山的例子来看。

假设现在有一座山,你站在山顶,但是你有点饿,想赶紧下山,去饭店吃饭,那此时我们该怎么办呢?

在不考虑性命危险的情况下,最快的方法就是:哪个地方坡度大,哪个地方最陡峭,就往哪里走。于是,在确认自己的位置之后,我们就可以对比当前所在位置的所有方向,寻找坡度下降最快的方向,然后往前走一步到达新的位置,再寻找新的位置所有方向中下坡度最陡的方向,如此反复,直到达到最低点。

这就是梯度下降法最直观的表示。“梯度向量的方向即为函数值增长最快的方向”。这个结论的实际应用之一就是梯度下降法。

具体来说,在一个三维空间曲线中,任何一点我们都能找到一个与之相切的平面(更高维则是超平面),这个平面上有无穷多个方向,但是只有一个是曲线函数下降最快的梯度。每次优化我们都沿着最快下降的梯度方向进行,这就是梯度下降。

下山的过程中,方向很关键,但是步子大小也同样重要。步子太大了,就可能跑到别的山谷中,也有可能永远也走不到饭店的位置,最后每次都要多走一段然后再走回来,反反复复地在接近和远离饭店的路上大踏步地走动(在模型训练中,这种反复称为“震荡”);但步子太小就要计算很多次,还没有走到饭店,人就饿死了。

这个步子的大小,在算法中就是参数的学习率(learning rate)。绝大多数情况下,因为步长的存在,我们不可能走到最精确的最低点,最后会在最小值的某一个区域内反复震荡。这个误差我们是可以接受的,如果在一段时间内误差没有发生新的变化,那我们就可以近似地认为训练已经收敛了。

批量梯度下降法(Batch Gradient Descent,BGD)

假设有一个线性回归函数模型,y 是真实的数据分布函数,hθ(x)是我们拟合的函数,θ 是参数,也是我们要求的权值。那我们整个优化的过程,就是为了找到最好的 θ损失函数J(θ)可以表示为:

其中,m 表示样本数量。要想拟合真实分布,那么损失函数就要最小(误差最小),为了得到这个最小值,我们就要使用梯度,即“梯度向量的方向即为函数值增长最快的方向”,让损失函数以最快的速度减小。

因此,我们要先对 J(θ)中的 θ 求偏导数,这样就可以得到每个 θ 对应的梯度


得到了每个 θ 的梯度之后,我们就可以按照下降的方向去更新每个 θ

其中α为学习率。更新 θ 后,我们就得到一个更新之后的损失函数,它的值也就更小了,我们就越接近要拟合的函数了。

从以上过程我们可以看到,这个方式的优化可以得到全局的最优解,因为每次都会使用所有的 m 个样本。但在很多的场景中,样本很多,如果每走一步就要动用全部的数据,会造成十分庞大的计算量因此,在数据量大的场合我们一般不推荐使用批量梯度下降法。为了解决这个问题,随机梯度下降法就出现了。

随机梯度下降法(Stochastic Gradient Descent,SGD)

不同于批量梯度下降法,随机梯度下降每次只使用一个随机选择的样本来更新θ,则更新过程变成了:

SGD 在每轮迭代中,会根据随机选择的一条数据对应的损失函数值来优化,这样一来,即便样本数量很大,整个过程也只需要使用其中一部分数据就可以完成更新了。每一轮参数的更新速度会大大加快,能够更快地得到最优解。

但 SGD 带来高速和便捷的同时,也带来了一些风险。

比如,我们的训练数据中不可避免地会存在错误样本,即噪声数据。如果在一次更新中好巧不巧的,就是使用了噪声数据,就会造成一定程度的准确度的下降,这一次优化就不是朝着最好的方向发展了。此外,因为每次只用一个样本进行优化,而单个样本并不能代表全体样本的情况,所以可能会收敛到局部最优

随机梯度下降方法用损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了最终总体的优化效率的提高。当然,这个过程中增加的迭代次数是要远远小于样本的数量的。

小批量梯度下降法(Mini-Batch Gradient Descent, MBGD)

MBGD 的方法实际上相当于批量梯度下降和随机梯度下降的折中,即每次使用一个固定数量的数据进行优化。这个固定数量,就是 Batch Size。

不同于批量梯度下降,该方法每次选择一个 Batch(例如 32、64 等)进行优化,这会显著减少每次的计算量,提高收敛的速度。并且,在实际的计算过程中,引入了矩阵计算,让该方法计算速度并不比 SGD 慢太多。

需要注意的是,Batch Size 也是一个不断尝试的参数,过大过小都不好。如果 Batch Size 太大,每次计算的样本数就大,计算量就会急剧增大,内存或者显存的空间占用也就大如果太小,则达不到 Batch Size 的初衷

基于随机梯度下降法,人们又提出了 Momentum、Nesterov Momentum 等方法,这部分知识可以自行查阅学习。

04 | 函数与优化方法:模型的自我学习(上)相关推荐

  1. SELECT后面有自定义函数的优化方法

    又是EBS,一个SQL有700多行,要跑2个多小时,EBS开发请求帮忙优化 因为SQL太长,将其做了简化处理,简化后的SQL文本如下: INSERT INTO nso_allocaton_fr_tmp ...

  2. 模型优化之模型融合|集成学习

    目录 模型融合 Bagging 随机森林RF Boosting Adaboost GBDT Xgboost Stacking Blending 结合策略 平均法 投票法 学习法 在机器学习训练完模型之 ...

  3. 05 | 前馈网络与反向传播:模型的自我学习(下)

    1.前馈网络 前馈神经网络(Feedforward Neural Network,FNN),简称前馈网络,它是一种单向的多层结构,也是最简单的神经网络,其简化结构图如下所示: 在这个网络中,蓝色的层是 ...

  4. 贝叶斯优化方法和应用综述

    贝叶斯优化方法和应用综述 各类优化算法入门优秀论文总结目录 1.摘要 设计类问题在科学研究和工业领域无处不在.作为一种十分有效的全局优化算法,近年来,贝叶斯优化方法在设计类问题上被广泛应用.通过设计恰 ...

  5. 30种MySQL查询语句优化方法分享

    30种MySQL查询语句优化方法分享,对于MySQL查询语句来说效率是最重要的能用一分钟搞定的绝不能花费两分钟.今天整理了30种MySQL查询语句优化方法,供大家学习使用. 30种MySQL查询语句优 ...

  6. 计算机中函数counta表示,excel中counta函数的使用方法

    你还在为Excel中counta函数的使用方法而苦恼吗,今天小编教你Excel中counta函数的使用方法,今天,学习啦小编就教大家在counta函数的使用方法. Excel的counta函数的使用方 ...

  7. 深度学习常见的优化方法(Optimizer)总结:Adam,SGD,Momentum,AdaGard等

    机器学习的常见优化方法在最近的学习中经常遇到,但是还是不够精通.将自己的学习记录下来,以备不时之需 https://www.cnblogs.com/GeekDanny/p/9655597.html

  8. 视频教程-Excel常用公式函数 if函数 vlookup函数的使用方法视频教程-Office/WPS

    Excel常用公式函数 if函数 vlookup函数的使用方法视频教程 本人张光欢,在2018年4月1日注册公司邢台水滴计算机科技有限公司,从事于计算机软硬件开发,信息技术咨询服务 张光欢 ¥12.0 ...

  9. 7. 强化学习之——基于模型的强化学习

    目录 课程大纲 基于模型的强化学习概要 基于环境模型的价值函数优化 model-based value-based RL 基于环境模型的策略优化 model-based policy-based RL ...

最新文章

  1. selenium 定制启动 chrome 的选项
  2. (009) java后台开发之堆和栈的区别
  3. linux主机数据拷贝,linux 服务器之间拷贝文件
  4. CF700E Cool Slogans(SAM,dp)
  5. 客户关系管理(第3版) Customer Relationship Management,3 ...
  6. Mapillary发布世界最大交通标志数据集,用于自动驾驶研究
  7. dns bind配置教程
  8. linux内核ttyusb实现,[zhuan]Linux的USB-Serial驱动(从系统初始化到生成tty设备的全过程)...
  9. 【博客搬家】【转】matlab 6.5和7.0中simulink模型的兼容问题
  10. 『迷你教程』数据分析都不知道的非参数统计概论
  11. C程序设计语言(KR)笔记
  12. 计算机控制系统信号恢复之零阶保持器
  13. pearson特征选择matlab,常用的特征选择方法之 Pearson 相关系数
  14. XGBOOST的基本原理以及使用
  15. 一款优雅的消息提示插件Message.js
  16. echarts4.8.0最新版本下载,亲测可用
  17. EF 配置Oracle数据库 EF ORA-01918: 用户 'dbo' 不存在
  18. 你需要的导航网站,这里都有
  19. 线性代数笔记(6) 矩形的相似——标准型与约当标准型及求法
  20. 使用随机森林填补缺失值

热门文章

  1. ubuntu下JDK的自动安装和手动安装
  2. Java基础篇(03):流程控制语句,和算法应用
  3. JavaEE基础(03):Http请求详解,握手挥手流程简介
  4. 记录hive sql报错,return code1和return code2解决方法
  5. abap 优化之ST05
  6. Commons Collections学习笔记(四)
  7. 工信部:加强中欧在5G、物联网等领域合作
  8. 打造TypeScript的Visual Studio Code开发环境
  9. HDU Problem 4857 逃生【拓扑排序+优先队列】
  10. 基于动态混合高斯模型的商品价格模型算法