1. 程式人生 > >個人對MobileNet V2的理解

個人對MobileNet V2的理解

我不準備具體描述MobileNet V2的結構。我只想在論文中尋找一些更加本質的東西,關於普通卷積分解、feature map線性組合以及啟用函式的,更加本質的東西。

首先,引入一個概念,layer activation。指的其實就是是卷積層的輸出。

我們知道layer activation是有冗餘資訊的,也就意味著其中所包含的有用資訊具有潛在的稀疏性。如果把layer activation看成一個N維空間,這些有用資訊就是整個N維空間中的一個manifold,而且manifold的維度小於N。舉個例子,三位空間中的一塊二維平面,此時的二維平面就是三維空間中的一個manifold。

上述闡述是神經網路稀疏性的基礎,我們依據上面的結論對神經網路進行壓縮,改進,比如MobileNet V1,還有ResNet中的瓶頸模型,瓶頸模型將高維的輸入空間壓縮到低維,進行3X3卷積後再線性組合到高維。

那麼考慮一個問題,在理想狀況下,N維的layer activation被一組1X1卷積核壓縮到了M維,而有用資訊組成的manifold的維度也是M維,而且理想地,所有的有用資訊都被保留了下來,並且佔據了M維空間中所有的維度。那麼此時,對M維空間進行一個Relu,會發生什麼?空間被砍掉了一半,在所有的維度上。可想而知,這有很大的可能性會帶來有用資訊的丟失,怎麼才能不丟失資訊?用線性啟用。

只用線性啟用肯定是不行的,只用線性啟用的神經網路等於一個線性變換——不管深度有多深結構有複雜。我們知道,非線性啟用如果用在沒有冗餘的activation上會損失資訊,所以自然地,將非線性啟用用在有冗餘的activation上,將線性啟用用在沒有冗餘的activation上。這樣既兼顧了非線性,也避免了資訊的丟失。

怎麼組織這個網路呢?最粗暴的方法是用一個巨大的模型來確保資訊存在冗餘,這顯然是不可行的。另一個方法是交替冗餘和非冗餘layer,既能控制模型尺寸,也能確保足夠的非線性。這就帶來一個問題,我們把殘差用在哪?最好的選擇是用在非冗餘層,因為殘差對視訊記憶體的佔用非常巨大,而且冗餘和非冗餘layer所攜帶的有用資訊是一樣多的。那麼,自然而然地,答案出來了——MobileNet V2。