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