自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用開(kāi)源工具生成合成時(shí)間序列數(shù)據(jù)

譯文
開(kāi)源
本文介紹了生成式對(duì)抗網(wǎng)絡(luò)(GAN)模型DoppelGANger以及如何使用其新的開(kāi)源PyTorch實(shí)現(xiàn)來(lái)創(chuàng)建高質(zhì)量的合成時(shí)間序列數(shù)據(jù)。

?譯者 | 布加迪

審校 | 孫淑娟

引言

時(shí)間序列數(shù)據(jù)是跨多個(gè)時(shí)間點(diǎn)測(cè)量相同變量的一系列數(shù)據(jù),在現(xiàn)代數(shù)據(jù)環(huán)境中無(wú)處不在。與表格數(shù)據(jù)一樣,我們常常希望生成合成時(shí)間序列數(shù)據(jù),以保護(hù)敏感信息,或在真實(shí)數(shù)據(jù)稀少時(shí)創(chuàng)建更多的訓(xùn)練數(shù)據(jù)。合成時(shí)間序列數(shù)據(jù)的一些應(yīng)用包括:傳感器讀數(shù)、帶時(shí)間戳的日志消息、金融市場(chǎng)價(jià)格和醫(yī)療記錄。時(shí)間這個(gè)額外的維度(跨時(shí)間點(diǎn)的趨勢(shì)和相關(guān)性與變量之間的相關(guān)性同樣重要)給合成數(shù)據(jù)帶來(lái)了另外的挑戰(zhàn)。

我們Gretel之前發(fā)布了關(guān)于合成時(shí)間序列數(shù)據(jù)的博文,但一直在尋找可以改進(jìn)合成數(shù)據(jù)生成的新模型。我們非常喜歡DoppelGANger模型和Lin等人合著的相關(guān)論文:??《使用GAN共享網(wǎng)絡(luò)時(shí)間序列數(shù)據(jù):挑戰(zhàn)、前景和未決問(wèn)題》??,正在將該模型整合到我們的API和控制臺(tái)中。作為這項(xiàng)工作的一部分,我們用PyTorch重新實(shí)現(xiàn)了DoppelGANger模型,很高興將其作為我們開(kāi)源??gretel-synthetics庫(kù)??的一部分來(lái)發(fā)布。

本文概述了DoppelGANger模型,提供了PyTorch實(shí)現(xiàn)的示例用法,并針對(duì)合成每日維基百科網(wǎng)絡(luò)流量的任務(wù)演示了出色的合成數(shù)據(jù)質(zhì)量:與TensorFlow1實(shí)現(xiàn)相比,運(yùn)行時(shí)速度提升了約40倍。

DoppIGANger模型

DoppelGANger基于生成式對(duì)抗網(wǎng)絡(luò)(GAN),經(jīng)過(guò)一番改動(dòng),更好地適應(yīng)時(shí)間序列生成任務(wù)。作為GAN,該模型使用對(duì)抗訓(xùn)練方案,通過(guò)比較合成數(shù)據(jù)和真實(shí)數(shù)據(jù)來(lái)同時(shí)優(yōu)化鑒別器和生成器網(wǎng)絡(luò)。一旦經(jīng)過(guò)訓(xùn)練,可以將輸入噪音傳遞給生成器網(wǎng)絡(luò),以此創(chuàng)建任意數(shù)量的合成時(shí)間序列數(shù)據(jù)。

