来自吴恩达 深度学习 第二周作业第一部分和三位图灵奖获得者的著作花书《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)。它表示从原点出发到向量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
在某些机器学习应用中,区分恰好是零的元素和非零但值很小的元素是很重要的。在这些情况下,我们转而使用在各个位置斜率相同,同时保持简单的数学形式的函数:
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
有时候我们会统计向量中非零元素的个数来衡量向量的大小。有些作者将这种函数称为"
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∣∣2cosθ
其中
θ
heta
θ表示x和y之间的夹角。
参考资料
http://www.deeplearningbook.org/
文章评论