美文网首页
Tensorflow快餐教程(5) - 范数

Tensorflow快餐教程(5) - 范数

作者: Jtag特工 | 来源:发表于2018-04-25 17:03 被阅读184次

矩阵进阶 - 范数

作为快餐教程,我们尽可能多上代码,多介绍工具,少讲原理和公式。但是我也深知这样是无法讲清楚的,毕竟问题的复杂度摆在这里呢。与大家一起在Tensorflow探索一圈之后,我一定要写一个数学基础比较扎实的进一步教程。

范数(norm)初识

一般大学本科的《线性代数》教材中是不讲范数、广义逆这些知识的,需要学习《矩阵论》课程。但是很不幸,深度学习中会频繁用到。所以我们还是要有个基础的概念的。

不管是一个向量,还是一个矩阵,我们在机器学习中都经常需要有一个对于它们大小的度量。
对于向量的度量,我们的第一印象就用向量的长度就是了么。换成更有文化一点的名词就是欧基里得距离。这么高大上的距离,其实就是所有的值的平方的和的平方根。
我们可以用ord='euclidean'的参数来调用tf.norm来求欧基里得范数。
例:

>>> a02 = tf.constant([1,2,3,4],dtype=tf.float32)
>>> sess.run(tf.norm(a02, ord='euclidean'))
5.477226

这没啥神秘的,我们用sqrt也照样算:

>>> np.sqrt(1*1+2*2+3*3+4*4)
5.477225575051661

下面我们将向量的范数推广到矩阵。其实还是换汤不换药,还是求平方和的平方根。

>>> a03 = tf.constant([[1,2],[3,4]],dtype=tf.float32)
>>> a03
<tf.Tensor 'Const_34:0' shape=(2, 2) dtype=float32>
>>> sess.run(a03)
array([[1., 2.],
       [3., 4.]], dtype=float32)

原来一排的向量,现在换成2x2的矩阵,我们继续求范数。现在有个高大上的名字叫做Frobenius范数。

>>> sess.run(tf.norm(a03,ord=2))
5.477226

嗯,一算下来还是跟[1,2,3,4]向量的范数值是一样的。

范数的定义

欧几里得范数和Frobenius范数只是范数的特例。更一般地,范数的定义如下:
$ |x|_p=(\displaystyle{\sum_i}|x_i|p){\frac{1}{p}} $
其中,$p\in{\mathbb{R}}, p\ge1$

范数本质上是将向量映射到非负值的函数。当p=2时,$L^2$范数称为欧几里得范数。因为在机器学习中用得太多了,一般就将$|x|_2$简写成$|x|$。

更严格地说,范数是满足下列性质的任意函数:

  1. $f(x) = 0 \Rightarrow x=0$
  2. $f(x+y) \le f(x) + f(y)$ (这条被称为三角不等式, triangle inequality)
  3. $\forall\alpha\in{\mathbb{R}}, f({\alpha}x) = |\alpha|f(x)$

范数的推广

除了$L2$范数之外,在机器学习中还常用$L1$范数,就是所有元素的绝对值的和。

有时候,我们只想计算向量或者矩阵中有多少个元素,这个元素个数也被称为$L0$范数。但是,这种叫法是不科学的,因为不符合上面三条定义中的第三条。一般建议还是使用$L1$范数。

我们来看下$L^1$范数的例子:

>>> sess.run(tf.norm(a03,ord=1))
10.0

另外,还有一个范数是$L^\infty$范数,也称为最大范数(max norm). 最大范数表示向量中具有最大幅值的元素的绝对值。

我们可以用ord=np.inf的参数来求最大范数。

>>> sess.run(tf.norm(a03,ord=np.inf))
4.0

范数与赋范空间

最后,我们还是看一下数学上对于范数的严格定义。经过上面对于概念和代码实现的了解,现在这个定义已经不难理解了。

定义1 向量范数:设V是数域F上的线性空间,且对于V的任一个向量x,对应一个非负实数$|x|$,满足以下条件:

  1. 正定性:$|x|\ge 0$, $|x|=0$当且仅当x=0
  2. 齐次性:$|\alpha{x}|=|\alpha||x|, a\in{F}$
  3. 三角不等式:对任意$x,y\in{}V$,都有$|x+y|\le |x|+|y| $,则称$|x|$为向量x的范数,$[V;|\cdot|]$为赋范空间。

定义2 矩阵范数:设$A\in{}C^{m\times{n}}$,对每一个A,如果对应着一个实函数N(A),记为$|A|$,它满足以下条件:

  1. 非负性:$|A|\ge{0}$, 正定性:$A=O_{m\times{n}} \Leftrightarrow |A|=0$
  2. 齐次性:$|\alpha{A}| = |\alpha||A|, \alpha\in{}C$
  3. 三角不等式: $|A+B|\le|A||B|, \forall{}B\in{C{m\times{n}}}$,则称N(A)=$|A|$为A的广义矩阵范数。进一步,若对$C{m\times{n}},C{n\times{l}},C{m\times{l}}$上的同类广义矩阵范数$|\cdot|$,有下面的结论:
  4. (矩阵乘法的)相容性:$|AB|\le{}|A||B|, B\in{}C^{n\times{l}}$,则称$N(A)=|A|$为A的矩阵范数。

相关文章

  • Tensorflow快餐教程(5) - 范数

    摘要:范数的定义和Tensorflow实现 矩阵进阶 - 范数 作为快餐教程,我们尽可能多上代码,多介绍工具,少讲...

  • Tensorflow快餐教程(5) - 范数

    矩阵进阶 - 范数 作为快餐教程,我们尽可能多上代码,多介绍工具,少讲原理和公式。但是我也深知这样是无法讲清楚的,...

  • Tensorflow快餐教程(4) - 矩阵

    矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性...

  • Tensorflow快餐教程(3) - 向量

    向量 向量在编程语言中就是最常用的一维数组。二维数组叫做矩阵,三维以上叫做张量。 向量虽然简单,高效,且容易理解。...

  • Tensorflow快餐教程(9) - 卷积

    摘要:卷积的计算方法 卷积 卷积就是滑动中提取特征的过程 在数学中,卷积convolution是一种函数的定义。它...

  • Tensorflow快餐教程(3)- 向量

    摘要:Tensorflow向量操作 向量 向量在编程语言中就是最常用的一维数组。 二维数组叫做矩阵,三维以上叫做张...

  • Tensorflow快餐教程(4) - 矩阵

    摘要:Tensorflow矩阵基础运算 矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了。光靠tf.li...

  • Tensorflow快餐教程(9) - 卷积

    卷积 卷积就是滑动中提取特征的过程 在数学中,卷积convolution是一种函数的定义。它是通过两个函数f和g生...

  • TensorFlow的Basic Usage

    翻译自TensorFlow Basic Usage官方教程 为了使用TensorFlow,我们需要理解以下5点: ...

  • Tensorflow快餐教程(2) - 标量运算

    Tensorflow的Tensor意为张量。一般如果是0维的数组,就是一个数据,我们称之为标是Scalar;1维的...

网友评论

      本文标题:Tensorflow快餐教程(5) - 范数

      本文链接:https://www.haomeiwen.com/subject/hppelftx.html