深度学习-何如计算偏差(图片有问题,后期修复)

前言算法

偏差计算是深度学习中的核心,很是重要!!! 关于偏差计算,有以下概念:编程

  • 损失函数(Loss Function) : 定义在单个样本上的, 算的是一个样本的偏差
  • 代价函数(Cost Function) : 定义在整个训练集上的, 是全部样本偏差的平均, 也就是损失函数的平均
  • 目标函数(Object Function): 最终优化的函数.等于经验风险+结构风险(也就是Cost Function+正则化项)
  • 风险函数(Risk Function) : 风险函数是损失函数的指望
  • 过拟合(Over-Fitting) : 过分拟合训练集, 致使它在真正预测时效果会很很差
  • 正则化(Regularization) : 经过下降复杂模型的复杂度来防止过拟合的规则称为正则化,具体见'正则化'
  • 极大似然估计(MLE) :
  • 权重衰减(weight decay) : 具体见'正则化'
  • Dropout : 具体见'Dropout'
  • MSE: 均方偏差(Mean squared error)
  • RSS: 残差的平方和(residual sum of squares)
  • 均方差代价函数: 见二次代价函数

下面咱们举个例子解释一下:(图片来自Andrew Ng Machine Learning公开课视频):网络

上面三个图的函数依次为f1(x), f2(x), f3(x). 咱们是想用这三个函数分别来拟合Price, Price的真实值记为Y机器学习

损失函数函数

咱们给定x, 这三个函数都会输出一个f(X),这个输出的f(X)与真实值Y多是相同的, 也多是不一样的. 为了表示咱们拟合的好坏, 咱们就用一个函数来度量拟合的程度:学习

这个函数就称为损失函数(loss function)或者叫代价函数(cost function) (有的地方将损失函数和代价函数没有细分也就是二者等同的).优化

损失函数越小, 就表明模型拟合的越好.视频

风险函数blog

那是否是咱们的目标就只是让loss function越小越好呢?还不是!!!图片

因为咱们输入输出的(X,Y)遵循一个联合分布, 可是这个联合分布是未知的(包含未知的样本),因此没法计算!!!

可是咱们是有历史数据的-就是训练集, f(X)在训练集的平均损失称做经验风险

风险函数是损失函数的指望.因此咱们的目标就是最小化经验风险,称为经验风险最小化

过拟合

经验风险最小就必定好吗?还不是!!!

咱们看最右面的 f3(x) 的经验风险函数最小了, 由于它对历史的数据拟合的最好!!!
可是咱们从图上来看它确定不是最好的, 由于它过分学习训练集, 致使它在真正预测时效果会很很差, 这种状况称为过拟合(over-fitting)

过拟合很差,因此要尽可能避免

防止过拟合, 比较经常使用的技术包括:

  • 尽可能减小选取参数的数量(当你舍弃一部分特征变量时, 你也舍弃了问题中的一些信息)
  • L1, L2 范数
  • 训练集合扩充,例如添加噪声、数据变换等
  • Dropout

 

正则化(Regularization)

咱们不只要让经验风险尽可能小, 还要让结构风险尽可能小, 怎么解决???

经过对模型参数添加惩罚参数来限制模型能力,能够下降模型的复杂度来防止过拟合,这种规则称为正则化

正则化中咱们将保留全部的特征变量, 可是会减少特征变量的数量级

咱们定义了一个函数J(f) 用来度量模型的复杂度

经常使用的正则化公式:

  • L1正则化项,标准如图(C0表明原始的代价函数, 后面那一项就是L1正则化项):

    L1正则化项: 所有权重w的绝对值的和, 乘以λ/n

    λ就是正则项系数, 权衡正则项与C0项的比重

    L1正则化项求导:

    上式中sgn(w)表示w的符号

    L1正则化项对w的更新的影响:

    比原始的更新规则多出了η * λ * sgn(w)/n这一项

    经过上图可知:

    在编程的时候令: sgn(0)=0, sgn(w>0)=1, sgn(w<0)=-1

    当w为正时, 更新后的w变小; 当w为负时, 更新后的w变大;

    它的效果就是使网络中的权重尽量为0, 也就至关于减少了网络复杂度, 防止过拟合

    L1 正则化能够理解为每次从权重中减去一个常数

  • L2正则化项,标准如图(C0表明原始的代价函数, 后面那一项就是L2正则化项):

    L2正则化项: 所有參数w的平方的和, 除以训练集的样本大小n

    λ就是正则项系数, 权衡正则项与C0项的比重

    '系数1/2'主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与'1/2'相乘恰好凑整

    L2正则化项求导:

    能够看到: L2对b的更新没有影响. 对w的更新有影响

    L2正则化项对w的更新的影响:

    w前面系数为'1−ηλ/n', 因为η、λ、n都是正的, 因此 '1−ηλ/n' 小于1

    经过上图可知:

    L2正则化的效果是减少w.这也就是权重衰减(weight decay)的由来

    L2正则化效果其实是使得参数a值每次都以必定的比例缩小, 防止参数变得过大, 防止过拟合

    L2正则化能够理解为每次移除权重的 x%

 

