游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

5个时间序列预测的深度学习模型对比总结

  时间序列预测在最近两年内发生了巨大的变化,尤其是在kaiming的MAE出现以后,现在时间序列的模型也可以用类似MAE的方法进行无监督的预训练
  MakridakisMCompetitions系列(分别称为M4和M5)分别在2018年和2020年举办(M6也在今年举办了)。对于那些不了解的人来说,m系列得比赛可以被认为是时间序列生态系统的一种现有状态的总结,为当前得预测的理论和实践提供了经验和客观的证据。
  2018年M4的结果表明,纯粹的ML方法在很大程度上胜过传统的统计方法,这在当时是出乎意料的。在两年后的M5〔1〕中,最的高分是仅具有ML方法。并且所有前50名基本上都是基于ML的(大部分是树型模型)。这场比赛看到了LightGBM(用于时间序列预测)以及AmazonsDeepar〔2〕和NBeats〔3〕的首次亮相。NBeats模型于2020年发布,并且优于M4比赛的获胜者3!
  最近的VentilatorPressurePrediction比赛展示了使用深度学习方法来应对实时时间序列挑战的重要性。比赛的目的是预测机械肺内压力的时间顺序。每个训练实例都是自己的时间序列,因此任务是一个多个时间序列的问题。获胜团队提交了多层深度架构,其中包括LSTM网络和Transformer块。
  在过去的几年中,许多著名的架构已经发布,如MQRNN和DSSM。所有这些模型都利用深度学习为时间序列预测领域贡献了许多新东西。除了赢得Kaggle比赛,还给我们带来了更多的进步比如:多功能性:将模型用于不同任务的能力。MLOP:在生产中使用模型的能力。解释性和解释性:黑盒模型并不那么受欢迎。
  本文讨论了5种专门研究时间序列预测的深度学习体系结构,论文是:NBEATS(ElementAI)DeepAR(Amazon)Spacetimeformer〔4〕TemporalFusionTransformerorTFT(Google)〔5〕TSFormer(时间序列中的MAE)〔7〕NBEATS
  这种模式直接来自于(不幸的)短命的ElementAI公司,该公司是由YoshuaBengio联合创立的。顶层架构及其主要组件如图1所示:
  NBEATS是一个纯粹的深度学习架构,它基于集成前馈网络的深度堆栈,这些网络也通过正向和反向的相互连接进行堆叠。
  每一个块只对由前一个的backcast产生的残差进行建模,然后基于该误差更新预测。该过程模拟了拟合ARIMA模型时的BoxJenkins方法。
  以下是该模型的主要优势:
  表达性强且易于使用:该模型易于理解,具有模块化结构,它被设计为需要最小的时间序列特征工程并且不需要对输入进行缩放。
  该模型具有对多个时间序列进行概括的能力。换句话说,分布略有不同的不同时间序列可以用作输入。在NBEATS中是通过元学习实现的。元学习过程包括两个过程:内部学习过程和外部学习过程。内部学习过程发生在块内部,并帮助模型捕获局部时间特征。外部学习过程发生在堆叠层,帮助模型学习所有时间序列的全局特征。
  双重残差叠加:残差连接和叠加的想法是非常巧妙的,它几乎被用于每一种类型的深度神经网络。在NBEATS的实现中应用了相同的原理,但有一些额外的修改:每个块有两个残差分支,一个运行在回看窗口(称为backcast),另一个运行在预测窗口(称为forecast)。
  每一个连续的块只对由前一个块重建的backcast产生的残差进行建模,然后基于该误差更新预测。这有助于模型更好地逼近有用的后推信号,同时最终的堆栈预测预测被建模为所有部分预测的分层和。就是这个过程模拟了ARIMA模型的BoxJenkins方法。
  可解释性:模型有两种变体,通用的和可解释性的。在通用变体中,网络任意学习每个块的全连接层的最终权值。在可解释的变体中,每个块的最后一层被删除。然后将后推backcast和预测forecast分支乘以模拟趋势(单调函数)和季节性(周期性循环函数)的特定矩阵。
  注意:原始的NBEATS实现只适用于单变量时间序列。DeepAR
  结合深度学习和自回归特性的新颖时间序列模型。图2显示了DeepAR的顶层架构:
  以下是该模型的主要优势:
  DeepAR在多个时间序列上工作得非常好:通过使用多个分布略有不同的时间序列来构建全局模型。也适用于许多现实场景。例如电力公司可能希望为每个客户推出电力预测服务,每个客户都有不同的消费模式(这意味着不同的分布)。
  除了历史数据,DeepAR还允许使用已知的未来时间序列(自回归模型的一个特点)和额外的静态属性。在前面提到的电力需求预测场景中,一个额外的时间变量可以是月份(作为一个整数,值在112之间)。假设每个客户都与一个测量功耗的传感器相关联,那么额外的静态变量将是sensorid或customerid之类的东西。
  如果莫熟悉使用MLPs和rnn等神经网络架构进行时间序列预测,那么一个关键的预处理步骤是使用标准化或标准化技术对时间序列进行缩放。这在DeepAR中是不需要手动操作的,因为底层的模型对每个时间序列i的自回归输入z进行缩放,缩放因子为vi,即该时间序列的平均值。具体而言,论文基准中使用的比例因子方程如下:
  但是在实践中,如果目标时间序列的大小差异很大,那么在预处理过程中应用自己的缩放还是很有必要的。例如,在能源需求预测场景中,数据集可以包含中压电力客户(例如小工厂,按兆瓦单位消耗电力)和低压客户(例如家庭,按千瓦单位消耗电力)。
  DeepAR进行概率预测,而不是直接输出未来值。这是以蒙特卡洛样本的形式完成的。这些预测被用来计算分位数预测,通过使用分位数损失函数。对于那些不熟悉这种损失类型的人,分位数损失不仅用来计算一个估计,而且用来计算围绕该值的预测区间。Spacetimeformer
  在单变量时间序列中时间依赖性是最重要的。但是在多个时间序列场景中,事情就没那么简单了。例如假设我们有一个天气预报任务,想要预测五个城市的温度。让我们假设这些城市属于一个国家。鉴于目前所看到的,我们可以使用DeepAR并将每个城市作为外部静态协变量进行建模。
  换句话说,该模型将同时考虑时间和空间关系。这便是Spacetimeformer的核心理念:使用一个模型来利用这些城市地点之间的空间关系,从而学习额外的有用依赖,因为模型将同时考虑时间和空间关系。
  深入研究时空序列
  顾名思义,这种模型在内部使用了基于transformers的结构。在使用基于transformers的模型进行时间序列预测时,一种流行的产生时间感知嵌入的技术是通过Time2Vec〔6〕嵌入层传递输入(对于NLP任务是使用位置编码向量来代替Time2Vec)。虽然这种技术对于单变量时间序列非常有效,但对于多变量时间输入却没有任何意义。可能是在语言建模中,句子中的每个单词都用嵌入表示,单词本质上是一个是词汇表的一部分,而时间序列则没那么简单。
  在多元时间序列中,在给定的时间步长t,输入的形式为x1,t,x2,t,xm,t其中xi,t是特征i的数值,m是特征序列的总数。如果我们将输入通过一个Time2Vec层,将产生一个时间嵌入向量。这种嵌入真正代表什么?答案是它将把整个输入集合表示为单个实体(令牌)。因此模型将只学习时间步之间的时间动态,但将错过特征变量之间的空间关系。
  Spacetimeformer解决了这个问题,它将输入扁平化为一个大向量,称为时空序列。如果输入包含N个变量,组织成T个时间步,则生成的时空序列将具有(NxT)标记。下图3更好地显示了这一点:
  论文指出:(1)包含时间信息的多元输入格式。解码器输入缺少(?)值,在进行预测时设置为零。(2)时间序列通过一个Time2Vec层,生成一个代表周期性输入模式的频率嵌入。(3)二进制嵌入表示该值是作为上下文给出的还是需要预测的。(4)将每个时间序列的整数索引映射到一个具有查找表嵌入的空间表示。(5)利用前馈层投影每个时间序列的Time2Vec嵌入和变量值。(6)将值和时间,变量和给定的嵌入求和会导致使MSA在时间和可变空间之间以更长的序列作为输入。
  换句话说,最后的序列编码了一个包含了时间、空间和上下文信息统一的嵌入。但是这种方法的一个缺点是,序列可能会变得很长导致资源的二次增长。这是因为根据注意机制,每个令牌都要对另一个进行检查。作者使用了一种更有效的体系结构,称为Performer注意机制,适用于更大的序列。TemporalFusionTransformer
  TemporalFusionTransformer(TFT)是由Google发布的基于Transformer的时间序列预测模型。TFT比以前的模型更加通用。
  TFT的顶层架构如图4所示。以下是该模型的主要优势:
  与前面提到的模型一样,TFT支持在多个异构时间序列上构建模型。
  TFT支持三种类型的特征:i)具有已知的未来输入的时变数据ii)仅到目前为止已知的时变数据iii)分类静态变量,也被称为时不变特征。因此TFT比以前的型号更通用。在前面提到的电力需求预测场景中,我们希望使用湿度水平作为一个时变特征,这是到目前为止才知道的。这在TFT中是可行的,但在DeepAR中不行。
  图5显示了如何使用所有这些特性的示例:
  TFT非常强调可解释性。具体地说,通过利用VariableSelection组件(如上图4所示),模型可以成功地度量每个特性的影响。因此可以说模型学习了特性的重要性。
  另一方面,TFT提出了一种新的可解释的多头注意机制:该层的注意权重可以揭示在回顾期间哪些时间步是最重要的。这些权重的可视化可以揭示整个数据集中最显著的季节模式。
  预测区间:与DeepAR类似,TFT通过使用分位数回归输出预测区间和预测值。
  综上所述,深度学习无疑彻底改变了时间序列预测的格局。上述所有模型除了无与伦比的性能之外,还有一个共同点:它们充分利用多重、多元的时间数据,同时它们使用外生信息,将预测性能提高到前所未有的水平。但是在自然语言处理(NLP)任务中多数都利用了预训练的模型。NLP任务的feed大多是人类创造的数据,充满了丰富而优秀的信息,几乎可以看作是一个数据单元。在时间序列预测中,我们可以感觉到缺乏这种预先训练的模型。为什么我们不能像在NLP中那样在时间序列中利用这个优势呢?
  这就引出了我们要介绍的最后一个模型TSFormer,该模型考虑了两个视角,我们讲从输入到输出将其为四个部分,并且提供Python的实现代码(官方也提供了),这个模型是刚刚发布不久的,所以我们才在这里着重介绍它。TSFormer
  它是一种基于Transformer(TSFormer)的无监督的时间序列预训练模型,使用了MAE中的训练策略并且能够捕获数据中非常长的依赖关系。
  NLP和时间序列:
  在某种程度上,NLP信息和TimeSeries数据是相同的。它们都是顺序数据和局部敏感的,这意味着与它的下一个以前的数据点有关。但是还是有一些区别,在提出我们的预训练模型时,我们应该考虑两个差异,就像我们在NLP任务中所做的那样:时间序列数据的密度比自然语言数据低得多我们需要比NLP数据更长的时间序列数据
  TSFormer简介
  TSFormer与MAE的主要体系结构基本类似,数据通过一个编码器,然后经过一个解码器,最终的目标是为了重建缺失(人工掩蔽)的数据。
  我们将他总结为以下4点
  1、掩蔽
  作为数据进入编码器的前一步。输入序列(S)已分布到P片中,其长度为L。因此,用于预测下一个时间步长的滑动窗口的langth是PXL。
  遮蔽比率为75(看着很高,估计是用了MAE一样的参数);我们要完成的是一项自监督任务,所以数据越少编码器的计算速度就越快。
  这样做(掩蔽输入序列段)的主要原因是:段(patch)比单独点好。它使使用下游模型变得简单(STGNN将单元段作为输入)可以分解编码器的输入大小。classPatch(nn。Module):definit(self,patchsize,inputchannel,outputchannel,spectralTrue):super()。init()self。outputchanneloutputchannelself。Ppatchsizeself。inputchannelinputchannelself。outputchanneloutputchannelself。spectralspectralifspectral:self。emblayernn。Linear(int(patchsize21)2,outputchannel)else:self。inputembeddingnn。Conv2d(inputchannel,outputchannel,kernelsize(self。P,1),stride(self。P,1))defforward(self,input):B,N,C,Linput。shapeifself。spectral:specfeattorch。fft。rfft(input。unfold(1,self。P,self。P),dim1)realspecfeat。realimagspecfeat。imagspecfeattorch。cat(〔real,imag〕,dim1)。squeeze(2)outputself。emblayer(specfeat)。transpose(1,2)else:inputinput。unsqueeze(1)B,N,C,L,1inputinput。reshape(BN,C,L,1)BN,C,L,1outputself。inputembedding(input)BN,d,LP,1outputoutput。squeeze(1)。view(B,N,self。outputchannel,1)assertoutput。shape〔1〕Lself。Preturnoutput
  以下是生成遮蔽的函数classMaskGenerator(nn。Module):definit(self,masksize,maskratio,distributionuniform,lm1):super()。init()self。masksizemasksizeself。maskratiomaskratioself。sortTrueself。averagepatchlmself。distributiondistributionifself。distributiongeom:assertlm!1assertdistributionin〔geom,uniform〕defuniformrand(self):masklist(range(int(self。masksize)))random。shuffle(mask)masklenint(self。masksizeself。maskratio)self。maskedtokensmask〔:masklen〕self。unmaskedtokensmask〔masklen:〕ifself。sort:self。maskedtokenssorted(self。maskedtokens)self。unmaskedtokenssorted(self。unmaskedtokens)returnself。unmaskedtokens,self。maskedtokensdefgeometricrand(self):maskgeomnoisemasksingle(self。masksize,lmself。averagepatch,maskingratioself。maskratio)1:masked,0:unmaskedself。maskedtokensnp。where(mask)〔0〕。tolist()self。unmaskedtokensnp。where(mask)〔0〕。tolist()assertlen(self。maskedtokens)len(self。unmaskedtokens)returnself。unmaskedtokens,self。maskedtokensdefforward(self):ifself。distributiongeom:self。unmaskedtokens,self。maskedtokensself。geometricrand()elifself。distributionuniform:self。unmaskedtokens,self。maskedtokensself。uniformrand()else:raiseException(ERROR)returnself。unmaskedtokens,self。maskedtokens
  2、编码
  包括了输入嵌入,位置编码和Transformer块的。编码器只能在未遮蔽的patchs上执行(这个也是MAE的方法)。
  输入嵌入
  使用线性的投影来获得输入的嵌入,可将未遮蔽的空间转换为潜在空间。它的公式可以在下面看到:
  W和B是可学习的参数,U是维度中的模型输入向量。
  位置编码
  简单的位置编码层用于附加新的顺序信息。添加了可学习一词,这有助于表现出比正弦更好的性能。因此可学习的位置嵌入显示了时间序列的良好结果。classLearnableTemporalPositionalEncoding(nn。Module):definit(self,dmodel,dropout0。1,maxlen:int1000):super()。init()self。dropoutnn。Dropout(pdropout)self。penn。Parameter(torch。empty(maxlen,dmodel),requiresgradTrue)nn。init。uniform(self。pe,0。02,0。02)defforward(self,X,index):ifindexisNone:peself。pe〔:X。size(1),:〕。unsqueeze(0)else:peself。pe〔index〕。unsqueeze(0)XXpeXself。dropout(X)returnXclassPositionalEncoding(nn。Module):definit(self,hiddendim,dropout0。1):super()。init()self。tempeLearnableTemporalPositionalEncoding(hiddendim,dropout)defforward(self,input,indexNone,absidxNone):B,N,LP,dinput。shapetemporalembeddinginputself。tempe(input。view(BN,LP,d),indexindex)inputinput。view(B,N,LP,d)absolutepositionalembeddingreturninput
  Transformer块
  论文使用了4层Transformer,比计算机视觉和自然语言处理任务中常见的数量低。这里所使用的Transformer是最基本的也是在原始论文中提到的结构,如下图4所示:
  classTransformerLayers(nn。Module):definit(self,hiddendim,nlayers,numheads4,dropout0。1):super()。init()self。dmodelhiddendimencoderlayersTransformerEncoderLayer(hiddendim,numheads,hiddendim4,dropout)self。transformerencoderTransformerEncoder(encoderlayers,nlayers)defforward(self,src):B,N,L,Dsrc。shapesrcsrcmath。sqrt(self。dmodel)srcsrc。view(BN,L,D)srcsrc。transpose(0,1)outputself。transformerencoder(src,maskNone)outputoutput。transpose(0,1)。view(B,N,L,D)returnoutput
  3、解码
  该解码器包括一系列Transformer块。它适用于所有的patch(相比之下MAE是没有位置嵌入,因为他的patch已经有位置信息),并且层数只有一层,然后使用了简单的MLP,这使得输出长度等于每个patch的长度。
  4、重建目标
  对每一个数据点(i)进行遮蔽patch的计算,并选择mae(MeanAbsoluteError)作为主序列和重建序列的损失函数。
  这就是整体的架构了
  下面是代码实现:deftruncnormal(tensor,mean0。,std1。):calltruncnormal(tensor,meanmean,stdstd,astd,bstd)defunshuffle(shuffledtokens):dic{}fork,v,inenumerate(shuffledtokens):dic〔v〕kunshuffleindex〔〕foriinrange(len(shuffledtokens)):unshuffleindex。append(dic〔i〕)returnunshuffleindexclassTSFormer(nn。Module):definit(self,patchsize,inchannel,outchannel,dropout,masksize,maskratio,L6,distributionuniform,lm1,selectedfeature0,modePretrain,spectralTrue):super()。init()self。patchsizepatchsizeself。seletedfeatureselectedfeatureself。modemodeself。spectralspectralself。patchPatch(patchsize,inchannel,outchannel,spectralspectral)self。pePositionalEncoding(outchannel,dropoutdropout)self。maskMaskGenerator(masksize,maskratio,distributiondistribution,lmlm)self。encoderTransformerLayers(outchannel,L)self。decoderTransformerLayers(outchannel,1)self。encoder2decodernn。Linear(outchannel,outchannel)self。masktokennn。Parameter(torch。zeros(1,1,1,outchannel))truncnormal(self。masktoken,std。02)ifself。spectral:self。outputlayernn。Linear(outchannel,int(patchsize21)2)else:self。outputlayernn。Linear(outchannel,patchsize)defforwardpretrain(self,input):B,N,C,Linput。shapegetpatchesandexecinputembeddingpatchesself。patch(input)patchespatches。transpose(1,2)positionalembeddingpatchesself。pe(patches)masktokensunmaskedtokenindex,maskedtokenindexself。mask()encoderinputpatches〔:,:,unmaskedtokenindex,:〕encoderHself。encoder(encoderinput)encodertodecoderHself。encoder2decoder(H)decoderHunmaskedself。pe(H,indexunmaskedtokenindex)HunmaskedHHmaskedself。pe(self。masktoken。expand(B,N,len(maskedtokenindex),H。shape〔1〕),indexmaskedtokenindex)Hfulltorch。cat(〔Hunmasked,Hmasked〕,dim2)B,N,LP,dHself。decoder(Hfull)outputlayerifself。spectral:outputHspecfeatHself。outputlayer(H)realspecfeatH〔。。。,:int(self。patchsize21)〕imagspecfeatH〔。。。,int(self。patchsize21):〕specfeatHtorch。complex(real,imag)outfulltorch。fft。irfft(specfeatH)else:outfullself。outputlayer(H)preparelossB,N,,outfull。shapeoutmaskedtokensoutfull〔:,:,len(unmaskedtokenindex):,:〕outmaskedtokensoutmaskedtokens。view(B,N,1)。transpose(1,2)labelfullinput。permute(0,3,1,2)。unfold(1,self。patchsize,self。patchsize)〔:,:,:,self。seletedfeature,:〕。transpose(1,2)B,N,LP,Plabelmaskedtokenslabelfull〔:,:,maskedtokenindex,:〕。contiguous()labelmaskedtokenslabelmaskedtokens。view(B,N,1)。transpose(1,2)prepareplotnotethattheoutputfullandlabelfullarenotaligned。Theoutfullinshuffledtherefore,unshuffleforplotunshuffledindexunshuffle(unmaskedtokenindexmaskedtokenindex)outfullunshuffledoutfull〔:,:,unshuffledindex,:〕plotargs{}plotargs〔outfullunshuffled〕outfullunshuffledplotargs〔labelfull〕labelfullplotargs〔unmaskedtokenindex〕unmaskedtokenindexplotargs〔maskedtokenindex〕maskedtokenindexreturnoutmaskedtokens,labelmaskedtokens,plotargsdefforwardbackend(self,input):B,N,C,Linput。shapegetpatchesandexecinputembeddingpatchesself。patch(input)patchespatches。transpose(1,2)positionalembeddingpatchesself。pe(patches)encoderinputpatchesnomaskwhenrunningthebackend。encoderHself。encoder(encoderinput)returnHdefforward(self,inputdata):ifself。modePretrain:returnself。forwardpretrain(inputdata)else:returnself。forwardbackend(inputdata)
  看完这个论文,我发现这基本上可以说是复制了MAE,或者说是时间序列的MAE,在预测阶段也是与MAE类似,使用编码器的输出作为特征,为下游任务提供特征数据作为输入,有兴趣的可以读读原始论文并且看看论文给的代码。References
  〔1〕Makridakisetal。,TheM5Accuracycompetition:Results,findingsandconclusions,(2020)
  〔2〕D。Salinasetal。,DeepAR:Probabilisticforecastingwithautoregressiverecurrentnetworks,InternationalJournalofForecasting(2019)。
  〔3〕BorisN。etal。,NBEATS:NeuralBasisExpansionAnalysisForInterpretableTimeSeriesForecasting,ICLR(2020)
  〔4〕JakeGrigsbyetal。,LongRangeTransformersforDynamicSpatiotemporalForecasting,
  〔5〕BryanLimetal。,TemporalFusionTransformersforInterpretableMultihorizonTimeSeriesForecasting,InternationalJournalofForecastingSeptember2020
  〔6〕SeyedMehranKazemietal。,Time2Vec:LearningaVectorRepresentationofTime,July2019
  〔7〕PretrainingEnhancedSpatialtemporalGraphNeuralNetworkforMultivariateTimeSeriesForecasting
  〔8〕MaskedAutoencodersAreScalableVisionLearners

