成人av在线资源一区,亚洲av日韩av一区,欧美丰满熟妇乱XXXXX图片,狠狠做五月深爱婷婷伊人,桔子av一区二区三区,四虎国产精品永久在线网址,国产尤物精品人妻在线,中文字幕av一区二区三区欲色
    您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
    此為臨時鏈接,僅用于文章預覽,將在時失效
    人工智能 正文
    發私信給MrBear
    發送

    0

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

    本文作者: MrBear 編輯:楊曉凡 2018-06-17 20:40
    導語:工欲善其事,必先利其器。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/),直接找到和你的產品解決的問題相似的模型。重要的是盡可能快的開始迭代,這樣你就可以盡早并且經常地讓真實用戶來測試你的模型。你總是可以,而且可能看到更好的實驗結果,但首先你得保證數據沒有問題。深度學習仍然遵循「無用輸入得到無用輸出」(garbage in,garbage out)的基本計算法則,所以即使是最好的模型的性能也會受到你的訓練數據中的缺陷的限制。通過選擇一個模型并且對其進行測試,你就能夠理解這些這些缺陷是什么,并開始改進它們。

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

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

    在建立學術研究模型和工業生產模型之間最大的區別在于,學術研究通常在一開始就定義了一個明確的問題的聲明,但實際用用的需求則存在于用戶的腦海中,并且只能隨著時間的推移慢慢變得清晰明了。例如,對于 Jetpac 來說,我們希望找到好的圖片,將其展示在城市的自助旅行指南中。

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

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

    我發現唯一能夠判斷你所問的問題是否正確的方法就是模擬一個你的應用程序,而不是建立一個有人類參與決策的機器學習模型。由于有人類在背后參與決策,這種方法優勢被稱為「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 科技評論編譯

    雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知

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

    分享:
    相關文章

    知情人士

    當月熱門文章
    最新文章
    請填寫申請人資料
    姓名
    電話
    郵箱
    微信號
    作品鏈接
    個人簡介
    為了您的賬戶安全,請驗證郵箱
    您的郵箱還未驗證,完成可獲20積分喲!
    請驗證您的郵箱
    立即驗證
    完善賬號信息
    您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
    立即設置 以后再說