文章目錄
範數
向量範數
如果定義一個向量爲: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正在成長中,其中還有很多不足之處,隨着學習和工作的深入,會對以往的博客內容逐步改進和完善噠。重要的事多說幾遍。。。。。。