1. 程式人生 > >sp1.3-1.4 Neural Networks and Deep Learning

sp1.3-1.4 Neural Networks and Deep Learning

交叉熵定義了兩個概率分佈之間的距離,因為是概率分佈 所以又引入softmax變為概率的形式 相加還是1 3 shallow neural network   神經網路輸入層不算     上面是一個樣本 若是多個樣本: 依次算每個樣本的結果     左下角的矩陣 每一列代表一個樣本算出來的所有隱藏單元 z[][] 第幾層第幾個樣本的隱藏單元   啟用函式: tanh函式實際上是sigmoid函式平移的版本 這個效果更好 因為平均值是0 大部分情況都優於sigmoid 只在二元分類時候用下     先在幾乎不用sigmoid啟用           但是兩者都有一個缺點 當z非常大或者小時候 斜率特別小 接近0 最後效率很慢
左半邊導數是0 相當於 簡化神經網路了呀 右邊是常數的話 就是1 那麼不會梯度消失或爆炸                     relu函式第一常用雖然在0處不可導 但是在0點概率很小沒事 當z<0時候導數為0 雖然沒事 還有個版本的 leaky Relu修正線性單元 0.01也是自選的 第一,採用sigmoid等函式,反向傳播求誤差梯度時,求導計算量很大,而Relu求導非常容易。第二,對於深層網路,sigmoid函式反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0),從而無法完成深層網路的訓練。第三,Relu會使一部分神經元的輸出為0,這樣就造成了網路的稀疏性,並且減少了引數的相互依存關係,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。 從上圖不難看出,ReLU函式其實是分段線性函式,把所有的負值都變為0,而正值不變,這種操作被成為單側抑制。可別小看這個簡單的操作,正因為有了這單側抑制,才使得神經網路中的神經元也具有了稀疏啟用性。尤其體現在深度神經網路模型(如CNN)中,當模型增加N層之後,理論上ReLU神經元的啟用率將降低2的N次方倍。這裡或許有童鞋會問:ReLU的函式影象為什麼一定要長這樣?反過來,或者朝下延伸行不行?其實還不一定要長這樣。只要能起到單側抑制的作用,無論是鏡面翻轉還是180度翻轉,最終神經元的輸出也只是相當於加上了一個常數項係數,並不影響模型的訓練結果。之所以這樣定,或許是為了契合生物學角度,便於我們理解吧。 那麼問題來了:這種稀疏性有何作用?換句話說,我們為什麼需要讓神經元稀疏?不妨舉栗子來說明。當看名偵探柯南的時候,我們可以根據故事情節進行思考和推理,這時用到的是我們的大腦左半球;而當看蒙面唱將時,我們可以跟著歌手一起哼唱,這時用到的則是我們的右半球。左半球側重理性思維,而右半球側重感性思維。也就是說,當我們在進行運算或者欣賞時,都會有一部分神經元處於啟用或是抑制狀態,可以說是各司其職。再比如,生病了去醫院看病,檢查報告裡面上百項指標,但跟病情相關的通常只有那麼幾個。與之類似,當訓練一個深度分類模型的時候,和目標相關的特徵往往也就那麼幾個,因此通過ReLU實現稀疏後的模型能夠更好地挖掘相關特徵,擬合訓練資料。   此外,相比於其它啟用函式來說,ReLU有以下優勢:對於線性函式而言,ReLU的表達能力更強,尤其體現在深度網路中;而對於非線性函式而言,ReLU由於非負區間的梯度為常數,因此不存在梯度消失問題(Vanishing Gradient Problem),使得模型的收斂速度維持在一個穩定狀態。這裡稍微描述一下什麼是梯度消失問題:當梯度小於1時,預測值與真實值之間的誤差每傳播一層會衰減一次,如果在深層模型中使用sigmoid作為啟用函式,這種現象尤為明顯,將導致模型收斂停滯不前。   要是沒有啟用函式的話: 直接a1=z1 不啟用 然後進到a2 變成下面的式子了 還是線性變化 相當於邏輯迴歸了 隱藏層沒有任何作用 線性組合還是線性的 除非引入非線性函式
只在線性迴歸 y不是0或1而是實數時候不用啟用函式 機器學習上來預測房價那個 你得輸出也是實數不是0或1 但是隱藏單元還是用啟用函式 輸出不用 對sigmoid函式求導還是那個 當z很大或者很小時候 導數約為0 下降特別慢 =0斜率0.25   對於tanh函式求導:同樣還是很大很小斜率接近0 =0斜率是1   對於ReLU函式:在.處雖然不可導 但是取這點是小概率可以忽略   對於leaky ReLU:對於小於0時候 是自己定義的0.01
      為什麼使用啟用函式 不使用的話 線性變化 再做一個線性變化 還是線性的 表達能力沒區別 不管有多少個隱藏層 沒有任何效果 因為線性函式 組合還是線性函式啊 只有當解決迴歸問題似乎 可能不用啟用函式   反向傳播:         邏輯迴歸是一步 神經網路中間重複多次 反向傳播第一步和邏輯迴歸一樣吧 這裡dz2 da2 dw2       隨機化初始權重:要不隱藏層每列的單元都一樣了 因為用這同樣的式子   後面自定義的 但是不要太大 太大的話 z大 下降的慢       _________________________________________________ 4 deep neural network   L表示層數 N表示第幾層的單元總數 a第幾層的啟用單元 啟用函式過得   這裡有個for迴圈對於 每一層 不可避免的   檢查維度     為什麼深度神經網路有效: 特徵檢測器(邊緣檢測器) 找的比如是水平邊緣(較低層次的資訊) 什麼邊之類的 然後找小塊可能 最後可能就整體了   就像閘電路一樣 或者從淺入深理解問題,從邊緣到主體 可能一個神經元主要找鼻子一個找耳朵 等等 最後 再進一步組成臉部 或者像語音識別一樣, 第一層先找白噪音啊 音調啊 組合一起 然後找音節 組一起可能就是單詞   使用深層比淺層更有效的原因 如果你讓淺層的 足夠大 也有可能可以         右邊向量化的版本           Parameters vs Hyperparameters 引數和超引數 引數:就是w和b 超引數最終影響了w和b: 學習速率α,下降迴圈的次數,隱藏層數 每層的單元數,啟用函式的選擇等 現在很多時候還是憑經驗 比如學習速率多試幾次 看看代價函式的值怎麼樣