改進模型架構遇到了瓶頸?你該考慮改善自己的數據了!

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

工欲善其事,必先利其器。garbage in,garbage out!

AI 科技評論按:這篇博客來自 Jetpac(現被谷歌收購) CTO、蘋果畢業生、TensorFlow 團隊成員 Pete Warden。文中討論了一個很容易被機器學習領域的研究人員們忽略的問題:你是否真的清楚數據對模型表現有多大影響,同時你又有沒有付出適當的精力在改善你的數據上呢?已經為生產環境開發過模型的研究人員相信已經對這件事足夠重視,不過也不妨重溫一下其中的重要思路。

原文標題「Why you need to improve your training data, and how to do it」, AI 科技評論全文編譯如下。

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

Andrej Karpathy(char-rnn 作者,https://twitter.com/karpathy)在「Train AI」(https://www.figure-eight.com/train-ai/)會議上演講的時候放了這張幻燈片,我非常喜歡它!他的幻燈片完美地抓住了深度學習研究和工業生產之間的差異(讀博的時候大多數熬夜都是在調模型,但在企業裡大多數熬夜是在處理數據)。學術論文的關注點幾乎都在具有創新性、性能有所提升的模型上,而它們使用的數據集往往都是一小部分的公開數據集。然而,據我所知,在實際應用中使用深度學習技術的人往往會花大量的時間分析考慮他們的訓練數據。

研究人員如此關注模型架構的理由有很多,但這也意味著。為了解決這個問題,我在 Train AI 大會上的演講題目為「訓練數據無法解釋的有效性」,並且在這篇博文中,我想對這個題目進行進一步的拓展,解釋為什麼數據如此重要,介紹一些改進數據的實用技巧。

作為我工作的一部分,我與許多研究人員和產品團隊進行了密切的合作。當我看到他們專注於模型構建過程中的數據改進工作,並且由此取得了大量的成果,我對於數據改進的威力便深信不疑。在大多數應用中,使用深度學習技術的最大阻礙是在現實世界中獲得足夠高的準確率,而改進訓練數據集是我所見到的最快的能夠提升準確率的途徑。即使你受限於延遲、存儲空間等因素,在特定的模型上提升準確率也可以讓你能夠通過使用較小的模型架構在這些性能指標上進行折衷。

語音控制

在這裡,我不能公開分享我對於工業生產系統的觀察,但是我為大家提供了一個開源的示例來演示相同的模式。去年,我創建了一個TensorFlow 環境下的「簡單語音識別示例」(https://www.tensorflow.org/tutorials/audio_recognition)。結果表明,並沒有現有的數據集可以被很容易地用於訓練模型。在大量的志願者的慷慨的幫助下,通過使用 AIY 團隊協助我開發的「開放式語音記錄網站」(https://aiyprojects.withgoogle.com/open_speech_recording),我收集到了 60,000 條一秒長的人類說短單詞的音頻片段。由此得到的模型是可用的,但是仍然沒有達到我想要的準確度。為了看看這種情況在多大程度上是由於我自己作為一個模型設計者存在的不足,我使用相同的數據集舉辦了一個Kaggle 競賽(https://www.kaggle.com/c/tensorflow-speech-recognition-challenge/)。參賽者的模型性能比我的簡單模型要好得多,但儘管有許多不同的方法,多支隊伍的準確率都止步於 91% 左右。這告訴我數據中存在著本質上錯誤的問題。而實際上參賽者們也發現了很多錯誤,比如不正確的標籤或被截斷的音頻。這促使我開始動手發佈一個修復了參賽者發現的問題的新數據集,並且提供更多的樣本。

我查看了一下錯誤度量結果,從而瞭解該模型對於哪些詞語存在的問題最多。結果顯示,「其它」類別(語音能夠被識別,但是相應單詞在模型有限的詞彙表中無法找到)尤其容易出錯。為了解決這個問題,我加大了我們捕獲的不同單詞的數量,從而為訓練數據提供更大的多樣性。

因為 Kaggle 參賽者報告了標註錯誤的問題,我眾包了一個額外的驗證過程,要求人們聽每一個音頻片段,並確保它與預期的標籤相匹配。由於參賽者在Kaggle 競賽中還發現了一些幾乎無聲或者被截斷了的音頻文件,我還編寫了一個實用程序來進行一些簡單的音頻分析(https://github.com/petewarden/extract_loudest_section),並且自動刪除質量特別差的樣本。最終,得益於更多的志願者和一些有償眾包接包者的努力,儘管刪除了質量不佳的文件,我將語音樣本的數量增大到了超過 100,000 份的規模。

為了幫助他人使用該數據集(並且從我的錯誤中吸取教訓!)我將所有有關的內容和更新後的準確率的結果寫到了一篇論文中(https://arxiv.org/abs/1804.03209)中。最重要的結論是,在完全不改變模型結構或測試數據的情況下,首位準確率提高了超過 4 個百分點,從 85.4% 提高到了 89.7%。這是一個顯著的提升,並且當人們在安卓或樹莓派上嘗試應用 demo 時,結果也令人滿意得多。儘管我知道我現在使用的並非最先進的模型,但是我堅信如果我把時間都花在模型架構的調整上,我將無法取得如此大的提升。

在生產環境中,我看到這種處理方法一次又一次地產生了很好的的結果,但如果你想做同樣的事情,卻可能無從下手。你可以從我在語音數據上使用的技術中得到一些啟發,但是接下來,我將向你介紹一些我認為非常實用的方法。

首先,觀察你的數據

這似乎是顯而易見的,但你首先應該做的便是隨機地瀏覽你將要開始使用的訓練數據。你需要將文件複製到本地機器上,然後花幾個小時預覽它們。如果你要處理圖像,你可以使用 MacOS 的 finder 這樣的工具來滾動瀏覽縮略視圖,這樣就能很快地查看數以千計的圖片;對於音頻文件來說,則可以使用 finder 播放預覽;或者對於文本文件來說,將隨機片段轉存到你的終端中。我並沒有花費足夠的時間對第一版語音控制系統進行上述操作,而這也正是為什麼一旦 Kaggle 競賽的參賽者開始處理數據就發現瞭如此之多的問題。

我一直覺得這個處理過程有點傻,但是做完後我從未後悔過。每當我完成這些數據處理工作,我都會發現一些對數據至關重要的東西,無論是不同種類樣本數量的失衡、損壞的數據(例如將 PNG 文件的擴展名標註為 JPG 文件)、錯誤的標籤,或者僅僅是令人感到驚訝的數據組合。通過仔細的檢查,Tom White 在 ImageNet 中取得了許多有趣的發現。例如:

標籤「sunglass」(太陽鏡),實際上指的是一種古代的用於放大太陽光線的裝置(下圖)

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

而 ImageNet 中的「sunglass」和「sunglasses」(太陽眼鏡)高度混淆(左側圖像類別被標註為「sunglass」、右側類別為「sunglasses」,攤手)

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

標籤為「garbage truck」(垃圾車)的分類中,有一張美女的照片

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

標籤為「cloak」(斗篷)的圖像似乎對不死女有偏見

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

除此之外,Andrej 手動地對 ImageNet 中的圖片進行分類的工作(http://karpathy.github.io/2014/09/02/what-i-learned-from-competing-against-a-convnet-on-imagenet/)也教會了我很多關於這個數據集的知識,包括如何分辨出所有不同的狗的種類,甚至是對一個人來說。

你將採取什麼樣的行動取決於你發現了什麼,但是在做其它任何的數據清理工作之前,你總是需要做這種檢查,因為對於數據集中內容直觀的瞭解可以幫助你在接下來的步驟中做出正確的決策。

快速地選擇一個模型

不要花太長的時間去選擇恰當的模型。如果你要做圖像分類,請查看 AutoML(https://cloud.google.com/automl/),否則可以看看 TensorFlow 的模型倉庫(https://github.com/tensorflow/models/)或者 Fast.AI 收集的樣例(http://www.fast.ai/),直接找到和你的產品解決的問題相似的模型。重要的是儘可能快的開始迭代,這樣你就可以儘早並且經常地讓真實用戶來測試你的模型。你總是可以,而且可能看到更好的實驗結果,但首先你得保證數據沒有問題。深度學習仍然遵循「無用輸入得到無用輸出」的基本計算法則,所以即使是最好的模型的性能也會受到你的訓練數據中的缺陷的限制。通過選擇一個模型並且對其進行測試,你就能夠理解這些這些缺陷是什麼,並開始改進它們。

為了進一步加快你的模型的迭代速度,你可以試著從一個已經在大規模的現有的數據集上預訓練好的模型開始,通過遷移學習使用你收集到的(可能小的多的)數據集對它進行調優。這通常會比僅僅在你較小的數據集上進行訓練得到的結果好得多,因此你可以快速地對如何調整你的數據收集策略有一個清晰的認識。最重要的是,你可以根據你可與你在你的數據收集過程中考慮結果中的反饋,從而在學習的過程中進行調整,而不是僅僅在訓練之前將數據收集所謂一個單獨的階段運行。

在自己做模型之前先仿造它

這是一個極端的例子,但是它說明標註過程在很大程度上取決於應用的需求。對於大多數生產中的用力來說,找出模型需要回答的正確的問題需要花費很長一段時間,而這對於正確地解決問題是十分關鍵的。如果你正在用你的模型回答錯誤的問題,你講永遠無法在這個糟糕的基礎上建立一個良好的用戶體驗。

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

我發現唯一能夠判斷你所問的問題是否正確的方法就是模擬一個你的應用程序,而不是建立一個有人類參與決策的機器學習模型。由於有人類在背後參與決策,這種方法優勢被稱為「Wizard-of-Oz-ing」。而對於 Jetpac 來說,我們讓使用者手動地從一些旅遊指南樣例中選擇圖片,而不是訓練一個模型,然後從測試用戶的反饋來調整我們用於選擇圖片的標準。一旦我們能夠可靠地從訓練中獲得正反饋,我們就可以將我們設計的圖片選擇規則遷移到一個標註指南中,從而獲得數以百萬計的圖片作為訓練集。接著,這些數據被用來訓練出能夠預測數十億圖片的標籤的模型,但它的 DNA(核心思想)來自我們設計的原始的手動選擇圖片的規則。

使用真實數據進行訓練

在上述的 Jetpac 的例子中,我們用於訓練模型的圖像和我們希望將模型應用到的圖片的來源相同(大部分來自 Facebook 和 Instagram),但是我發現的一個常見問題是,訓練數據集與模型使用的輸入數據的一些關鍵性的差異最終會體現在生產結果中。

舉例而言,我經常會看到一些團隊試圖在無人機或機器人上使用 ImageNet 數據訓練出的模型時遇到問題。之所以會出現這種情況是因為 ImageNet 中的數據大多為人為拍攝的照片,而這些照片存在著很多共同的特性。這些圖片是用手機或靜態照相機拍攝的,它們使用中性鏡頭,拍攝的高度大約與頭部平行,在日光或人造光線下拍攝,需要標記的物體位於圖片中央並位於前景中。而機器人和無人機使用視頻攝像機,通常採用擁有大視場角的鏡頭,其拍攝的位置不是在地面上就是在高空中,通常拍攝的光線都比較差,並且由於沒有智能化地對圖像進行定位的機制,通常只能對圖片進行裁剪。這些差異意味著,如果你只是利用 ImageNet 中的圖片訓練模型並將其部署到上述的某臺設備上,那麼你將得到較低的準確率。

你所使用的訓練數據和模型最終的輸入數據還可能有一些細微的差異。不妨想象你正在建造一個能識別野生動物的相機,並且使用來自世界各地的動物數據集來訓練它。如果你只打算將它部署在婆羅洲的叢林中,那麼圖片應該被標註為企鵝的概率會極其的低。而如果訓練數據中包含南極的照片,那麼模型將會有很有可能將其他動物誤認為企鵝,模型整體的準確率會低於不使用這部分訓練數據時的準確率。

有很多方法可以讓你根據已知的先驗知識(例如,在叢林中,大幅度降低圖片被標註為企鵝的概率)來校準你的結果,但使用能夠反映產品真實場景的訓練集會更加有效。我發現最好的方法就是始終使用直接從實際應用程序中獲取的數據,這與我上面提到的 Wizard of Oz 方法能很好地結合在一起。也就是說,在訓練過程中使用人做出決策可以改為對你的初始數據集進行標註,即使收集到的標籤數量非常少,它們也可以反映真實的使用情況,並且也應該能夠滿足進行遷移學習的初步的實驗的基本要求。

遵循度量指標

當我研究語音控制系統的例子時,我最常看到的報告之一就是訓練期間的混淆矩陣。下面是一個在控制檯中顯示的例子:

[[258 0 0 0 0 0 0 0 0 0 0 0]

[ 7 6 26 94 7 49 1 15 40 2 0 11]

[ 10 1 107 80 13 22 0 13 10 1 0 4]

[ 1 3 16 163 6 48 0 5 10 1 0 17]

[ 15 1 17 114 55 13 0 9 22 5 0 9]

[ 1 1 6 97 3 87 1 12 46 0 0 10]

[ 8 6 86 84 13 24 1 9 9 1 0 6]

[ 9 3 32 112 9 26 1 36 19 0 0 9]

[ 8 2 12 94 9 52 0 6 72 0 0 2]

[ 16 1 39 74 29 42 0 6 37 9 0 3]

[ 15 6 17 71 50 37 0 6 32 2 1 9]

[ 11 1 6 151 5 42 0 8 16 0 0 20]]

這可能看起來有點讓人摸不著頭腦,但實際上它只是一個顯示網絡錯誤分類的細節的表格。下面為大家展示一個更加美觀的版本:

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

表中的每一行代表一組與實際標籤相同的樣本,每列顯示預測出的標籤結果的數量。例如,高亮顯示的行表示所有實際上是無聲的音頻樣本,如果你從左至右閱讀則一行,可以看到標籤預測的結果是完全正確的,因為每個預測標籤都落在將樣本預測為無聲音頻的列中。這告訴我們,該模型非常善於正確識別真正的無聲音頻樣本,不存在誤判。如果我們從一整列的角度來看這個表格,第一列顯示有多少音頻片段被預測為無聲樣本,我們可以看到一些實際上是單詞的音頻片段被誤認為是無聲的,顯然這其中有大量的誤判。這樣的結果對我們來說非常有用,因為它讓我更加仔細地觀察那些被錯誤地歸類為是無聲樣本的音頻片段,而這些片段中又很多都是在相當安靜的環境下錄音的。這幫助我通過刪除音量較低的音頻片段來提高數據的質量,而如果沒有混淆矩陣的線索,我將不知道該如何處理它。

幾乎所有對預測結果的總結都可能是有用的,但是我認為混淆矩陣是一個很好的折衷方案,它提供的信息比僅僅給出準確率的數字更多,同時也不會包含太多細節,讓我無法處理。在訓練過程中,觀察數字的變化也很有用,因為它可以告訴你模型正在努力學習什麼類別,並可以讓你知道在清理和擴展數據集時需要注意哪些領域。

物以類聚

我最喜歡的一種理解我的網絡如何解讀訓練數據的方式是可視化聚類。TensorBoard 為這種探索方法提供了很好的支持,雖然它經常被用於查看詞嵌入,但我發現它幾乎適用於任何像嵌入技術一樣工作的的網絡層。例如,圖像分類網絡在最後的全連接或softmax 單元之前通常具有可以被用做嵌入表示的倒數第二層(這也正是像「TensorFlow for Poets」(https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0)這樣的簡單的遷移學習示例的工作原理)。這些並不是嚴格意義上的嵌入,因為我們並沒有在訓練過程中設法確保在真正的嵌入中具有你所希望得到的理想的空間屬性,但對它們的向量進行聚類確實會得到一些有趣的結果。

舉一個實際的例子,之前一個和我一同工作的團隊在他們的圖像分類模型中困惑於對某些動物的高錯誤率。他們使用可視化聚類技術來觀察他們的訓練數據是如何分佈到不同類別中去的,當他們看到「美洲豹」時,他們清晰地看到發現數據被分成兩個彼此之間存在一定距離的不同的組

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

上圖即為它們所看到的聚類結果。一旦將每個聚類的圖片展示出來,我們可以很明顯地看到有很多「捷豹」牌汽車被錯誤地標註為美洲豹。一旦他們知道了這一問題,他們就能夠檢查標註過程,並且意識到工作人員的指導和用戶界面是令人困惑的。有了這些信息,他們就能夠改進(人類)標註者的訓練過程並修復工具中存在的問題,將所有汽車圖像從美洲豹的類別中刪除,使得模型在該類別上取得更高的分類準確率。

通過讓你深入瞭解你的訓練集中的內容,聚類提供了與僅僅觀察數據相同的好處,但網絡實際上是通過根據自己的學習理解將輸入分組來指導您的探索。作為人類,我們非常善於從視覺上發現異常情況,所以將我們的直覺和計算機處理大量輸入的能力相結合為追蹤數據集質量問題提供了一個高可擴展的解決方案。關於如何使用 TensorBoard 來完成這樣的工作的完整教程超出了本文的範圍,不多贅述。但如果你真的想要提高模型性能,我強烈建議你熟悉這個工具。

持續收集數據

我從來沒有見過收集更多的數據而不能提高模型準確性的情況,結果表明,有很多研究都支持我的這一經驗。

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

該圖來自「谷歌證明數據為王,初創公司們被潑上了一盆冰水」,展示了即使訓練集的規模增長到包含數以億計的樣本,圖像分類的模型準確率也在不斷提高。Facebook 最近進行了更深入的探索,它們使用數十億帶標籤的 Instagram 圖像在 ImageNet 圖像分類任務上獲得了新的準確率最高的記錄(「發美照時打上 #,還能幫Facebook提升圖片識別率喲」)。這表明,即使對擁有大規模、高質量數據集的任務來說,增加訓練集的大小仍然可以提高模型的性能。

這意味著,只要有任何用戶可以從更高的模型準確率中受益,你就需要一個可以持續改進數據集的策略。如果可以的話,你可以尋找具有創造性的方法來利用甚至是十分微弱的信號來獲取更大的數據集。Facebook 使用 Instagram 標籤就是一個很好的例子。另一種方法是提高標註過程的智能化程度,例如通過將模型的初始版本的標籤預測結果提供給標註人員,以便他們可以做出更快的決策。這種方法的風險是可能在早期引入一些偏差,但實際上我們所獲得的好處往往超過這種風險。聘請更多的人標註新的訓練數據來解決這個問題,通常也是一項划算的投資行為,但是對於那些對這類支出沒有預算的傳統的組織來說,這可能十分困難。如果你運營的是非營利性組織,讓你的支持者通過某種公共工具更方便地自願提供數據,這可能是在不增加開支的情況下加大數據集規模的好方法。

當然,對於任何組織來說,最優的解決方案都是應該有一種產品,它可以在使用時自然地生成更多的帶標籤數據。儘管我不會過於關注這個想法,因為它在很多真實的用例中都不適用,畢竟人們只是想盡快得到答案,而不希望參與到複雜的標註過程中來。如果你經營一家初創公司,這是一個很好的投資項目,因為它就像是一個改進模型的永動機,但在清理或增強你所擁有的數據時難免會涉及到一些單位成本。所以經濟學家最終經常會選擇一種比真正免費的方案看起來更加便宜一點的商業眾包版本。

潛在的風險

模型錯誤對應用程序用戶造成的影響幾乎總是大於損失函數可以捕獲的影響。你應該提前考慮可能的最壞的結果,並嘗試設計一個模型的底線以避免它們發生。這可能只是一個因為誤報的成本太高而不想讓模型去預測的類別的黑名單,或者你可能有一套簡單的算法規則,以確保所採取的行動不會超過某些已經設定好的邊界參數。例如,你可能會維護一個你不希望文本生成器輸出的髒話詞表,即便它們確實存在於訓練集中。因為它們出現在你的產品中是很不恰當的。

究竟會得到怎樣不好的結果在事先並不總是那麼明顯,所以從現實世界中的錯誤中吸取教訓是至關重要的。要做的好一點,最簡單的方法之一就是在一旦你有一個半成品的時候,就使用錯誤報告。當人們使用你的應用程序時,如果她們得到了它們不想要的結果,他們就可以很容易地告訴你。如果可能的話,你需要獲得完整的模型輸入,但當它們是敏感數據時,僅僅知道什麼是不好的輸出是什麼同樣有助於指導你的調查。這些類別可被用於選擇收集更多數據的來源,以及您應該去了解其哪些類別的當前標籤質量。一旦對模型進行了新的調整,除了正常的測試集之外,還應該對之前產生不良結果的輸入進行單獨的測試。考慮到單個指標永遠無法完全捕捉到人們關心的所有內容,這個錯例圖片庫類似於迴歸測試,並且為您提供了一種可以用來跟蹤你改善用戶體驗的方法。通過觀察過去引發強烈反應的一小部分例子,你已經得到了一些獨立的證據來表明你實際上正在為你的用戶提供更好的服務。如果因為數據過於敏感而無法獲取模型的輸入數據,可以使用內部測試或內部實驗來確定哪些輸入會產生這些錯誤,然後替換回歸數據集中的那些輸入。

這只是曇花一現嗎?

我希望我已經設法說服你在數據的準備和處理上花費更多時間,並且向你提供了一些關於如何改進它的想法。目前這個領域還沒有得到應有的重視,我甚至覺得我在這篇文章中所講的也都只是皮毛,所以我感謝每一個與我分享他們的研究策略的人,我希望未來我能聽到更多的關於你們已經成功應用的方法的消息。我認為會有越來越多的組織建立工程師團隊致力於數據集的改進,而不是僅僅讓機器學習研究人員來推動這個領域的研究。我期待看到整個領域能夠得益於此而取得進展。我常常驚訝於模型即使在具有嚴重缺陷的數據集上也能很好地工作,所以我迫不及待地想看看,隨著我們對於數據的改進,我們能夠做些什麼!

via petewarden.com,AI 科技評論編譯

改进模型架构遇到了瓶颈?你该考虑改善自己的数据了!

CCF - GAIR 2018 將於

6 月 29 日 至 7 月 1 日

在深圳舉行。

三天議程及強大陣容已經陸續出爐。

6 月 8 日,

AI 科技評論啟動了

CCF-GAIR 2018 的免費門票申請通道,

並計劃從中篩選 20 位學生,

承包「國內往返機票+四晚住宿」

AI 科技評論讀者專屬福利。

福利發出後,

表單如海水一樣湧入後臺系統,

截至 6 月 14 日晚 24 點,

第一批申請表單已經截止申請,

同事們最近也都在加班加點審核表單。

在此,

AI 科技評論由衷感謝

同學們對 CCF-GAIR 大會的關注!

從眾多申請之中,

AI 科技評論甄選了 12 名學生,

他們將成為第一批獲得

價值 3999 元 CCF-GAIR 2018 大會門票

「國內往返機票+四晚住宿」福利的同學!

AI 科技評論將第一批獲獎學生名單

及所屬院校公佈如下(共 12 位):

新加坡南洋理工大學 張徵豪

斯坦福大學 孫林

清華大學 孔濤

賓夕法尼亞大學 王倪劍橋

北京航空航天大學 黃雷

澳大利亞國立大學 劉瀚陽

中國科學院 王昌淼

香港科技大學 李正

上海交通大學 徐衍鈺

華中科技大學 李柏依

香港理工大學 曹自強

香港中文大學 楊巍

在此向以上同學表示祝賀,

運營小姐姐將很快聯繫你們喲~

並備註姓名及院校。

但是!

我們的福利申請並沒有結束!

從 6 月 15 日 0 時開始,

AI 科技評論將開啟第二批福利申請通道,

將繼續篩選 8 名同學贈送價值 3999 元 CCF-GAIR 2018 大會門票

及「國內往返機票+四晚住宿」福利!

本福利申請截至 6 月 21 日晚 24 點,

預計將於 6 月 22 日公佈獲獎名單。

填寫個人信息申請!

與此同時,

暫時沒有入選第一批名單的同學們也不需要灰心,

我們也會在所有提交申請的同學中,

篩選部分學生

陸續進行一對一聯繫,

贈送價值 3999 元的 CCF-GAIR 大會門票。

(此門票包含三天午餐喲!)

贈票申請通道截止日期為

6 月 26 日晚 24:00

6 月 29 日至 7 月 1 日,深圳見!

贈票申請須知

➤ 截止日期:6 月 26 日晚 24:00

➤ 活動解釋權歸雷鋒網 AI 科技評論所有


分享到:


相關文章: