回归均值及其含义
一种无处不在的统计现象,影响着我们的日常生活,但我们大多数人都没有意识到。
洛杉矶的常驻棒球队洛杉矶道奇队(LA Dodgers)在经历了一场精彩的比赛后,出现在了《体育画报》2017 年 8 月 28 日的封面上。他们赢得了 71%的比赛,并有望追平一个赛季中最多胜利的记录。封面配有“最佳”的标题。团队。从来没有?”
该队随后在接下来的 22 场比赛中输掉了 17 场,并最终在世界大赛中输给了休斯顿太空人队。这只是臭名昭著的《体育画报》封面厄运的一个例子,这是一个城市传说,显然会导致出现在封面上的球队和运动员立即经历一连串的糟糕表现。
厄运可以追溯到《体育画报》的第一期,主角是埃迪·马修斯。在他出现在封面上之前,他的球队取得了 9 连胜,但他们继续输掉了下一场比赛,他很快就受伤,导致他错过了 7 场比赛。然而,厄运并不仅限于棒球——它折磨着所有运动项目的运动员。最近倒霉的受害者包括塞雷娜·威廉姆斯、康纳·麦格雷戈、路易斯·苏亚雷斯、林赛·沃恩和汤姆·布拉迪。
对此有许多可能的解释。例如,这可能是一种心理影响——出现在封面上会让团队或运动员感到更大的压力,并可能导致他们失去注意力。然而,最近霉运有了一个有趣的变化,在 2019 年 11 月的一期上,SF 49ers 成为了主角。当这个故事被写出来时,49 人队正处于 8 比 0 的连胜,他们继续输掉了他们的下一场比赛。然而,这一损失发生在这期杂志出版的前两天*。这表明可能有更多的厄运。*
事实上,霉运只是一种非常简单但意义深远的统计现象的结果,这种现象被称为均值回归。当一个随机变量在第一次测量时是极端的,但在第二次测量时更接近平均值(因此是“回归”)时,就会发生这种情况,反之亦然。但是这和体育出版物的世界有什么关系呢?
本质上,这只是说一个团队或运动员在任何时间点的表现都是一个随机变量——潜在的技能无疑是一个非常重要的因素,但它至少部分取决于我们无法预测的噪音或运气的概念。一个团队只有在随机变量的第一次测量(该团队在封面前的表现)达到极限后才会出现在封面上。在第二次测量中,封面出版后,团队更有可能“回归”到平均值,看起来封面的外观让他们倒霉。
高尔顿的原始解释
著名统计学家弗朗西斯·高尔顿爵士在 19 世纪末首先发现了回归均值法。1886 年,他进行了一项研究,调查孩子的身高和他们父母之间的关系。他测量了 928 名成年子女和相应的 205 对父母夫妇的身高,在考虑男女身高差异(将每个女性的身高乘以 1.08)后,他注意到了一些有趣的事情。孩子们的身高比他们父母的平均身高更接近平均值。因此,如果父母非常高,孩子通常会比较矮。如果父母都很矮,孩子往往会更高。您可以在下图中看到这一点,虚线没有等位线陡:
来源:斯蒂芬·森在皇家统计学会的《重要性》杂志上发表的文章
人们很容易想到对此的基因解释,事实上这也是高尔顿所建议的。他说,一个孩子的基因构成是他们所有祖先的某种指数平均值。由于更多的人分享了远祖,你最终会向平均人口身高靠拢,而不是纯粹根据你父母的遗传基因来决定你的身高。但是我们现在知道这不是真的——人们只从他们的父母那里获得他们的基因构成。在高尔顿的实验中还有另一个不寻常的效应。不仅孩子的身高没有父母那么极端,反之亦然!正如我们在下图中看到的,极端身高的孩子的父母身高更接近平均水平。这使得基因争论更难被证明,事实上这种影响纯粹是统计学上的。
来源:文章由斯蒂芬·森在皇家统计学会的《重要性》杂志上发表
回归均值背后的直觉
当你比较两个不完全相关的变量时,就会回归到平均值。这里有一个例子来理解这是什么意思。
假设我们选择了 100 个人,让他们每人抛 10 次硬币。基本概率表明,在所有 1000 次翻转中,我们预计大约有一半是正面。
现在,假设我们选择了第一轮中头数最多的 20 个人,让他们进入第二轮,在第二轮中,他们必须再次投掷硬币 10 次。在这 200 次翻转中,我们会期待什么?我们会期望这些人(他们“擅长”获得正面)获得正面多于反面吗?一点也不!在新的 200 次翻转中,我们预计大约有一半会再次成为正面。这组异常值的平均值现在已经“回归”到平均值。
这是一个极端的例子,其中被测量的两个变量(第一轮中的人数和第二轮中的人数)根本不相关。让我们考虑另一个极端,两个变量完全相关。假设我们用摄氏度测量了世界上 100 个地方的温度。然后我们挑选出前 20 个最热的地方,再用华氏温度测量它们的温度。在这种情况下,我们会看到什么?这些地方将继续比平均华氏温度更热,而且不会回归到平均值!这种变量之间完全相关的情况(给定摄氏温度,我们知道华氏温度的确切温度)是我们不会看到回归平均值的唯一情况。
这两个例子可能看起来非常明显,可能不清楚与 SI cover jinx 或 Galton’s heights 有什么联系,但这只是因为大多数回归均值的实例发生在变量不在我们看到的两个极端中的任何一个的情况下——它们会有某种程度的相关性。
父母的身高和孩子的身高当然不是完全相关的。很明显,除了父母的身高,孩子的身高还取决于其他因素。所以回归到平均值是肯定会发生的。然而,身高也不是完全独立的——由于潜在的遗传因素,可能有一些相关性。因此,这种影响不会像掷硬币的例子那样极端,因为在掷硬币的例子中,回归实际上一直回到总体均值。所以在这种偏相关的情况下,会有对均值的偏回归。
我们在现实生活中看到的大多数情况都与此类似,其中有一个潜在的固定因素使两个变量部分相关,一些未知的影响或噪音或运气使它们不那么相关。这就是为什么回归均值在现实生活中如此难以发现的原因。
现实世界中的例子
回归均值不仅仅是影响运动员的奇怪统计现象。它对现实世界的政策决策有着非常现实的影响。一个例子——对减少交通事故的不同方法进行优先排序。英国执法部门考虑的一个方法是在最近事故高发的十字路口安装测速摄像头。这样做之后,他们注意到事故发生的频率下降了,大概是因为人们因为摄像头的存在而放慢了速度。但这是唯一的原因吗?就事故而言,安装摄像头的地方可能比平时更极端,因为十字路口是根据最近的事故选择的。所以这些回归平均值的十字路口至少是事故减少的部分原因。在决定是设置更多的高速摄像机还是尝试不同的方法时,区分这两种效果是很重要的。
另一个有趣的例子是 1999 年马萨诸塞州 T2 学校提高分数的案例。从 1999 年到 2000 年,学校设定了旨在提高学生成绩的目标。当他们第二年查看结果时,他们注意到 1999 年以来表现最差的学校达到了他们的改进目标——但是一些表现最好的学校却失败了!这可能是又一个回归平均数的例子,最差和最好的学校都回归到平均数,似乎最差的学校有进步,最好的学校失败。
这实际上提出了一个关于人性和社会的深刻哲学观点,《思考,快与慢》的作者丹尼尔·卡内曼对此做了最好的总结:
“这是一个欢乐的时刻,在这一时刻,我明白了关于世界的一个重要真理:因为我们倾向于在别人做得好的时候奖励他们,在别人做得不好的时候惩罚他们,而且因为存在回归均值的现象,这是人类条件的一部分,我们因为奖励别人而受到统计上的惩罚,因为惩罚别人而受到奖励。”—丹·卡尼曼
回归均值的计算
回归均值很难被注意到,甚至更难量化,但很明显,它不能被忽视。这种影响在医学研究中可能特别危险。医学试验的参与者必须满足某些标准,这是很常见的——例如,如果你想测试一种新药治疗特定疾病的疗效,那么参与者可能会从已经患病一段时间的人群中选择。可能这些人目前是“极端”的例子,不管他们的治疗如何,他们平均会回归到平均水平并有所改善。
医学研究和其他类似的实验通常有对照组来解释这一点。对照组不接受治疗(通常以安慰剂的形式),而治疗组实际上接受了新药。现在,只要这两组患者来自同一人群(比如,患病至少 2 年的人),两组患者的平均效应都将回归,两组患者之间的差异将取决于药物的实际影响!
这其实提出了一个有趣的问题。存在对照组的至少部分原因是考虑到安慰剂效应——对照组可能在没有实际接受治疗的情况下有所改善,只要患者相信他们得到了治疗。对照组的任何改善实际上都可能是由于安慰剂效应和回归平均值。那么安慰剂效应真实到什么程度呢?这篇论文谈到了在此类研究中考虑回归均值的重要性,并提到在某些情况下,我们认为的安慰剂效应实际上可能只是回归均值。这就是为什么一些研究分成 3 组——A 组不做任何治疗,B 组服用安慰剂,C 组接受实际治疗。A 组内的任何变化都有可能是因为回归到均值,A 组和 B 组的差异显示的是安慰剂效应,B 组和 C 组的差异是因为药物本身!
结论
回归均值作为一个概念我们已经知道了一百多年,但由于它的普遍性和背后微妙的推理,当它发生在现实生活中时,很容易被忽略。我说的只是几个例子,但还有很多,包括大二暴跌、马登魔咒、有机玻璃原理、月度经理魔咒等等。正如我们所见,忽视它的后果可能是深远的。我们所能做的就是记住这种效应的存在,并训练自己在现实世界中发现它!
用 30 行 Python 从头开始构建回归树
我们描述并实现回归树来预测波士顿的房价。
介绍
流程图用于通过视觉媒介清晰地表达决策过程。它们的设计需要对整个系统的全面了解,因此也需要人类的专业知识。问题是:“我们能否自动创建流程图,以使他们的设计更快、更便宜,并且相对于过程的复杂性更具可扩展性?”答案是决策树!
决策树可以自动推导出最能表达决策内部运作的规则。当在标记数据集上训练时,决策树学习规则树(即,流程图)并遵循该树来决定任何给定输入的输出。它们的简单性和高度可解释性使它们成为您 ML 工具箱中的一笔巨大资产。
在这个故事中,我们描述了回归树——具有连续输出的决策树——并实现了用于学习和预测的代码片段。我们使用波士顿数据集来创建一个用例场景,并学习定义房屋价格的规则。您可以在参考资料中找到完整代码的链接。
用来对付新冠肺炎的流程图。[1]
学习规则
我们寻找一个类似于流程图*、的规则树*,它能最好地解释房子的特征和价格之间的关系。每个规则将是这棵树中的一个节点,并将房屋划分为不相交的集合,例如有两个房间的房屋、有三个房间的房屋和有三个以上房间的房屋。规则也可以基于多个要素,例如有两个房间并且靠近查尔斯河的房子。因此,所有可能的树的空间是巨大的,我们需要简化来计算处理学习。
作为第一个简化,我们只考虑二元规则:将房子分成两部分的规则,例如*“房子是否少于三个房间?”。*第二,我们省略了特征的组合,因为组合的数量可能很大,并且只考虑基于一个特征的规则。在这些简化下,规则是具有两个部分的“小于关系”:一个特征,例如房间的数量和划分阈值,例如三个。
基于这个规则定义,我们通过递归地寻找将数据一分为二的最佳规则来构建规则树。
换句话说,我们首先尽可能地将数据分成两部分,然后再分别考虑每个部分。我们继续分割分割,直到满足预定义的条件,例如最大深度。由于简化和贪婪的规则搜索,构造的树只是最佳树的近似。下面你可以找到实现学习的 Python 代码。
用 Python 实现的递归分裂过程。
我们将拆分过程实现为一个函数,并用训练数据(X_train,y_train)调用它。该函数找到将训练数据一分为二的最佳规则,并根据找到的规则执行拆分。它通过使用左右分割作为训练数据来不断调用自己,直到达到预先指定的最大深度或者训练数据太小而无法分割。当满足停止条件时,它停止分割,并预测房价作为当前分割中训练数据的平均价格。
在 split 函数中,划分规则被定义为一个字典,其关键字为 *left、right、feature、*和 threshold 。最佳划分规则由另一个函数返回,该函数通过遍历训练集中的每个特征和阈值来彻底扫描可能的规则。对某个要素进行尝试的阈值由该要素在整个数据集中取的值决定。代码如下:
寻找分割现有训练数据的最佳规则的函数。
该函数通过测量规则建议的拆分质量来跟踪最佳规则。质量通过一个名为残差平方和(RSS) 的“越低越好”度量标准来衡量(有关 RSS 的更多详细信息,请参见参考资料中的笔记本)。最后,最佳规则作为字典返回。
解释规则
学习算法自动选择特征和阈值,以创建最佳解释房屋特征和价格之间关系的规则。下面我们可视化了从波士顿数据集中学习到的最大深度为 3 的规则树。我们可以观察到提取的规则与人类的直觉重叠。此外,我们可以像画流程图一样简单地预测房子的价格。
从波士顿数据集中学习到的最大深度为 3 的规则树。
现在让我们描述一个自动使用上述流程图进行预测的过程。给定具有数据集中的特征的房屋,我们在节点中提出问题,并根据答案进行传播,直到我们到达预测,即叶节点。
例如,位于(I)较低地位百分比为 5.3,(ii)每所住宅的平均房间数为 10.2,以及(iii)人均犯罪率为 0.01 的位置的房子将回答第一个问题为是,第二个问题为否,第三个问题为是。因此,我们将预测其价格为 45.80K 。下面你可以看到它所走路线的图像。
树规则中的示例预测路径。
使用 split 函数返回的字典对预测过程进行编码相当简单。我们通过比较规则指定的特征值和阈值来遍历规则字典。我们根据答案向左或向右移动,直到遇到带有预测关键字的规则,即叶节点。下面是预测的代码片段。
函数使用学习到的树来预测房价。
结论
回归树是用作回归模型的快速而直观的结构。对于波士顿数据集,当最大深度被适当调整时,他们可以获得大约 0.9 的 R 分数,这是相当高的。然而,对于数据集中的微小变化,它们可能是脆弱的,这使得它们作为单一预测器是不可靠的。提出了随机森林和梯度增强树来解决高敏感性,并且它们可以产生与深度模型相当的结果。
参考文献
[1] 待在家里流程图
[2] 波士顿数据集
【3】完整代码
有 ARIMA 误差的回归
它是什么,我们为什么需要它,何时使用它,如何使用 Python 和 statsmodels 构建它
带 ARIMA 误差的回归将两个强大的统计模型(即线性回归和 ARIMA(或季节性 ARIMA))结合成一个超级强大的回归模型,用于预测时间序列数据。
下图说明了如何将线性回归、ARIMA 和季节性 ARIMA 模型相结合来生成带有 ARIMA 误差的回归模型:
ARIMAX 和 SARIMAX 模型(图片由作者提供)
在本文中,我们将看看这些模型中最通用的,称为带有季节性 ARIMA 误差的回归,简称 SARIMAX 。
SARIMAX——概念
假设您的时间序列数据集由一个响应变量和一些回归变量组成。还假设回归变量包含在矩阵 X 中,响应变量也称为因变量包含在向量 y 中。在每个时间步 i , y 取某个值 y_i ,在 X 中有一个对应的行向量 x_i ,包含时间步 i 的所有回归变量的值。下图说明了这种情况:
带有回归变量 X 和因变量y的时间序列数据集(图片由作者提供)
使用线性回归模型对此数据建模的简单方法如下:
一个线性回归模型(图片由作者)
在上面的模型规范中,***【β(cap)***是存储拟合模型的回归系数的(m×1)大小的向量。
ε ,回归的残差是实际的 y 与模型预测的值 y(cap) 之差。所以在每个时间步I: ε_ I = y _ I—y(cap)_ I . ε是一个大小为(n×1)的向量,假设一个数据集跨越 n 个时间步。
但是,唉,我们优雅的线性回归模型对时间序列数据不起作用,原因很简单:时间序列数据是自动的,即自相关的。中 y_i 的给定值受 y 的先前值影响,即 y_(i-1)、y_(i-2) 等。线性回归模型无法“解释”这种自相关性。
因此,如果对( y, X )数据集拟合直线线性回归模型,这些自相关会漏入回归残差( ε ),使 ε 自相关!
我们在我的文章《线性回归的 假设》中已经看到 线性回归模型假设回归的残差是独立的随机变量,且服从相同的正态分布。但是如果残差是自相关的,它们就不可能是独立的,从而导致许多问题。自相关残差引起的一个主要问题是,不能使用显著性统计检验(如 f 检验或学生 t 检验)来确定回归系数是否显著。也不能依赖回归系数的标准误差。这反过来使得回归系数的置信区间以及模型预测的置信区间变得不可靠。仅仅是残差中的这一个自相关问题,就导致了线性回归模型的一连串问题,使其实际上对时间序列数据建模无用。
但是,人们可以通过引入另一个强大的模型,即 ARIMA(或季节性 ARIMA),来解决自相关残差的问题,而不是抛弃强大的线性回归模型。(S)ARIMA 模型非常适合处理自相关数据。我们利用 SARIMA 的这种能力,使用 SARIMA 模型对线性回归的残差进行建模。
萨里玛模型
SARIMA 模型由以下 7 个部分组成:
AR: 自回归(AR)分量是时间序列过去值的线性组合,达到一定数量的滞后 p 。即 y_i 是 y_(i-1) , y_(i-2) ,… y_(i-p) 的线性组合如下:
AR§模型(图片由作者提供)
y_i 为第 I 个时间步观察到的实际值。 phi(cap)_i 是拟合模型的回归系数。 ε_i 为第 I 个时间步的回归残差。AR§模型的阶次“p”是结合众所周知的规则和建模者的判断来确定的。
****MA:SARIMA 的移动平均(MA)成分是模型过去误差的线性组合,达到一定数量的滞后 q 。模型过去的误差是通过从过去的实际值中减去过去的预测值来计算的。MA(q)模型表示如下:
马(q)模型(图片由作者)
y_i 为第 I 个时间步观察到的实际值。 theta(cap)_i 为拟合模型的回归系数。 ε_i 为第 I 个时间步的回归残差。负号符合指定 MA 型号的惯例。MA(q)模型的阶数“q”是通过结合众所周知的规则和建模者的判断来确定的。
组合 ARMA (p,q)模型是 AR§和 MA(q)模型的简单组合:
ARMA(p,q)模型(图片由作者)
差分的顺序(d): 如果时间序列有趋势,则不能使用 ARMA 模型。趋势的常见例子有线性趋势、二次趋势和指数或对数趋势。如果时间序列表现出一种趋势,可以对时间序列应用一阶或多阶差分,以消除该趋势。一阶差分将移除类型为 y = mx + c. 的线性趋势,二阶和更高阶差分将移除类型为 y = mx + c 、 y = mx + c* 等的多项式趋势。**
具有线性趋势的时间序列,以及应用一阶差分后的去趋势时间序列: y_i-y_(i-1) (图片由作者提供)
ARIMA 车型中的差分运算用 I 字母表示。在 ARIMA, I 代表Iintegrated。在 AR 和 MA 项发挥作用之前,ARIMA 模型应用了差异。差分的阶由 ARIMA(p,d,q)模型规范中的 d 参数表示。
SAR、SMA、D 和 m: 季节性 ARIMA 或 SARIMA 模型通过引入 P 阶季节性 AR (SAR)项、Q 阶季节性 MA (SMA)项和 D 阶季节性差异,将上述 AR、MA 和差异概念简单地扩展到季节性领域。SARIMA 模型中的最后一个参数是“m ”,即季节性周期。例如,对于显示年度季节性的时间序列,m=12 个月。正如 P、D 和 Q 一样,估算 P、D、Q 和 m 的值也有既定的规则。
完整的萨里玛模型规格是 ARIMA(p,D,q)(P,D,Q)m
现在让我们回到自相关残差这个小难题上来。
如前所述,(S)ARIMA 模型非常适合预测时间序列数据,尤其适合处理自相关数据。我们将 SARIMA 模型的这一特性应用于线性回归模型拟合到时间序列数据集后的自相关残差建模。
由此产生的模型被称为带有季节性 ARIMA 误差的回归或简称为 SARIMAX 。它可以大致定义如下:
SARIMAX(图片由作者提供)
如果(P,D,Q),(P,D,Q)和 m 选择正确,人们会期望 SARIMAX 模型的残差是而不是自相关的。事实上,它们应该是独立的,同分布的随机变量,均值为零,方差恒定。
在本文中,我不会详细介绍估算 P、D、Q、P、D、Q 和 m 的规则,而是将重点放在使用 Python 和 Statsmodels 为真实数据集构建 SARIMAX 模型上。在此过程中,我们将应用各种规则来修正 SARIMAX 的参数。
为了更好地理解整套规则是什么,请参考以下关于该主题的优秀链接:
非季节性 ARIMA 模型说明(pdf 文件)季节性和非季节性 ARIMA 模型幻灯片(pdf 文件)介绍…
people.duke.edu](http://people.duke.edu/~rnau/arimrule.htm)
为了深入理解 ARIMA 和萨里玛模型,请务必阅读瑙教授关于 ARIMA 的其余课堂讲稿:
非季节性 ARIMA 模型说明(pdf 文件)季节性和非季节性 ARIMA 模型幻灯片(pdf 文件)介绍…
people.duke.edu](http://people.duke.edu/~rnau/411arim.htm)
使用 Python 和 statsmodels 构建带有季节性 ARIMA 误差的回归模型
我们将运用到目前为止所学的知识。我们将为真实世界的数据集设计一个 SARIMAX 模型。我们将使用的数据集包含了从 2004 年到 2005 年在一个意大利城市繁忙的十字路口每小时测量的各种空气污染物的读数。以下是原始数据集的链接:
https://archive.ics.uci.edu/ml/datasets/Air+quality
我已经为我们的 SARIMAX 实验修改了这个数据集。修改后的数据集可以从这里 下载 。
让我们从导入我们将使用的所有 Python 包开始:
**import** pandas **as** pd
**from** statsmodels.regression **import** linear_model
**from** patsy **import** dmatrices
**import** statsmodels.graphics.tsaplots **as** tsa
**from** matplotlib **import** pyplot **as** plt
**from** statsmodels.tsa.seasonal **import** seasonal_decompose
**from** statsmodels.tsa.arima.model **import** ARIMA **as** ARIMA
**import** numpy **as** np
我们将使用 pandas 将数据加载到 DataFrame 中:
df = pd.**read_csv**(**'air_quality_uci.csv'**, header=0)
让我们打印出前 10 行:
df.**head**(10)
空气质量数据集的前 10 行(图片由作者提供)
回归目标
我们将建立一个回归模型来预测 PT08_S4_NO2 变量的小时值。
回归策略
我们模型的变量如下:
因变量 y 为 PT08_S4_NO2
回归变量矩阵 X 将包含两个变量:
温度 T 绝对湿度 AH
我们将使用带有(季节性)ARIMA 误差的回归,即(S)ARIMAX 模型,通过每小时测量温度和绝对湿度来预测 PT08_S4_NO2 的每小时值。
由于我们使用(S)ARIMAX,我们也可以隐式使用因变量 PT08_S4_NO2 的过去值和模型的过去误差作为额外的回归变量**。**
我现在把(季节性的)或(S)放在括号里,因为我们还不知道回归的残差中是否存在季节性。我们很快就会知道了。
我们将使用以下逐步过程来构建(S)ARIMAX 模型:
步骤 1:准备数据
将数据框中的日期时间列转换为 pandas 日期时间列,并将其设置为数据框的索引。
df[**'DateTimeIndex'**]= pd.**to_datetime**(df[**'DateTime'**])
df = df.**set_index**(keys=[**'DateTimeIndex'**])
将索引的频率属性设置为每小时。这将创建几个空行,对应于原始数据集中丢失的每小时测量值。用相应列的平均值填充所有空白数据单元格。
df = df.**asfreq**(**'H'**)
df = df.**fillna**(df.**mean**())
验证任何列中没有空单元格。输出应该全为零。
df.**isin**([np.**nan**, np.**inf**, -np.**inf**]).**sum**()
创建训练和测试数据集。将测试数据集长度设置为训练数据集的 10%。我们实际上并不需要那么大,但我们现在就用 10%吧。
dataset_len = **len**(df)split_index = **round**(dataset_len*0.9)train_set_end_date = df.**index**[split_index]df_train = df.**loc**[df.**index** <= train_set_end_date].**copy**()df_test = df.**loc**[df.**index** > train_set_end_date].**copy**()
步骤 2:创建线性回归模型
现在,我们将在训练数据集上拟合一个普通的最小二乘线性回归模型,并获取它的残差向量。
让我们用 Patsy 语法创建模型表达式。在下面的表达式中,我们说 PT08_S4_NO2 是因变量,而 T 和 AH 是回归变量。默认情况下,假设有一个截距项。
expr = **'PT08_S4_NO2 ~ T + AH'**
我们来雕刻出 y 和 X 矩阵。Patsy 让这变得非常简单:
y_train, X_train = **dmatrices**(expr, df_train, return_type=**'dataframe'**)y_test, X_test = **dmatrices**(expr, df_test, return_type=**'dataframe'**)
在训练数据集上拟合 OLSR 模型:
olsr_results = linear_model.**OLS**(y_train, X_train).**fit**()
打印出 OLSR 模型的培训结果:
olsr_results.**summary**()
我们看到以下输出。我强调了输出中的几个重要区域:
OLSR 模特的模特训练总结(图片由作者提供)
我们看到,回归变量 T 和 AH 的回归系数在 99.99%的置信水平下是显著的,如它们的 P 值(P > |t|列)所示,P 值基本上为 0。
这些结果中需要注意的第二件事是 Durbin-Watson 测试的输出,该测试测量回归残差中 LAG-1 自相关的程度。值为 2 意味着没有滞后-1 自相关。在残差误差 ε 中,接近 0 的值意味着强正自相关,而接近 4 的值意味着在滞后-1 处强负自相关。
在上面的输出中,我们看到 DW 检验统计量是 0.348,表明在滞后-1 时回归的残差之间有很强的正自相关。这完全在意料之中,因为基础数据是一个时间序列,而线性回归模型未能解释因变量的自相关性。DW 测试统计正好证实了这一点。
步骤 3:估计 ARIMA 参数(P,D,Q),(P,D,Q)和 m
我们现在开始对 OLSR 模型的回归残差 ε估计萨里玛模型的参数的过程。 回归误差存储在变量olsr_results.resid
中。
让我们从绘制残差的自相关图开始:
tsa.**plot_acf**(olsr_results.**resid**, **alpha**=0.05)
plt.**show**()
我们得到如下的情节:
残差的 ACF(图片由作者提供)
ACF 告诉我们三件事:
- 有很强的自相关延伸到多个滞后,表明残差时间序列有一个趋势。我们需要通过使用一阶或可能两阶差分来去除这个时间序列的趋势。因此,参数 d 可能是 1,也可能是 2。
- ACF 中的波状图案证明了数据中的季节性变化。
- 滞后= 24 时的峰值表明季节周期可能是 24 小时。即 m 很可能是 24 。对于包含车辆污染测量的数据,这似乎是合理的。我们将很快使用时间序列分解图来验证这个猜测。
快速注意:滞后-0 自相关将始终是一个完美的 1.0,可以被忽略,因为一个值是完全相关的。
在我们估计剩余的(S)ARIMA 参数之前,让我们对时间序列求一次差,即 d=1:
olsr_resid_diff_1 = olsr_results.resid.**diff**()
olsr_resid_diff_1 = olsr_resid_diff_1.**dropna**()
让我们重新绘制残差的差分时间序列的 ACF:
tsa.**plot_acf**(olsr_resid_diff_1, **alpha**=0.05)
plt.**show**()
残差差(1)的 ACF(图片由作者提供)
我们现在在 ACF 中看到一幅非常不同的画面。自相关在所有滞后处都显著降低。波状模式仍然存在,但这是因为我们没有采取任何措施来消除可能的季节变化。滞后-24 自相关再次特别突出。
我们看到,在差分时间序列中,在滞后-1 时仍有显著的自相关。我们可以尝试通过再取一个差值(即 d=2)并绘制结果时间序列 ACF:
olsr_resid_diff_2 = olsr_resid_diff_1.**diff**()
olsr_resid_diff_2 = olsr_resid_diff_2.**dropna**()
tsa.**plot_acf**(olsr_resid_diff_2, **alpha**=0.05)
plt.**show**()
我们得到如下的情节:
残差差(2)的 ACF(图片由作者提供)
不幸的是,第二次对时间序列求微分在 LAG-1 产生了严重的负自相关。这是不好的迹象。我们似乎夸大了差异。我们应该坚持 d=1。
让我们再来看看 DIFF(1)时间序列的 ACF:
DIFF(1) ACF 在 LAG-1 处显示单一正自相关(图片由作者提供)
在滞后-1 处的单个正自相关表明我们可能想要将 AR 阶数 p 固定为 1。即 AR(1)模型**。**
由于我们已经将 p 固定为 1,现在,我们将省去模型中的 MA 部分。即我们将 q 固定为 0。也就是说,我们的 SARIMA 模型没有 MA 组件。
到目前为止,我们有如下结果:p=1,d=1,q=0
让我们验证季节周期 m 是 24 小时。为此,我们将使用 statsmodels 提供的seasonal_decompose()
函数将回归的残差分解为趋势、季节性和噪声:
components = **seasonal_decompose**(olsr_results.**resid**)
components.**plot**()
我们得到如下的情节:
回归残差分解(图片由作者
让我们放大一下季节性因素:
24 小时季节性周期的证据(图片由作者提供)
季节成分证实 m=24。
强季节分量保证差分的单个季节顺序,即我们设置 D=1。
让我们将单个季节差异应用于我们已经差分的残差时间序列:
olsr_resid_diff_1_24 = olsr_resid_diff_1.**diff**(**periods**=24)
季节性差异时间序列的 ACF(图片由作者提供)
滞后 24 点的强负相关表明具有 1 阶的季节性 MA (SMA)信号。即 Q=1 。此外,滞后-1 处正相关的缺失表明季节性 AR 成分的缺失。即 P=0。
我们固定 P=0,D=1,Q=1,m=24 小时
就是这样。
我们已经设法估计了 SARIMA 模型的所有 7 个参数如下: p=1,d=1,q=0,P=0,D=1,Q=1,m=24,即 SARIMAX(1,1,0)(0,1,1)24
步骤 4:建立并拟合带有季节性 ARIMA 误差的回归模型
让我们使用上述参数在训练数据集*(y _ train,X _ train)*上拟合 SARIMAX 模型。在此之前,我们需要删除 Patsy 自动添加到 X_train 的截距,并将 X_train 和 y_train 上的时间序列索引频率重置为每小时一次。
X_train_minus_intercept = X_train.**drop**(**'Intercept'**, **axis**=1)X_train_minus_intercept = X_train_minus_intercept.**asfreq**(**'H'**)y_train = y_train.**asfreq**(**'H'**)
让我们构建并测试 SARIMAX 模型:
sarimax_model = **ARIMA**(**endog**=y_train, **exog**=X_train_minus_intercept,**order**=(1,1,0), **seasonal_order**=(0,1,1,24))sarimax_results = sarimax_model.**fit**()sarimax_results.**summary**()
以下是培训总结:
SARIMAX(1,1,0)(0,1,1)24 训练结果(图片由作者提供)
在训练总结中首先要查看的数字是永盒测试的统计数据及其 p 值。Ljung-Box 帮助我们确定回归的残差是否在统计意义上是自相关的。在这种情况下,p 值为 0.4,显著高于 0.05 (95%置信阈值)。所以我们接受永盒检验的零假设,即残差不是自相关的*。*
结果中需要注意的另外两件事是:Jarque-Bera 正态性检验产生了一个非常小的 p 值,这意味着在> 99.99%的置信水平上拒绝了零假设。假设回归误差是正态分布的。这可能是因为误差是高度峰度的(注意峰度=7.49,而不是正态分布的 3.0)。还要注意,误差根本没有偏斜(偏斜度=0.04,而正态分布误差为 0.0)。
回归误差也是异方差的,即它们具有非常数方差。H-test 的 p 值小得几乎为零就证明了这一点,但是您可以做一些事情来解决这个问题。
我们还可以对 P、D、Q、P、D、Q 和 m 的不同参数组合进行试验。事实证明,这种使用不同 SARIMAX 模型的迭代在 SARIMAX 世界中并不罕见。
我们要做的是通过将 Q 设为 0 来简化我们的模型。也就是说,我们将尝试 SARIMAX(1,1,0)(0,1,0)24 模型:
sarimax_model = **ARIMA**(**endog**=y_train, **exog**=X_train_minus_intercept,**order**=(1,1,0), **seasonal_order**=(0,1,0,24))sarimax_results = sarimax_model.**fit**()sarimax_results.**summary**()
以下是培训总结:
SARIMAX(1,1,0)(0,1,0)24 训练结果(图片由作者提供)
在这个修正的模型中,我们看到 Ljung-Box 检验统计量的 p 值已经从早期的 0.4 降低到 0.1,这意味着这个模型的回归误差与早期模型相比不相关的可能性要小得多。与以前的模型相比,新模型似乎并没有使误差变得更不异方差或更正态分布。
我们将接受模型的早期版本,即 SARIMAX(1,1,0)(0,1,1)24 模型。
(感谢 蒂亚戈·里巴斯 在本节早期版本中发现错误)
第五步:预测
SARIMAX 传奇的最后一步是使用选择的模型生成一些预测。我们将要求模型生成 24 个样本外预测,即预测训练数据集结束后未来 24 小时的 y (污染物 PT08_S4_NO2)值。我们将使用我们在步骤 1 中划分出的测试数据集( y_test , X_test )。回想一下,模型在训练期间从未见过测试数据集。
让我们为预测准备测试数据集:
X_test_minus_intercept = X_test.**drop**(**'Intercept'**, **axis**=1)X_test_minus_intercept = X_test_minus_intercept.**asfreq**(**'H'**)y_test = y_test.**asfreq**(**'H'**)
调用get_forecast
方法获得样本外预测:
predictions = sarimax_results.**get_forecast**(**steps**=24, **exog**=X_test_minus_intercept[:24])predictions.**summary_frame**()
我们得到以下输出:
PT08_S4_NO2 的 24 个样本外预报(图片由作者提供)
让我们将测试数据集中的实际值 y_test 与 summary _frame 的“平均值”列中提到的预测值一起绘制出来。我们将绘制每个预测值的置信下限和置信上限:
predicted, = plt.**plot**(X_test_minus_intercept[:24].**index**, predictions.**summary_frame**()[**'mean'**], **'go-'**, **label**=**'**Predicted**'**)actual, = plt.**plot**(X_test_minus_intercept[:24].**index**, y_test[:24], **'ro-'**, **label**=**'**Actual**'**)lower, = plt.**plot**(X_test_minus_intercept[:24].**index**, predictions.**summary_frame**()[**'**mean_ci_lower**'**], **color**=**'**#990099**'**, **marker**=**'**.**'**, **linestyle**=**'**:**'**, **label**=**'**Lower 95%**'**)upper, = plt.**plot**(X_test_minus_intercept[:24].**index**, predictions.**summary_frame**()[**'**mean_ci_upper**'**], **color**=**'**#0000cc**'**, **marker**=**'.'**, **linestyle**=**':'**, **label**=**'**Upper 95%**'**)plt.**fill_between**(X_test_minus_intercept[:24].**index**, predictions.**summary_frame**()['mean_ci_lower'], predictions.**summary_frame**()['mean_ci_upper'], **color** = **'**b**'**, **alpha** = 0.2)plt.**legend**(**handles**=[predicted, actual, lower, upper])plt.**show**()
我们得到如下的情节:
预测、实际和 95%置信区间(图片由作者提供)
关键要点
- 带有(季节性)ARIMA 误差的回归(SARIMAX)是一种时间序列回归模型,它结合了两种强大的回归模型,即线性回归和 ARIMA(或季节性 ARIMA)。
- Python Statsmodels 库通过 Statsmodels 的 v0.12.0 中的
statsmodels.tsa.arima.model.ARIMA
类或 v0.13.0 中的statsmodels.tsa.statespace.sarimax.SARIMAX
为构建 ARIMAX 模型提供了强大的支持。 - 在配置(S)ARIMAX 模型的(S)ARIMA 部分时,使用一组众所周知的规则(结合个人判断)有助于确定(S)ARIMAX 模型的 P、D、Q、P、D、Q 和 m 参数值。
- 设计良好的(S)ARIMAX 模型的回归残差几乎没有自相关。这由永氏盒试验的 p 值表示。
- 此外,您可能希望残差是等方差的,并且(最好)是正态分布的。因此,您可能需要尝试 P、D、Q、P、D、Q 的不同组合,直到您获得具有最佳拟合度特征的模型。
相关阅读
以及如何使用 Python 测试它们。
towardsdatascience.com](/assumptions-of-linear-regression-5d87c347140) [## 什么是时间序列分解,它是如何工作的?
另外,首先深入研究使用 Python 的强大的时间序列分解算法
towardsdatascience.com](/what-is-time-series-decomposition-and-how-does-it-work-9b67e007ae90) [## 当回归模型的误差包含两个峰值时
关于处理双峰残差的 Python 教程
towardsdatascience.com](/when-your-regression-models-errors-contain-two-peaks-13d835686ca) [## 异方差没有什么可怕的
使用 Python 的原因、影响、测试和解决方案
towardsdatascience.com](/heteroscedasticity-is-nothing-to-be-afraid-of-730dd3f7ca1f) [## 使用偏度和峰度检验正态性
…以及使用综合 K 平方和 Jarque–Bera 正态性检验的分步指南
towardsdatascience.com](/testing-for-normality-using-skewness-and-kurtosis-afd61be860)
参考文献、引文和版权
空气质量测量的数据集来自 UCI 机器学习库,可用于研究目的。
论文链接: S. De Vito,E. Massera,M. Piga,L. Martinotto,G. Di 法兰克王国,关于在城市污染监测场景中用于苯估计的电子鼻的现场校准,传感器和致动器 B:化学,第 129 卷,第 2 期,2008 年 2 月 22 日,第 750-757 页,ISSN 0925-4005, 【网页链接】 。 ( 【网页链接】)
本文中的所有图片版权归 Sachin Date 所有,版权归 CC-BY-NC-SA 所有,除非图片下面提到了不同的来源和版权。
感谢阅读!如果您喜欢这篇文章,请 关注我 获取关于回归和时间序列分析的提示、操作方法和编程建议。**
PyCaret 回归:一个更好的机器学习库
让我们看看用 PyCaret 解决回归问题有多简单。包括源代码。
几天前,我介绍了 PyCaret 库的基础知识,并展示了它如何在易用性方面击败众所周知的 Scikit-Learn。今天我们将更具体一点,并介绍如何处理回归任务。阅读前一篇文章不是先决条件,但是如果你以前没有使用过这个库,可以随意浏览一下。
由 HARALD PLIESSNIG 在 Unsplash 上拍摄的照片
回归问题在我们周围无处不在——最明显的是任何种类的价格预测。这就是为什么我们必须知道如何解决回归任务,以及如何高效地解决它们。
如果你更喜欢视频,或者只是想巩固你的知识,请随意观看我们关于这个主题的视频。源代码包括:
在开发时间方面,PyCaret 比 Scikit-Learn 更适合回归任务。这一切都归结为几个函数调用。不需要在几个学习算法之间进行测试,也不需要花费几天时间来调整超参数。PyCaret 为您做了所有这些(甚至更多)。
这篇文章的目标读者是熟悉机器学习中回归概念的人。熟练的知识不是必需的,因为我们将简要回顾回归理论。
这篇文章的结构如下:
- 高级回归概述
- 模型选择、训练和优化
- 模型可视化
- 预测和模型保存
- 结论
所以事不宜迟,让我们开始吧!
高级回归概述
我假设你已经知道什么是回归。Investopedia的一段话比我更好地总结了这一点:
回归是一种用于金融、投资和其它学科的统计方法,它试图确定一个因变量(通常用 Y 表示)和一系列其它变量(称为自变量)之间关系的强度和特征
用最简单的术语来说——我们希望通过数据点拟合一条线(或超平面),以获得最佳拟合线。后面的算法旨在找到最小化成本函数的线,通常是 MSE 或 RMSE。
这是线性回归,但也有其他类型,如多项式回归。与它的弟弟不同,多项式回归不假设线性关系,有时可以产生更好的结果。只是不要疯狂地使用多项式次数——因为模型往往会过度拟合。
我们还有更复杂的回归算法,比如:
- 随机森林回归
- XGBoost 回归
在大多数情况下,这些将优于线性回归,代价是模型的可解释性。不需要考虑算法选择,因为 PyCaret 会自动选择算法。让我们在下一节看看如何实现。
模型选择、训练和优化
现在有趣的部分来了。我们将使用来自 Kaggle 的房地产数据集。它看起来是这样的:
它需要清理一下,但不要太大。这是代码
df.drop([‘No’, ‘X1 transaction date’], axis=1, inplace=True)
df.columns = [‘Age’, ‘DistanceToMTR’, ‘NumStores’, ‘Latitude’, ‘Longitude’, ‘UnitPrice’]
现在情况好些了,但我们还有一个“问题”。如果说这些年来我学到了什么,那就是定价数据集通常是有偏差的。这意味着目标变量不遵循正态分布。
就预测而言,这是一个问题,因为它会影响模型的性能。下面是目标变量的直方图:
怀疑得到证实。为了解决这个问题,我们将使用一种非常科学的目测方法,删除所有单价大于 70 的记录。当然,有更好的方法来处理这个问题,但是我想尽快开始建模。
df = df[df[‘UnitPrice’] <= 70]
我们现在有了一些看起来更正常的东西,可以继续建模过程了。如果你读过之前的文章,你就知道这部分不能再简单了。首先,让我们从 PyCaret 库中导入回归模块并执行基本设置:
from pycaret.regression import *exp_reg = setup(df, target=’UnitPrice’)
几秒钟后,您将看到一条成功消息和一个数据框,其中包含大量数据信息。请随意通读。接下来,我们可以比较一堆机器学习模型的性能,看看哪一个做得最好。就像函数调用一样简单:
compare_models()
似乎随机森林算法总体上做得最好,所以我们将使用它来创建模型:
model = create_model(‘rf’)
模型调整现在也是一个简单的过程:
tuned_model = tune_model(‘rf’)
下面是原始模型和调整后的模型之间的性能比较:
所以是的,超参数调整,尽管只持续了几秒钟,将 RMSE 从 6.17 降低到了 5.82。现在,让我们从这个调整后的模型中进行一些可视化处理。
模型可视化
首先,让我们绘制调整模型的残差图:
plot_model(tuned_model)
火车片场的表现更好,但那是意料之中的。训练集和测试集残差都是正态分布的。接下来,让我们用 SHAP 值来解释我们的模型。
SHAP,或*沙普利附加解释,*是一种解释机器学习模型输出的方式。通过绘制每个样本的每个特征的 SHAP 值,我们可以使用它来查看哪些特征最重要。
interpret_model(tuned_model)
到 MRT 的距离更远(图表上的错别字,抱歉),导致单价下降。房产的年限也是如此。位置(纬度和经度)正好相反。我们还没有用地理图可视化这些数据,所以我提供一些推理是没有意义的。
接下来,让我们进行预测并保存我们的回归模型。
预测和模型保存
好的,假设我们对模型的表现很满意,我们想对测试集做一个最终的评估。方法如下:
predictions = predict_model(tuned_model)
您可能不知道的是,PyCaret 在数据集加载时进行了 70:30 的训练测试分割,因此我们不必手动完成这一步。您可以更改这个百分比,但是 70:30 是一个很好的起点。
我们在测试集上看到了一点糟糕的结果,但这是意料之中的。在将模型保存到 pickle 文件之前,我们需要完成它:
finalize_model(tuned_model)
现在可以在您选择的环境中保存模型以备后用:
save_model(tuned_model, ‘realestate_rf’)
这就是 PyCaret 的回归任务。让我们在下一部分总结一下。
结论
这是一篇有趣的文章。如果您一直在跟进,我希望您已经花了一些额外的时间来准备数据,并在建模中获得了更好的结果。因为我们有纬度和经度信息,所以制作这个数据集的地理图也是很好的。这样我们就能更好地解释为什么经度和纬度的增加会导致价格上涨。
无论如何,我希望你已经设法得到一些有用的东西。当然,还有更多的东西需要探索,但是 PyCaret 使我们能够将更多的时间花在重要的事情上——比如数据准备和模型解释,而不是花费数周的时间来训练和调整模型。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
Python 中的正则表达式
在 re 模块中搜索并拆分功能
简介
正则表达式或 regex 是一个字符序列,用于检查每个文本(字符串)中是否存在模式,例如,找出“123”是否存在于“Practical123DataScie”中。regex 解析器将“123”解释为在字符串中只匹配自身的普通字符。但是正则表达式的真正威力在于当一个模式包含称为 元字符 的特殊字符时。这些对于正则表达式匹配引擎有着独特的意义,并极大地增强了搜索能力。
Regex 功能驻留在一个名为*re*
的模块中。因此,像 Python 中的所有模块一样,我们只需要如下导入它就可以开始工作了。
import re
本教程涵盖了 re 模块中非常有用的函数,例如分别用于搜索和替换的 search() 和 split() 。您还将学习用元字符创建复杂的匹配模式。
我)。搜索()功能
正则表达式搜索通常被写成:
re.search(*pattern*, *string*)
这个函数遍历字符串,找到与模式匹配的第一个位置。如果不匹配,则返回 None。让我们看看下面的例子:
s1= "Practical123DataScie"
re.search("123", s1)Output: <re.Match object; span=(9, 12), match='123'>
输出为您提供了大量信息。它告诉你有一个匹配,并位于字符串的 s[9:12]。这是一个简单的例子,我们可能需要搜索复杂的模式。现在想象一下,你想找三个类似“456”或者“789”的连续数字。在这种情况下,我们需要使用模式,因为我们在寻找连续的数字,而我们不知道这些数字到底是什么。它们可能是“124”、“052”等等。我们如何做到这一点?
s2 = “PracticalDataScie052”
re.search(‘[0–9][0–9][0–9]’, s2)Output: <re.Match object; span=(17, 20), match='052'>
这里有很多概念要讲。这里用的图案是‘[0-9][0-9][0-9]’.
先来说说方括号 ([]) 。正则表达式或模式 […] 告诉你匹配方括号中的任何单个字符。例如:
re.search(‘[0]’, s2)Output: <re.Match object; span=(17, 18), match='0'>
这个模式’[0]'告诉在 s2 字符串中定位字符 0,如果匹配就打印出来。如果我需要定位更多字符,比如三个数字,我可以写:
re.search(‘[0][5][2]’, s2)Output: <re.Match object; span=(17, 20), match='052'>
好吧,你是对的。我可以只输入’ 052 '作为一个模式,在 s2 字符串中定位它,但是现在事情变得有趣了。我可以在方括号内创建另一个正则表达式,例如用于范围。我这么说是什么意思?这意味着使用 (-) ,我可以定位一系列字符。例如:
re.search(‘[0–9]’, s2)Output: <re.Match object; span=(17, 18), match='0'>
意思是找出 s2 内从 0 到 9 的任意一个数字。现在,让我们回到定位三个连续数字的问题上来。为此,我可以简单地写:
re.search(‘[0–9][0–9][0–9]’, s2)Output: <re.Match object; span=(17, 20), match='052'>
每个方括号内的每个范围告诉你在 s2 字符串中找出一个数字。我也可以使用字母范围。例如:
re.search(‘[a-z][0–9]’, s2)Output: <re.Match object; span=(16, 18), match='x0'>
这个例子告诉我们定位两个字符。第一个,任何小写字母,第二个字符应该是数字。输出(’ x0 ‘)正是我们期望得到的。正则表达式 ‘\d’ 等于’ 0–9 '。所以,对于前面的例子,我也可以用:
re.search(‘[a-z][\d]’, s2)Output: <re.Match object; span=(16, 18), match='x0'>
二世)。split()函数
与搜索函数类似,正则表达式拆分通常写成:
重新拆分(图案、串)
这个函数使用模式作为分隔符分割字符串,并将子字符串作为列表返回。让我们看看下面的例子:
re.split(‘[;]’, ‘Data;Science and; Data Analysis;courses’)Output: ['Data', 'Science and', ' Data Analysis', 'courses']
在这个例子中,模式是[;],这意味着我们有分号(;)作为分隔符。只要字符串中有分号,它就会在那个位置被拆分并保存在一个列表中。我们可以有不止一个分隔符。让我们看一个更复杂的例子。
string = “Data12Science567programbyAWS025GoogleCloud”
re.split(‘\d+’, string)Output: ['Data', 'Science', 'programbyAWS', 'GoogleCloud']
在这个例子中,我们的模式是’ \d+‘,我们都知道’ \d '模式表示任何数字(0 到 9)。通过在末尾添加一个“+”符号,将使模式匹配至少一个或多个数字。因此,在这种情况下,我们看到任何连续的数字都将被认为是分隔的,并且子字符串在列表中返回。
让我们考虑下面的字符串。我有两门【课程号】【编程语言】【课程名称】格式的课程。字符串写在两个不同的行中,单词之间的间距不相等。
string = ‘’’101 Python DataScience
102 R DataAnalysis’’’
re.split(‘\s+’, string)Output: ['101', 'Python', 'DataScience', '102', 'R', 'DataAnalysis']
在本例中,’ \s '模式匹配任何空白字符。通过在其末尾添加加号“+”,该模式将匹配至少 1 个或更多空格。
III)结论
本教程中已经讨论了 re 模块中的搜索和分割功能。使用元字符创建不同的模式,在文本挖掘中会非常有益。
Python 中的正则表达式
数据科学的正则表达式
正则表达式是定义文本中搜索模式的特殊字符序列。在这篇文章中,我们将讨论如何使用 python 中最基本的正则表达式方法之一“re.findall()”来提取字符串表达式的开头。
我们开始吧!
首先,让我们导入 python 正则表达式模块“re”:
import re
假设我们有以下字符串:
test_string1 = 'Python is Amazing!'
我们可以将表达式 r "^\w+ "传递给’ re.findall()',以及我们的字符串,这将返回我们的输入字符串的开头:
regex_1 = re.findall(r"^\w+",test_string1)
print(regex_1)
在表达式 r“\w+”中,字符’‘对应于字符串的开头,而’ \w+'在字符串中查找字母数字字符。
如果我们去掉’^',我们会得到:
regex_1 = re.findall(r"\w+",test_string1)
print(regex_1)
让我们试着拉另一个字符串示例的开头:
test_string2 = 'Java is Amazing!'
现在,让我们应用’ re.findall()'来查找该字符串的第一个单词:
regex_2 = re.findall(r"^\w+",test_string2)
print(regex_2)
接下来,让我们考虑一个更现实的场景,在这个场景中,这个方法可能是有用的。假设我们有一个 YouTube 视频标题和相应的 YouTube 视图的列表。我们可能对分析视频标题的第一个单词和相应的视频观看次数之间的关系感兴趣。考虑下面的标题/视图元组列表:
youtube_titles = [("How to Tell if We're Beating COVID-19", 2200000), ("Extreme Closet Clean Out",326000), ("This is $1,000,000 in Food",8800000), ("How To Tell If Someone Truly Loves You ", 2800000), ("How to Tell Real Gold from Fake", 2300000), ("Extreme living room transformation ", 25000)]
我们可以用下面的方法找到每个标题的第一个单词:
for title in youtube_titles:
print(re.findall(r"^\w+",title[0])[0])
我们可以将这些值追加到列表中:
first_words = []
for title in youtube_titles:
first_words.append(re.findall(r"^\w+",title[0])[0])
print(first_words)
我们还可以将视图附加到列表中:
first_words = []
views = []
for title in youtube_titles:
first_words.append(re.findall(r"^\w+",title[0])[0])
views.append(title[1])
然后,我们可以创建首字值和视频视图的数据框:
import pandas as pd
df = pd.DataFrame({'first_words': first_words, 'views':views})
print(df)
然后,我们可以执行分组,并计算每个第一个词的平均浏览量:
df = df.groupby('first_words')['views'].mean()
print(df)
让我们也按降序对这些值进行排序:
df = df.groupby('first_words')['views'].mean().sort_values(ascending = False)
print(df)
假设这些结果来自足够大的数据集,比如有数千个标题和观看次数,这种类型的分析可以帮助我们选择最佳的 YouTube 视频标题。
我将在这里停下来,但是我鼓励您自己尝试使用“re.findall()”方法。
结论
总之,在这篇文章中,我们讨论了如何使用 python 中正则表达式模块的“re.findall()”方法。我们将该方法应用于两个简单的字符串,以提取每个字符串的第一个单词。然后,我们考虑了一个更现实的用例,我们使用该方法提取 YouTube 视频标题的第一个词,并计算每个第一个词对应的平均视频浏览量。我希望你觉得这篇文章有趣/有用。这篇文章的代码可以在 GitHub 上找到。感谢您的阅读!
正则表达式(RegEx):用备忘单清楚地解释它们
正则表达式(或 regex )是用来表示字符串模式的工具。它们用于检测、检查、修改和操作字符串。基本上,如果你想在一个文本中找到所有的专有名词,你可以使用正则表达式。我们知道名称只包含字母,并且以大写字母开头。Regex 允许我们将自然的人类短语转录成计算机表示。他们精通 Python 或 Java,甚至 Excel,对于工程师、营销人员或其他人来说非常有用。
但是正则表达式,乍一看,毫无魅力。一个人可以害怕他们,但是错误地害怕他们。除了少数例外,它们在所有平台上都以相同的方式使用。因此,我将展示使用 Python 了解 regex 的要点。
我为你准备了一张 小抄,你可以下载 来总结这篇文章中会看到的内容。
准备一个 Python 脚本,自己进行可视化测试
(非强制性)
为了让这篇文章尽可能的有用和互动,我很快为你创建了一个小的 python 脚本。你将能够用清晰的视觉实时地自己测试任何你想要的东西。
如果你没有 python 或者只是想看帖子那么 你可以去下一节 没有任何问题。本帖中的图片展示了结果。
首先,您将要做的所有测试都将位于一个您将命名为file.json
的 JSON 文件中。你可以把你的正则表达式写在引号内"Regular expressions" :
之后。注意,在 JSON 格式中,\
是一个叫做转义符的特殊字符。所以你必须写一个双反斜杠\\
。
动态结果将自动在控制台中显示。因此,为了格式化我的文本,我创建了一个class SGR
,代表“选择图形再现”。你可以在这里找到更多关于如何格式化你的文本的信息。
最后一段代码用于提取并在控制台中显示从测试句子的正则表达式中编译的数据。这允许你有你在上面看到的渲染。有必要了解什么是 regex 才能更好的理解这个脚本。我对代码做了注释,所以你可以在读完这篇文章后再来看。
让我们从基础开始
假设我们正在寻找所有的字母 "e " 。那么关联的正则表达式就是简单的e
。如果我们寻找所有出现的字符串“el”,那么相关的正则表达式就是el
。注意,正则表达式是区分大小写的。换句话说,e
不同于E
。
如果你同时使用了我上面的脚本或其他工具来测试,我邀请你尽可能多地自己尝试这个概念,例如,正则表达式hello
或正则表达式Welcome
。只有Welcome
正则表达式会给出结果,因为它区分大小写。
范围
到目前为止,没什么复杂的,我们甚至可以不用正则表达式。正是从这一点开始,正则表达式引起了他们所有的兴趣。让我们想象一下,我们想要捕捉文本中所有的元音。我们不能编写 regex aeiouAEIOU
(记住它是区分大小写的)来完成这个任务。所以我们不得不引入区间的概念。音程写在方括号内[…] 。为了匹配所有的元音,我们需要正则表达式[aeiouAEIOU]
。如果我们必须对它进行人工解读,我们会说我们在寻找所有的字符“a”或“e”或“I”或“O”或“U”。
如果我们希望所有大写字母(大写)从“D”到“W”,我们将使用正则表达式[D-W]
。
为了熟悉这个区间(或范围)的概念,你可以使用 附带的备忘单 中的区间尝试出新的正则表达式。
字符类别
要用大写和小写说出字母表中的每个字母,必须写[a-zA-Z]
。我承认付出了很多努力,但收效甚微。这就是为什么有不同的类可用于构建正则表达式:
- 为了替换
[a-zA-Z]
,(所有的字母)我们有\w
,这相当于说我们想要的任何单词字符。 - 对于任何数字字符,我们有 T2 类。
\s
相当于一个空格字符。- 换行由
\n.
给出 - 而
.
意味着我们希望占位符中的任意字符(除了换行符\n
)。
因此,如果我们想找到所有由空格包围的双字单词,我们有正则表达式\s\w\w\s
。
注意每个类都有它的否定。否定是用大写格式写的。也就是说,如果我们想要除了字母以外的所有东西,我们就必须写\W
(注意\W
也表示没有数字)。如果我们想捕捉除了数字以外的所有东西,我们可以使用\D
类。同样适用于\S
。
为了捕捉三次任何不是单词或数字字符的东西,我们可以选择...\W
。
量词
在前面的例子中,我们使用 regex ...\W
来获取不以字母结尾的 4 个字符的字符串。假设我们想要同样的东西,但是有 8 个字符。我们可以写.......\W
,但是很明显你看到了其中的问题。最好的方法是能够选择我们想要的重复次数。这正是量词的作用。
给定在括号{…} 之间,量词应用于其后的字符。因此,为了让每个空格后跟 4 个字的字符,我们可以使用\s\w{4}
。
你也可以更进一步,选择最小或最大重复次数,或者询问重复间隔。对于两个到七个字母之间的单词,我们有正则表达式\w{2,7}
。
还有其他的量词:
+
允许我们指定 1 个或多个等同于{1,}
。*
可以表示 0 或更多的**,相当于{0,}
。**- 最后,
?
表示 0 或 1 乘以,与{0,1}
相同。
为了演示它,让我们想象一下,由于某种原因,我们需要捕捉每个空格,后跟最多 2 个任意字符,后跟另一个空格,然后是一个单词**。一个词当然包含至少一个字符(+
量词),所以我们必须检查所有对应于\s.{,2}\s\w+
的模式。(直写但不一定要读)**
大量信息堆积起来。熟能生巧,所以你需要一开始就把小抄带在身边。在进入下一部分之前,让我们稍微休息一下,看看这只猫。我保证这一跳看起来很难,但其实并不难。
组
接下来的部分将详细介绍 python 能做些什么。如果你看了我提供的代码,你会注意到有一个组的概念。为了简单起见,让我们假设我们想要提取问候“Hello”、“Welcome”和“Hey”。我们可以一个接一个地做 3 个正则表达式[Hh]ello
、[Ww]elcome
和[Hh]ey
、T23。(注意,在这些正则表达式中,我们考虑到 a 可以以大写字母开头)。
但是我们可以通过在括号(…) 之间建立一个所谓的组,并用一个竖线| 分隔,将这三个正则表达式聚集成一个。我们得到正则表达式([Hh]ello|[Ww]elcome|[Hh]ey)
。****
你可以在上面的图片上看到组可以被 python 检测到并返回。所以最大的好处就是组可以作为变量返回**。你也可以使用字典组。也就是说,在 python 字典中返回给我们的组。只需更改组的开头,如斜体所示(*?P<greetings>*[Hh]ello|[Ww]elcome|[Hh]ey)
。
所以你最终得到一个带有键问候语 的字典,从你的脚本中访问这场比赛,如下图所示。注意所有的字典组都包含在组中。**
您也可以决定不使用(*?:*[Hh]ello|[Ww]elcome|[Hh]ey)
格式返回组。但我再次邀请你用这张纸自己试一下**。**
断言
您还可以使用许多可能的断言,包括:
^
表示一个字符串的开始$
为结尾或一串\b
象征一个字的边界
如果你现在想抓住所有以感叹号结尾的句子。然后就和要求一句话从头到尾结尾带感叹号且不管中间是什么一样。此处节录**^.*!$**
我刚发现做这个截图很有趣:)
还有其他一些需要更多关注的断言
为了总结正则表达式可以做的事情,我想通过一个例子来介绍其中的一个。这一部分的目的是复制下面的正则表达式。不要慌,它又长又丑。但是我敢打赌,我可以告诉你,一个正则表达式,从一部分来看,实际上并没有那么复杂。
本部分的目的是回答以下问题:“您与谁会面”?
所以要回答这个问题,我们需要提取出直接放在前面的名字“with”。这是一个断言。从字面上来看,它是一个正向后视标记为(?< =…)** 。积极是因为“是”而不是“不是”,回顾是因为“在前”而不是“在后”。**
为了提取单词“with”(和一个空格字符)前面的内容,我们以 regex (?<=with\s).*
结束。
因此,我们摘录了直接跟在“with”后面的内容。但是我们想知道这个人的名字。
那么让我们想象一个困难的情况,其中有一个“迈克尔-菲利普·约翰逊”。他的名字也可以写成:“M.-P”。或者“MP”或者“M”或者“M-P”。为了让只有** 个大写字母或一个点或连字符,后面可能跟着小写字母**,我们使用了正则表达式[A-Z\.\-]+[a-z]*
。(注意.
是留给“任意字符”的。如果你真的想要一个点,你必须在前面加上转义字符\
。对于-
来说也是同样的想法。)****
然后在 dictionary 中将这个组作为返回,这个步骤很简单,我们可以在末尾添加一个?
,因为名字也可以不写。并且加一个\s
保证字尾。
我们得到(?P<firstname>[A-Z\.\-]+[a-z]*)?\s
。将与我们已经拥有的东西串联起来:
我们得到(?<=with\s)(?P<firstname>[A-Z\.\-]+[a-z]*)?\s
。
那么很容易!姓氏由一个大写字母和几个小写字母定义,因此我们可以编写[A-Z][a-z]+
正则表达式。通过在 python 字典中添加 return,它变成了(?P<lastname>[A-Z][a-z]+)
。
如果姓氏和“with”之间没有名字,则没有额外的空格。我们加一个?
来保证这种情况。串联一切和 Tadam! (?<=with\s)(?P<firstname>[A-Z\.\-]+[a-z]*)?\s?(?P<lastname>[A-Z][a-z]+)
旗帜
最后还有多面旗。我不会解释如何使用它们,因为它们在不同的编程语言中有不同的用法。它们当然会出现在备忘单中。例如,如果您想要:
- 忽略区分大小写你可以使用 I 标志
- 允许注释和空格在正则表达式中你可以使用 X 标志
- 允许多线带 M 。
(python re 包中的例子)。
知识就是分享。
支持我,一键获得访问 中我所有文章的。
来源
正则表达式操作,Python 文档
所有的图片和脚本都是自制的,可以免费使用。
这里是 github 库你可以在那里找到脚本
我的小抄又来了,免费的时候总是更好!🆓 🆓 🆓
深度学习中的正规化和退出
编码,这样你就能理解了
在上一篇帖子中,我们已经编码了一个深度密集的神经网络,但是为了拥有一个更好、更完整的神经网络,我们需要它更加健壮,能够抵抗过拟合。你可能听说过,深度神经网络中常用的方法是正则化和丢弃。在本文中,我们将一起理解这两种方法,并用 python 实现它们。
(我们将在下面直接使用上一篇文章中创建的函数,如果你对一些代码感到困惑,你可能需要查看上一篇文章)
正规化
正则化通过在损失函数的末尾增加一个额外的惩罚项来帮助防止模型过度拟合。
其中m
是批量大小。所示的正则化称为L2 regularization
,而L2
将平方应用于权重,L1 regularization
应用绝对值,其形式为|W|。
当有太多的重量或重量变得太大时,附加的额外项会扩大损失,并且可调因子λ强调了我们想要对重量进行多少惩罚。
1.为什么惩罚重量有助于防止过度拟合?
直观的理解是,在最小化新的损失函数的过程中,一些权重将降低到接近零,使得相应的神经元对我们的结果具有非常小的影响,就好像我们在具有更少神经元的更小的神经网络上训练一样。
向前
在正演过程中,我们只需要改变损失函数。
向后的
L2 regularization
的后向传播实际上是直接向前的,我们只需要加上 L2 项的梯度。
培养
像往常一样,我们在一个二元分类案例上测试我们的模型,并比较有正则化和没有正则化的模型。
没有正则化的模型
正规化模型
实际上,当我们让iteration
上升时,模型会继续过拟合,这导致除法运算中的错误,怀疑在前进过程中,结果A
太接近 0。
相比之下,正则化模型不会过拟合。有关完整的实施和培训流程,请查看我的 Github Repo 。
拒绝传统社会的人
Dropout 通过随机关闭一些输出单元来防止过拟合。
在上述过程中,在每次迭代中,层[2]上的一些单元将被随机静音,这意味着在正向过程中工作的神经元将减少,从而简化了神经网络的整体结构。
同时,经过训练的模型将更加健壮,因为该模型不再依赖于任何特定的神经元(因为它们可能在此过程中被抑制),所有其他神经元都需要在训练中学习。
向前
你可以把辍学看作是在前进的过程中增加了额外的一层。
在前面的课程中,我们有如下的正向方程式:
无脱落
其中g
是激活函数。现在辍学的一个额外的层是适用于 A1.
辍学
其中D
是漏失层。辍学层的关键因素是keep_prob
参数,它指定了保持每个单位的概率。假设keep_prob = 0.8
,我们有 80%的机会保持每个输出单元不变,20%的机会将它们设置为 0。
这个实现将会给结果A
添加一个额外的遮罩。假设我们有一个包含如下四个元素的输出 A^{[l]},
我们想让第三个单元静音,同时保留其余的单元,我们需要的是一个相同形状的矩阵,并做如下的元素乘法,
向前
下面有些模块是预导入的,要查看完整代码,请去我的 Github Repo 。
这里我们将D
初始化为与A's
相同的形状,并基于keep_prob
将其转换为 0 和 1 矩阵。
注意,退学后,成绩 **A**
**需要重新标度!**因为一些神经元在此过程中被抑制,相应地,左侧神经元需要被增强以匹配期望值。
向后的
反向过程是将同一个函数D
屏蔽到对应的dA
。
反向传播等式与我们在深度密集网络实施中介绍的等式相同。唯一的区别在于矩阵D
。除了最后一层,所有其他有缺失的层将应用相应的蒙版D
到dA
。
注意,在反向传播中, **dA**
也需要重新缩放。
培训和评估部分与辍学,如果你有兴趣,请检查我的 Github 上面的链接。
结论
正则化和丢失都是广泛采用的防止过拟合的方法,正则化是通过在损失函数的末端增加一个额外的惩罚项来实现的,而丢失是通过在正向过程中随机静音一些神经元来实现的,以使网络更加简洁。
深度学习中的正规化——L1、L2 和辍学
深度学习中最重要的正则化技术的理论和实践指南
https://www.spacetelescope.org/images/heic0611b/
正则化是一套技术,可以防止神经网络中的过拟合,从而提高深度学习模型在面对来自问题域的全新数据时的准确性。 在本文中,我们将讨论最流行的正则化技术,它们被称为 L1、L2 和辍学。
目录
- 重述:过度拟合
- 什么是正规化?
- L2 正规化
- L1 正规化
- 为什么 L1 和 L2 的正规化会奏效?
- 辍学
- 带回家的信息
1.回顾:过度拟合
训练神经网络时最重要的一个方面是避免过度拟合。我们已经在这篇文章中详细讨论了过度拟合的问题。
**然而,让我们快速回顾一下:**过度拟合是指神经网络对训练数据建模非常好,但当它看到来自同一问题领域的新数据时失败的现象。过度拟合是由神经网络在训练期间拾取的训练数据中的噪声引起的,并将其作为数据的基本概念来学习。
www.memegenerator.net
然而,这种习得的噪声对于每个训练集是唯一的。一旦模型看到来自同一问题域的新数据,但不包含这种噪声,神经网络的性能就会变得更差。
“为什么神经网络首先会拾取噪音?”
之所以这样,是因为这个网络的复杂程度太高了。右边的图像显示了更高复杂度的神经网络拟合。
图表 1。具有良好拟合和高方差的模型。来源:https://www.researchgate.net/publication/332412613
具有较高复杂性的模型能够拾取和学习数据中由一些随机波动或误差引起的模式(噪声)。该网络将能够逐个模拟分布的每个数据样本,而不识别描述该分布的真实函数。
用真函数生成的新的任意样本将具有与模型拟合的高距离。我们也说这个模型有很高的方差。
另一方面,左侧复杂度较低的网络对分布的建模要好得多,因为它没有太努力地对每个数据模式进行单独建模。
在实践中,过度拟合导致神经网络模型在训练期间表现得非常好,但是当面对全新的数据时,在推理时间期间性能变得更差。
**简而言之:**不太复杂的神经网络不太容易过度拟合。为了防止过度拟合或高方差,我们必须使用所谓的正则化。
2.什么是正规化?
**简单来说:**正则化是指在训练过程中降低神经网络模型复杂性的一套不同技术,从而防止过拟合。
有三种非常流行和有效的正则化技术叫做*【L1】*、和我们将在下面讨论的辍学。
3.L2 正则化
L2 正则化是所有正则化技术中最常见的类型,通常也被称为权重衰减或乘坐回归。
这个正则化的数学推导,以及为什么这个方法在减少过拟合方面起作用的数学解释,是相当长且复杂的。由于这是一篇非常实用的文章,我不想过多地关注数学。相反,我想传达这项技术背后的直觉,最重要的是如何实现它,以便您可以在深度学习项目中解决过度拟合问题。
在 L2 正则化期间,神经网络的损失函数由所谓的正则化项扩展,这里称为ω。
情商。1 正则项
正则项ω被定义为权重矩阵的欧几里德范数(或 L2 范数),其是权重矩阵的所有平方权重值的总和。正则项由标量α除以 2 进行加权,并添加到为当前任务选择的正则损失函数中。这导致损失函数的新表达式:
Eq 2。L2 正则化过程中的正则化损失。
Alpha 有时被称为正则化率,是我们引入神经网络的一个额外的超参数。简单地说,alpha 决定了我们正则化模型的程度。
在下一步中,我们可以计算新损失函数的梯度,并将梯度放入权重的更新规则中:
**
情商。3 L2 正则化过程中的梯度下降。
更新规则的一些重新表述导致了非常类似于规则梯度下降期间权重的更新规则的表达式:
方程 4 L2 正则化期间的梯度下降。
唯一的区别是,通过添加正则化项,我们从当前权重中引入了额外的减法(等式中的第一项)。
换句话说,独立于损失函数的梯度,我们在每次执行更新时使我们的权重变小一点。
4.L1 正则化
在 L1 正则化(也称为 Lasso 回归)的情况下,我们简单地使用另一个正则化项ω。该项是权重矩阵中权重参数绝对值的总和:
情商。5 L1 正则化的正则化项。
与前一种情况一样,我们将正则项乘以α,然后将全部内容添加到损失函数中。
情商。6 L1 正则化过程中的损失函数。
新损失函数的导数导致以下表达式,旧损失函数的梯度和权重值的符号乘以α。
情商。7 L1 正则化期间损失函数的梯度。
5.为什么 L1 和 L2 的正规化会奏效?
你现在可能会问自己的问题是:
“为什么所有这些有助于减少过度拟合问题?”
让我们来解决这个问题。
请考虑和函数的图,其中表示在 L1 期间执行的运算和在 L2 正则化期间执行的运算。
图表。2 L1 函数(红色),L2 函数(蓝色)。来源:自制。
在 L2 正则化的情况下,我们的权重参数减小,但不一定变为零,因为曲线在零附近变得平坦。另一方面,在 L1 正则化期间,权重总是被强制向零。
我们也可以对此采取不同的、更加数学化的观点。
在 L2 的情况下,你可以考虑解一个方程,其中权重值的平方和等于或小于一个值 s 。 s 是正则项 α 的每个可能值的常数。对于仅仅两个权重值 W1 和 W2 ,该等式看起来如下: W1 + W ≤ s
另一方面, L1 正则化可以被认为是一个等式,其中权重值的模之和小于或等于值 s 。这看起来像下面的表达式: |W1| + |W2| ≤ s
基本上,引入的 L1 和 L2 正则化方程是约束函数,我们可以将其可视化:
资料来源:统计学习导论,作者:加雷斯·詹姆斯,丹妮拉·威滕,特雷弗·哈斯蒂,罗伯特·蒂布拉尼
左图显示了 L1 正则化的约束函数(绿色区域),右图显示了 L2 正则化的约束函数。红色椭圆是梯度下降过程中使用的损失函数的轮廓。在轮廓的中心,有一组最优权重,对于这些权重,损失函数具有全局最小值。
在 L1 和 L2 正则化的情况下,W1 和 W2 的估计值由椭圆与绿色约束区域相交的第一个点给出。
由于 L2 正则化具有圆形约束区域,所以相交通常不会出现在轴上,并且这对于 W1 和 W2 的估计将完全是非零的。
在 L1 的例子中,约束区域是带角的菱形。因此损失函数的轮廓通常会在轴上与约束区域相交。那么这种情况发生时,估计值之一(W1 或 W2)将为零。
在高维空间中,许多权重参数将同时等于零。
5.1 正规化实现了什么?
- 执行 L2 正则化促使权重值趋向于零(但不完全为零)
- 执行 L1 正则化促使权重值为零
直观地说,较小的权重减少了隐藏神经元的影响。在这种情况下,这些隐藏的神经元变得可以忽略,神经网络的整体复杂性降低。
***如前所述:*不太复杂的模型通常会避免对数据中的噪声进行建模,因此不存在过度拟合。
*但是你必须小心。当选择正则项 **α时。*我们的目标是在模型的低复杂性和准确性之间取得适当的平衡
- 如果你的阿尔法值太高,你的模型会很简单,但是你会冒对数据拟合不足的风险。您的模型无法从训练数据中获得足够的信息来做出有用的预测。
- 如果你的 alpha 值太低,你的模型将会更复杂,你将会面临数据过度拟合的风险。您的模型将会了解太多有关训练数据的特殊性,并且无法推广到新数据。
6.拒绝传统社会的人
除了 L2 正则化和 L1 正则化,另一个著名的和强大的正则化技术是所谓的辍学正则化。辍学调整背后的程序非常简单。
简而言之,辍学意味着在训练期间,神经网络的一个神经元以某种概率在训练期间被关闭。让我们看一个直观的例子。
图表 3。有脱失(右)和无脱失(左)的神经网络。来源:机器学习研究杂志 15 (2014)
假设在左侧,我们有一个无丢失的前馈神经网络。假设一个随机神经元在训练过程中被关闭的概率为 P=0.5 ,使用 dropout 将导致神经网络位于右侧。
在这种情况下,您可以观察到大约一半的神经元是不活跃的,并且不被视为神经网络的一部分。如你所见,神经网络变得更简单了。
神经网络的更简单版本导致复杂性降低,从而可以减少过拟合。在每个前向传播和权重更新步骤应用具有一定概率 P 的神经元的去激活。
6.带回家的信息
- 过度拟合发生在更复杂的神经网络模型中(许多层、许多神经元)
- 通过使用 L1 和 L2 正则化以及丢弃,可以降低神经网络的复杂度
- L1 正则化迫使权重参数变为零
- L2 正则化迫使权重参数趋向于零(但从不精确为零)
- 较小的权重参数使一些神经元可以忽略→神经网络变得不太复杂→较少过拟合
- 在退出期间,一些神经元以随机概率 P →神经网络变得不那么复杂→更少的过拟合
最初发表于https://www.deeplearning-academy.com*。*
机器学习中的正则化
灯塔和大海,由戈克图·古韦尔辛拍摄
介绍
在这篇文章中,我们主要关注机器学习中正则化的四个基本方面。
- 什么是正规化?
- 正规化是用来做什么的?
- 正则化如何解决过拟合问题?
- 关于偏差和方差误差的背景信息,以理解前面的三个要点。
本文从理论层面分析了正则化的这四个不同方面,并对它们进行了概述。在下一篇文章中,我们将探讨应用于线性回归的三种常见正则化技术,并展示正则化项如何影响空间世界中的优化算法,以提供关于它的几何直观。
1)背景信息
在训练标准的机器学习模型时,我们试图做的是使数据集的基础事实标签和模型对它们的预测尽可能彼此接近。这个操作是在我们为我们的问题选择的损失函数上执行的,它倾向于增加模型在训练集上的准确性,同时最小化总误差中的偏差。
机器学习模型对其预测能力产生的总误差由三个值组成,分别是偏差、方差和不可约误差。偏差定义为预测值与正确标签的差异程度。
然而,这种趋势有时会导致 ML 模型记住数据集分散在多维空间中的模式,而不是理解并由此推广到该模式,这被称为过拟合。这是完全不理想的情况,因为模型实际上不会从数据中学习必要的东西,当我们在看不见的数据集上测试它时,它很可能会失败。此外,经历过拟合的 ML 模型变得如此复杂,因此;它们的方差在总误差上最大化。
方差是我们总误差中的第二项,它指的是模型对数据集的敏感度的大小。换句话说,如果一个模型的性能很容易受到数据集微小变化的影响,那么这个模型将会高度适应它。这是过度拟合的模型在未知测试集中失败而在训练集中成功的主要原因。
下图实际上是上面给出的所有解释的总结,它旨在提供关于上下文的洞察力。
模型的训练过程,作者:goktu gu vercin
2)正规化
在这一点上,正规化进入画面。正则化能够消除过度拟合,因此;提高模型质量。尽管其最常见的实践是在线性回归上观察到的,但它也适用于逻辑回归模型,以及遭受过拟合的人工神经网络。
正则化意在给目标 ML 或 DL 模型的代价函数增加额外的项。这个附加项的确切作用是防止优化算法(如梯度下降)达到最小化偏差误差的权重值。换句话说,它会给模型增加额外的偏置误差。这样,大量的方差误差被消除,模型摆脱了过拟合,并获得了超过其预测能力的泛化能力。下图也展示了这一过程。
规则化图,作者:goktu gu vercin
如正则化图中所示,为了最小化偏差误差,该模型倾向于放弃观察到总误差量最低的最佳点,并落入过拟合区域。正则化牺牲了少量的偏差;然而,在这种方式下,它通过减少大量的方差来实现将模型重新定位在最佳点。换句话说,在训练过程中,加入到代价函数中的正则项总是使模型保持在最佳状态;然而,如果我们在损失函数中不使用该项,模型可能会在过拟合区域结束。
正则项通常有两种不同的类型,称为 L2 和 L1。L2 项是多维空间中模型权重所在的原点和位置之间的欧氏距离,而 L1 项指的是同一事物,只是距离的计算方法不同,实际上是曼哈顿距离。在下图中,L2 和 L1 正则化项分别用逻辑回归和线性回归的损失函数进行了演示。
正规化术语,作者:goktu gu vercin
当优化算法试图达到损失曲线上的全局最小点时,它们实际上减少了这些损失函数中的第一项,即求和部分的值。然而,与此同时,权重向量的长度有增加的趋势;因此,正则项的值上升。优化算法必须在求和项和正则项之间建立平衡;不可能同时降低这两个值。超参数 lambda (λ)用于调整这种平衡,并决定哪一个更占优势。这种平衡,实际上也指上面提到的偏差-方差权衡。换句话说,正则化项表现得像手刹,正因为如此,正则化还能够缩小学习模型的权重,从而减少由于大权重的存在而在模型上观察到的不稳定性。
在这篇文章中,我们必须涵盖的最后一个要点是,为什么正则化项没有 bias ( b )参数,并且只在权重上定义。事实上,我们也可以通过偏差( b )参数来正则化我们的学习模型;没有限制,它必须进行公正的重量。然而,没有必要这样做,因为学习模型通常容纳大量的权重,并且与权重向量相比,在参数 b 上正则化模型对模型的贡献非常小。
结论
我希望我能提供关于正规化运作的有益信息。如果帖子里有不清楚的地方,可以在评论里提一下。应用于线性回归和几何直觉的最常见的正则化技术将在下一篇文章中讨论。
机器学习中的正则化
让深度神经网络泛化的关键。
在 Unsplash 上由 Daiga Ellaby 拍摄的照片
在本文中,我将讨论正则化的概念、正则化方法的分类以及正则化策略的具体例子。
本质上,正则化增加了模型拟合过程的偏差,以防止过度拟合。正则化背后的直觉是,如果我们有一个非常丰富的模型类,例如大型神经网络,我们希望将我们的学习过程限制为仅在该类的子集上搜索,该子集包含具有所需属性(例如某种程度的简单性)的模型。这种限制是一种偏见。希望是,如果我们明智地选择子集(我们通过适当的正则化来做到这一点),我们将找到一个比我们查看整个模型类更好的模型。
假设我们考虑的模型类是线性回归类,并且我们正在尝试拟合样本数少于输入要素数的数据集。因为我们想要拟合的参数数量(=特征数量)大于样本数量,所以我们有一个不适定的问题,我们的类中可能有许多模型可以解决回归问题。我们可以通过施加 L2 正则化来限制这一类,即在误差项中添加 w ,其中 w 是我们的回归权重。通过这种方式,我们将在任何同等精确的权重集合中选择权重最小的解决方案。
正则化是一个比深度学习古老得多的概念,也是经典统计学不可或缺的一部分。它可以说是推动最近机器学习热潮的最重要的技术集合之一。尽管如此,当使用术语“正则化”时,我们通常并不完全清楚我们的意思,并且存在几个相互竞争的定义(例如 Goodfellow 等人的)。在本文中,我将采用可能是最广泛的一种方法——kuka ka 等人的方法:
定义 1:正则化是任何旨在使模型更好地泛化的补充技术,即在测试集上产生更好的结果。
乍一看,这似乎太笼统而没有用,但是作者也提供了一个分类法来理解这个定义所包含的大量正则化方法。这种分类法的概述如下。
正则化分类法
在查看模型拟合过程时,kuka ka 等人确定了以下部分,每个部分都与偏置学习的方式相关联,即,调整。
经验风险最小化。可正则化的部分是-紫色:优化,红色:训练集,绿色:误差项,棕色:模型族,蓝色:正则化项。
基于上面的经验风险优化公式,我们可以正则化:
1。训练设置
2。模范家庭
3。误差项
4。正则项
5。优化程序
训练集
满足上述定义 1(即有助于实现更好的测试误差)的我们的数据的任何预处理或增加(随机的或确定的)都属于这一类。突出的例子是不平衡数据集的过采样或欠采样、图像识别中的数据增强,以及具有对立例子、退出和批处理形式的训练。后两种可能看起来令人惊讶,但它们可以被视为中间网络层创建的表示空间中的数据转换。
扩大训练集是一种简单的方法,可以消除数据中的特定偏差,而不必提出更复杂的模型——图像识别文献表明它确实有效!缺点是,这些技术通常会增加训练集的大小,这意味着需要在训练上花费更多的资源,并且必须小心不要创建与任务无关的样本。
模范家庭
选择我们模型的正确结构可能通常不被称为正则化,但它也是一种提高泛化能力的方法,因此它符合定义。
如果你曾经使用过神经网络,你会知道超参数调整可能是得到一个好模型的最乏味的部分。选择层数和每层神经元的数量,甚至只是定义搜索哪些不同的设置都可以被视为正则化。你实际上是将所有可能的神经网络的搜索空间限制在对你有意义的配置上。人类的直觉在这里发挥作用,这或许是深度学习有时被比作艺术或黑魔法的原因。
比调整网络中的元素数量更令人兴奋的是定义网络的结构:卷积层、LSTMs、T2、softmax 层、T4、注意力层、T5 等等,不胜枚举。我们不要忘记 convnets 在使 DNNs 适用于图像识别中发挥了至关重要的作用!
误差项
当然,选择正确的误差项也会影响模型在测试集上的性能。均方误差可能是最流行的误差项,但是交叉熵也很流行,例如对于自然语言任务 s,或者某些类不平衡独立损失。这些错误术语概括了关于任务、数据以及好的解决方案是什么样子的假设。
正则项
正则化术语大概就是大多数人说正则化的意思。这是一个修正误差项而不依赖于数据的项。数据的这种独立性意味着正则项仅用于偏置模型参数的结构。
可能最流行的正则化术语是网络上的 L2 范数或回归权重,也就是深度学习中的 权重衰减 和经典统计学中的岭回归的定义特征。这种 L2 正则化是吉洪诺夫正则化的一种特殊形式,实际上是模型权重的零均值高斯先验,这意味着我们倾向于使用较少而不是较多特征的解决方案,并且不会过度依赖任何特征。这潜在地消除了冗余特征,并产生了更简单的模型。为了进一步增加权重的稀疏性,可以使用 L1 范数(套索回归)。
其他正则化项针对例如输入上的梯度,或者输入-输出映射的函数属性。
正则化术语通常是一种定义模型外观的优雅方法,因为它们可以以即插即用的方式使用,并且对任何数据集都一样。它们通常会稍微增加超参数调整的工作量,因为通常需要定义一个参数来衡量正则项和误差项的贡献。
优化程序
优化过程是一种有趣的,但经常被忽视的正则化方法。改变优化器和学习速率显然对学习什么模型有影响,但是这种影响是什么通常不直观地清楚。一些有趣的最近结果显示 SGD 实际上可能是一个重要的正则化子,这可能有助于解释为什么深度神经网络像它们一样泛化(尽管被极大地过度参数化)。
本文到此为止,希望你学到有用的东西!请务必查看 Kukač ka 等人介绍分类学的论文,如果您对泛化和正则化感兴趣,也可以看看张等人非常容易理解的“理解深度学习需要重新思考泛化”。
正则化:机器学习
过度拟合模型、模型类型、数学和执行的解决方案。
简介:
为了理解正则化的概念及其与机器学习的联系,我们首先需要理解我们为什么需要正则化。我们都知道机器学习是用相关数据训练一个模型,并使用该模型预测未知数据。“未知”一词意味着模型尚未看到的数据。我们已经训练了这个模型,并且在使用训练数据时取得了不错的成绩。但是在预测的过程中,我们发现该模型与训练部分相比表现不佳。现在,这可能是一种过度拟合的情况(对此我将在下面解释),这导致了模型的不正确预测。在这种情况下,规范化模型有助于解决问题。
背景:
在本文中,我们将讨论以下主题:
- ML 中欠拟合和过拟合是什么意思?
- 如何解决不合身的问题?
- 正则化及其背后的数学介绍。
- 正规化的类型(L1 和 L2)。
- 正规化和交叉验证。
欠配合和过配合的问题:
这里是贯穿本文的 Jupyter 笔记本 的 链接。请并排浏览以彻底理解这篇文章。
考虑线性回归的情况。我们将生成一些数据来处理。然后,数据将被分成训练和测试数据。
生成的数据如下所示:
图一。生成的数据
我们已经将生成的总数据的 20%分割成测试数据。真实拟合函数是我们生成数据所基于的函数。添加噪声是为了模拟真实世界的数据(因为实际上没有数据会完全符合函数)。
了解欠拟合和过拟合涉及在具有不同程度的假设方程的模型上训练数据。让我们从一个具有 1 次的假设方程的模型开始,它将是:
这是回归线的样子:
图二。使用一次方程式。
这是欠拟合的一个例子,因为我们可以看到,这条线对数据的拟合程度不足以让我们使用模型进行未来预测。训练和测试精度和误差值如下:
train accuracy 0.9276025053551601
test accuracy 0.9259414382942455
Training MSE: 0.040338393489346015
Test MSE: 0.04068556089245825
欠拟合问题也称为**‘高偏差’**问题。这两者都意味着该模型不太适合训练数据。偏差一词指的是模型有一个强烈的先入为主的观念,即 y 随 x 线性变化,尽管事实并非如此。
现在,我们可以尝试用二次函数来拟合数据。假设是这样的:
该模型可以被可视化为:
图三。使用二次方程
我们可以看到,该模型在拟合训练数据方面工作得非常好。训练和测试精度和 MSE 值为:
Train accuracy: 0.9541558552139953
test accuracy 0.9421659027644554
Training MSE: 0.02554341363098832
Test MSE: 0.031772324908036456
与以前的模型相比,精确度有所提高。这意味着更加合适。
由于增加阶数似乎会提高模型的性能,因此让我们尝试使用一个假设方程阶数为 20 的模型。这将是结果:
图 4。使用 20 次方程
哎呀!模型函数似乎被扭曲了。这是因为高度使其更灵活,从而允许其在拟合时将噪声纳入数据中。模型函数试图通过所有点,因此看起来失真。
我们把这个问题叫做**【过拟合】,它有【高方差】**。术语“高方差”背后的原因是,如果我们要拟合这样一个高阶多项式,那么该假设几乎可以拟合任何函数,即不同类型的可能假设非常大且变化太大,以至于我们没有足够的数据来约束它以得到一个完美的假设。
我们可以通过检查交叉验证分数或 MSE 值来决定过度拟合的问题。我绘制了上述数据的精确度和 MSE 值,这些数据的假设方程的度数从 1 度到 40 度。
图五。精确度和 MSE 值。
我们可以看到,在一定程度(具体来说是 9)之后,测试 MSE 似乎增加了,而训练 MSE 继续减少。当模型由于过度拟合而无法预测看不见的数据时,就会发生这种情况。
使用 9 次方程,我们得到以下模型函数:
图六。用一个 9 次方程。
如果我们有太多的特征,过度拟合也会发生,这是当我们增加函数的次数时间接发生的。已学习的假设可能非常适合训练集(在某种程度上,成本值将为零),但无法预测新的示例。同样的概念也适用于逻辑回归,这里考虑的是决策边界而不是回归线。
解决过度拟合问题:
大多数真实世界的数据集将具有大量的要素。如果我们有很多特征,但只有很少的训练数据,那么就会出现过度拟合。解决过度拟合有两种主要方法:
- 减少特征数量:这可以通过手动减少特征数量来实现。我们可以在训练数据之前做一些 EDA 和特征选择,以知道哪些特征要保留,哪些要丢弃。我们还可以使用自动选择特征的模型选择算法。这种方法的缺点是,通过删除某些特征,我们删除了关于问题的信息。
- 正则化:该方法保留了所有特征,但降低了假设参数的幅度。当所有参数都对标签的预测有贡献时,这种方法工作良好。
正规化介绍:
考虑一下我们上面看到的数据拟合 10 次函数的情况。假设是这样的:
如果我们惩罚θ_ 10 并使其非常小(几乎等于零),那么假设将被简化为 9 次方程,这将是如上所示的数据的最佳拟合。
这是正则化背后的一般思想。我们不是减少一个参数,而是惩罚所有的参数。这将产生一个更简单的假设,它不容易过度拟合。
线性回归的正则化成本函数;
对于任何不熟悉线性回归背后的数学的人,请参考下面我以前发表的故事。它还会让你对以后要用到的术语和变量有所了解。
简介:这篇文章解释了一元线性回归的数学和执行。这将包括数学…
towardsdatascience.com](/univariate-linear-regression-theory-and-practice-99329845e85d)
任何回归模型的成本函数由下式给出:
为了将正则化添加到模型中,成本函数被稍微修改为:
在哪里
Lambda 的目的是在限制参数值的同时为训练数据提供良好的拟合,从而保持假设相对简单,以避免过度捕捞。换句话说,我们正在给过度拟合的成本函数(趋于零)添加一个小的偏差,以防止它过度捕捞。通过增加少量的偏差,我们得到了方差的显著下降。
考虑 10 度假设的情况。如果我们把λ的值设得很高,比如说λ=⁰⁰.,会发生什么所有的参数 theta_1 到 theta_10 将被高度减少到假设将是:
该曲线在绘制时将是一条水平直线,因此与我们的数据拟合不佳。因此,为了使正则化工作良好,还应该小心选择λ的值。
线性回归的正则梯度下降;
没有正则化的线性回归的梯度下降由下式给出:
成本函数的偏导数将由于包含正则化而改变,正则化产生如下梯度下降方程:
我已经单独写了θ_ 0,因为它不包括在正则化参数的总和中。这可以简化为:
因为α、λ和 m 是正的:
因此,当应用梯度下降时,每次θ_ j 的值将从θ_ j 的较低值减小,比如 0.99 *θ_ j。这有助于在梯度下降的每次迭代之后收缩θ的值。
正规化的类型:
主要有两种类型的正则化技术:
- L1 正则化或套索回归。
- L2 正则化或岭回归。
岭回归:
我们上面讨论的所有数学都与岭回归有关。它的成本函数是
下面的图是通过用不同的λ值将 20 次方程拟合到我们上面使用的数据而得到的。
图七。λ= 0 的岭回归
我们可以看到,对于λ= 0,使用 20 次方程的过拟合线性回归没有变化。
图八。λ= 0.5 的岭回归
图九。λ= 1 的岭回归
图 10。λ= 10 的岭回归
图 11。λ= 100 的岭回归
图 12。λ= 1000 的岭回归
我们可以看到,随着λ值的增加,这条线逐渐平行于 x 轴。这是对上述论点的直观证明,其中λ的值很大,从而将假设减少到只有θ_ 0。获取 lambda = 10000 的参数值。
图 13。λ= 10000 的岭回归
Parameters: [ 7.59298747e-05 -1.59864470e-03 -1.48732636e-03 -1.24979159e-03
-1.04968203e-03 -8.94986923e-04 -7.75465974e-04 -6.81440074e-04
-6.05849341e-04 -5.43793075e-04 -4.91877768e-04 -4.47723687e-04
-4.09631866e-04 -3.76365596e-04 -3.47007135e-04 -3.20862795e-04
-2.97399119e-04 -2.76199260e-04 -2.56932649e-04 -2.39333548e-04
-2.23185647e-04]
我们可以看到参数趋向于零,并且有不同的值。
岭回归用于训练样本的大小小于的情况,从而通过减少方差来防止模型过度拟合训练数据。
套索回归:
套索回归与岭回归非常相似。在成本函数中有一个微小的修改,它将是:
我们将使用参数的模之和,而不是正则项中参数的平方和。
下面的图是通过用不同的λ值将 20 次方程拟合到我们上面使用的数据而得到的。
图 14。lambda=1 的套索回归
我们可以看到,对于λ= 0.1,模型是一条平行于 x 轴的直线,这与数据拟合得不好。因此,很明显,我们必须进一步降低λ的值。
图 15。lambda=0.1 的套索回归
图 16。lambda=0.01 的套索回归
图 17。lambda=0.001 的套索回归
图 17。lambda=0.0005 的套索回归
随着λ值的增加,模型变成平行于 x 轴的直线。这里,对于较大的λ值,参数等于零。这是岭回归和套索回归的主要区别。
在大λ值的岭回归中,参数趋向于零,而在拉索回归中,参数可以等于零。
λ= 1 的参数为:
Parameters: [-0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563
-0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563
-0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563
-0.00227563 -0.00227563 -0.00227563]
我们可以看到所有的值都相等,并且近似等于零。进一步增加 lambda 的值不会改变参数的值,如下所示。
图 18。λ= 10 的套索回归
Parameters: [-0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563
-0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563
-0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563 -0.00227563
-0.00227563 -0.00227563 -0.00227563]
当参数减少到零时,与这些参数相关联的特征将不会对成本函数有任何影响。通过这样做,我们将执行一种类型的特征选择,其中我们省略了所有对模型没有太大贡献的无用特征。
正则化系数的取值如何选择?
模型表现最佳的正则化系数或λ的值可以通过交叉验证获得。sklearn 的岭回归器中有内置的交叉验证技术。我们可以直接使用它,也可以执行单独的交叉验证过程。
我们将使用与上述 20 次方程相同的数据。我们必须输入一个包含不同 lambda 值的数组来执行交叉验证。
lambdas 的第一个输入是:
[0.0005, 0.001, 0.01, 0.1, 1, 10, 100]
λ的最佳值及其对应的 CV 值为:
Best lambda: 0.0005
CV score: 0.983912496818687
我们可以通过输入 0.0005 左右的值来进一步放大λ值。类似地,交叉验证的方法可以使用 sklearn 的 LassoCV 对象。
正则化方法也可用于防止逻辑回归中的过拟合。我们将使用 sklearn 的岭分类器在逻辑回归中实现 L2 正则化。
结论:
我们在本文中看到了以下内容:
- 欠拟合和过拟合如何影响模型。
- 解决过拟合的方法。
- 正规化的概念。
- 正则化代价函数和梯度下降。
- L1 正则化或套索回归。
- L2 正则化或岭回归。
- 使用交叉验证来确定正则化系数。
推论:
- 关于机器学习概念背后的数学问题,你可以参考 Youtube 上的这个播放列表。
2.这是 Youtube 上的另一个播放列表,它简单地解释了所有的机器学习基础,没有涉及太多的术语。
请点击这里查看我关于数据科学和机器学习的其他文章。欢迎在评论中和 LinkedIn 上进行更深入的讨论。
正规化—第一部分
FAU 讲座笔记关于深度学习
偏差-方差权衡
FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座
这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。如果你发现了错误,请告诉我们!
航行
欢迎回到深度学习!所以今天,我们想谈谈正则化技术,我们先简单介绍一下正则化和过拟合的一般问题。所以,我们先从背景说起。问问题“正规化的问题是什么?”然后,我们谈论经典技术,规范化,辍学,初始化,迁移学习和多任务学习。那么,为什么我们如此频繁地谈论这个话题呢?
将函数拟合到数据可能会导致过度拟合或拟合不足。 CC 下的图片来自深度学习讲座的 4.0 。
嗯,如果你想拟合你的数据,那么像这样的问题很容易拟合,因为它们有明确的解决方案。通常,您会遇到这样的问题:您的数据有噪声,并且您无法轻松地将这些类分开。所以,如果你有一个容量不是很大的模型,你就会遇到不合适的问题。那么你可能会有类似这条线的东西,它不是很适合描述类的分离。反之就是过拟合。这里,我们有容量非常高的模型,它们试图对训练数据中观察到的一切进行建模。这可能会产生不太合理的决策界限。我们真正感兴趣的是一个合理的边界,它是观测数据和实际分布之间的折衷。
偏差-方差权衡与预期模型误差及其方差有关。 CC 下的图片来自深度学习讲座的 4.0 。
因此,我们可以通过所谓的偏差-方差分解来分析这个问题。在这里,我们坚持回归问题,我们有一个理想的函数 h( x )来计算一些值,它通常与一些测量噪声有关。所以,有一些附加值ϵ被加到 h( x )上。它可以正态分布,平均值为零,标准差为σ。现在,你可以继续使用一个模型来估计 h 。这表示为 f hat,它是从一些数据集 d 中估计出来的。我们现在可以将单点的损失表示为损失的期望值。这将只是 L2 的损失。所以,我们取真实函数减去估计函数的 2 次方,计算期望值。有趣的是,这种损失可以分解成两部分:一部分是偏差,本质上是我们的模型的期望值与真实模型的偏差。所以,这基本上衡量了我们离真相有多远。另一部分可以用数据集的有限大小来解释。我们总是可以尝试找到一个非常灵活的模型,并尝试减少偏差。结果我们得到的是方差的增加。因此,方差就是 y hat 的期望值——y hat 的当前值的 2 次方。这就是我们在 y hat 中遇到的变化。然后,当然,有一个小的不可再现的误差。现在,我们可以对 x 中的每个数据点进行积分,从而得到整个数据集的损失。顺便说一下,使用 1–0 损失的分类存在类似的分解,您可以在[9]中看到。略有不同,但有相似的含义。因此,我们了解到,随着方差的增加,我们可以从根本上减少偏差,即我们的模型对训练数据集的预测误差。
由偏差和方差引起的误差的可视化。 CC 下的图片来自深度学习讲座的 4.0 。
让我们把它形象化一点:在左上角,我们看到一个低偏差、低方差的模型。这本质上总是正确的,并且在预测中没有太多的噪音。在右上方,我们看到一个非常一致的高偏差模型,即方差很低,并且始终处于关闭状态。在左下方,我们看到一个低偏差高方差模型。这有相当程度的变化,但平均来说,它非常接近它应该在的地方。在右下角,我们有我们想要省略的情况。这是一个高偏差、高方差的模型,有很多噪音,甚至不在它应该在的地方。因此,我们可以为给定的数据集选择一种模型,但同时优化偏差和方差通常是不可能的。偏差和方差可以作为模型容量一起研究,我们将在下一张幻灯片中看到。
模型容量是对一个函数有多少变化可以近似的度量。 CC 下的图片来自深度学习讲座的 4.0 。
模型的容量描述了它可以近似的各种函数。这和参数的个数有关,所以经常有人说:“那就是参数的个数。增加参数的数量,然后你就可以摆脱你的偏见。”这是真的,但它远远不平等。确切地说,你需要计算 Vapnik-Chervonenkis (VC)维度。这是对容量的精确测量,它基于计算模型可以分离多少个点。因此,与经典方法相比,神经网络的 VC 维数非常高,并且它们具有非常高的模型容量。如果你看一下[18],他们甚至设法记住了随机的标签。这又是那篇研究带有随机标签的学习图像网络的论文。顺便说一下,VC 维在判断神经网络的真实能力方面是无效的。尽管如此,我们总是可以通过增加模型容量来减少偏差。因此,如果您增加模型容量,请记住这一点。你可能会遇到过度拟合的问题。
您拥有的数据越多,就越有可能接近未知的测试集。来自深度学习讲座的 CC BY 4.0 下的图片。
那么我们来看看数据的作用。这里,我们绘制了损失与训练样本数量的关系图,您可以看到,训练损失随着训练样本数量的增加而增加。学习大数据集比学习小数据集更难。如果你有一个非常小的数据集,完全记住它可能非常容易。小数据集的问题在于,它不能很好地代表您真正感兴趣的数据。所以,小数据集模型,当然会有很高的测试损失。现在,通过增加数据集的大小,你也增加了训练损失,但是测试误差下降了。这是我们感兴趣的。我们想建立通用模型,真正对看不见的数据起作用。这是一个非常重要的属性。这也是我们需要如此多数据的原因,也是大公司对获取如此多数据并将其存储在服务器上感兴趣的原因。从技术上讲,我们可以通过使用更多的训练数据来优化方差。因此,我们可以创建更高容量的模型,但我们也需要更多的训练数据,但从长远来看,这可能会给我们带来非常低的测试误差。此外,模型容量必须与训练数据集的大小相匹配。如果你有一个太高的容量,它只会产生一个非常糟糕的过度拟合,你的模型在看不见的数据上不会很好。现在的问题是,当然,如果我们不能得到更多的数据呢?
有限的数据集是过度拟合的常见原因。 CC 下的图片来自深度学习讲座的 4.0 。
假设你在一个数据有限的领域。那么,当然,你有麻烦了。让我们用固定的数据集大小来研究这些影响。所以,在一个有限的数据集上,你做出如下观察:如果你增加模型容量,你的训练损失会下降。当然,有了更高的容量,你可以记忆更多的训练数据集。这是通过记忆所有东西来解决学习问题的蛮力方式。问题是你在某些时候产生了一个糟糕的过度配合。开始时,增加模型容量也会减少测试损失。在某些时候,当你进入过度拟合,测试损失将增加,如果测试损失增加,你基本上是在你过度拟合的点。在这堂课的后面,我们将研究使用从训练数据集中提取的验证数据集的想法,以产生测试损失的替代数据。所以,我们会在几节课中讨论这个问题。我们可以看到,我们可以用偏差的增加来换取方差的减少。
所有正则化技术都旨在减少过拟合问题。 CC 下的图片来自深度学习讲座的 4.0 。
对于一个特定的问题,可能会有有利的权衡。一般现在正则化的思路是减少过拟合。这个想法从何而来?我们本质上是在强化先验知识。一种方法是数据扩充。你可以调整架构,因为你对问题有所了解,你可以调整训练过程,你可以做预处理,等等。为了结合先前的知识,可以采取许多额外的步骤。也可以使用实际的正则化,然后将正则化扩充到损失函数中,并且它们通常将解约束到等式约束或不等式约束。因此,我们还将简要了解一下这些解决方案。
在这个深度学习讲座中,更多令人兴奋的事情即将到来。来自深度学习讲座的 CC BY 4.0 下的图片。
这已经把我们带到了这节课的结尾。下一次,我们将研究神经网络和机器学习中使用的经典正则化方法。我期待着在下一次会议中再次见到你!
如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激你在 YouTube、Twitter、脸书、LinkedIn 上的鼓掌或关注。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。
链接
链接 —关于最大后验概率估计和偏差-方差分解的详细信息
链接 —关于正则化实用建议的综合文本
链接 —关于校准方差的论文
参考
[1]谢尔盖·约菲和克里斯蒂安·塞格迪。“批量标准化:通过减少内部协变量转移加速深度网络训练”。《第 32 届机器学习国际会议论文集》。2015 年,第 448–456 页。乔纳森·巴克斯特。“通过多任务抽样学习的贝叶斯/信息论模型”。摘自:机器学习 28.1(1997 年 7 月),第 7-39 页。
【3】克里斯托弗·m·毕晓普。模式识别和机器学习(信息科学和统计学)。美国新泽西州 Secaucus 出版社:纽约斯普林格出版社,2006 年。
[4]理查德·卡鲁阿纳。多任务学习:归纳偏差的知识来源。收录于:第十届机器学习国际会议论文集。摩根·考夫曼,1993 年,第 41-48 页。
【5】Andre Esteva,Brett Kuprel,Roberto A Novoa,等《深度神经网络的皮肤癌皮肤科医生级分类》。载于:自然 542.7639 (2017),第 115–118 页。
[6]丁俊钦、徐俊卿、陶行知。“多任务姿态不变人脸识别”。载于:IEEE 图像处理汇刊 24.3(2015 年 3 月),第 980–993 页。
[7]李万,马修·泽勒,张思欣,等,“用下降连接实现神经网络的正则化”。载于:《第 30 届机器学习国际会议论文集》(ICML,2013 年),第 1058-1066 页。
[8] Nitish Srivastava,Geoffrey E Hinton,Alex Krizhevsky,等人,“辍学:防止神经网络过度拟合的简单方法。”载于:《机器学习研究杂志》15.1 (2014),第 1929–1958 页。
[9]r . o .杜达、P. E .哈特和 D. G .施托克。模式分类。约翰威利父子公司,2000 年。
[10]伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔。深度学习。http://www.deeplearningbook.org。麻省理工学院出版社,2016 年。
【11】与何。“群体常态化”。载于:arXiv 预印本 arXiv:1803.08494 (2018)。
【12】何,,任等,“深入挖掘整流器:在 imagenet 分类上超越人类水平的表现”。IEEE 计算机视觉国际会议论文集。2015 年,第 1026–1034 页。
【13】D 乌里扬诺夫,A 韦达尔迪,以及 VS 伦皮茨基。实例规范化:快速风格化缺少的要素。CoRR ABS/1607.0[14]günter Klambauer,Thomas Unterthiner,Andreas Mayr 等,“自规范化神经网络”。在:神经信息处理系统的进展。abs/1706.02515 卷。2017.arXiv: 1706.02515。吉米·巴雷、杰米·瑞安·基罗斯和杰弗里·E·辛顿。“图层规范化”。载于:arXiv 预印本 arXiv:1607.06450 (2016)。
【16】Nima Tajbakhsh,Jae Y Shin,Suryakanth R Gurudu,等,“用于医学图像分析的卷积神经网络:完全训练还是微调?”载于:IEEE 医学成像汇刊 35.5 (2016),第 1299–1312 页。
【17】约书亚·本吉奥。“深度架构基于梯度训练的实用建议”。《神经网络:交易的诀窍》。斯普林格出版社,2012 年,第 437-478 页。
[18]张,Samy Bengio,Moritz Hardt 等,“理解深度学习需要反思泛化”。载于:arXiv 预印本 arXiv:1611.03530 (2016)。
[19]什巴尼·桑图尔卡,迪米特里斯·齐普拉斯,安德鲁·易勒雅斯等,“批处理规范化如何帮助优化?”在:arXiv e-prints,arXiv:1805.11604(2018 年 5 月),arXiv:1805.11604。arXiv:1805.11604[统计。ML】。
[20]蒂姆·萨利曼斯和迪德里克·P·金马。“权重标准化:加速深度神经网络训练的简单重新参数化”。神经信息处理系统进展 29。柯伦咨询公司,2016 年,第 901–909 页。
【21】泽维尔·格洛特和约舒阿·本吉奥。“理解训练深度前馈神经网络的困难”。载于:2010 年第十三届国际人工智能会议论文集,第 249-256 页。
【22】,罗平,陈改来,等,“基于深度多任务学习的人脸标志点检测”。载于:计算机视觉— ECCV 2014 年:第 13 届欧洲会议,瑞士苏黎世,Cham: Springer 国际出版公司,2014 年,第 94–108 页。
正规化—第二部分
FAU 讲座笔记关于深度学习
古典技术
FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座
这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。如果你发现了错误,请告诉我们!
航行
欢迎回到深度学习!我们想继续分析正则化方法,今天我想谈谈经典技术。
您将无法在训练数据上观察到过度拟合。 CC 下的图片来自深度学习讲座的 4.0 。
这是一个典型的训练集迭代损失曲线的例子。我在右边展示的是测试集上的损耗曲线。你可以看到,虽然培训损失下降了,但测试损失却上升了。因此,在某种程度上,训练数据集是过度拟合的,它不再产生代表数据的模型。顺便说一句,永远记住,测试集决不能用于训练。如果你在你的测试集上接受训练,那么你会得到非常好的结果,但是很有可能完全高估了性能。典型的情况是,有人跑进我的办公室说:“是的!我有 99%的识别率!”。当模式识别或机器学习领域的人读到“99%的识别率”时,他做的第一件事是问:“你用你的测试数据训练过吗?”这是你首先要确保的事情。当你犯了一些愚蠢的错误,有一些数据集指针没有指向正确的数据集,你的识别率突然上升。所以,如果你有非常好的结果,一定要小心。始终仔细检查它们是否真的合适,它们是否真的通用。因此,如果你想产生像我在这里展示的曲线,你可能想使用一个验证集,你从训练数据集。你从来没有在训练中使用过这个集合,但是你可以用它来估计你的模型过度拟合。
当验证损失再次上升时,验证集有助于发现过度拟合。来自深度学习讲座的 CC BY 4.0 下的图片。
所以,如果你这样做了,我们就可以使用第一个技巧了。您使用验证集。我们观察在什么点上我们在验证集中有最小的误差。如果我们在这一点上,我们可以使用它作为一个停止标准,并使用我们的测试评估模型。因此,使用具有最小验证结果的参数是一种常见的技术。
数据扩充实际上可以增加训练集的大小。来自深度学习讲座的 4.0CC 下的图片。
另一个非常有用的技术是数据扩充。所以,这里的想法是人为地扩大数据集。标签上有一些变换,这些变换对于类应该是不变的。假设你有一只猫的图像,你把它旋转 90 度,它仍然显示一只猫。显然,这些增强技术必须小心谨慎。因此,在右边的例子中,您可以看到旋转 180 度可能不是增加数字的好方法,因为它可能会转换标签。
数据扩充的常见转换。 CC 下的图片来自深度学习讲座的 4.0 。
这里有非常常见的变换:随机空间变换,如仿射或弹性变换。然后,还有像素变换,如改变分辨率、改变噪声或改变像素分布,如颜色亮度等。这些是图像处理中典型的增强技术。
利用贝叶斯定理,我们可以得到所谓的最大后验估计。来自深度学习讲座的 CC BY 4.0 下的图片。
还有什么?我们可以正则化损失函数。这里,我们可以看到,这基本上导致了最大后验概率(MAP)估计。我们可以用贝叶斯方法来做到这一点,我们希望考虑不确定的权重。它们遵循先验分布 p( w )。如果你有一些带有一些关联标签 Y 的数据集 X ,我们可以看到联合概率 p( w , Y , X )是概率 p( w | Y,X )乘以概率 p( Y,X )。我们可以将其重新表述为概率 P( Y | X , w )乘以概率 p( X , w )。从这些等式可以推导出条件概率 p( w | Y , X )可以表示为概率 p( Y | X,w )乘以概率 P( X,w )除以概率 p( Y,X )的贝叶斯定理。因此,我们可以进一步重新排列,这里你可以看到概率 p( X )概率 p( Y | X )弹出。通过移除与 w 无关的项,这产生了 MAP 估计。所以,我们实际上可以通过最大化条件概率 p( Y | X , w )乘以概率 p( w )来寻求最大化联合概率。因此,通常情况下,我们将这个问题作为最大似然估计量来解决,即左边的问题乘以右边部分 w 的先验。我们可以说这是一个最大似然估计量,但我们用一些额外的先验信息来扩充它。这里,先验信息是我们对 w 的分布有一些了解,例如 w 可能是稀疏的。我们也可以使用其他的知识来源,在那里我们知道一些关于 w 的事情。在图像处理中,经常使用的是例如自然图像相对于梯度是稀疏的,因此这种先验可以使用各种稀疏度。
MAP 估计在损失函数中产生正则化项。 CC 下的图片来自深度学习讲座的 4.0 。
现在有趣的部分是,这个 MAP 估计器可以被重构,如果你参加过模式识别,你就知道我在说什么。我们已经看到,最大似然估计的最大化导致负对数似然的最小化。我们讨论的典型损失函数具有这种形式。现在,如果你从地图估计开始,你基本上以一个非常相似的估计结束,但是损失函数的形状稍微改变了。所以,我们得到了一个新的损失函数。这就像 L2 损失或交叉熵损失加上一些λ和一些对权重的约束 w 。所以在这里,我们实施了一个最小 l2 规范。现在,对于正λ,我们可以将其识别为最小化损失函数的拉格朗日函数,其受限于小于α的约束 L2 范数 w ,其中α依赖于某些未知数据。所以这是完全相同的公式。我们现在可以把这一点引入到增加损失的反向传播中去。这通常是如何实现的?你跟踪梯度的损失。这是损失的右边部分,我们已经用学习率η计算过了,另外,你把这种收缩应用到 w 上。因此,这里的收缩步骤可以用于实现额外的 L2 正则化。好消息是现在我们可以像以前一样简单地计算反向传播。然后,另外,我们在权重更新中使用收缩。因此,我们也可以获得非常简单的权重更新,它们允许我们涉及那些正则化。如果我们选择不同的正则项,收缩函数会发生变化。如果我们现在为λ优化训练损失,我们通常会得到λ = 0,因为每次我们引入正则化,我们都在做一些关于训练损失不是最优的事情。当然,我们引入它是因为我们想减少过度拟合。因此,这是我们无法在训练数据中直接观察到的东西,但我们希望在一个看不见的测试集上获得更好的属性。这甚至会增加我们训练数据的损失值。所以要小心。同样,我们增加偏差以减少方差。
L2 规范强制实施具有较低权重量值的解决方案。 CC 下的图片来自深度学习讲座的 4.0 。
这里,我们有一个可视化的 L2 正则化的效果。不规则损耗当然会导致椭圆的中心变成红色。但是现在你做了额外的调整,使你的 w 变小。这意味着你离原点越远,你的 L2 损耗就越高。因此,l2 损失会使您偏离关于训练数据集的数据最佳损失。希望它描述了一些我们在训练数据集中没有看到的先验知识。因此,它将产生一个更适合未知测试数据集的模型。
使用 L1 项会导致不同形式的重量收缩。来自深度学习讲座的 4.0CC 下的图片。
我们也可以使用其他规范,例如,L1 规范。因此,在这里,我们再次以拉格朗日公式结束,其中我们有服从 L1 范数的原始损失函数,该损失函数小于某个值α,且α未知,取决于数据。这里,我们简单地得到一个不同的收缩操作,它现在涉及到符号函数的使用。所以这又是次梯度的一个暗示。这里,为了使这种优化可行,必须采用不同的收缩方式。同样,我们对损失函数使用了与之前完全相同的梯度。所以只有收缩被取代。
来自深度学习讲座的 4.0 在 CC 下的二维图像中 L1 范数为菱形。
现在,我们也可以在我们的小图中看到这一点。L1 标准的形式当然是不同的。用 L2,我们有这个圆,用 L1 范数,我们得到一个菱形。现在,你可以看到选择的最小值可能位于坐标轴上。因此,如果你试图找到这个 L1 范数和非正则化损耗的最小位置,你会看到与这个 L1 损耗相交的最小非正则化损耗点基本上在这个图中的 y 轴上。这是一个非常稀疏的解决方案,意味着在我们的权重向量中只有 y 的条目,在这种情况下,x 的条目非常接近 0 或等于 0。因此,如果您希望权重稀疏,或者如果您希望创建连接较少的网络,您可能希望对权重引入额外的 L1 正则化。这样会造成权重稀疏。
来自深度学习讲座的 4.0CC 下 w. Image 中的一个最大范数极限高值。
还有什么?还有更多已知的约束,例如我们可以对权重的范数设置限制。在这里,我们只是强制它们低于某个最大值。我们希望 w 的大小低于α,其中α是一个正常数。如果你这样做,我们基本上必须在每次参数更新时投影到单位球上,这又是一种收缩,基本上禁止爆炸梯度。小心,它也可能只是隐藏它们,这样你就再也看不到它们了。
规则化损失还有许多其他变体。来自深度学习讲座的 4.0CC 下的图片。
还有许多改变损失的其他方法。每个层都可以有一个约束和一个单独的λ。所以你可以不同地约束每一层,但是我们还没有在文献中看到任何增益。代替权重,激活也可以被约束。这导致不同的变体,例如在稀疏自动编码器中。我们将讨论他们是如何不正则化权重,而是通过激活来形成特定的分布,从而产生稀疏的激活。这也是一个非常有趣的问题,当我们谈到自动编码器和无监督学习时,我们会对此进行更多的讨论。
在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。
所以下次在深度学习中,我们想继续讲正则化方法。我们将研究特别为深度学习设计的非常典型的工具。非常有趣的方法,和你们在这节课上看到的略有不同。非常感谢您的收看,再见!
如果你喜欢这篇文章,你可以在这里找到更多的文章,在这里找到更多关于机器学习的教育材料,或者看看我们的深度 学习 讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激你在 YouTube、Twitter、脸书、LinkedIn 或 T21 上的掌声或关注。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。
链接
链接 —关于最大后验概率估计和偏差-方差分解的详细信息
链接 —关于正则化实用建议的综合文本
链接 —关于校准方差的论文
参考
[1]谢尔盖·约菲和克里斯蒂安·塞格迪。“批量标准化:通过减少内部协变量转移加速深度网络训练”。载于:第 32 届机器学习国际会议论文集。2015 年,第 448–456 页。乔纳森·巴克斯特。“通过多任务抽样学习的贝叶斯/信息论模型”。摘自:机器学习 28.1(1997 年 7 月),第 7-39 页。
【3】克里斯托弗·m·毕晓普。模式识别和机器学习(信息科学和统计学)。美国新泽西州 Secaucus 出版社:纽约斯普林格出版社,2006 年。
[4]理查德·卡鲁阿纳。多任务学习:归纳偏差的知识来源。收录于:第十届机器学习国际会议论文集。摩根·考夫曼,1993 年,第 41-48 页。
【5】Andre Esteva,Brett Kuprel,Roberto A Novoa,等《深度神经网络的皮肤癌皮肤科医生级分类》。载于:自然 542.7639 (2017),第 115–118 页。
[6]丁俊钦、徐俊卿、陶行知。“多任务姿态不变人脸识别”。载于:IEEE 图像处理汇刊 24.3(2015 年 3 月),第 980–993 页。
[7]李万,马修·泽勒,张思欣,等,“用下降连接实现神经网络的正则化”。载于:《第 30 届机器学习国际会议论文集》(ICML,2013 年),第 1058-1066 页。
[8] Nitish Srivastava,Geoffrey E Hinton,Alex Krizhevsky,等人,“辍学:防止神经网络过度拟合的简单方法。”载于:《机器学习研究杂志》15.1 (2014),第 1929–1958 页。
[9]r . o .杜达、P. E .哈特和 D. G .施托克。模式分类。约翰威利父子公司,2000 年。
[10]伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔。深度学习。http://www.deeplearningbook.org。麻省理工学院出版社,2016 年。
【11】与何。“群体常态化”。载于:arXiv 预印本 arXiv:1803.08494 (2018)。
【12】何,,任等,“深入挖掘整流器:在 imagenet 分类上超越人类水平的表现”。IEEE 计算机视觉国际会议论文集。2015 年,第 1026–1034 页。
【13】D 乌里扬诺夫,A 韦达尔迪,以及 VS 伦皮茨基。实例规范化:快速风格化缺少的要素。CoRR ABS/1607.0[14]günter Klambauer,Thomas Unterthiner,Andreas Mayr 等,“自规范化神经网络”。在:神经信息处理系统的进展。abs/1706.02515 卷。2017.arXiv: 1706.02515。吉米·巴雷、杰米·瑞安·基罗斯和杰弗里·E·辛顿。“图层规范化”。载于:arXiv 预印本 arXiv:1607.06450 (2016)。
【16】Nima Tajbakhsh,Jae Y Shin,Suryakanth R Gurudu,等,“用于医学图像分析的卷积神经网络:完全训练还是微调?”载于:IEEE 医学成像汇刊 35.5 (2016),第 1299–1312 页。
【17】约书亚·本吉奥。“深度架构基于梯度训练的实用建议”。《神经网络:交易的诀窍》。斯普林格出版社,2012 年,第 437-478 页。
[18]张,Samy Bengio,Moritz Hardt 等,“理解深度学习需要反思泛化”。载于:arXiv 预印本 arXiv:1611.03530 (2016)。
[19]什巴尼·桑图尔卡,迪米特里斯·齐普拉斯,安德鲁·易勒雅斯等,“批处理规范化如何帮助优化?”在:arXiv e-prints,arXiv:1805.11604(2018 年 5 月),arXiv:1805.11604。arXiv:1805.11604[统计。ML】。
[20]蒂姆·萨利曼斯和迪德里克·P·金马。“权重标准化:加速深度神经网络训练的简单重新参数化”。神经信息处理系统进展 29。柯伦咨询公司,2016 年,第 901–909 页。
【21】泽维尔·格洛特和约舒阿·本吉奥。“理解训练深度前馈神经网络的困难”。摘自:2010 年第十三届国际人工智能会议论文集,第 249-256 页。
【22】,罗平,陈改来,等,“基于深度多任务学习的人脸标志点检测”。载于:计算机视觉— ECCV 2014 年:第 13 届欧洲会议,瑞士苏黎世,Cham: Springer 国际出版公司,2014 年,第 94–108 页。
正规化——第 3 部分
FAU 讲座笔记关于深度学习
正常化和辍学
FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座
这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。如果你发现了错误,请告诉我们!
航行
欢迎来到我们的深度学习讲座。今天我们想谈谈更多的正规化。我想介绍的第一个话题是标准化的概念。那么为什么正常化会是一个问题呢?
数据的规范化有助于将原始数据带到一个统一的空间。 CC 下的图片来自深度学习讲座的 4.0 。
这里我们来看一些原始数据。一种典型的方法是减去平均值,然后也可以归一化方差。这非常有用,因为这样我们就在输入的预期范围内。当然,如果你做这些标准化,然后你想估计他们只对训练数据。另一种方法不仅是在网络前进行归一化,还可以在网络内进行归一化。这就引出了批处理规范化的概念。
批量标准化能够作为可训练层自动执行标准化。 CC 下的图片来自深度学习讲座的 4.0 。
想法是引入一个新的层,参数为γ和β。γ和β用于重新调整图层的输出。在层的输入端,开始测量批次的平均值和标准差。你要做的是计算小批量的当前均值和标准差,然后用它来归一化输入的激活。因此,你有一个零均值和单位标准差。因此,这是在整个训练过程中动态计算的,然后使用可训练权重β和γ对层的输出进行缩放。您可以根据下一层的需要适当地缩放它们。因此,这个不错的功能当然只能在培训期间实现。如果您想继续进行测试,那么在完成训练后,您可以在批处理标准化层中为整个训练集计算一次平均值和标准差,并在网络的所有未来应用中保持不变。当然, μ 和 σ 是向量,它们与激活向量的维数完全相同。通常,这与卷积层成对出现。在这种情况下,通过对每个通道使用标量μ和σ,批次归一化略有不同。所以如果在卷积中使用,会有一点点不同。
批处理规范化为什么有帮助? CC 下的图片来自深度学习讲座的 4.0 。
你可能会争论为什么批处理规范化真的有帮助?有压倒性的实际证据表明,它确实是一个有用的工具,这最初是由内部协变量的变化所推动的。因此,确定了 ReLU 不在零中心的问题。因此,初始化和输入分布可能无法正常化。因此,输入分布会随时间而变化。在更深的网中,你甚至会得到放大的效果。因此,各层必须不断适应,这导致学习缓慢。现在,如果你仔细观察这些观察,很少有具体的证据来支持这个理论。
可以看出,批量标准化能够平滑损失情况。 CC 下的图片来自深度学习讲座的 4.0 。
在 NeurIPS 2018 上,有一篇论文展示了批处理规范化如何帮助优化。他们表明,即使在批处理规范化层之后再次引入内部协变量移位,批处理规范化也是有效的。所以在这种情况下,批量规范化还是有帮助的。他们可以通过实验证明,这种方法平滑了损失景观。这支持优化,也有助于降低损失函数的 Lipschitzness。Lipschitz 常数是函数中出现的最高斜率。如果你改善了 Lipchitzness,这基本上意味着不再出现高斜率。因此,这符合平滑损失的原则。他们甚至可以在论文中为这个性质提供证明。因此,批处理规范化提高了超参数、初始化、收敛和类似属性的稳定性。顺便说一下,这也可以在 Lp 规范化中观察到。
批处理规范化有许多变体。来自深度学习讲座的 CC BY 4.0 下的图片。
所以这是一种方法。批量标准化有一些概括:您可以计算批量激活、层、空间维度、组、层权重的μ和σ,我们可能会遗漏一些变化。所以它是一个非常强大的工具。
自规范化神经网络是批处理规范化的替代方法。 CC 下的图片来自深度学习讲座的 4.0 。
另一个非常有效的工具是自归一化神经网络。它还解决了随机梯度下降的稳定性问题,这里的关键元素是我们已经在激活函数中讨论过的缩放指数线性单元。所以,这里我们又有了定义。通过λ和α的特定设置,我们可以确保零均值和单位标准差输入在数据输出时具有相同的均值和标准差。所以这保证了保持这些性质。那么结果是稳定的激活也导致稳定的训练。必须改变的一件事是我们将在下一段看到的退学程序。这里不是降到零,而是降到负λ乘以α。此外,他们使用仿射变换来恢复方差和均值。因此,这种自规范化神经网络概念在某种程度上也类似于批量规范化。有趣的是,它还会增加稳定性,这也是你在构建神经网络时可能需要考虑的一个好方法。
辍学及其推广下降连接。来自深度学习讲座的 CC BY 4.0 下的图片。
现在我们已经谈到了辍学。这也是一项非常重要的技术,正在深度网络中使用。你可能要考虑的一件事是,训练中的所有因素,当然,它们是相互依赖的。因此,如果您有相关的输入,那么自适应也将以类似的方式运行。但是,如果你想要有独立的特征,让你能够识别不同的东西,那么你必须打破特征之间的相关性,这实际上可以通过辍学来实现。它的基本思想是,你随机杀死一些神经元,并把它们设置为零。因此,您选择一个概率 p,并将随机激活设置为零,概率为 1 — p。然后,在测试期间,您必须将所有激活乘以 p,否则,下一层的激活会过高。所以你必须在测试时补偿这种下降效应。在这个例子中,假设 y₁和 y₂是相关的,所以它们携带相同的信息和权重。现在,如果我使用它们并试图训练它们,它们将永远学不到别的东西,因为它们总是产生相同的输出。因此,在反向传播中,它们将获得相同的更新项。因此,它们将始终保持关联。现在如果你引入这个退出程序,你会随机杀死一些神经元。这意味着在训练过程中,重量被拉向不同的方向。因此,它们将不再相关。因此,你可以使用 dropout 来打破这些内部相关性,这已经证明可以减少过度拟合的问题。这确实是一个非常重要的概念,在深度学习中经常使用。还有一个有趣的概括是 dropconnect。这里,你没有杀死单个神经元的所有激活,但是你杀死了单个的连接。因此,您可以随机确定设置为零的连接。这可以被视为辍学的一种概括,因为你有更多不同的方式来调整它。通常,这种实现效率不高,因为您必须像屏蔽一样实现它。更简单的方法是将其中一个激活设置为零。
在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。
好了,我们已经讨论了这些常见的概念和规范化,但这并不是所有的技巧。我们袖子里还有几张牌。所以这些技巧我会在下节课展示给你们。非常感谢您的收听,再见!
如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTube 、 Twitter 、脸书或 LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。
链接
链接 —关于最大后验概率估计和偏差-方差分解的详细信息
链接 —关于正则化实用建议的综合文本
链接 —关于校准方差的论文
参考
[1]谢尔盖·约菲和克里斯蒂安·塞格迪。“批量标准化:通过减少内部协变量转移加速深度网络训练”。《第 32 届机器学习国际会议论文集》。2015 年,第 448–456 页。乔纳森·巴克斯特。“通过多任务抽样学习的贝叶斯/信息论模型”。摘自:机器学习 28.1(1997 年 7 月),第 7-39 页。
【3】克里斯托弗·m·毕晓普。模式识别和机器学习(信息科学和统计学)。美国新泽西州 Secaucus 出版社:纽约斯普林格出版社,2006 年。
[4]理查德·卡鲁阿纳。多任务学习:归纳偏差的知识来源。收录于:第十届机器学习国际会议论文集。摩根·考夫曼,1993 年,第 41-48 页。
【5】Andre Esteva,Brett Kuprel,Roberto A Novoa,等《深度神经网络的皮肤癌皮肤科医生级分类》。载于:自然 542.7639 (2017),第 115–118 页。
[6]丁俊钦、徐俊卿、陶行知。“多任务姿态不变人脸识别”。载于:IEEE 图像处理汇刊 24.3(2015 年 3 月),第 980–993 页。
[7]李万,马修·泽勒,张思欣,等,“用下降连接实现神经网络的正则化”。载于:《第 30 届机器学习国际会议论文集》(ICML,2013 年),第 1058-1066 页。
[8] Nitish Srivastava,Geoffrey E Hinton,Alex Krizhevsky,等人,“辍学:防止神经网络过度拟合的简单方法。”载于:《机器学习研究杂志》15.1 (2014),第 1929–1958 页。
[9]r . o .杜达、P. E .哈特和 D. G .施托克。模式分类。约翰威利父子公司,2000 年。
[10]伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔。深度学习。http://www.deeplearningbook.org。麻省理工学院出版社,2016 年。
【11】与何。“群体常态化”。载于:arXiv 预印本 arXiv:1803.08494 (2018)。
【12】何,,任等,“深入挖掘整流器:在 imagenet 分类上超越人类水平的表现”。IEEE 计算机视觉国际会议论文集。2015 年,第 1026–1034 页。
【13】D 乌里扬诺夫,A 韦达尔迪,以及 VS 伦皮茨基。实例规范化:快速风格化缺少的要素。CoRR ABS/1607.0[14]günter Klambauer,Thomas Unterthiner,Andreas Mayr 等,“自规范化神经网络”。在:神经信息处理系统的进展。abs/1706.02515 卷。2017.arXiv: 1706.02515。吉米·巴雷、杰米·瑞安·基罗斯和杰弗里·E·辛顿。“图层规范化”。载于:arXiv 预印本 arXiv:1607.06450 (2016)。
【16】Nima Tajbakhsh,Jae Y Shin,Suryakanth R Gurudu,等,“用于医学图像分析的卷积神经网络:完全训练还是微调?”载于:IEEE 医学成像汇刊 35.5 (2016),第 1299–1312 页。
【17】约书亚·本吉奥。“深度架构基于梯度训练的实用建议”。《神经网络:交易的诀窍》。斯普林格出版社,2012 年,第 437-478 页。
[18]张,Samy Bengio,Moritz Hardt 等,“理解深度学习需要反思泛化”。载于:arXiv 预印本 arXiv:1611.03530 (2016)。
[19]什巴尼·桑图尔卡,迪米特里斯·齐普拉斯,安德鲁·易勒雅斯等,“批处理规范化如何帮助优化?”在:arXiv e-prints,arXiv:1805.11604(2018 年 5 月),arXiv:1805.11604。arXiv:1805.11604[统计。ML】。
[20]蒂姆·萨利曼斯和迪德里克·P·金马。“权重标准化:加速深度神经网络训练的简单重新参数化”。神经信息处理系统进展 29。柯伦咨询公司,2016 年,第 901–909 页。
【21】泽维尔·格洛特和约舒阿·本吉奥。“理解训练深度前馈神经网络的困难”。摘自:2010 年第十三届国际人工智能会议论文集,第 249-256 页。
【22】,罗平,陈改来,等,“基于深度多任务学习的人脸标志点检测”。载于:计算机视觉— ECCV 2014 年:第 13 届欧洲会议,瑞士苏黎世,Cham: Springer 国际出版公司,2014 年,第 94–108 页。
正规化——第 4 部分
FAU 讲座笔记关于深度学习
初始化和迁移学习
FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座
这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。如果你发现了错误,请告诉我们!
航行
在凸问题中,初始化不起作用。 CC 下的图片来自深度学习讲座的 4.0 。
欢迎回到深度学习!所以今天,我们想看看一些初始化技术,它们将在你使用深度学习网络的整个工作中非常方便。所以,你可能会想,如果你有一个凸函数,为什么初始化很重要,实际上,这一点都不重要,因为你沿着负梯度方向,你总是会找到全局最小值。所以,凸优化没有问题。
在非凸问题中,初始化可以起到很大的作用。 CC 下的图片来自深度学习讲座的 4.0 。
然而,我们正在处理的许多问题是非凸的。非凸函数可能有不同的局部最小值。如果我从这一点开始,你可以看到我通过优化得到了一个局部最小值。但是如果我从这里开始,你可以看到,我会得到一个非常不同的局部最小值。所以对于非凸问题,初始化其实是一件大事。具有非线性的神经网络通常是非凸的。
初始化的简单思路。来自深度学习讲座的 CC BY 4.0 下的图片。
那么,有什么办法呢?当然,你必须做一些初始化工作。对于偏差,您可以很容易地开始并将它们初始化为 0。这是非常典型的。请记住,如果您正在处理一个 ReLU,您可能希望从一个小的正常数开始,这样会更好,因为会出现 ReLU 问题。对于权重,你需要随机打破对称。我们已经有这个问题了。在辍学,我们看到我们需要额外的正规化,以打破对称性。同样,用零初始化它们也是非常糟糕的,因为这样梯度也是零。所以,这是你不想做的事情。类似于学习率,它们的方差影响学习过程的稳定性。小的均匀高斯值有效。
如何校准差异? CC 下的图片来自深度学习讲座的 4.0 。
现在,你可能想知道我们如何校准这些差异。让我们假设我们有一个单线性神经元,其权重为 W ,输入为 X 。记住这里的大写字母把它们标为随机变量。然后,你可以看到输出是 W 乘以 X 。这是各个输入加上一些偏置的线性组合。现在,我们对 Y 的方差感兴趣。如果我们假设 W 和 X 是独立的,那么每个产品的方差实际上可以被计算为 X 的期望值是 W 方差的 2 次幂加上 W 的期望值是 X 方差的 2 次幂,然后你将两个随机变量的方差相加。现在,如果我们要求 W 和 X 的平均值为 0,那么这将简化整个问题。平均值是 0,所以期望值抵消了,我们的方差就是两个方差的乘积。现在,我们假设 X 下标 n 和 W 下标 n 是独立同分布的。在这种特殊情况下,我们可以看到,这里的 N 代表了我们的方差。因此,它实际上取决于您对图层的输入数量。这是方差与 W 下标 n 的比例,所以,你看到权重非常重要。实际上,你拥有的权重越多,方差就越大。
Xavier 初始化会考虑重量的变化。 CC 下的图片来自深度学习讲座的 4.0 。
因此,我们可以使用 Xavier 初始化。因此,我们校准向前传递的方差。我们使用零均值高斯函数进行初始化,只需将 fan_in 上的标准差设置为 1,其中 fan_in 是权重的输入维度。因此,我们简单地将输入维数的方差缩放为 1。然而,在向后传递中,我们需要同样的向后效果。因此,我们必须用 1 除以 fan_out 来调整标准差,其中 fan_out 是权重的输出维度。所以,你只要把这两个平均,然后计算一个新的标准差。这个初始化是在[21]的第一个作者之后调用的。好吧,还能做什么?
有了 ReLUs,初始化就有优势了。 CC 下的图片来自深度学习讲座的 4.0 。
还有初始化,然后也考虑到线性神经元的假设是一个问题。所以在[12]中,他们表明对于 ReLUs,实际上最好用 2 的平方根除以 fan_in 作为标准差。因此,这是一个非常典型的随机初始化权重的选择。
初始化时的其他常规选择。来自深度学习讲座的 CC BY 4.0 下的图片。
然后,其他常规的初始选择是进行 L2 正则化,对完全连接的层使用概率为 0.5 的下降,并在卷积神经网络中选择性地使用它们。你的意思是减法,批量标准化,和初始化。这是非常典型的设置。
迁移学习试图重用以前培训设置中的知识。 CC 下的图片来自深度学习讲座的 4.0 。
那么我们还剩下哪些技巧呢?一个重要的技巧是迁移学习。现在,迁移学习通常用在所有数据很少的情况下。一个例子是医疗数据。在那里,你通常只有很少的数据。因此,这个想法是重用模型,例如,在 ImageNet 上训练的模型。您甚至可以针对相同的数据重用在不同的任务中训练过的东西。您也可以在同一任务中使用不同的数据,甚至可以在不同的任务中使用不同的数据。
权重迁移是迁移学习的常见选择。来自深度学习讲座的 4.0CC 下的图片。
所以现在的问题是我们应该转移什么?好吧,卷积层提取特征,现在的期望是较少的特定于任务的特征在较早的层中。我们在几篇论文中看到过。我们还可以在中看到我们的可视化视频。所以通常情况下,那些有更多的基本信息,并可能包含值得传输的信息。我们在特征提取部分对网络进行一定深度的切割。对于那些提取出来的部分,我们可以把学习率固定为零。所以,如果我们把它设置为零,它们不会改变。到时候就可以开始微调了。
迁移学习的一个例子见[5]。来自深度学习讲座的 CC BY 4.0 下的图片。
这里的一个例子是皮肤癌分类。他们使用基于 Inception V3 的深度卷积神经网络。他们有一个在 ImageNet 上预先训练过的最先进的架构。然后,他们根据皮肤癌数据对其进行微调。因此,它们本质上是网络,而你要替换的本质上是右边的部分。这些课程的培训是你在 ImageNet 上找不到的。所以,你必须替换整个网络,因为你想预测非常不同的类。然后,您可以使用两个完全连接的图层将您学习到的要素制图表达映射到不同的空间。然后,你可以从那里做一个分类。
许多其他转移也是可能的。来自深度学习讲座的 4.0CC 下的图片。
还有模态之间的转换。这也被发现是有益的。现在,您可以从彩色转换到 x 射线,这里只需简单地复制输入三次就足够了。那么,你就不需要那么多微调了。所以,这个效果很好。一种替代方法是使用其他网络的要素制图表达作为损失函数。这就导致了知觉的丧失。我们将在另一个视频中讨论感知损失。在任何情况下,迁移学习通常是一个非常好的主意。有许多应用和论文都使用了迁移学习。很久以前他们不说迁移学习而是说适应。特别是在语音处理方面,他们有说话人和噪声适应等等。但是现在你说迁移学习。本质上是同一个概念。
在这个深度学习讲座中,更多令人兴奋的事情即将到来。来自深度学习讲座的 CC BY 4.0 下的图片。
下一次在深度学习中,我们将讨论交易和正规化的剩余技巧。我期待着在下一次讲座中见到你。非常感谢您的收听,再见!
如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTube 、 Twitter 、脸书或 LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。
链接
链接 —关于最大后验概率估计和偏差-方差分解的详细信息
链接 —关于正则化实用建议的综合文本
链接 —关于校准方差的论文
参考
[1]谢尔盖·约菲和克里斯蒂安·塞格迪。“批量标准化:通过减少内部协变量转移加速深度网络训练”。载于:第 32 届机器学习国际会议论文集。2015 年,第 448–456 页。乔纳森·巴克斯特。“通过多任务抽样学习的贝叶斯/信息论模型”。摘自:机器学习 28.1(1997 年 7 月),第 7-39 页。
【3】克里斯托弗·m·毕晓普。模式识别和机器学习(信息科学和统计学)。美国新泽西州 Secaucus 出版社:纽约斯普林格出版社,2006 年。
[4]理查德·卡鲁阿纳。多任务学习:归纳偏差的知识来源。收录于:第十届机器学习国际会议论文集。摩根·考夫曼,1993 年,第 41-48 页。
【5】Andre Esteva,Brett Kuprel,Roberto A Novoa,等《深度神经网络的皮肤癌皮肤科医生级分类》。载于:自然 542.7639 (2017),第 115–118 页。
[6]丁俊钦、徐俊卿、陶行知。“多任务姿态不变人脸识别”。载于:IEEE 图像处理汇刊 24.3(2015 年 3 月),第 980–993 页。
[7]李万,马修·泽勒,张思欣,等,“用下降连接实现神经网络的正则化”。载于:《第 30 届机器学习国际会议论文集》(ICML,2013 年),第 1058-1066 页。
[8] Nitish Srivastava,Geoffrey E Hinton,Alex Krizhevsky,等人,“辍学:防止神经网络过度拟合的简单方法。”载于:《机器学习研究杂志》15.1 (2014),第 1929–1958 页。
[9]r . o .杜达、P. E .哈特和 D. G .施托克。模式分类。约翰威利父子公司,2000 年。
[10]伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔。深度学习。http://www.deeplearningbook.org。麻省理工学院出版社,2016 年。
【11】与何。“群体常态化”。载于:arXiv 预印本 arXiv:1803.08494 (2018)。
【12】何,,任等,“深入挖掘整流器:在 imagenet 分类上超越人类水平的表现”。IEEE 计算机视觉国际会议论文集。2015 年,第 1026–1034 页。
【13】D 乌里扬诺夫,A 韦达尔迪,以及 VS 伦皮茨基。实例规范化:快速风格化缺少的要素。CoRR ABS/1607.0[14]günter Klambauer,Thomas Unterthiner,Andreas Mayr 等,“自规范化神经网络”。在:神经信息处理系统的进展。abs/1706.02515 卷。2017.arXiv: 1706.02515。吉米·巴雷、杰米·瑞安·基罗斯和杰弗里·E·辛顿。“图层规范化”。载于:arXiv 预印本 arXiv:1607.06450 (2016)。
【16】Nima Tajbakhsh,Jae Y Shin,Suryakanth R Gurudu,等,“用于医学图像分析的卷积神经网络:完全训练还是微调?”载于:IEEE 医学成像汇刊 35.5 (2016),第 1299–1312 页。
【17】约书亚·本吉奥。“深度架构基于梯度训练的实用建议”。《神经网络:交易的诀窍》。斯普林格出版社,2012 年,第 437-478 页。
[18]张,Samy Bengio,Moritz Hardt 等,“理解深度学习需要反思泛化”。载于:arXiv 预印本 arXiv:1611.03530 (2016)。
[19]什巴尼·桑图尔卡,迪米特里斯·齐普拉斯,安德鲁·易勒雅斯等,“批处理规范化如何帮助优化?”在:arXiv e-prints,arXiv:1805.11604(2018 年 5 月),arXiv:1805.11604。arXiv:1805.11604[统计。ML】。
[20]蒂姆·萨利曼斯和迪德里克·P·金马。“权重标准化:加速深度神经网络训练的简单重新参数化”。神经信息处理系统进展 29。柯伦咨询公司,2016 年,第 901–909 页。
【21】泽维尔·格洛特和约舒阿·本吉奥。“理解训练深度前馈神经网络的困难”。摘自:2010 年第十三届国际人工智能会议论文集,第 249-256 页。
【22】,罗平,陈改来,等,“基于深度多任务学习的人脸标志点检测”。载于:计算机视觉— ECCV 2014 年:第 13 届欧洲会议,瑞士苏黎世,Cham: Springer 国际出版公司,2014 年,第 94–108 页。
正规化—第 5 部分
FAU 讲座笔记关于深度学习
多任务学习
FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座
这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。如果你发现了错误,请告诉我们!
航行
多任务学习的概念。 CC 下的图片来自深度学习讲座的 4.0 。
欢迎大家来深度学习!所以今天,我们想结束谈论不同的正则化方法。我们想特别谈谈另一种叫做多任务学习的技巧。在多任务学习中,我们希望扩展前面的概念。以前,我们只有一个网络用于一项任务。然后,我们通过迁移学习来重用网络。问题是我们能做得更多吗?我们能以更好的方式做它吗?有一些真实世界的例子。例如,如果你学习弹钢琴和小提琴,那么在这两项任务中,你都需要良好的听力,对音乐符号的节奏感,等等。所以,有些东西是可以分享的。此外,足球和篮球训练都需要耐力、速度、身体意识和眼-身协调。所以,如果你学会了其中一个,那么你通常也会从另一个中受益。因此,这甚至比在您同时学习时重用更好,然后提供对共享基础概念的更好理解。
多任务学习旨在使用几个任务同时进行训练。 CC 下的图片来自深度学习讲座的 4.0 。
现在的想法是,我们在多个相关的任务上同时训练我们的网络。因此,我们采用损失函数来评估多任务的表现,然后这导致多任务学习,这引入了所谓的归纳偏差。因此,我们更喜欢一个能解释多项任务的模型。此外,这降低了在一个特定任务上过度拟合的风险,并且我们的模型概括得更好。
硬参数共享。来自深度学习讲座的 CC BY 4.0 下的图片。
那么,让我们来看看设置。因此,我们有一些共享的输入图层,它们类似于要素提取图层或制图表达图层。然后,我们在某个点进行划分,进入特定于任务的层,对任务 A、任务 B 和任务 c 进行评估。它们可能非常不同,但却有某种联系,否则,共享之前的层就没有意义。因此,所有任务共享几个隐藏层。正如 Baxter 在[2]中已经表明的,N 个任务的多任务学习将过度适应的机会减少了 N 个数量级。
软共享只是使用约束松散地耦合权重。 CC 下的图片来自深度学习讲座的 4.0 。
除了硬共享,还可以做软参数共享。它引入了额外的损失。因此,您将各个层中的激活约束为相似。因此,每个模型都有自己的参数,但我们将它们连接在一起,以在受约束的层中执行相似但不同的提取步骤。举例来说,你可以用一个 L2 规范或者其他使它们相似的规范来做。
面部标志检测的辅助任务是面部姿态估计和性别、眼镜和微笑检测。来自深度学习讲座的 CC BY 4.0 下的图片。
现在,还是要说说辅助任务。所有这些任务都应该有自己的目的。你也可以只是包括辅助任务,只是因为你想创建一个更稳定的网络。因此,这里的一个例子是张等人的面部标志检测[22]。他们本质上想要检测面部标志,但是这受到遮挡和后置变化的阻碍。因此,他们同时开始学习地标和微妙相关的任务,如面部姿势,微笑与不微笑,戴眼镜与不戴眼镜,以及性别。他们提供了这些信息,然后您可以在多任务学习框架中进行设置,就像您在网络架构中看到的那样。
张等人[22]的定性结果。 CC 下的图片来自深度学习讲座的 4.0 。
在结果中,您可以看到辅助任务如何支持面部标志的检测。他们把这比作 CNN,级联 CNN,以及他们的带有辅助任务的多任务网络。通过引入这些辅助任务来改进界标检测。因此,对于一个任务来说,某些特征可能很难学,但是对于一个相关的任务来说,可能就比较容易了。辅助任务有助于将训练引向特定的方向,我们通过选择适当的辅助任务,以某种方式包含了先验知识。当然,任务可以有不同的收敛速度。为了缓解这个问题,您还可以引入基于任务的早期停止。一个公开的研究问题是什么任务是合适的辅助任务。所以这是我们通常无法回答的问题,但通常是由实验验证决定的。
在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。
因此,下一次关于深度学习,我们将从一个新的主题开始,在这个主题中,我们将研究一些实用的建议,以使事情真正发挥作用。所以你已经看到了,我们已经很远了,但是有一些提示会让你的生活变得更容易。所以,我强烈建议观看接下来的几节课。我们将研究如何评估绩效,以及如何处理每个人在开始时都必须面对的最常见的问题。此外,我们还会查看具体的案例研究,包括您到目前为止所学的所有内容。
这些问题可能有助于备考。来自深度学习讲座的 CC BY 4.0 下的图片。
我有几个综合性的问题,比如:“什么是偏差-方差权衡?”“什么是模型容量?”“描述解决过度拟合的三种技术.”“协变量移位问题和 ReLU 之间有什么联系?”“我们如何解决协变量转移问题?”,等等。进一步的阅读,你可以在我贴在这篇文章下面的链接上找到。非常感谢您的阅读,下次讲座再见!
如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTube 、 Twitter 、脸书或 LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。
链接
链接 —关于最大后验概率估计和偏差-方差分解的详细信息
链接 —关于正则化实用建议的综合文本
链接 —关于校准方差的论文
参考
[1]谢尔盖·约菲和克里斯蒂安·塞格迪。“批量标准化:通过减少内部协变量转移加速深度网络训练”。载于:第 32 届机器学习国际会议论文集。2015 年,第 448–456 页。乔纳森·巴克斯特。“通过多任务抽样学习的贝叶斯/信息论模型”。摘自:机器学习 28.1(1997 年 7 月),第 7-39 页。
【3】克里斯托弗·m·毕晓普。模式识别和机器学习(信息科学和统计学)。美国新泽西州 Secaucus 出版社:纽约斯普林格出版社,2006 年。
[4]理查德·卡鲁阿纳。多任务学习:归纳偏差的知识来源。收录于:第十届机器学习国际会议论文集。摩根·考夫曼,1993 年,第 41-48 页。
【5】Andre Esteva,Brett Kuprel,Roberto A Novoa,等《深度神经网络的皮肤癌皮肤科医生级分类》。载于:自然 542.7639 (2017),第 115–118 页。
[6]丁俊钦、徐俊卿、陶行知。“多任务姿态不变人脸识别”。载于:IEEE 图像处理汇刊 24.3(2015 年 3 月),第 980–993 页。
[7]李万,马修·泽勒,张思欣,等,“用下降连接实现神经网络的正则化”。载于:《第 30 届机器学习国际会议论文集》(ICML,2013 年),第 1058-1066 页。
[8] Nitish Srivastava,Geoffrey E Hinton,Alex Krizhevsky,等人,“辍学:防止神经网络过度拟合的简单方法。”载于:《机器学习研究杂志》15.1 (2014),第 1929–1958 页。
[9]r . o .杜达、P. E .哈特和 D. G .施托克。模式分类。约翰威利父子公司,2000 年。
[10]伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔。深度学习。http://www.deeplearningbook.org。麻省理工学院出版社,2016 年。
【11】与何。“群体常态化”。载于:arXiv 预印本 arXiv:1803.08494 (2018)。
【12】何,,任等,“深入挖掘整流器:在 imagenet 分类上超越人类水平的表现”。IEEE 计算机视觉国际会议论文集。2015 年,第 1026–1034 页。
【13】D 乌里扬诺夫,A 韦达尔迪,以及 VS 伦皮茨基。实例规范化:快速风格化缺少的要素。CoRR ABS/1607.0[14]günter Klambauer,Thomas Unterthiner,Andreas Mayr 等,“自规范化神经网络”。在:神经信息处理系统的进展。abs/1706.02515 卷。2017.arXiv: 1706.02515。吉米·巴雷、杰米·瑞安·基罗斯和杰弗里·E·辛顿。“图层规范化”。载于:arXiv 预印本 arXiv:1607.06450 (2016)。
【16】Nima Tajbakhsh,Jae Y Shin,Suryakanth R Gurudu,等,“用于医学图像分析的卷积神经网络:完全训练还是微调?”载于:IEEE 医学成像汇刊 35.5 (2016),第 1299–1312 页。
【17】约书亚·本吉奥。“深度架构基于梯度训练的实用建议”。《神经网络:交易的诀窍》。斯普林格出版社,2012 年,第 437-478 页。
[18]张,Samy Bengio,Moritz Hardt 等,“理解深度学习需要反思泛化”。载于:arXiv 预印本 arXiv:1611.03530 (2016)。
[19]什巴尼·桑图尔卡,迪米特里斯·齐普拉斯,安德鲁·易勒雅斯等,“批处理规范化如何帮助优化?”在:arXiv e-prints,arXiv:1805.11604(2018 年 5 月),arXiv:1805.11604。arXiv:1805.11604[统计。ML】。
[20]蒂姆·萨利曼斯和迪德里克·P·金马。“权重标准化:加速深度神经网络训练的简单重新参数化”。神经信息处理系统进展 29。柯伦咨询公司,2016 年,第 901–909 页。
【21】泽维尔·格洛特和约舒阿·本吉奥。“理解训练深度前馈神经网络的困难”。摘自:2010 年第十三届国际人工智能会议论文集,第 249-256 页。
【22】,罗平,陈改来,等,“基于深度多任务学习的人脸标志点检测”。载于:计算机视觉— ECCV 2014 年:第 13 届欧洲会议,瑞士苏黎世,Cham: Springer 国际出版公司,2014 年,第 94–108 页。
l ↩︎