Lin等人在論文中介紹了現(xiàn)有的合成時(shí)間序列方法及自己的觀察結(jié)果,以確定局限性,并提出幾處具體的改進(jìn)——DoppelGANger由此而來(lái),包括一般的GAN改進(jìn)和專門針對(duì)時(shí)間序列的技巧。下面列出了其中幾處關(guān)鍵修改:

  • 生成器含有用于生成序列數(shù)據(jù)的LSTM,但有批量設(shè)置,其中每個(gè)LSTM單元輸出多個(gè)時(shí)間點(diǎn),以改善時(shí)間相關(guān)性。
  • 訓(xùn)練和生成時(shí)都支持可變長(zhǎng)度序列(計(jì)劃中,但尚未在我們的PyTorch版本中實(shí)現(xiàn))。比如說(shuō),一個(gè)模型可以使用和創(chuàng)建10秒或15秒的傳感器測(cè)量值。
  • 支持不隨時(shí)間變化的固定變量(屬性)。該信息常常與時(shí)間序列數(shù)據(jù)一同出現(xiàn),比如金融價(jià)格歷史數(shù)據(jù)中與每只股票相關(guān)的行業(yè)或部門。
  • 支持按示例縮放連續(xù)變量以處理動(dòng)態(tài)范圍大的數(shù)據(jù)。比如說(shuō),流行的維基百科頁(yè)面與罕見(jiàn)的維基百科頁(yè)面的頁(yè)面瀏覽量相差幾個(gè)數(shù)量級(jí)。
  • 使用帶梯度懲罰的Wasserstein損失,減少模式崩塌并改善訓(xùn)練。

捎帶提一下術(shù)語(yǔ)和數(shù)據(jù)設(shè)置。DoppelGANger需要有多個(gè)時(shí)間序列示例的訓(xùn)練數(shù)據(jù)。每個(gè)示例由0個(gè)或多個(gè)屬性值、不隨時(shí)間變化的固定變量以及在每個(gè)時(shí)間點(diǎn)觀察的1個(gè)或多個(gè)特征組成。組合成一個(gè)訓(xùn)練數(shù)據(jù)集時(shí),這些示例看起來(lái)像2d屬性數(shù)組(示例x固定變量)和3d特征數(shù)組(示例x時(shí)間x時(shí)間變量)。視任務(wù)和可用數(shù)據(jù)而定,該設(shè)置可能需要將幾個(gè)較長(zhǎng)的時(shí)間序列拆分成較短的塊,這些塊可用作訓(xùn)練的示例。

總地來(lái)說(shuō),對(duì)基本GAN所作的這些修改提供了一個(gè)富有表現(xiàn)力的時(shí)間序列模型,可以生成高保真合成數(shù)據(jù)。DoppelGANger能夠?qū)W習(xí)和生成具有不同尺度的時(shí)間相關(guān)性數(shù)據(jù)(比如每周和每年趨勢(shì)),給我們留下了特別深刻的印象。想了解模型的完整詳細(xì)信息,請(qǐng)閱讀??論文??。

示例用法

我們的PyTorch實(shí)現(xiàn)支持兩種輸入樣式(numpy數(shù)組或pandas DataFrame)以及模型的許多配置選項(xiàng)。想了解完整的參考文檔,請(qǐng)參閱https://synthetics.docs.gretel.ai/。

要使用我們的模型,最簡(jiǎn)單的方法是使用pandas DataFrame中的訓(xùn)練數(shù)據(jù)。針對(duì)該設(shè)置,數(shù)據(jù)必須采用“寬”格式,其中每一行是示例,一些列是屬性,剩余的列是時(shí)間序列值。下列代碼片段演示了訓(xùn)練和生成來(lái)自DataFrame的數(shù)據(jù)。

# Create some random training data

df = pd.DataFrame(np.random.random(size=(1000,30)))

df.columns = pd.date_range("2022-01-01", periods=30)

# Include an attribute column

df["attribute"] = np.random.randint(0, 3, size=1000)
# Train the model

model = DGAN(DGANConfig(

max_sequence_len=30,

sample_len=3,

batch_size=1000,

epochs=10, # For real data sets, 100-1000 epochs is typical

))
model.train_dataframe(

df,

df_attribute_columns=["attribute"],

attribute_types=[OutputType.DISCRETE],

)
# Generate synthetic data

synthetic_df = model.generate_dataframe(100)

如果您的數(shù)據(jù)尚未采用這種“寬”格式,可以使用pandas pivot方法將其轉(zhuǎn)換成預(yù)期的結(jié)構(gòu)。DataFrame輸入目前有些受到限制,但我們計(jì)劃在未來(lái)支持接受時(shí)間序列數(shù)據(jù)的其他方式。為了獲得最大的控制度和靈活性,您還可以直接傳遞numpy數(shù)組進(jìn)行訓(xùn)練(并在生成數(shù)據(jù)時(shí)以相似的方式接收屬性和特征數(shù)組),如下所示。

