欧几里得范数_机器学习中的范数究竟是个什么鬼?
今天說一個深度學習和機器學習里面經常出現,但是未必人人都能 get 到直觀感受的概念:范數,英文名叫 norm。
1、直觀感受
本質上來講,范數是用來衡量一個向量(vector)的規模的,我個人覺得中文中的「體量」這個詞翻譯它更形象。
什么叫規模,舉個例子,x 和 y 兩個向量分別如下:
x:tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])y:tensor([0., 0.])他們的 size 分別是:
x: torch.Size([3,?3])y: torch.Size([2])x 的規模是 3 維的,而且每個維度有 3 個取值,值的數值都為1;y 的規模是 1 維的, 每個維度只有 2 個取值,數值為0;
無論是維度還是數值大小,x 都毫無疑問比 y 大。如果現在問你,這兩個向量的規模哪個大一些,相信你能很直觀且不違背直覺地得出結論:x 的規模更大,即「體量」更大。
當然,還有一種比較親民的理解方法,你可以把一個向量的范式衡量了這個向量指向的終點距離原點的距離。 ?這樣一來,維度很高且各維度上取值都很大的向量指向的點,肯定就比維度低且取值小的點,距離原點更遠些。所以前者的范數更大。
那么在數學上具體是怎么定義范式的呢?
2. 數學定義
嚴格來說,范式是一個可以由一個向量映射到一個數值的函數。這個函數遵從下面幾條規則:
范式是非負的,當你把它理解為長度的時候,就不難理解這個限制,因為長度是非負的。
當且僅當向量為零向量時,這個向量的范數才為零。
范數遵循三角定律。兩個向量相加以后求范式 <= 兩個向量求范式以后再相加。
向量乘以標量以后求范式 = 向量求范式以后再乘以標量。
也就說,只要滿足上面四條規律的函數,不限形式,都可以作為范式函數。用這個函數可以求得一個向量的范式值,去描述一個向量的規模。
實際應用中,機器學習和深度學習常常用到下面這種范式函數,LP 范式。
向量 x 的 LP范式定義為:其中,?p∈N? ,且?P >= 1。特別地,當 P?為 1 時,稱為向量的 L1 范式;P?取 2 時,為 L2 范式。
特別要說明的是,嚴格來說,并不存在 L0 范式! 這是一個繆語。只不過,在實際操作中,通常會把一個向量的非零元素的個數稱為 L0 范式。但是讀者需要明白地是,如果計算一個向量的非零元素的個數能夠作為范式的話,那這個映射規則明顯是不符合上述第 4 條規則的:把一個具有 n 個 0 值的向量乘以一個標量 k 以后,它的非零元素的個數還是 n,而不是 k*n。
3. L1 范式和 L2 范式的比較
當 p 取 1 時,叫 L1 范式,很簡單,就是向量所有元素值的絕對值求和:當 p 取 2 時,叫 L2 范式,即?Euclidean norm,歐幾里得范式:
這么親切的名字,喻示著,L2 范式相當于求歐式距離。舉個例子:如果一個向量 u 為:那么,它的 L2 范式就是這么求的,向量 u 的 L2 范式值就是 5:很簡單吧!
numpy 里面用 linalg.norm 函數就可以求 L2 范式:
np.linalg.norm([3, 4])5因為 L2 范式是最常用的范式,所以有時候,會把簡寫為;而?L1 范式記為。
那么到底哪種范式用得最多呢?
實踐過程中,常常會用到 L2 范式的平方(squared L2 norm,以下簡稱為 “平方 L2“。):,實際計算公式為:
平方 L2 擺脫了根號以后變得十分可愛了,因為它就是向量所有元素的平方和而已。在損失函數的優化過程中,關于單個變量的求導變得容易很多。 具體來說,如果向量 μ為:那么,它的 L2 范式關于各項元素的求導為:
如果是 平方 L2 關于各元素求導呢:通過對比可以看到,L2 求導,每個元素的偏導與整個向量所有的元素有關,而平方 L2 求導,每個元素的偏導只與這個元素自己的取值有關。 這樣一來,求導過程瞬間簡單很多!
上面是平方 L2 的優點,下面再來說一下它的不足。
以二維向量的 norm 為例,由于函數增長特性,平方 L2 在元素值接近于零的時候,其范式增長速度非常緩慢??聪聢D:
左邊 L2 范式,右邊平方 L2 范式 |?x,y 軸為兩個參數,z 軸為 norm
可以看到,右邊的平方 L2 在 x,y 接近于 0 的取值時,較之于左邊的 L2,增長非常平緩。所以在某些需要明確區分零值與非零值的應用中,用平方 L2 則顯得不夠明智。而機器學習中,對接近零值區域比較敏感的情況下,L1 范式是用的最多的,如下圖:
L1 范式
在 L1 范式中,一個向量的單個元素從零增加 ?,則 L1 范式值也增加 ?,而不是像平方 L2 一樣幾近無增長。
4. 其他種類的范式
除了上述的 LP范式,機器學習中還很常見的一個范式是范式(max norm),我們叫它最大范式吧。顧名思義,最大范式為求這個向量所有元素值的最大絕對值,也是很簡單的概念。
此外,深度學習中有時需要衡量一個矩陣的體量的時候,會用到 Frobenius 范式(Frobenius norm),公式為:這個計算方法相當于,對矩陣進行平滑操作(flatten)后的一維向量求 L2 范式。
兩個向量的點乘可以利用 L2 范式來求:
以 x, y 兩個向量為例:
那么,等式左邊:等式右邊:
關于范式的初步說明今天先到此為止,后續有時間會補充說明為什么需要搞出這個所謂的范數,以及怎樣選擇范數。
關于為什么要用到范數這個東西,先給一個直觀的例子來解釋一下:假設說騰訊公司總共有 20 個部門,每個部門平均 1000 個人;隔壁老王的創業公司總共有 2 個部門,每個部門就一個人,他跟他老婆。那么現在問題來了,如果現在限制這兩個公司每天的日常開銷不能超過一萬塊,那么很明顯,騰訊的每個員工平均能支配的就只有 5 毛錢,而老王的公司就美滋滋了,兩個人一天的開銷一萬塊,怎么花都行。也就是說,當你的范式(體量)達到一定程度的時候,一旦對你的某個指標的大小做一個限制,那么形成范式(體量)的每個元素都會被迫縮減自己的量值,以此達到不超標。
如果指標小的不能再小呢?咳咳,我這就不展開說了,大家自行腦補吧。
Reference:https://zh.wikipedia.org/zh-hans/范數
你點的每個好看,我都認真當成了喜歡總結
以上是生活随笔為你收集整理的欧几里得范数_机器学习中的范数究竟是个什么鬼?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webstorm代码行数统计_【Rust
- 下一篇: unity 实现文本选中_Unity中如