範數 稀疏性 算法時間、空間複雜度

範數

  向量範數

  如果定義一個向量爲:a=[-5,6,8, -10]

  向量的1範數即:向量的各個元素的絕對值之和,上述向量a的1範數結果就是:29;

  向量的2範數即:向量的每個元素的平方和再開平方根,上述a的2範數結果就是:15;

  向量的負無窮範數即:向量的所有元素的絕對值中最小的:上述向量a的負無窮範數結果就是:5;
  向量的正無窮範數即:向量的所有元素的絕對值中最大的:上述向量a的負無窮範數結果就是:10;

一、L0 範數

  L0範數是指向量中非0的元素的個數。
  如果我們用L0範數來規則化一個參數矩陣W的話,就是希望W的大部分元素都是0。這太直觀了,太露骨了吧,換句話說,讓參數W是稀疏的。

1.1 稀疏化的好處是是什麼?

1)特徵選擇

​  實現特徵的自動選擇,去除無用特徵。稀疏化可以去掉這些無用特徵,將特徵對應的權重置爲零。

2)可解釋性(interpretability)​

  例如判斷某種病的患病率時,最初有1000個特徵,建模後參數經過稀疏化,最終只有5個特徵的參數是非零的,那麼就可以說影響患病率的主要就是這5個特徵。

二、L1 範數

  L1範數是指向量中各個元素絕對值之和。
  L1範數和L0範數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用。
  既然L0可以實現稀疏,爲什麼不用L0,而要用L1呢?個人理解一是因爲L0範數很難優化求解(NP難問題),二是L1範數是L0範數的最優凸近似,而且它比L0範數要容易優化求解。所以大家才把目光和萬千寵愛轉於L1範數。

2.1 L2避免過擬合的原理

  讓L2範數的規則項||W||2 儘可能小,可以使得W每個元素都很小,接近於零,但是與L1不同的是,不會等於0;這樣得到的模型抗干擾能力強,參數很小時,即使樣本數據x發生很大的變化,模型預測值y的變化也會很有限。

三、L2 範數(稀疏規則算子)

  L2範數是指向量各元素的平方和然後求平方根。L2範數可以防止過擬合,提升模型的泛化能力。

  在迴歸裏面,有人把有它的迴歸叫 “嶺迴歸” (Ridge Regression),有人也叫它 “權值衰減weight decay”
  L2 範數可以改善機器學習裏過擬合問題。至於過擬合是什麼,上面也解釋了,就是模型訓練時候的誤差很小,但在測試的時候誤差很大,也就是我們的模型複雜到可以擬合到我們的所有訓練樣本了,但在實際預測新的樣本的時候,糟糕的一塌糊塗。通俗的講就是應試能力很強,實際應用能力很差。

3.1 權重衰減(weight decay)

  L2正則化的目的就是爲了讓權重衰減到更小的值,在一定程度上減少模型過擬合的問題,所以權重衰減也叫L2正則化。
  思考:L2正則化項有讓w變小的效果,但是爲什麼w變小可以防止過擬合呢?
  原理:(1)從模型的複雜度上解釋:更小的權值w,從某種意義上說,表示網絡的複雜度更低,對數據的擬合更好(這個法則也叫做奧卡姆剃刀),而在實際應用中,也驗證了這一點,L2正則化的效果往往好於未經正則化的效果。(2)從數學方面的解釋:過擬合的時候,擬合函數的係數往往非常大,爲什麼?如下圖所示,過擬合,就是擬合函數需要顧忌每一個點,最終形成的擬合函數波動很大。在某些很小的區間裏,函數值的變化很劇烈。這就意味着函數在某些小區間裏的導數值(絕對值)非常大,由於自變量值可大可小,所以只有係數足夠大,才能保證導數值很大。而正則化是通過約束參數的範數使其不要太大,所以可以在一定程度上減少過擬合情況。

3.2 學習率衰減(learning rate decay)

  在訓練模型的時候,通常會遇到這種情況:我們平衡模型的訓練速度和損失(loss)後選擇了相對合適的學習率(learning rate),但是訓練集的損失下降到一定的程度後就不在下降了,比如training loss一直在0.7和0.9之間來回震盪,不能進一步下降。
  遇到這種情況通常可以通過適當降低學習率(learning rate)來實現。但是,降低學習率又會延長訓練所需的時間。
  學習率衰減(learning rate decay)就是一種可以平衡這兩者之間矛盾的解決方案。學習率衰減的基本思想是:學習率隨着訓練的進行逐漸衰減。
學習率衰減基本有兩種實現方法:

  • 線性衰減。例如:每過5個epochs學習率減半。
  • 指數衰減。例如:隨着迭代輪數的增加學習率自動發生衰減,每過5個epochs將學習率乘以0.9998。
      學習率過大,在算法優化的前期會加速學習,使得模型更容易接近局部或全局最優解。但是在後期會有較大波動,甚至出現損失函數的值圍繞最小值徘徊,波動很大,始終難以達到最優。所以引入學習率衰減的概念,直白點說,就是在模型訓練初期,會使用較大的學習率進行模型優化,隨着迭代次數增加,學習率會逐漸進行減小,保證模型在訓練後期不會有太大的波動,從而更加接近最優解。
decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)
#其中decayed_learning_rate爲每一輪優化時使用的學習率,learning_rate爲事先設定的初始學習率,decay_rate爲衰減係數,decay_steps爲衰減速度。

#在tensorflow中指數型衰減通過調用:
tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
#這裏介紹一下decay_steps,若decay_steps=100,即表示100輪迭代後進行一次衰減,staircase=True時,global_step/decay_steps會被轉化爲整數,這使得學習率呈階梯型下降,若staircase=False,使得學習率呈線性型下降。

四、時間複雜度與空間複雜度

4.1 時間複雜度

  一個語句的頻度是指該語句在算法中被重複執行的次數。算法中所有語句的頻度之和記爲T(n),它是該算法問題規模n的函數,時間複雜度主要分析T(n)的數量級,因此通常採用算法中基本運算的頻度f(n)來分析算法的時間複雜度。因此,算法的時間複雜度記爲

              T(n)=O(f(n))
在這裏插入圖片描述

4.2 空間複雜度

  算法的空間複雜度S(n)定義爲該算法所耗費的存儲空間,它是問題規模n的函數。漸進空間複雜度也常簡稱爲空間複雜度,記爲

              S(n)=O(g(n))




有趣的事,Python永遠不會缺席

歡迎關注小婷兒的博客

    文章內容來源於小婷兒的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解

    如需轉發,請註明出處:小婷兒的博客python    https://www.cnblogs.com/xxtalhr/

博客園 https://www.cnblogs.com/xxtalhr/

CSDN https://blog.csdn.net/u010986753

有問題請在博客下留言或加作者:
     微信:tinghai87605025 聯繫我加微信羣
     QQ :87605025
     python QQ交流羣:py_data 483766429

培訓說明:

OCP培訓說明連接 https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培訓說明連接 https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

     小婷兒的python正在成長中,其中還有很多不足之處,隨着學習和工作的深入,會對以往的博客內容逐步改進和完善噠。重要的事多說幾遍。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章