1. 程式人生 > 其它 >深度學習之資料處理方法綜述

深度學習之資料處理方法綜述

深度學習之資料處理方法綜述

一、資料對人工智慧的重要性

 

在實現以深度學習為主的人工智慧任務的過程中,有三大基本要素是缺一不可的,那就是算力、演算法、資料(點選檢視:實現人工智慧的三要素)。

 

其中算力的大小和硬體直接相關,比如GPU、DPU、NPU、TPU等等(點選檢視:CPU、GPU、DPU、TPU、NPU...傻傻分不清楚?實力掃盲——安排!)。

 

而演算法的優劣基本都是和網路模型結構、啟用函式、損失函式、優化函式等相關,工業界常用的演算法基本都是開源的,除非一些特殊任務需要專用的演算法來實現,其他大部分任務都是基於開源演算法而實現的。

 

在算力和演算法都基本已經確定的前提下,資料在實現一般的深度學習任務的過程中,可以說起到了決定性的作用,可以認為資料對深度學習任務最終效果的影響,其下限很低、上限很高,也就是說,如果資料質量有問題,可以讓一個好的模型變寶為廢,而如果資料的質量非常高的話,也可以使得一個平庸的演算法模型發揮出超常的效果。

 

近幾年,隨著硬體算力裝置和演算法模型逐漸在標準化、模組化發展的趨勢下,資料成為了最不可控的變數。從算力、演算法、資料三大基本要素來看,算力是最容易作為標準化來衡量的,而且通用性最高,可以在任何深度學習任務中都能夠使用,比如使用Tesla V100可以做一般的檢測分類任務、分割任務、生成任務,也可以做普通的語言模型任務、強化學習模型任務等。

 

其次是演算法,演算法雖然沒有像算力一樣有那麼高的標準化發展,但是常用的演算法模型也基本能夠解決大部分相似的任務,比如做檢測識別的YOLO系列、做影象分割的UNet系列、做影象生成的GAN系列、做語言生成模型的GPT系列等等,這些演算法模型不會隨著具體的任務資料變化而變化,比如對動物進行分類和對植物進行分類,都可以使用YOLO模型。

 

資料作為三者之中不容易用標準化的元素來說,其不可控的原因主要是由於不同的任務要使用不同的資料集,所以很難對資料做到真正的標準化和模組化,無法像演算法模型一樣直接對其呼叫。在學術界,真正通用的資料就那麼幾個,比如COCO資料集,VOC資料集,ImageNet資料集,都是用來發表論文時使用的,在工業界,大多數任務都是指定的資料,無法直接使用這類資料集的,最多也就是使用其資料作為預訓練的模型。比如很多知名的神經網路模型,像早期的ResNet,後來的Efficientnet,以及YOLO系列近期發出的最強的版本YOLOX,都是在COCO資料集上作比較。而工業界都是根據各自的任務來選取或者採集相關的資料的。

 

資料對於深度學習任務結果的影響,主要體現在資料的數量和質量,資料的數量比較容易理解,簡單來說就是加大資料量。而要把控資料的質量就比較複雜了,因為在整個資料的處理過程當中,每一個環節都有可能會對資料的質量造成影響,而資料上輕微的影響有可能會造成最終結果上的差距。連全球人工智慧著名學者吳恩達都說人工智慧=80%資料+20%演算法。

在人工智慧專案的研發過程中,基本上80%的工作量都花在了資料處理上。

 


 

二、何為資料處理

 

一般來說,資料處理(data processing)是對資料的採集、儲存、查詢、加工、變換和傳輸。根據處理裝置的結構方式、工作方式,以及資料的時間空間分佈方式的不同,資料處理有不同的方式。不同的處理方式要求不同的處理工具。每種處理方式都有自己的特點,應當根據應用問題的實際環境選擇合適的處理方式。

 

資料處理的基本目的是從大量的、可能是雜亂無章的、難以理解的資料中抽取並推匯出對於某些特定的人們來說是有價值、有意義的資料。

 

資料處理是系統工程和自動控制的基本環節。資料處理貫穿於社會生產和社會生活的各個領域。資料處理技術的發展及其應用的廣度和深度,極大地影響了人類社會發展的程序。

 

