首页 > 残差神经网络_什么是残差——一文让你读懂GBDT(梯度提升树)-和-Resnet-(残差网络)的原理...

残差神经网络_什么是残差——一文让你读懂GBDT(梯度提升树)-和-Resnet-(残差网络)的原理...

残差

残差在数理统计中是指实际观察值与估计值(拟合值)之间的差。在集成学习中可以通过基模型拟合残差,使得集成的模型变得更精确;在深度学习中也有人利用layer去拟合残差将深度神经网络的性能提高变强。这里笔者选了Gradient BoostingResnet两个算法试图让大家更感性的认识到拟合残差的作用机理。

Gradient Boosting

下面的式子时Gradient Boosting的损失函数,其中$F_n(x)=F_{n-1}+T_n(x)$。 $$L(y,F_n(x)) =L(y,F_{n-1}+T_n(x)) $$ 这里的$F_n(x)$意味着最后通过 Gradient Boosting学习出来的模型,而这个最终的模型怎么来呢,参照下方代码大致可以总结为三部: + 训练一个基学习器Tree_1(这里采用的是决策树)去拟合data和label。 + 接着训练一个基学习器Tree_2,输入时data,输出是label和上一个基学习器Tree_1的预测值的差值(残差),这一步总结下来就是使用一个基学习器学习残差。 + 最后把所有的基学习器的结果相加,做最终决策。 下方代码仅仅做了3步的残差拟合,最后一步就是体现出集成学习的特征,将多个基学习器组合成一个组合模型。

from sklearn.tree import DecisionTreeRegressor
tree_reg1 = DecisionTreeRegressor(max_depth=2)
tree_reg1.fit(X, y)y2 = y - tree_reg1.predict(X)
tree_reg2 = DecisionTreeRegressor(max_depth=2)
tree_reg2.fit(X, y2)y3 = y2 - tree_reg2.predict(X)
tree_reg3 = DecisionTreeRegressor(max_depth=2)
tree_reg3.fit(X, y3)y_pred = sum(tree.predict(X_new) for tree in (tree_reg1, tree_reg2, tree_reg3))

其实上方代码就等价于调用sklearn中的GradientBoostingRegressor这个集成学习API,同时将基学习器的个数n_estimators设为3。

from sklearn.ensemble import GradientBoostingRegressor
gbrt = GradientBoostingRegressor(max_depth=2, n_estimators=3, learning_rate=1.0)
gbrt.fit(X, y)

形象的理解Gradient Boosting,其的过程就像射箭多次射向同一个箭靶,上一次射的偏右,下一箭就会尽量偏左一点,就这样慢慢调整射箭的位置,使得箭的位置和靶心的偏差变小,最终射到靶心。这也是boosting的集成方式会减小模型bias的原因。 接下来我们再来了解一下最近在深度学习领域中的比较火的Residual Block。

Resnet

Resnet是2015年何凯明大神提出来的一个深度CNN模型,主要解决了随着神经网络层数变多,拟合效果反而变差的问题。而Residual Block是Resnet中一个最重要的模块,Residual Block的做法是在一些网络层的输入和输出之间添加了一个快捷连接,这里的快捷连接默认为恒等映射(indentity),说白了就是直接将原始输入不做任何改变和输出做加和,其公式如下: $$H(x) = F(x)+x$$ 如下图所示,x 表示residual block的输入, H(x)表示residual block的输出,而F(x)代表着残差,把公式简单变换一下: $$ F(x)= H(x) - x$$ 就变成了通过神经网络去拟合输入与输出之间的残差F(x)。加了这个模块之后,神经网络的层数可以构建得越来越深,而且不会出现效果变差的现象,反之该模型在imagenet这个任务上再进一步,拿下了2015年的冠军。这充分说明使用residual block拟合残差使得深度学习模型变得更加强大。

c139918a3f9886322917cfd1392e01a2.png

对着下方代码我们可以更清晰的看到residual block的具体操作: + 输入x, + 将x通过三层convolutiaon层之后得到输出m, + 将原始输入x和输出m加和。

就得到了residual block的总输出,整个过程就是通过三层convolutiaon层去拟合residual block输出与输出的残差m。

