神經網絡術語大百科:優化函數、激活函數、損失函數、正則方法的簡介

簡述關於神經網絡的各種優化函數(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)、各種激活函數(Sigmoid,Tanh、Hard Sigmoid、Softplus、ReLU、ElU、PReLU、RReLU)、各種損失函數以及正則方法的簡述,並附帶代碼實現例子。 優化函數先上兩張圖激活函數沒有激活函數,神經元就只是一個線性函數,那麼無論多少層的神經元疊加是沒有意義的。而主流激活函數也隨著神經網絡、深度學習的發展迭代進化了許多次代。 Sigmoid Sigmoid是S形狀的意思,又因為它是邏輯回歸的激活函數又叫logistic函數,函數式為$值域位於0-1,那麼對於邏輯回歸,這是對於二分類的一個很自然的表達,也就是概率處處連續可導不過呢,我們觀察它的形狀,可以得出,Sigmoid函數在兩端(靠近0和1的部分)梯度很小,這也意味著,如果神經元的輸出落到了這個地方,那麼它幾乎沒什麼梯度可以傳到後面,而隨著神經網絡的層層削弱,後面的層(靠近輸入的層)沒有多少梯度能傳過來,幾乎就“學不到什麼”了。這叫做梯度消失問題,一度是阻礙神經網絡往更深的層進化的主要困難,導致深度學習專家們絞盡腦汁想了許多方法來對抗這個問題,比如“Xavier and He Initialization”,比如我們要把weight隨機初始化為如下的範圍, sigmoid的另一個問題是它不是0均值的,Sigmoid函數的輸出值恆大於0,這會導致模型訓練的收斂速度變慢。舉例來講,對,如果所有均為正數或負數,那麼其對的導數總是正數或負數,這會導致如下圖紅色箭頭所示的階梯式更新,這顯然並非一個好的優化路徑。深度學習往往需要大量時間來處理大量數據,模型的收斂速度是尤為重要的。所以,總體上來講,訓練深度學習網絡盡量使用zero-centered數據(可以經過數據預處理實現) 和zero-centered輸出。如今,sigmoid函數應用最廣泛的在於其變種softmax在多元分類中,比如手寫數字識別,經過卷積神經網絡的處理,最後我們需要網絡輸出每個預測的概率值,最後預測為某一個數字,這裡就需要用到softmax,以下是softmax的Keras代碼,注意其中一個trick, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…

0 Comments

理解TSNE算法

結合t-SNE 是一種數據可視化工具,它可以將高維數據降維到2-3維以用於畫圖,局部相似性被這種embedding所保留。 t-SNE把原空間的數據點之間的距離轉換為高斯分佈概率,如果兩點在高維空間距離越近,那麼這個概率值越大。注意到高斯分佈的這個標準差$sigma_i$ 對每個點都是不同的,這也是算法的創新點之一,因為理論上空間不同位置的點的密度是不同的,條件概率如此計算, $$p_{j|i} = frac{exp{(-d(boldsymbol{x}_i, boldsymbol{x} 圖中公式是理論方式,實際是先計算條件概率再用下面公式來產生聯合分佈, $$p_{ij} = frac{p_{j|i} + p_{i|j}}{2N}.$$其中$sigma_i$ 將自動確定。這個過程可以通過設置算法的困惑性來影響。用一個長尾分佈(Student-t Distribution,簡稱為t分佈)來表示embed空間的相似性$$q_{ij} = frac{(1 + ||boldsymbol{y}_i - boldsymbol{y} 損失函數是兩個分佈之間的Kullback-Leibler divergence(KL散度) $$KL(P|Q) = sum_{i neq j} p_{ij}…

0 Comments

理解三重損失

理解triplet loss,與給出TensorFlow和numpy兩種形式的example code。 Triplet Loss 是當前應用的很廣泛的一種損失函數,在人臉識別和聚類領域,這是一種很自然的映射與計算損失的方式,比如公式表示用公式表示就是,我們希望: $$ leftlVert f(x^a_i) - f(x^p_i) rightrVert ^2_2 + alpha lt leftlVert f(x^a_i) - f(x^n_i) rightrVert ^2_2 , forall (f(x^a_i) , f(x^p_i) , f(x^n_i)) in…

0 Comments