現實生活中很多原始資料都是雜亂的、非結構化的資料,無法直接拿來使用,需要按照使用要求對原始資料進行一定的處理,比如刪除無用資訊、對資料結構重新排列組合、對不同的資料指定對應標籤、增強或減弱某些資料的特徵,甚至從頭開始採集或生成一些需要的資料。

利用好非標註資料或者資料標註自動化是降低成本和時間的有效思路。

 

在以深度學習為主的人工智慧應用中,資料處理幾乎貫穿了模型的訓練和使用過程,在模型的訓練開始前,需要對原始資料進行一定的處理,一方面要去除原始資料中重複的資料和錯誤的資料,另一方面也要讓資料的形狀和型別能夠適應模型的輸入格式;

 

在訓練過程中,需要對模型每一層輸出的特徵資料都要進行標準化處理,讓其保持在一定的量綱範圍內,從而來保持模型良好的梯度和收斂性;

 

在模型使用的過程中,需要對輸入的資料進行預處理,比如對影象資料去噪、直方圖均衡化等操作(點選檢視:CV任務中如何解決影象光照度不均勻的問題),讓其噪聲能夠降得更低,光照色彩等更均勻,更好的適應模型的特徵預測。

 

有的時候,當原始資料不夠豐富的時候,還需要對原始資料進行增強處理,也就是換一種方式來增加資料的數量和多樣性,能夠讓模型學習更多的資料特徵,比如對資料隨機裁剪、偏移、縮放、旋轉、扭曲,以及光照色彩等方面的變化,甚至還會對影象增加一些噪聲、遮擋等操作,其目的都是為了增加資料的數量和多樣性。

 


 

三、資料處理流程

 

在以深度學習為主的人工智慧任務流程中,一開始要做的就是資料的處理,因為有了資料,網路模型才能夠訓練,資料處理的步驟主要有以下幾個環節:

 

01 資料採集

 

要做資料的採集,首先要明白什麼是資料。按照標準的解釋,資料(data)是事實或觀察的結果,是對客觀事物的邏輯歸納,是用於表示客觀事物的未經加工的原始素材。

 

資料可以是連續的值,比如聲音、影象,稱為模擬資料;也可以是離散的,如符號、文字,稱為數字資料。

 

在電腦科學中,資料是指所有能輸入計算機並被計算機程式處理的符號的介質的總稱,是用於輸入電子計算機進行處理,具有一定意義的數字、字母、符號和模擬量等的通稱。計算機儲存和處理的物件十分廣泛,表示這些物件的資料也隨之變得越來越複雜。

 

在深度學習中所使用的資料,其本身是存在於現實世界的,是雜亂的、隨機的、數量是無法確定的,因為現實世界中無時無刻都在產生各種不同的新資料。而我們要使用的資料一般是結構化的、有規律的、確定數量的資料,所以一般資料採集就是從現實世界的資料中進行取樣,這一過程就是完成從現實世界把資料轉移到我們當前任務環境中的過程,值得注意的是,在取樣過程中,要保證取樣的資料分佈規律和現實世界中的資料分佈規律一樣,因為只有這樣,取樣得到的資料在一定程度上才能能夠代替現實世界中的資料。

 

採集資料的終極目標是為了讓網路模型訓練資料,獲取資料中的特徵,能夠對具有同類目標的影象資料進行預測。所以實際要採集什麼樣的資料,要看所對應的任務是什麼,比如要解決的任務是貓狗分類,那麼採集的資料就是帶有貓和狗的影象資料,採集了帶有貓狗的影象資料後,就可以訓練模型,訓練結束後,該模型就具有了預測貓和狗的能力。

 

由於現實環境是變化的,所以採集資料要適應環境的變化,比如要採集不同季節中的戶外環境中的資料、同一天中不同時間點的資料,同一目標出現在不同地點的資料,總之要適應光照變化、顏色變化、對比度變化、幾何形狀變化、遮擋變化等因素。所採集資料的環境越豐富,說明採集到的資料越接近於現實環境,訓練出的模型對現實環境的資料模擬泛化效能也越好。

 

資料的採集方法有很多,其中主要的採集方法有人工收集、系統採集、網路爬取、虛擬模擬、對抗生成、開源資料等。

 

