前言算法
偏差计算是深度学习中的核心,很是重要!!! 关于偏差计算,有以下概念:编程
下面咱们举个例子解释一下:(图片来自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)
过拟合很差,因此要尽可能避免
防止过拟合, 比较经常使用的技术包括:
正则化(Regularization)
咱们不只要让经验风险尽可能小, 还要让结构风险尽可能小, 怎么解决???
经过对模型参数添加惩罚参数来限制模型能力,能够下降模型的复杂度来防止过拟合,这种规则称为正则化
正则化中咱们将保留全部的特征变量, 可是会减少特征变量的数量级
咱们定义了一个函数J(f) 用来度量模型的复杂度
经常使用的正则化公式:
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正则化项: 所有參数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%
一般状况下, 深度学习中只对参数添加约束, 对偏置项不加约束. 主要缘由是偏置项通常须要较少的数据就能精确的拟合. 若是添加约束经常会致使欠拟合
目标函数
咱们的目标是让经验风险尽可能小, 还要让结构风险尽可能小!!!
最优化经验风险和结构风险, 而这个函数就被称为目标函数, 公式以下:
结合上面的例子来分析:
没有最优的模型,只有更优的模型!!!
风险函数
机器学习的优化目标就是让预测值与真实值之间的偏差越小越好, 这种差异也叫作风险
风险分为经验风险, 指望风险, 结构风险
风险的性质:
代价函数
什么是代价函数?
假设有训练样本(x,y), 模型为h, 参数为θ, h(θ) = θTx(θT表示θ的转置), 那么:
任何可以衡量模型预测出来的值h(θ)与真实值y之间的差别的函数就叫代价函数C(θ)
若是有多个样本, 则能够将全部代价函数的取值求均值, 记作J(θ)
总的代价函数J(θ)能够用来评价模型的好坏, 代价函数的性质:
经常使用代价函数:
二次代价函数(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′)
其中:
对数损失函数或对数似然损失函数
对数损失函数(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)
结尾
关于偏差方面的研究,目前概念比较多,还在持续更新...