一般状况下, 深度学习中只对参数添加约束, 对偏置项不加约束. 主要缘由是偏置项通常须要较少的数据就能精确的拟合. 若是添加约束经常会致使欠拟合

目标函数

咱们的目标是让经验风险尽可能小, 还要让结构风险尽可能小!!!

最优化经验风险和结构风险, 而这个函数就被称为目标函数, 公式以下:

结合上面的例子来分析:

  • 最左面的f1(x) 结构风险最小(模型结构最简单), 可是经验风险最大(对历史数据拟合的最差)
  • 最右面的f3(x) 经验风险最小(对历史数据拟合的最好), 可是结构风险最大(模型结构最复杂)
  • 而f2(x) 达到了两者的良好平衡, 最适合用来预测未知数据集

 

没有最优的模型,只有更优的模型!!!

风险函数

机器学习的优化目标就是让预测值与真实值之间的偏差越小越好, 这种差异也叫作风险

风险分为经验风险, 指望风险, 结构风险

  • 经验风险(Empirical Risk) : 训练集的平均损失, 经验风险越小说明模型对训练集的拟合程度越好
  • 结构风险(Structural Risk): 使用正则化度量模型结构的复杂度. 越复杂的模型,结构风险越大
  • 指望风险(Expected Risk) : 全部样本(包含未知的样本和已知的训练样本)的平均损失

风险的性质:

  • 经验风险表示的是局部的概念, 是能够可求的
  • 指望风险表示的是全局的概念, 是理想化的不可求的
  • 结构风险是针对模型复杂度的,用来折中 经验风险 与 指望风险

代价函数

什么是代价函数?

假设有训练样本(x,y), 模型为h, 参数为θ, h(θ) = θTx(θT表示θ的转置), 那么:

任何可以衡量模型预测出来的值h(θ)与真实值y之间的差别的函数就叫代价函数C(θ)

若是有多个样本, 则能够将全部代价函数的取值求均值, 记作J(θ)

总的代价函数J(θ)能够用来评价模型的好坏, 代价函数的性质:

  • 对于每种算法来讲, 代价函数不是惟一的
  • 代价函数是参数θ的函数
  • 代价函数越小说明模型和参数越符合训练样本
  • J(θ)是一个标量
  • 选择代价函数时, 最好挑选对参数θ可微的函数(全微分存在, 偏导数必定存在)
  • 一个好的代价函数须要知足两个最基本的要求: 可以评价模型的准确性, 对参数θ可微

经常使用代价函数:

  • 交叉熵函数(Cross Entropy Cost): 是一个常见的代价函数, 在神经网络中也会用到
  • 二次代价函数(Quadratic Cost): 指望不符合,不太经常使用

二次代价函数(Quadratic Cost)

二次代价函数即均方差代价函数

二次代价函数: C表示代价, x表示样本, y表示实际值, a表示输出值, n表示样本的总数. 公式为:

当n=2时,简化公式为:

利用反向传播算法沿着梯度方向调整参数大小, w和b的梯度推导以下:

其中: z表示神经元的输入, δ表示激活函数.

从以上公式能够看出, w和b的梯度跟激活函数的梯度成正比, 激活函数的梯度越大, w和b的大小调整得越快.

而神经网络经常使用的激活函数为sigmoid函数, 该函数的曲线以下所示:

如图所示: 初始输出值为0.98对应的梯度明显小于输出值为0.82的梯度. 这就是初始的代价(偏差)越大, 致使训练越慢的缘由. 与咱们的指望不符,即: 不能像人同样, 错误越大, 改正的幅度越大, 从而学习得越快.

更换激活函数解决这个问题,会引发更大问题!!! 因此不如换代价函数!!!

交叉熵代价函数(Cross Entropy Cost)

信息熵由香农提出, 它描述了数据的混乱程度. 熵越大, 混乱程度越高;反之, 熵越小, 混乱程度越低

交叉熵代价函数: C表示代价, x表示样本, y表示实际值, a表示输出值, n表示样本的总数. 公式为:

其中, x表示样本, n表示样本的总数. 那么从新计算参数w的梯度:

该梯度公式中的表示输出值与实际值之间的偏差.因此当偏差越大则梯度就越大,参数w调整得越快.

实际状况证实: 交叉熵代价函数带来的训练效果每每比二次代价函数要好!!!

损失函数

损失函数指的是对于单个样本的损失或偏差.与代价函数的区别在于:代价函数是多样本的平均值

铰链损失(Hinge Loss)

用来解'间距最大化'的问题, 最有表明性的就是SVM(支持向量机)问题. 通用的函数表达式为:

y是预测值(-1到1之间), t为目标值(±1)

其含义为: y的值限定在-1到1之间. 当|y|>=1时, L(y)=0, 即并不鼓励分类器过分自信, 从而使得分类器能够更专一总体的分类偏差.