# Create some random training data

attributes = np.random.randint(0, 3, size=(1000,3))

features = np.random.random(size=(1000,20,2))
# Train the model

model = DGAN(DGANConfig(

max_sequence_len=20,

sample_len=4,

batch_size=1000,

epochs=10, # For real data sets, 100-1000 epochs is typical

))
model.train_numpy(

attributes, features,

attribute_types = [OutputType.DISCRETE] * 3,

feature_types = [OutputType.CONTINUOUS] * 2

)
# Generate synthetic data

synthetic_attributes, synthetic_features = model.generate_numpy(1000)

這些代碼片段的可運(yùn)行版本可在??sample_usage.ipynb??處獲得。

結(jié)果

作為從TensorFlow 1改為PyTorch的新實(shí)現(xiàn)(優(yōu)化器、參數(shù)初始化等底層組件方面存在潛在差異),我們希望確認(rèn)我們的PyTorch代碼按預(yù)期運(yùn)行。為此,我們復(fù)制了原始論文中的部分結(jié)果。由于我們目前的實(shí)現(xiàn)僅支持固定長(zhǎng)度序列,因此專注于維基百科網(wǎng)絡(luò)流量(WWT)的數(shù)據(jù)集。

Lin等人使用的WWT數(shù)據(jù)集最初來(lái)自Kaggle,含有測(cè)量各種維基百科頁(yè)面的每日流量數(shù)據(jù)。每個(gè)頁(yè)面有三個(gè)不同的屬性(域、訪問(wèn)類型和代理)。圖1顯示了來(lái)自WWT數(shù)據(jù)集的幾個(gè)示例時(shí)間序列。

圖1:三個(gè)維基百科頁(yè)面的縮放的每日頁(yè)面瀏覽量,右側(cè)列出了頁(yè)面屬性

請(qǐng)注意,頁(yè)面瀏覽量根據(jù)整個(gè)數(shù)據(jù)集上的最小/最大頁(yè)面瀏覽量被對(duì)數(shù)軸縮放為[-1,1]。我們?cè)趯?shí)驗(yàn)中使用的5萬(wàn)頁(yè)的訓(xùn)練數(shù)據(jù)(已被縮放)在??S3上以csv格式提供??。

我們展示的三張圖顯示了合成數(shù)據(jù)保真度的不同方面。在每張圖中,我們將真實(shí)數(shù)據(jù)與三個(gè)合成版本進(jìn)行比較:1)具有更大批量和更小學(xué)習(xí)率的快速PyTorch實(shí)現(xiàn),2)具有原始參數(shù)的PyTorch實(shí)現(xiàn),3)TensorFlow 1實(shí)現(xiàn)。在圖2中,我們查看了屬性分布,其中合成數(shù)據(jù)與真實(shí)分布非常匹配。

圖2:真實(shí)和合成WWT數(shù)據(jù)的屬性分布

WWT數(shù)據(jù)面臨的挑戰(zhàn)之一是,不同的時(shí)間序列有全然不同的頁(yè)面瀏覽量范圍。一些維基百科頁(yè)面持續(xù)獲得很大流量,另一些不那么受歡迎,但偶爾因某個(gè)相關(guān)的新聞事件(比如與頁(yè)面相關(guān)的突發(fā)新聞故事)而出現(xiàn)流量高峰。Lin等人發(fā)現(xiàn),DoppelGANger在生成不同尺度的時(shí)間序列方面非常有效(見(jiàn)原始論文的圖6)。在圖3中,我們提供了顯示時(shí)間序列中點(diǎn)分布的類似圖。就每個(gè)示例而言,中點(diǎn)處于550天內(nèi)獲得的最小和最大頁(yè)面瀏覽量的中間值。我們的PyTorch實(shí)現(xiàn)對(duì)中點(diǎn)顯示了類似的保真度。

圖3:真實(shí)和合成WWT數(shù)據(jù)的時(shí)間序列中點(diǎn)分布