from keras.layers import Conv2D
from keras.layers import  add
def residual_block(x, f=32, r=4):"""residual block:param x: the input tensor:param f: the filter numbers:param r::return:"""m = conv2d(x, f // r, k=1)m = conv2d(m, f // r, k=3)m = conv2d(m, f, k=1)return add([x, m])

在resnet中残差的思想就是去掉相同的主体部分,从而突出微小的变化,让模型集中注意去学习一些这些微小的变化部分。这和我们之前讨论的Gradient Boosting中使用一个基学习器去学习残差思想几乎一样。

结语

至此,我们了解到了集成学习和深度学习中如何使用模型拟合残差去加强模型的性能。使用模型拟合残差的过程,还可以理解成模型在 Loss 函数上沿着梯度下降的方向前进,每增加一个基学习器就对应着梯度下降的一次更新。如下图中,每一个红点就代表着一个当前时刻的集成模型$F_n(x)$,最终的模型对应于loss函数图像中最低的那个点。

83572cb8b57949243c6f0d9edc86d01b.png

Gradient Boosting通过拟合残存使得模型的更加精确(降低模型的偏差Bias),Residual Block的通过拟合残差使得深度网络能够变得更深更强。所以,如果你的模型效果性能不足,可以考虑考虑拟合残差让模型变强哦。

参考: https://blog.csdn.net/u014665013/article/details/81985082 https://mp.weixin.qq.com/s/Dhp3FbbK5yPYRwJTKjGZSQ Deep Residual Learning for Image Recognition

更多相关:

  • MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:45节课(16h 55m) |大小解压后:10.8 GB 一级和二级初级和中级 你会学到: 通过一个手把手的项目学习使用Rhino V7。 您将学习使用Rhino的最新工具集,主...

  • 初学者用Python完成机器学习课程 你会学到: Python上的主机器学习 进行有力的分析 做出准确的预测 制作健壮的机器学习模型 将机器学习用于个人目的 建立一支强大的机器学习模型大军,并知道如何将它们结合起来解决任何问题 使用K-均值聚类、支持向量机(SVM)、KNN、决策树、朴素贝叶斯和主成分分析对数据进行分类 清理您的...

  • 这门由行业和学术领袖开设的课程是为那些希望在数据科学领域建立有价值的职业生涯的人开设的 你会学到: 监督学习和非监督学习的原理及其区别。 线性和逻辑回归,决策树,回归树,随机森林,判别分析,支持向量机,朴素贝叶斯分类器,KNN 如何在Python中选择合适的算法集并应用到现实项目中。 使用Python编程语言解决许多现实生活中的...

  • 学习每个机器学习模型背后的数学,然后用Python实现它 你会学到: 开发机器学习模型 创建机器学习模型的模板 学习每个机器学习模型背后的数学 要求: Python或任何编程语言的基础 时长:8h 15m |视频:. MP4,1280×720 30 fps |音频:AAC,44.1 kHz,2ch |大小解压后:4.54...

  • 一.xgboost前奏1,介绍一下啥是xgboostXGBoost全称是eXtreme Gradient Boosting,即极限梯度提升算法。它由陈天奇所设计,致力于让提升树突破自身的计算极限,以实现运算快速,性能优秀的工程目标。2,XGBoost的三大构件XGBoost本身的核心是基于梯度提升树实现的集成算法,整体来说可以有三...

  • ​这是3D 点云的深度学习框架,提供常见的点云分析方法的一种通用深度学习模型。它主要依赖Pytorch Geometric和Facebook Hydra。该框架能够以最小的代价和极大的可重复性来构建精简而复杂的模型。目标是建立一个工具,用于对SOTA模型进行基准测试,同时允许研究者们有效地研究点云分析,最终目标是建立可应用于实际应用的...

  • 【从零开始的ROS四轴机械臂控制(三)】五、在gazebo中添加摄像头1.修改arm1.gazebo.xacro文件2.修改arm1.urdf.xacro文件3.查看摄像头图像六、为模型添加夹爪(Gripper)1.通过solidworks建立模型2.将夹爪添加进gazebo(1)模型导入(2)更改urdf文件夹3.gazebo模型抖...

  • 使用Keras训练自动驾驶(使用Udacity自动驾驶模拟器) 1.完成项目所需要的资源 (1)模拟器下载 • Linux • macOS • Windows (2)Unity 下载 运行Udacity模拟器需要Unity,这是下载链接。 https://unity.cn/releases (3)Behavioral Cl...

  • maxtree–工厂模型第74卷 大小解压后:2.34G 信息: 植物模型第74卷是高质量的三维植物模型的集合。包括12个物种,共72个单一模式。 获取地址:三维植物树木模型 Maxtree – Plant Models Vol 74-云桥网 种类 三角枫 槭树 复叶槭 鸡爪槭 白桦 Chitalpa tashkente...