人工收集就是讓相關工作人員到實際的生產環境中去採集,比如拍攝影象視訊資料、擷取訊號資料等;系統採集是指某些專業的資料採集,其本身的主要功能就是在各種環境下采集並儲存上傳資料,這樣就可以避免人工採取了;網路爬取就是使用網路爬蟲工具爬取網路上的資料,一般來說網路上的資料噪聲較大,爬取後還需要人工檢查一遍;虛擬模擬是指在虛擬的工作環境中生成所需的資料,比如車牌生成器就是一個虛擬模擬工具;對抗生成是使用生成式對抗神經網路(GAN)來生成資料;開源資料一般是學術研究機構或者一些AI大企業收集後開放出來的資料,我們一般在學習期間所使用的一些資料基本都是開源資料,比如MNIST資料集、COCO資料集、VOC資料集等。

 

資料採集的操作相對來說也比較簡單,但是要遵循一個原則,那就是採集的資料樣本要能體現整體資料樣本的分佈規律,所以要科學取樣,防止資料不均衡。

 

02 資料標註

雖然前面說了採集資料的終極目標是訓練資料獲取特徵,但是在這之間還是相隔了很多步驟的,其中之一就是資料標註。為什麼要對資料進行標註呢?不標註的資料能不能參與訓練呢?這個答案不是一定的。

 

一般來說在監督學習中, 資料一定要被標註才能參與訓練,因為監督學習的定義是資料和標籤是一對一的,也就是說,有一張貓的圖片,那麼就要定義一個貓的標籤,告訴模型這是一隻貓。

 

而在半監督學習中,資料不必和標籤一一對應,資料中只要有部分標籤即可,其他無標籤的資料在學習過程中向以往學習到的資料特徵來靠近,特徵和以往學習到的資料的特徵接近的,被認為屬於同一標籤下的資料。這就好比人只認識一部分品種的狗,但是遇到以前沒有見過的狗種,也基本不會認錯,大概率還是會判斷這是一隻狗,而非貓。

 

在無監督學習下,一般來說,資料不需要標籤就可以直接參與訓練,但是在深度學習任務中,模型的學習都是依賴於損失函式來定義誤差,再通過誤差進行反向傳播梯度而更新引數的,所以損失函式的結果一般就是模型的輸出和標籤之間的誤差,那麼對無監督學習的損失該如何定義?

 

其實對於無監督學習方法,主要是說的沒有人為的特意去標註標籤,並不代表沒有天然的標籤,比如檢測和識別影象中的一隻狗,就需要人為的定義影象中狗的位置和類別,而在自編碼模型中,就不需要認為的定義任何標籤,因為模型學習的目標就是影象本身,而非影象中的目標位置和類別,比如生成數字的案例中,輸入是一張數字影象,最終模型輸出是經過一定方差擾動的數字影象,本質上還是數字本身,這就和一個人寫了兩個數字5一樣,都是5,但是字型形狀的細微程度不一樣。在這種自編碼模型中,損失函式的值就是模型的輸出影象和輸入影象。

 

資料標註的工作一般是藉助標註工具來完成的,其中影象視訊資料的標註工具又佔了大部分,常用的影象視訊標註工具有labelme、labelbox、labelimg、精靈標註助手等工具,值得一提的是精靈標註助手是一款非常強大的免費標註工具,標註型別涵蓋了影象資料、視訊資料、語音資料、文字資料、3D點雲資料,而且適應目前主流的作業系統。

 

資料標註的型別包括了影象資料標註、視訊資料標註、語音資料標註、文字資料標註、3D點雲資料標註。標註的方式有人工標註、半自動標註、自動標註、眾包等。具體選用哪種方式標註資料,要看資料量和資料的型別,有些通用資料是開源取樣自動標註方法的,比如使用訓練好的人臉檢測模型來標註人臉框的位置,而有些特殊資料只能使用人工標註的方法。

 

03 資料增樣

資料增樣一般也稱為資料增強,如果資料在取樣過程中就已經包括了各種複雜環境下的資料,那麼可以不用進行資料增強,但是現實情況是,我們大部分資料都是不夠完善的,也就是不足以表達真實環境中的資料分佈情況,這個時候重新採集資料又比較困難,於是就有了資料增強,所以資料增強的本質原因是由於原始資料無論是從數量還是質量上來說都不夠豐富。

 

