熱門文章
工智能自動駕駛汽車中機(jī)器學(xué)習(xí)的深度壓縮與修剪
發(fā)布時間:2018-08-06 分類:交通百科
存儲數(shù)據(jù)時,您往往沒有無限的存儲空間,因此需要考慮如何減少數(shù)據(jù)量,但仍保持?jǐn)?shù)據(jù)所代表的含義。如果你過度刪除數(shù)據(jù),那么你可能會減少數(shù)據(jù)量,但同時你可能已經(jīng)拋棄了必要的方面而且損失是一件壞事。同樣,您可以嘗試保留數(shù)據(jù),不是修剪它而是壓縮它。壓縮是將事物壓縮在一起并且可以減少總空間量,但同時您需要考慮您是否可以輕松訪問數(shù)據(jù),因為它需要解壓縮才能將其恢復(fù)到可讀狀態(tài)。
有時候你只專注于修剪,有時候你只關(guān)注壓縮,有時候,同時進(jìn)行壓縮和修剪是很方便的。從計算機(jī)的角度來看,壓縮和修剪的操作可能是計算密集型的,因此您需要確定這樣做是否有效的投資回報。如果壓縮和修剪的努力是一次性的,那么結(jié)果就會一次又一次地使用,那么一次性預(yù)先壓縮和修剪的成本就更有可能是值得的。您可能會減少總體所需的存儲量,并且緊湊性可能會使數(shù)據(jù)更容易存儲,且存儲成本更低。
這和人工智能自動駕駛汽車有什么關(guān)系?
在控制論自動駕駛汽車研究所,我們正在使用機(jī)器學(xué)習(xí)的深度壓縮和修剪來使神經(jīng)網(wǎng)絡(luò)更緊湊,更便于在自動駕駛汽車中使用。
神經(jīng)網(wǎng)絡(luò)的修剪可以追溯到人工神經(jīng)網(wǎng)絡(luò)出現(xiàn)的早期。在20世紀(jì)90年代,許多研究試圖找到修剪神經(jīng)網(wǎng)絡(luò)的方法。最重要的思想是考慮所有可能的神經(jīng)網(wǎng)絡(luò)拓?fù)洌m用于手頭的問題,并從這些變體中選擇一個在最小的大小上具有相同輸出的變體。不幸的是,試圖通過所有的可能性去尋找“最好的”,通常是不可行的,因為大量的組合和排列,將需要審查。因此,有各種各樣的拇指修剪規(guī)則被開發(fā)出來,指導(dǎo)人們進(jìn)行不那么全面的修剪,同時也試圖找到一個更小的神經(jīng)網(wǎng)絡(luò),即使它不是最優(yōu)的最小的神經(jīng)網(wǎng)絡(luò)-它至少比它本來可能要小的多。
在發(fā)展神經(jīng)網(wǎng)絡(luò)時,有四個主要階段:
1、據(jù)需要設(shè)計神經(jīng)網(wǎng)絡(luò)。
2、神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,以找到合適的。
3、成正在使用的神經(jīng)網(wǎng)絡(luò)。
4、神經(jīng)網(wǎng)絡(luò)用于現(xiàn)實世界的行動。
在進(jìn)行設(shè)計的第一階段,開發(fā)人員需要考慮諸如有多少層、有多少個神經(jīng)元、有多少個突觸(連接)等方面。最外層通常用于接收輸入和提供輸出,因此主要用于外部性目的。神經(jīng)網(wǎng)絡(luò)中的其他層有時被稱為隱藏層,位于最外層之間。每一層中的神經(jīng)元與該層中的其他神經(jīng)元相互連接,也可以與其他層中的神經(jīng)元相互連接。每個神經(jīng)元可以有一些扇入連接和一些扇出連接。
對于一個給定的問題,你想要使用神經(jīng)網(wǎng)絡(luò),你需要考慮有多少層,多少神經(jīng)元,多少連接,等等。如果你去挑選一些任意大的大小野豬,你可能會發(fā)現(xiàn),訓(xùn)練的難度可以相當(dāng)高。如果你太保守,沒有足夠的規(guī)模,你將不太可能有成功的神經(jīng)網(wǎng)絡(luò),試圖匹配的問題,并達(dá)到預(yù)期的結(jié)果。
讓我們假設(shè)你正在設(shè)計一個神經(jīng)網(wǎng)絡(luò)來嘗試識別路標(biāo)。這個神經(jīng)網(wǎng)絡(luò)將是人工智能自動駕駛汽車系統(tǒng)的一部分。當(dāng)圖像呈現(xiàn)給神經(jīng)網(wǎng)絡(luò)時,您希望神經(jīng)網(wǎng)絡(luò)能夠準(zhǔn)確地找到路標(biāo)。自動駕駛汽車有攝像頭,可以拍照,并將照片發(fā)送到車載神經(jīng)網(wǎng)絡(luò)。然后,神經(jīng)網(wǎng)絡(luò)試圖確定前面是否有停車標(biāo)志,并提醒人工智能系統(tǒng)的其他部分,這樣自動駕駛汽車就會適當(dāng)?shù)赝O聛怼?
車載神經(jīng)網(wǎng)絡(luò)將消耗存儲空間和處理器時間,以完成對自動駕駛汽車攝像頭產(chǎn)生的圖像進(jìn)行分析的工作。自動駕駛汽車上的計算機(jī)需要足夠強(qiáng)大,能夠容納神經(jīng)網(wǎng)絡(luò),并且速度足夠快,以確保神經(jīng)網(wǎng)絡(luò)能夠及時地進(jìn)行匹配。如果攝像機(jī)提供了一個路標(biāo)的圖像,如果自動駕駛汽車正以較快的速度向前行駛,如果神經(jīng)網(wǎng)絡(luò)花了太長的時間來判斷該標(biāo)志是否是停車標(biāo)志,那么自動駕駛汽車的人工智能可能會直接穿過停車標(biāo)志,因為從神經(jīng)網(wǎng)絡(luò)獲得路標(biāo)分析結(jié)果的時間太晚了。
考慮到自動駕駛汽車需要數(shù)以噸計的神經(jīng)網(wǎng)絡(luò)來分析來自相機(jī)、激光雷達(dá)和聲納等設(shè)備的各種輸入,你就會開始意識到車載計算機(jī)的數(shù)量和它們的存儲需求是相當(dāng)令人望而生畏的。另外,還要考慮所有這些計算機(jī)的能量需求。你需要有一個巨大的電池或其他能源生產(chǎn)的自動駕駛汽車的元素,只是為所有的電腦所需的車載。
因此,總的來說,將神經(jīng)網(wǎng)絡(luò)的規(guī)模保持在盡可能小的范圍內(nèi)是至關(guān)重要的。但是,這必須以一種不過分限制它們的工作方式來完成。如果我們修剪和壓縮一個路標(biāo)神經(jīng)網(wǎng)絡(luò),使它很小,但如果它在識別路標(biāo)方面做得很差,假設(shè)它只能在某些時候找出一個停車標(biāo)志,那么我們將把自動駕駛汽車的其他部分和乘員置于更高的風(fēng)險中。
因此,開發(fā)人員在設(shè)計階段必須設(shè)法衡量他們認(rèn)為使用的大小是合理的。然后,在訓(xùn)練階段,他們對大樣本數(shù)據(jù)進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練,看看神經(jīng)網(wǎng)絡(luò)對數(shù)據(jù)的訓(xùn)練效果如何。你希望神經(jīng)網(wǎng)絡(luò)達(dá)到一種泛化的狀態(tài),這樣一旦投入使用,它就能很好地工作。如果神經(jīng)網(wǎng)絡(luò)與訓(xùn)練數(shù)據(jù)“相適應(yīng)”,這意味著神經(jīng)網(wǎng)絡(luò)在訓(xùn)練集上做得很好,但一旦投入使用,它就可能做得不好(因為過于專注于訓(xùn)練數(shù)據(jù))。
在神經(jīng)網(wǎng)絡(luò)得到充分的訓(xùn)練后,開發(fā)人員就會做一些最終的完成方面的工作,以準(zhǔn)備好在持續(xù)的基礎(chǔ)上使用神經(jīng)網(wǎng)絡(luò)。在某些情況下,神經(jīng)網(wǎng)絡(luò)將是稀疏的,例如有大量未使用的神經(jīng)元或未使用的連接,等等。大多數(shù)開發(fā)人員傾向于在達(dá)到這個完成階段時考慮修剪。他們可能沒有意識到,在設(shè)計階段,他們可能已經(jīng)在做修剪工作了,也就是說,也許他們最初在N+1大小時就可以建立一個N大小的神經(jīng)網(wǎng)絡(luò),而是選擇了N+1,換句話說,他們只是在開始時決定在進(jìn)入訓(xùn)練階段時大小會是多少。
這里的要點是,您可以在任何階段進(jìn)行修剪。在最初設(shè)計神經(jīng)網(wǎng)絡(luò)時,你基本上可以做修剪。一旦神經(jīng)網(wǎng)絡(luò)正在進(jìn)行訓(xùn)練,你可以做修剪,看看它如何影響訓(xùn)練。而且,一旦神經(jīng)網(wǎng)絡(luò)被訓(xùn)練,在完成階段,你可以做修剪。
修剪的類型包括:
1、少層數(shù)(這通常是最劃算的)。
2、減連接的數(shù)目。
3、少神經(jīng)元的數(shù)目。
4、掉加權(quán)數(shù)。
5、他方面。
如果你能以某種方式消除整個神經(jīng)網(wǎng)絡(luò)層,那么就減少神經(jīng)網(wǎng)絡(luò)的規(guī)模和復(fù)雜性而言,這往往是最大的回報。話雖如此,但減少整個層的可能性通常較小。另外,我不想誤導(dǎo)你,因為你可能有一個層,一開始是相當(dāng)少的,因此通過刪除該層的修剪量可能沒有你能夠修剪的連接或神經(jīng)元等的數(shù)量那么大的回報。每個神經(jīng)網(wǎng)絡(luò)都有它自己的形狀,因此修剪的收益取決于這個形狀。
在假設(shè)修剪很容易的時候,你也應(yīng)該小心。
你有沒有試過修剪一棵在你家周圍長滿了的樹或灌木?把它砍掉,你一開始就想。如果你這樣做,你會發(fā)現(xiàn)有時樹木或灌木會受到傷害,無法再長出來。修剪的方法有時是正確的,有時是錯誤的。神經(jīng)網(wǎng)絡(luò)也是如此。如果你用錯誤的方法修剪,你將開始失去擁有神經(jīng)網(wǎng)絡(luò)的意義。因此,在修剪過程中,您需要檢查神經(jīng)網(wǎng)絡(luò)對您所承擔(dān)的每個修剪操作的敏感性。
除了修剪,開發(fā)人員還應(yīng)該考慮如何可能壓縮神經(jīng)網(wǎng)絡(luò)。例如,如果查看用于神經(jīng)元的權(quán)重,有時會發(fā)現(xiàn)有些權(quán)重為零(在這種情況下,這些神經(jīng)元是可能修剪的候選),或接近于零(更多的候選修剪),或具有一個通常重復(fù)的值,您可能會對它們進(jìn)行壓縮。用于神經(jīng)網(wǎng)絡(luò)壓縮的最流行的壓縮技術(shù)之一是應(yīng)用Huffman編碼。從本質(zhì)上說,Huffman編碼技術(shù)采用頻繁出現(xiàn)的代碼,例如在神經(jīng)網(wǎng)絡(luò)中反復(fù)使用相同的權(quán)重,并生成一個大小更短的替代代碼,但仍然在需要時返回原始代碼(這稱為無損數(shù)據(jù)壓縮)。
在人工智能自動駕駛汽車的情況下,修剪和壓縮最有可能對一種被稱為卷積神經(jīng)網(wǎng)絡(luò)的神經(jīng)網(wǎng)絡(luò)有很大的回報,這是一種用于圖像分析和視覺模式匹配的神經(jīng)網(wǎng)絡(luò)。我們已經(jīng)在人工智能自動駕駛汽車的路標(biāo)分析神經(jīng)網(wǎng)絡(luò)和行人檢測神經(jīng)網(wǎng)絡(luò)上看到了這種良好的工作。
對于許多人工智能自動駕駛汽車開發(fā)人員來說,他們目前主要是在努力制造適用于人工智能自動駕駛汽車的神經(jīng)網(wǎng)絡(luò),而不太關(guān)心神經(jīng)網(wǎng)絡(luò)是否會占用大量的存儲空間或花費大量的處理時間。一旦他們的神經(jīng)網(wǎng)絡(luò)在現(xiàn)場工作,對這些開發(fā)人員來說,這將變得更加明顯,這是一個巨大的飛躍。