Hinge Loss变种, 假设:
一方面, 咱们可能更但愿y更接近于一个几率, 即其值域最好是[0,1].
另外一方面,不少时候咱们但愿训练的是两个样本之间的类似关系,而非样本的总体分类.
因此不少时候咱们会用下面的公式:
l(y,y′) = max(0,m−y+y′)
其中: y是正样本的得分, y’是负样本的得分, m是margin(本身选一个数)
即咱们但愿正样本分数越高越好, 负样本分数越低越好, 但两者得分之差最多到m就足够了,差距增大并不会有任何奖励

铰链损失变种

一方面, 咱们可能更但愿y更接近于一个几率, 即其值域最好是[0,1]

一方面,不少时候咱们但愿训练的是两个样本之间的类似关系,而非样本的总体分类

因此不少时候咱们会用下面的公式:

l(y,y′) = max(0,m−y+y′)

其中:

  • y是正样本的得分
  • y’是负样本的得分
  • m是margin(本身选一个数)
  • 即咱们但愿正样本分数越高越好, 负样本分数越低越好
  • 但两者得分之差最多到m就足够了,差距增大并不会有任何奖励

 

对数损失函数或对数似然损失函数

对数损失函数(logarithmic loss function)或对数似然损失函数(log-likehood loss function)

假设样本服从伯努利分布(0-1分布), 那么能够经过几率的方式计算偏差. 对数损失函数的标准形式:

 

上述公式表达的意思是:

样本X在分类Y的状况下, 使几率P(Y|X)达到最大值. 也就是说, 就是利用已知的样本分布, 找到最有可能(即最大几率)致使这种分布的参数值 或者说什么样的参数才能使咱们观测到目前这组数据的几率最大. 由于Log函数是单调递增的, 因此logP(Y|X) 也会达到最大值,所以在前面加上负号以后, 最大化P(Y|X)就等价于最小化L

逻辑回归的P(Y=y|x)表达式以下:

其求导后的公式与交叉熵类似, 两者仅相差一个符号

对数损失函数用于'几率'方面,好比分类

Softmax损失函数(Softmax loss)

Softmax损失函数是Log损失函数的一种. Softmax损失函数的标准形式:

L是损失
Sj是softmax的输出向量S的第j个值, 表示的是这个样本属于第j个类别的几率
y是一个1*T的向量, 里面的T个值, yj是指向当前样本的真实标签

当输入P是softmax的输出时,Log损失函数即为Softmax损失函数

平方损失函数(Quadratic Loss Function)

平方损失函数 又称为 最小二乘法(Ordinary Least Squares), OLS

基本原则是: 最优拟合直线应该是使各点到回归直线的距离和最小的直线 - 即平方和最小

OLS是基于距离的, 而这个距离就是咱们用的最多的欧几里得距离

 

Y-f(X)表示的是残差,整个式子表示的是残差的平方和.而咱们的目的就是最小化这个目标函数值, 也就是最小化残差的平方和

若是预测的是一个任意实数(如回归),则没法使用交叉熵类的损失函数,可使用OLS

均方偏差损失函数(Mean-Square Error, MSE)

是反映估计量与被估计量之间差别程度的一种度量, 是目标变量与预测值之间距离平方之和

标准形式如图:

上式中, y为正确答案,而y'为神经网络给出的预测值

若是预测的是一个任意实数(如回归),则没法使用交叉熵类的损失函数,可使用MSE

平均绝对偏差损失函数(Mean Absolute Error, MAE)

反映估计量与被估计量之间差别程度的一种度量, 是目标变量与预测值之间差别绝对值之和

它在一组预测中衡量偏差的平均大小, 而不考虑偏差的方向. 标准形式如图:

 

上式中, y为正确答案,而h为神经网络给出的预测值

若是预测的是一个任意实数(如回归),则没法使用交叉熵类的损失函数,可使用MAE

自定义损失函数

损失函数是能够自定义的,特此标记!!!

一个使用自定义损失函数的例子是机场准时的不对称风险。问题是:你要决定何时从家里出发,这样你才能在按时到达机场。咱们不想太早走,在机场等上几个小时。同时,咱们不想错过咱们的航班。任何一方的损失都是不一样的: 若是咱们提早到达机场,状况真的没有那么糟;若是咱们到得太晚而错过了航班,那真是糟透了

Dropout

L一、L2正则化是经过改动代价函数来实现的,而Dropout则是经过改动神经网络自己来实现的.

它是在训练网络时用的一种技巧(trike)

  • 在训练開始时,咱们随机地“删除”部分(通常为一半)的隐层单元, 视它们为不存在
  • 保持输入输出层不变, 依照BP算法更新神经网络中的权值, 删除的单元不更新.
  • 在第二次迭代中, 随机地'删除'部分隐层单元(注意是随机的!!!).
  • 更新神经网络中的权值, 删除的单元不更新, 重复迭代直至训练结束.
  • 随着训练的进行, 大部分网络都可以给出正确的分类结果, 少数的错误结果就不会对最终结果形成大的影响

结尾

关于偏差方面的研究,目前概念比较多,还在持续更新...

  • Log损失是经过几率计算的偏差,因此在特定条件下Log损失与交叉熵的具备等价性
  • Softmax函数会将结果映射到[0,1]间,而且总值是1,能够看作'几率'. 结合交叉熵做为代价函数, 就是Softmax损失函数.