共计 3401 个字符,预计需要花费 9 分钟才能阅读完成。
全文链接:http://tecdat.cn/?p=23606
原文出处:拓端数据部落公众号
梯度降落是什么?
最近咱们被客户要求撰写对于梯度降落的钻研报告,包含一些图形和统计输入。梯度降落是一种优化算法,可能为各种问题找到最佳解决方案。
梯度降落的次要性能是最小化老本函数。
这个定义很难了解,对吧?!好的,让咱们让它变得简略,并通过一个例子来了解它。
假如咱们有 2 个变量的数据,并且,其中 x 是自变量,y 是因变量。因而,咱们的指标是预测给定的 y。假如数据如下所示。在这里,咱们正在思考 线性回归 问题。所以咱们失去这条线,这样咱们就能够预测任何.x
`y`
家喻户晓,直线的等式,如下所示。y = mx + c
这里的 θ₀ 和 θ₁ 称为权重。咱们必须找到这些权重能力取得数据的最佳拟合线。
但问题是,如何取得这条线以使其适宜数据?为此,首先咱们必须找到误差,即理论输入和预测输入之间的差别,这是由咱们的假如函数用一些随机权重计算的。
为此,咱们须要一个老本函数来计算这个误差。对于线性回归,老本函数 定义如下:
你会发现,首先老本函数取理论值和预测值的差值,而后取它的平方,而后取所有数据的平均值。所以基本上它是在计算线在数据上的拟合水平。如果老本函数的值靠近 0,那么很好,但如果是一个很大的值,那么必须扭转假如函数的权重。
那么是否必须随机尝试不同的权重能力获得最佳拟合线?不必,这时就能够用梯度降落办法。
这里,老本函数是 θ₀ 和 θ₁ 的函数。
例如,咱们有 x 和它的函数 f(x)。当初咱们想要具备最小值的值。
家喻户晓,在 某个点取函数的微分,意味着该点的 斜率。因而,咱们能够说,在这一点上,这种分化变为 0 意味着在该点上,斜率的值为 0,意味着咱们失去一条程度的斜线。
请看下图:
在这里你能够看到,在 x ’ 值时,斜率变成了程度的。这意味着此时的值是最小的。您能够在图像中分明地看到这一点。此时,f(x)的微分为 0。所以在这里,咱们正在做的是找到图形的 最小值。
当初让咱们回到梯度降落。
咱们有 θ₀ 和 θ₁ 作为参数和老本函数,它是 θ₀ 和 θ₁ 的函数。因而,这里咱们心愿最小化老本函数,以便咱们能够为咱们的模型获得最佳拟合线。如上例所述,咱们必须找到老本函数的微分,此时它变为 0,将失去最佳拟合线的 θ₀ 和 θ₁ 值。所以咱们想找到 最小值。
所以咱们有 2 个参数和一个老本函数。如果咱们将其绘制在图形中,它将是 3D,如下所示。看到图像,你会失去更好的了解。
这里咱们在图中有 θ₀、θ₁ 和 J(θ₀,θ₁)。当初取一个随机值 θ₀,θ₁ 并为此计算成本函数。在图形中设置此值,假如该点显示在图形中。咱们心愿该点最小点。您能够看到,在点斜率变为 0,对于该 θ₀,θ₁ 老本函数具备最低值意味着咱们有数据的最佳拟合线。A
`A’`A'
当初的问题是,在这一点上如何达到?
程序是首先计算一个点的斜坡。之后,朝那个方向走下。并反复此步骤,直到咱们失去 slop 0 的值。
例如,假如你在浓雾中迷失在山上,你只能感觉到脚下高空的坡度。疾速达到底部的一个好策略是朝最平缓的斜坡方向下坡。
让咱们看看梯度降落的方程,而后你很容易了解。
学习率(也称为步长或 alpha)是为达到最小值而采取的步骤的大小。这通常是一个较小的值,它依据老本函数的行为进行评估和更新。
所以当初,如果你看到这个等式,就能够了解它是如何工作的。对于任何 θ,它将首先计算斜率,而后将这个斜率乘以学习率,使其变为比拟小的值,而后从原始 θ 中减去该值并将 θ 替换为咱们失去的值。这个过程会反复,直到找到任何最小值或收敛。基本上,它将 θ 挪动到部分或全局最小值。
如果 α 很小,那么算法将经验屡次迭代并破费大量工夫。
如果 α 很高,您可能会跳过山谷,这可能会使算法发散并且无奈找到最佳解决方案。
梯度降落的类型
有 3 种类型:
- 批次梯度降落
它计算训练集中每个示例的误差。评估完所有参数后,它会更新模型参数。
它的计算效率很高,会产生稳固的误差梯度和收敛性,但它须要在内存中有一个残缺的训练集。 - 随机梯度降落
它依据单个训练样本的误差梯度更新参数。
它比批量梯度降落更快。频繁更新可提供具体的改良速度,但这些更新的老本更高。 - 小 批量梯度降落
它将训练集分成小批次,并为每个批次执行更新。
它均衡了批处理和随机梯度降落,因为它应用两者的组合。
梯度降落的挑战
-
部分最小值和高原
并非所有老本函数看起来都不像一个一般的碗。第一个状况,它可能卡在部分最小值。第二个状况,须要很长时间能力达到全局最小值。
- 爆炸梯度
当梯度太大时会产生这种状况,从而创立不稳固的模型。在这种状况下,模型权重将变得太大,最终将示意为 NaN。此问题的一个解决方案是利用降维技术,这有助于最大水平地升高模型中的复杂性。
R 语言用极大似然和梯度降落算法预计 GARCH(p)过程
本文思考一些 ARCH(p)过程,例如 ARCH(1)。
其中
有一个高斯白噪声 .
> for(t in 3:n){+ sigma2[t]=w+a1*epsilon[t-1]^2+a2*epsilon[t-2]^2
+ epsilon[t]=eta[t]*sqrt(sigma2[t])
+ }
(红线是条件方差过程)。
> acf(epsilon,lag=50,lwd=2)
如果是一个 ARCH(),那么就是一个 AR(1)过程。所以第一个想法是思考回归,就像咱们对 AR(1)所做的那样
> summary(lm(Y~X1,data=db))
这里有一些显著的自相干。但因为咱们的向量不能被认为是高斯分布的,应用最小二乘法兴许不是最好的策略。实际上,如果咱们的序列不是高斯分布的,它依然是有条件的高斯分布的,因为咱们假如是高斯(强)白噪声。
而后,似然函数是
而对数似然函数为
而一个天然的想法是定义
代码简略地说就是
> OPT=optim(par=
+ coefficients(lm(Y~X1,data=db)),fn=loglik)
因为参数必须是负数,咱们在此假设它们能够写成一些实数的指数。察看一下,这些值更靠近于用来生成咱们的工夫序列的值。
如果咱们应用 R 函数来预计这些参数,咱们会失去
> summary(garch(epsilon,c(0,1)))
...
所以的置信区间是
coef[2,1]+
+ c(-1.96,1.96)*coef[2,2]
实际上,因为咱们的次要趣味是这个参数,所以有可能应用轮廓似然办法。
> OPT=optimize(function(x) -proflik(x), interval=c(0,2))
objective-qchisq(.95,df=1)
> abline(h=t,col="red")
当然,所有这些技术都能够扩大到高阶 ARCH 过程。例如,如果咱们假如有一个 ARCH(2)工夫序列
其中
有一个高斯(强)白噪声 . 对数似然性依然是
而咱们能够定义
下面的代码能够被批改,以思考到这个额定的局部。
optim(par=
+ coefficients(lm(Y~X1+X2,data=db)),fn=loglik)
咱们也能够思考一些狭义的 ARCH 过程,例如 GARCH(1,1)。
其中
同样,能够应用最大似然技术。实际上,咱们也能够用 Fisher-Scoring 算法编码,因为(在一个十分广泛的状况下
这里 . 应用规范的梯度降落算法,咱们能够失去以下对 GARCH 过程的预计。
> while(sum(G^2)>1e-12){+ s2=rep(theta[1],n)
+ for (i in 2:n){s2[i]=theta[1]+theta[2]*X[(i-1)]^2+theta[3]*s2[(i-1)]}
这里乏味的一点是,咱们也得出了(渐进的)方差
>sqrt(diag(solve(H))
最受欢迎的见解
1.HAR-RV- J 与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频稳定率
2.R 语言中基于混合数据抽样 (MIDAS) 回归的 HAR-RV 模型预测 GDP 增长回归的 HAR-RV 模型预测 GDP 增长 ”)
3.稳定率的实现:ARCH 模型与 HAR-RV 模型
4.R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测
5.GARCH(1,1),MA 以及历史模拟法的 VaR 比拟
6.R 语言多元 COPULA GARCH 模型工夫序列预测
7.R 语言基于 ARMA-GARCH 过程的 VAR 拟合和预测
8.matlab 预测 ARMA-GARCH 条件均值和方差模型
9.R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略