值得說明的是,無論我們採集到的資料有多豐富,大部分模型在做了資料增強後,在最終的效果上還是有很大的提升的,這是因為資料增強的方法中經常會加入一些極端情況下的資料,而這種極端情況下的資料在現實環境中一般很難採集得到。但是也有一些小模型在做了擾動過大的資料增強後,在最終識別效果反而會下降,這一點在YOLOX中就有體現。這是因為小模型對於複雜資料處理的能力並不強,增加了資料的複雜度反而會擾亂模型原來的梯度策略,這就好比對於一個認知並不高的人講一些過於高深的理論,最終可能會讓其現有的認知崩塌。

 

資料增強方法一般分為光照變換、幾何變換、遮擋變換、混合變換等。

 

其中光照變換包括了隨機亮度變換、對比度變換、色彩度變換、飽和度變換、噪聲變換。

 

幾何變換包括了隨機縮放、裁剪、翻轉、旋轉、平移等變換。

 

遮擋變換包括了影象馬賽克、隨機圖塊刪除等。主要方法有以下幾種:Random erase

(隨機刪除,在圖上隨機遮擋某一部分的畫素)、Cutout(裁剪,按照一定的間隔遮擋N*N畫素大小的小格子,是具有規律的,一般是等距間隔的小格子,N一般取2或4很小的值,類似於給圖片加噪聲)、hide and seek(裁剪,按照更大的間隔遮擋N*N畫素大小的小格子,是具有規律的,一般是等距間隔的小格子,N一般取值更大一些)、Grid Mask

(網格掩碼,是有策略的遮擋,而非隨機遮擋,採用的方法是先把影象進行分成不同的格子,然後按照一定的方法去挑選遮擋某些格子。遮擋的效果取決於格子的大小和被遮擋的格子數量。類似於增加正樣本的權重)、Dropblock(對影象資料使用dropout,然後再將多個dropout之間連成塊,以此達到遮擋的目的)。

 

混合變換主要是指影象融合操作,一般是將兩張不同的影象融合成一張影象,以此來增加資料的多樣性。

 

 

也可以通過分割模型background matting來替換影象背景完成資料增樣的目的。

 

 

04 資料清洗

資料清洗,顧名思義,就是清洗掉無用的噪聲資料,留下有效的資料。那麼我們的主要工作就是如何區分噪聲資料和有效資料,在資料世界中,有一個常識必須要搞清楚,那就是無論任何資料,都包括了有效資料和噪聲資料,只是有的資料中的有效資料多,有的資料中的噪聲資料多。

 

所以要明白真實資料≠理想資料,理想資料=有效資料,而真實資料=有效資料+噪聲資料,噪聲資料就是影響最終結果的冗餘資料,資料清洗的目的就是清洗掉這部分資料。

 

資料清洗方法主要有資料去噪、脫敏、缺失處理、查重、刪除錯誤資料等。

 

其中刪除錯誤資料可以通過程式碼工具來實現,也可以人工實現,無論是資料本身選擇錯誤,還是標籤標註錯誤,都可以通過工具或人工的方法刪除錯誤資料,或者重新標註。一般來說,如果被清洗的資料本身是比較常見的資料,比如人臉資料或者常見物體資料,可以使用現有的成熟模型直接預測判斷刪選,如果是不常見的資料,就需要人工刪選資料了。

 

資料查重是指資料集中存在著同一條資料,比如同一張影象,同一條文字、語音等。對於資料的查重,其方法相對來說比較簡單,最簡單的方法就是統計一下每條資料的均值方差,如果有均值方差相同的資料,就認為是同一條資料,可以直接刪除。

 