每日亲子时光(一)今天,跟孩子一起看了一会小猪佩奇动画片,画面中播放佩奇和弟弟乔治到外面的坭坑里跳来跳去,不小心摔跤把全身的衣服都弄脏了,回到家中时候把家里地板也走的脏兮兮的。猪爸爸看看两……第二季为巫师3狂猎玩家创造了另一个高峰Netflix发布的《巫师》系列第2季引发了人们对最后一款以Geralt为主角的游戏的兴趣,《巫师3:狂猎》的每日并发玩家人数飙升至超过71,000人。正如我当时报道的那样,2……艾顿公开声讨保罗和球队老板,篮网不要的人在太阳都能拿4300上赛季的篮网和太阳都是被外界认为是冠军球队的归属,虽然两队不是同分区,但是在球迷看来这两队也是老对手了。而今年休赛期两队都做了补强,在签约方面闹得最多的就是艾顿的续约问题。……4500家伙伴200万开发者,华为鲲鹏昇腾深耕行业数字化,全6月15日,在华为伙伴暨开发者大会2022上,华为公司副总裁、计算产品线总裁邓泰华表示,目前,鲲鹏、昇腾伙伴已经超过4500家,推出超过12000个行业解决方案,鲲鹏、昇腾开发……谨记五不熬,硬熬毁健康起居不熬夜饮食不熬谨记硬熬。1:起居不熬夜。谨记五不熬,硬熬毁健康。有些事情不能熬。长期睡眠不足会造成大脑受损促使早衰。2:饮食不熬顿:经常饥不进食导致营养缺乏症。……新疆到底多重要?战略位置不输东南沿海新疆地处中国的西部边陲,是中国和中亚、南亚、西亚的交汇地带,由于其独特的地理位置和丰富的资源,具有非常重要的战略地位。以下是几个方面的说明:地缘战略意义:新疆是中国的重要战略前……刚刚,这位华南理工毕业生被任命成为拼多多CEO4月4日,拼多多集团发布公告,经董事会批准,联合创始人赵佳臻将出任执行董事和联席CEO,与陈磊搭档,共同管理公司业务。据南方记者了解到,毕业于华南理工大学的赵佳臻是拼多多……打卡清迈6大自然风景地标你曾在芳花野树的原野中悠闲漫步,或在天高野阔的草地尽情奔跑吗?那种无忧无虑、清风柔人的感觉我想最难忘也最留恋,今天小编给大家推荐6个清迈自然地标,快马下这份攻略,周末带上你的家……建议中老年人常备2菜和3茶,富含天然叶酸,对身体好有人说:人生是一场单程票的旅程,从少年时的意气飞扬,到中年时的淡定从容,一生都在忙碌着。而到了老年后,就应该放下往日的操劳,好好享受当下的生活,以此来度过生命中最美好的时光。……攻防都被针对!辽媒怒喷王哲林太软啥也不是就在CBA废人厉害此役之后,王哲林估计要被喷上热搜了,这就是竞技体育残酷的地方,菜就是原罪。在男篮亚洲杯四分之一比赛中,中国男篮以黎巴嫩,此役王哲林他的表现让辽宁媒体人导演我躺那CBA怒不……中医经络督脉一、概述调节阳经气血的总督。二、循行督脉,起于小腹内,下行于会阴部,向后从尾骨端上行脊柱的内部,上达项后风府,进入脑内,上行至巅顶,沿前额下行鼻柱,止于上唇系……狂飙再次证明有脑子的黑帮大佬都不会去碰毒品生意春节期间火爆全网的大作《狂飙》落下帷幕,这部剧堪称最近几年继《人民的名义》之后的又一部精彩绝伦的扫黑大作。播出以来,热度横扫各大平台,与之相关的话题在春节期间几乎持续霸屏……
买电视有哪些避坑建议?一,不买假120HZ电视。今年新出品的一些机型,原生刷新率60HZ,在海报上写的是120HZ,但是实际上采用了DLG技术,以降低分辨率为代价,提升屏幕刷新率,但是海报上不……餐饮产业与新零售如何成功结合?李志刚:目前绝大多数餐饮店有两个这样的特点:1、非标;2、从业人员多为蓝领。如果未来新零售与餐饮结合,可能会出现这样的情况:餐饮变成一个个餐饮品牌,而零售会出现大型零售餐饮平台……卤水用什么调料煮鸡最好吃?谢邀回答。首先说一下这个最好吃的最,一看到这个字,我就莫名的心慌,压力大,这也许是我们餐饮人的通病。客人要求把最好吃的菜肴端上来,往往你认为的最好吃,不一定得到客人认可。同样别……茯苓让她睡了一个好觉,茯苓可以治疗失眠哦有一位粉丝,说自己最近总是心神不宁的,睡不好觉,建议她用五十克茯苓煎水喝,睡前服用。没想到当晚就睡了一个好觉,她说,很喜欢茯苓这种淡淡的味道。茯苓治疗失眠在《神农本草经》……茄子馅包子用不用杀水?分享正确做法,软烂咸香又爆汁,真好吃食一日三餐,品人间百味,我是熙函,感谢您打开这篇美食文章,如果您喜欢请点击关注,会有更精美的美食奉献给您!前几天回娘家,老妈给我摘了一大兜自家种的茄子带回了家,这兜茄子光……明星红毯来了!关晓彤被夸,杨颖又穿高定,肖战玫红西装很亮眼红毯造型翻车:赵丽颖礼服被骂,赵露思穿床单,吴谨言眉毛夸张引言。肖战说件开心的事情,11月29日晚,某平台在苏州太湖边某酒店举办了视界大会活动,粉丝们又有明星红毯看……喝红酒,为何不能直接咽下去?其实喝红酒时,有很多不为人知的细节,只是少有人知而已。今天小编就来给大家讲讲喝红酒的正确打开方式,一文揭开这些细节。开瓶前通常红酒是平放着储放,软木塞浸泡日久……耐用又好用的4款手机,性能续航拍照优秀,用到2027年没问题您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。在买手机的时候是选择一步到位还是一年一换好呢?如果您想要一步到位,想要手机能够多……懂酒的酒友们都在喝什么酱香酒,请推荐几款性价比高的?懂酒的朋友都在喝什么酱香酒,这个问题估计没有人能够回答上来哦,因为每个人的口感需求不一样,还有消费层次不一样,别人能给出的只是参考!懂酒或者是不懂酒的人,大部分都在喝大厂……阿胶糕网上卖几十块钱一斤,朋友圈卖几百块钱一斤,选哪个?要买,不看网上和价钱,最好是各种靠谱的考察之后,确认干净卫生正宗,才能买。不以价钱论英雄。其实阿胶的效果没有那么神奇,就当成一种食品,如果朋友圈没有那么熟,不是自己做的,……你吃过最好吃的小吃有哪些?为什么会觉得好吃呢?谢谢你的邀请,我吃过最好的小吃是南宁的一道小吃田螺鸭脚煲,很好吃,酸中有辣,辣而不燥,制别是里面的配菜腐竹,鸭脚,芋头,鹌鹑蛋经过沸腾的汤汁煮一下吃起来真的是爽口!感谢邀……美国前所未有的芯片制裁,可惜晚了全文共5800字,主要分为五大部分。(一)史无前例的科技霸凌,下手稳准狠(二)三十一家企业上清单,针对产业链(三)美国添油打法已五年,收效大盘点(四)曾……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网