最后,大多數(shù)維基百科頁(yè)面的流量呈現(xiàn)出每周和每年的模式。為了評(píng)估這些模式,我們使用自相關(guān),即不同時(shí)間滯后(1天、2天等)的頁(yè)面瀏覽量的Pearson相關(guān)性。三個(gè)合成版本的自相關(guān)圖如圖4所示(類似原始論文中的圖 1)。

圖4:真實(shí)和合成 WWT 數(shù)據(jù)的自相關(guān)

兩個(gè)PyTorch版本都生成原始論文中觀察到的每周和每年趨勢(shì)。TensorFlow 1結(jié)果與 Lin等人的圖1不匹配,正如來(lái)自我們實(shí)驗(yàn)的上述圖所示。我們觀察到使用原始參數(shù)進(jìn)行的訓(xùn)練有些不一致,模型偶爾沒(méi)有觀察到每年(甚至每周)模式。我們的快速版本中使用的較低學(xué)習(xí)率(1e-4)和較大的批量大?。?000)使再訓(xùn)練更加一致。

生成本節(jié)中的圖像和訓(xùn)練三個(gè)模型的分析代碼在??Github??上作為筆記本予以共享。

運(yùn)行時(shí)

最后更復(fù)雜模型的一個(gè)關(guān)鍵方面是運(yùn)行時(shí)。需要數(shù)周時(shí)間來(lái)訓(xùn)練的出色模型實(shí)際上比需要一小時(shí)來(lái)訓(xùn)練的模型更受限制。在這里,相比之下PyTorch實(shí)現(xiàn)表現(xiàn)極好(不過(guò)作者在論文中指出,他們沒(méi)有對(duì)TensorFlow 1代碼進(jìn)行性能優(yōu)化)。所有模型均使用GPU進(jìn)行訓(xùn)練,并在搭載英偉達(dá)Tesla T4的GCP n1-standard-8實(shí)例(8個(gè)虛擬 CPU和30 GB RAM)上運(yùn)行。從13小時(shí)縮短到0.3小時(shí),這對(duì)于這個(gè)出色的模型在實(shí)踐中發(fā)揮更大的用處至關(guān)重要!

版本

訓(xùn)練時(shí)間

TensorFlow 1

12.9小時(shí)

PyTorch,batch_size=100(原始參數(shù))

1.6 小時(shí)

PyTorch,batch_size-1000

0.3小時(shí)

原文標(biāo)題:??Generate Synthetic Time-series Data with Open-source Tools???,作者:Kendrick Boyd?

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2023-01-28 16:13:08

InfluxData開(kāi)源

2023-02-23 07:46:48

學(xué)習(xí)模型數(shù)據(jù)倉(cāng)庫(kù)

2025-01-13 07:23:14

PythonAeon開(kāi)發(fā)

2024-05-08 14:05:03

時(shí)間序列數(shù)據(jù)

2022-03-22 09:00:00

數(shù)據(jù)庫(kù)SingleStor技術(shù)

2025-04-15 09:08:51

系統(tǒng)數(shù)據(jù)模型

2021-01-06 08:14:21

時(shí)間序列數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)

2023-03-29 07:02:46

開(kāi)源項(xiàng)目工具

2022-11-14 07:52:14

時(shí)間序列數(shù)據(jù)庫(kù)CPU

2018-10-29 11:33:29

2023-04-18 18:22:31

開(kāi)源工具數(shù)據(jù)庫(kù)

2025-01-14 13:32:47

2024-07-18 13:13:58

2020-01-15 16:00:16

Linuxseq命令數(shù)字序列

2023-11-10 16:04:46

遞歸圖Python

2015-09-28 14:54:08

Java函數(shù)式編程

2018-11-06 20:30:23

Python開(kāi)源工具機(jī)器學(xué)習(xí)

2012-09-13 09:52:14

大數(shù)據(jù)數(shù)據(jù)應(yīng)用開(kāi)源工具

2019-04-08 17:16:43

大數(shù)據(jù)開(kāi)源工具

2023-02-16 17:44:13

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)