資料的缺失處理是指在某些缺失的資料中補全缺失的部分,一般對於缺失資料的補全,可以使用插值的方法來補全,具體插值方法有臨近插值、中值插值、均值插值、眾數插值、最大最小值插值等,具體方法根據實際任務而定,除了插值方法來補全資料,還可以通過生成模型來生成新的資料來補全資料,比如對於影象缺失部分的補全,使用生成模型也是比較好的選擇。除了插值補全方法,還有最小二乘法補全方法,這是基於最小二乘法的原理,補全資料,使補全後的資料整體的離差平方和最小,這一般是方差分析中處理缺失值的一般方法。也有基於REML的方法估計,REML混線性模型本身可以處理非平衡資料,它也可以作為估計缺失值的一種,它估計出來的缺失值比最小二乘法要準確,應用比較廣泛。

 

資料脫敏是指將原資料中對模型訓練無用的某些敏感的資訊去除,從而能夠安全的讓訓練人員的使用資料,比如醫療資料中的患者的資訊就屬於敏感資訊,而這部分敏感資訊又對模型的訓練沒有任何幫助,就可以去除這部分資料資訊,從而讓更多的人能夠使用資料。

 

資料去噪是資料清洗過程中最複雜的一項,其主要因素就是如何定義噪聲,也就是如何區分模型真正需要資料資訊和其他冗餘資訊。一般來說,廣義上的資料去噪就是資料清洗,對於錯誤資料、缺失資料、重複資料等都可以看作是噪聲資料。我們這裡所說的資料去噪是狹義的概念,也就是真正的資料噪點,比如高斯噪聲、椒鹽噪聲等,對於這類資料的噪聲,一般是平滑濾波去除掉噪聲部分,一般噪聲部分的梯度要高於其他部分的梯度,去除了噪聲,在模型的預測過程中,會讓預測精度又更高的提升。

 

一般在深度學習任務中,在模型訓練階段,我們對於一些非常乾淨的資料,經常通過增加噪聲的方法來增強資料的多樣性,這是因為在模型實際的使用過程中,我們獲取的真實資料不會太過於理想化,也就是不可能太過於乾淨,經常會包括各種噪聲,所以在模型訓練期間增加噪聲是為了讓模型的泛化效能更好,在模型預測使用期間,對輸入資料去噪是為了讓真實資料的噪聲更小,從而讓模型能更好的擬合數據。

 

05 資料標準化

資料標準化就是統一資料的量綱,讓不同維度的資料都能夠適應某一規則的約束。比如在預測某一地區的房價的時候,模型輸入的資料是房子的面積和房子的房間數量,輸出是對房子預測的價格。我們會發現輸入的房子面積範圍可選擇性很大,基本從10㎡到1000㎡都可以,而房子的房間數量範圍一般不會太大,比如是1-20間左右。

 

如果我們直接把這些資料輸入模型會發現,面積的資料取值範圍過大,而房間數量的資料取值範圍太小,到最後模型學習到關於房間個數的權重要比房子面積的權重更大,會讓模型優先擬合房間個數的特徵,而實際上我們在訓練模型的時候對這兩者之間並沒有分配各自的權重比例,也就是二者應該是同等的。

 

這個時候我們就需要將面積資料和房間數量的資料統一在同一量綱下,這個量綱大家可以理解為衡量物體的單位,但並不是所有量綱都是基本有單位的,比如上例子中的㎡、間數就是基本單位,而表示速度的m/s就不是基本單位,是有m和s兩個基本單位組成的組合單位或者叫匯出單位。

 

資料標準化後,不僅能夠更好統一表達各種不同量綱下的資料,還能消除奇異資料,減小資料中的離群點對模型訓練的影響;也能讓模型的收斂更加穩定。

 

 

資料標準化不只是發生在資料出入網路模型之前,更多的是在網路模型中對資料進行標準化操作。一般來說在資料輸入網路模型之前,對資料進行標準化處理是為了統一原始資料的量綱,減小異常資料對於模型訓練的影響,更好的獲取資料中有效的特徵。

 

在網路模型訓練過程中,對網路層中的特徵資料進行標準化是為了防止模型在訓練過程中出現梯度爆炸、梯度彌散等情況的發生,也能在一定程度上防止模型的過擬合。在訓練過程中做了資料標準化後還會加快模型的訓練速度。

 

神經網路學習過程的本質就是為了學習資料分佈,如果我們沒有做歸一化處理,那麼每一批次訓練資料的分佈不一樣,從大的方向上看,神經網路則需要在這多個分佈中找到平衡點,從小的方向上看,由於每層網路輸入資料分佈在不斷變化,這也會導致每層網路在找平衡點,顯然,神經網路就很難收斂了。

 

