矩阵/向量的范数
來自吳恩達 深度學習 第二周作業(yè)第一部分和三位圖靈獎獲得者的著作花書《Deep Learning》。
# GRADED FUNCTION: normalizeRows
import numpy as np
def normalizeRows(x):
"""
Implement a function that normalizes each row of the matrix x (to have unit length).
Argument:
x -- A numpy matrix of shape (n, m)
Returns:
x -- The normalized (by row) numpy matrix. You are allowed to modify x.
"""
### START CODE HERE ### (≈ 2 lines of code)
# Compute x_norm as the norm 2 of x. Use np.linalg.norm(..., ord = 2, axis = ..., keepdims = True)
x_norm = np.linalg.norm(x, axis=1, keepdims = True)
x = x / x_norm
return x
其中ord指定范數的階數。
范數簡述
我們知道距離的定義是一個寬泛的概念,只要滿足非負、自反、三角不等式就可以稱之為距離。
范數是一種強化了的距離概念,它在定義上比距離多了一條數乘的運算法則。有時候為了便于理解,我們可以把范數當作距離來理解。
即表示一種到坐標原點距離的度量。
例如:二階范數(也稱L2范數)是最常見的范數,即歐幾里得距離。
L
p
L^p
Lpnorm
∣
∣
x
∣
∣
p
=
(
∑
i
(
x
i
)
p
)
1
p
||x||_p=(sum_i(x_i)^p)^{frac{1}{p}}
∣∣x∣∣p?=(i∑?(xi?)p)p1?
更加嚴謹的定義:
范數即為滿足以下三個性質的函數:
f
(
x
)
=
0
?
x
=
0
f(x)=0Rightarrow x=0
f(x)=0?x=0
f
(
x
+
y
)
≤
f
(
x
)
+
f
(
y
)
f(x+y) leq f(x)+f(y)
f(x+y)≤f(x)+f(y) (the triangle inequality)
?
α
∈
R
,
f
(
α
x
)
=
∣
α
∣
f
(
x
)
forall alpha in mathbb{R},f(alpha x)=|alpha|f(x)
?α∈R,f(αx)=∣α∣f(x)
Euclidean norm
L
2
n
o
r
m
L^2 norm
L2norm
∣
∣
x
∣
∣
2
=
(
∑
i
(
x
i
)
2
)
||x||_2=sqrt{(sum_i(x_i)^2)}
∣∣x∣∣2?=(i∑?(xi?)2)
?
當
p
=
2
p = 2
p=2時,
L
2
L_2
L2?范數被稱為歐幾里得范數(Euclidean norm)。它表示從原點出發(fā)到向量x 確定的點的歐幾里得距離。
L
2
L_2
L2?范數在機器學習中出現地十分頻繁,經常簡化表示為
∥
x
∥
∥x∥
∥x∥,略去了下標2。平方
L
2
L_2
L2?范數也經常用來衡量向量的大小,可以簡單地通過點積
x
?
x
x^?x
x?x 計算。
平方
L
2
L_2
L2? 范數在數學和計算上都比
L
2
L_2
L2?范數本身更方便。例如,平方
L
2
L_2
L2?范數對x 中每個元素的導數只取決于對應的元素,而
L
2
L_2
L2?范數對每個元素的導數卻和整個向量相關。但是在很多情況下,平方
L
2
L_2
L2? 范數也可能不受歡迎,因為它在原點附近增長得十分緩慢。
L
1
L_1
L1? norm
在某些機器學習應用中,區(qū)分恰好是零的元素和非零但值很小的元素是很重要的。在這些情況下,我們轉而使用在各個位置斜率相同,同時保持簡單的數學形式的函數:
L
1
L_1
L1? 范數。
L
1
L_1
L1?范數可以簡化如下:
∣
∣
x
1
∣
∣
=
∑
i
x
i
||x_1||=sum_i{x_i}
∣∣x1?∣∣=i∑?xi?
當機器學習問題中零和非零元素之間的差異非常重要時,通常會使用
L
1
L_1
L1?范數。每當x 中某個元素從0 增加?,對應的
L
1
L_1
L1?范數也會增加?。
L
0
L_0
L0? norm
有時候我們會統(tǒng)計向量中非零元素的個數來衡量向量的大小。有些作者將這種函數稱為"
L
0
L_0
L0? 范數",但是這個術語在數學意義上是不對的。向量的非零元素的數目不是范數,因為對向量縮放
α
alpha
α倍不會改變該向量非零元素的數目。因此,
L
1
L_1
L1? 范數經常作為表示非零元素數目的替代函數。
L
∞
L_infty
L∞?
另外一個經常在機器學習中出現的范數是
L
∞
L_infty
L∞?范數,也被稱為最大范數(maxnorm)。這個范數表示向量中具有最大幅值的元素的絕對值:
∣
∣
x
∞
∣
∣
=
m
a
x
i
∣
x
i
∣
||x_{infty}||=max_i|x_i|
∣∣x∞?∣∣=maxi?∣xi?∣
Frobenius norm
有時候我們可能也希望衡量矩陣的大小。在深度學習中,最常見的做法是使用Frobenius 范數(Frobenius norm),
∣
∣
A
∣
∣
F
=
∑
i
,
j
A
i
,
j
2
||A||_F=sqrt{sum_{i,j}A^2_{i,j}}
∣∣A∣∣F?=i,j∑?Ai,j2?
?
其類似于向量的
L
2
L_2
L2?范數。
點積使用范數來表示
兩個向量的點積(dot product)可以用范數來表示。具體地,
x
?
y
=
∣
∣
x
∣
∣
2
∣
∣
y
∣
∣
2
c
o
s
θ
x^?y=||x||_2||y||_2cos heta
x?y=∣∣x∣∣2?∣∣y∣∣2?cosθ
其中
θ
heta
θ表示x和y之間的夾角。
參考資料
http://www.deeplearningbook.org/
總結
- 上一篇: Unity3d shader之次表面散射
- 下一篇: 世界各地和国家法定日节日假期一共有多少天