如果我們只是對輸入的資料進行歸一化處理(比如將輸入的影象除以255,將其歸到0到1之間),只能保證輸入層資料分佈是一樣的,並不能保證每層網路輸入資料分佈是一樣的,所以也需要在神經網路的中間層加入歸一化處理。

 

根據損失函式(out-y)² 來看,如果想要損失下降的更快,最好將輸出和標籤資料處理到一定範圍內會更好。所以,這樣就形成了資料從輸入之前要做標準化,以及網路中間層做標準化,一直到輸出時根據標籤限制輸出範圍。就形成了一個完整的標準化流程。輸出的標準化範圍應該和標籤的標準化範圍一致。

 

在資料的標準化方法中,常用的有Batch Norm、Layer Norm、Instance Norm、Group Norm

 

除此以外還有不太常用的Switchable Normalization、Filter Response Normalization

 

 

關於各種資料標準化的具體過程不再贅述,後期我們會發布專門針對資料標準化處理的文章,來詳細介紹各種資料標準化的過程細節。

 


 

四、資料的劃分

 

按照深度學習任務的專案流程,我們一般會將資料劃分為訓練階段使用的訓練集、驗證階段的驗證集、測試階段的測試集。

 

一般在拿到處理過的資料後,會對資料進行切分,按照模型訓練和使用的流程,我們一般會按照訓練集、驗證集、測試集的需求將資料分割為6:2:2到8:1:1之間的比例,根據具體需求也會有其他比例的分割,各類資料之間是沒有交集的,分割的目的是為了更好利用資料,讓模型能夠學習到更多的資料特徵,同時又能驗證模型的效能,測試模型在實際環境中使用情況。

 

訓練集一般是需要經過模型反向傳播演算法更新梯度來學習資料特徵的,而驗證集只需要經過前向模型輸出結果即可,目的就是驗證訓練的結果是否達標,而測試集就是就是在模型經過驗證合格後再進行的最後測試。這就好比我們平時上課學習知識就是在訓練我們自己,而課後作業和階段測試就相當於驗證平時學習的成果,期末考試就是最終測試一樣,需要拿出最後的結果。

 

如果參與訓練的資料本來就少,可以採用交叉驗證的方法。交叉驗證,顧名思義就是把訓練資料和驗證資料交叉使用,從而來提高資料的利用率。比如將資料切割成10份,讓模型訓練十次,第一次訓練時先拿出前9份參與訓練,第10份用來驗證,獲得一個驗證分數;第二次訓練拿出前8份和第10份來參與訓練,第9份用來驗證,獲得第二個驗證分數,以此類推,在訓練集和驗證集資料不重合的前提下,所有資料都能參與訓練和驗證,從而獲取10次驗證的分數,最後將獲取的10次驗證分數做平均,拿到最終的驗證分數,這樣在利用小資料的情況下也能做到比較精準的驗證分數。

 

後記:資料處理在實現人工智慧的過程當中越來越重要,一個好的AI應用,除了硬體的優勢和演算法的優勢之外,剩下的就是看資料對於AI模型應用的影響了,無論是比賽專案,還是發表論文,亦或者是實際工程專案,將資料的優勢發揮到最大,都將是最終角逐的挑戰之一。隨著人工智慧的發展,資料的處理也將從人工處理逐步發展到半自動處理,甚至完全由AI自動處理的過程,但是在短期內,對於資料的處理還都是將由人工來完成的。

 

本文內容由深度人工智慧公眾號原創提供,轉載或摘錄請聯絡作者註明來源!

 

深度人工智慧是成都深度智谷科技旗下的教育資訊平臺,我們會為人工智慧學習者呈現最實用的乾貨技能,也會為人工智慧從業者考取人工智慧相關的證書提供報考服務,有意者可以聯絡我們。

中國人工智慧學會部分證書樣本:

 

 

工信部人工智慧證書樣本:

 

 


文中所使用的部分圖片來自網路素材,如果有侵權,請第一時間聯絡我們刪除!

 

 

 

 

 

 

 

轉自:https://www.toutiao.com/group/7075219975090225664/

###################