矩阵进阶 - 范数

作为快餐教程,我们尽可能多上代码,多介绍工具,少讲原理和公式。但是我也深知这样是无法讲清楚的,毕竟问题的复杂度摆在这里呢。与大家一起在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=(∑i|xi|p)1p‖x‖p=(∑i|xi|p)1p \|x\|_p=(\displaystyle{\sum_i}|x_i|^p)^{\frac{1}{p}}
其中,p∈ℝ,p≥1p∈R,p≥1p\in{\mathbb{R}}, p\ge1

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

更严格地说,范数是满足下列性质的任意函数:
1. f(x)=0⇒x=0f(x)=0⇒x=0f(x) = 0 \Rightarrow x=0
2. f(x+y)≤f(x)+f(y)f(x+y)≤f(x)+f(y)f(x+y) \le f(x) + f(y) (这条被称为三角不等式, triangle inequality)
3. ∀α∈ℝ,f(αx)=|α|f(x)∀α∈R,f(αx)=|α|f(x)\forall\alpha\in{\mathbb{R}}, f({\alpha}x) = |\alpha|f(x)

范数的推广

除了L2L2L^2范数之外,在机器学习中还常用L1L1L^1范数,就是所有元素的绝对值的和。

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

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

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

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

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

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

范数与赋范空间

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

定义1 向量范数:设V是数域F上的线性空间,且对于V的任一个向量x,对应一个非负实数‖x‖‖x‖\|x\|,满足以下条件:
1. 正定性:‖x‖≥0‖x‖≥0\|x\|\ge 0, ‖x‖=0‖x‖=0\|x\|=0当且仅当x=0
2. 齐次性:‖αx‖=|α|‖x‖,a∈F‖αx‖=|α|‖x‖,a∈F\|\alpha{x}\|=|\alpha|\|x\|, a\in{F}
3. 三角不等式:对任意x,y∈Vx,y∈Vx,y\in{}V,都有‖x+y‖≤‖x‖+‖y‖‖x+y‖≤‖x‖+‖y‖\|x+y\|\le \|x\|+\|y\| ,则称‖x‖‖x‖\|x\|为向量x的范数,[V;‖⋅‖][V;‖⋅‖][V;\|\cdot\|]为赋范空间。

定义2 矩阵范数:设A∈Cm×nA∈Cm×nA\in{}C^{m\times{n}},对每一个A,如果对应着一个实函数N(A),记为‖A‖‖A‖\|A\|,它满足以下条件:
1. 非负性:‖A‖≥0‖A‖≥0\|A\|\ge{0}, 正定性:A=Om×n⇔‖A‖=0A=Om×n⇔‖A‖=0A=O_{m\times{n}} \Leftrightarrow \|A\|=0
2. 齐次性:‖αA‖=|α|‖A‖,α∈C‖αA‖=|α|‖A‖,α∈C\|\alpha{A}\| = |\alpha|\|A\|, \alpha\in{}C
3. 三角不等式: ‖A+B‖≤‖A‖‖B‖,∀B∈Cm×n‖A+B‖≤‖A‖‖B‖,∀B∈Cm×n\|A+B\|\le\|A\|\|B\|, \forall{}B\in{C^{m\times{n}}},则称N(A)=‖A‖‖A‖\|A\|为A的广义矩阵范数。进一步,若对Cm×n,Cn×l,Cm×lCm×n,Cn×l,Cm×lC^{m\times{n}},C^{n\times{l}},C^{m\times{l}}上的同类广义矩阵范数‖⋅‖‖⋅‖\|\cdot\|,有下面的结论:
4. (矩阵乘法的)相容性:‖AB‖≤‖A‖‖B‖,B∈Cn×l‖AB‖≤‖A‖‖B‖,B∈Cn×l\|AB\|\le{}\|A\|\|B\|, B\in{}C^{n\times{l}},则称N(A)=‖A‖N(A)=‖A‖N(A)=\|A\|为A的矩阵范数。

Tensorflow快餐教程(5) - 范数相关推荐

  1. Tensorflow快餐教程(12) - 用机器写莎士比亚的戏剧

    高层框架:TFLearn和Keras 上一节我们学习了Tensorflow的高层API封装,可以通过简单的几步就生成一个DNN分类器来解决MNIST手写识别问题. 尽管Tensorflow也在不断推进 ...

  2. Tensorflow快餐教程(1) - 30行代码搞定手写识别

    摘要: Tensorflow入门教程1 去年买了几本讲tensorflow的书,结果今年看的时候发现有些样例代码所用的API已经过时了.看来自己维护一个保持更新的Tensorflow的教程还是有意义的 ...

  3. TensorFlow快餐教程:程序员快速入门深度学习五步法

    作者简介:刘子瑛,阿里巴巴操作系统框架专家:CSDN 博客专家.工作十余年,一直对数学与人工智能算法相关.新编程语言.新开发方法等相关领域保持浓厚的兴趣.乐于通过技术分享促进新技术进步. 作为一个程序 ...

  4. Tensorflow快餐教程(8) - 深度学习简史

    深度学习简史 从机器学习流派说起 如果要给机器学习划分流派的话,初步划分可以分为『归纳学习』和『统计学习』两大类.所谓『归纳学习』,就跟我们平时学习所用的归纳法差不多,也叫『从样例中学习』. 归纳学习 ...

  5. Tensorflow快餐教程(9) - 卷积

    摘要: 卷积的计算方法 卷积 卷积就是滑动中提取特征的过程 在数学中,卷积convolution是一种函数的定义.它是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠 ...

  6. Tensorflow快餐教程(6) - 矩阵分解

    摘要: 特征分解,奇异值分解,Moore-Penrose广义逆 矩阵分解 特征向量和特征值 我们在<线性代数>课学过方阵的特征向量和特征值. 定义:设A∈Fn×nA∈Fn×n是n阶方阵.如 ...

  7. Tensorflow快餐教程(4) - 矩阵

    摘要: Tensorflow矩阵基础运算 矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了.光靠tf.linspace,tf.range之类的线性生成函数已经不够用了. 可以通过先生成一个线 ...

  8. Tensorflow快餐教程(3) - 向量

    向量 向量在编程语言中就是最常用的一维数组. 二维数组叫做矩阵,三维以上叫做张量. 向量虽然简单,高效,且容易理解.但是与操作0维的标量数据毕竟还是不同的.比如向量经常用于表示一个序列,生成序列像标量 ...

  9. Tensorflow快餐教程(7) - 梯度下降

    梯度下降 学习完基础知识和矩阵运算之后,我们再回头看下第一节讲的线性回归的代码: import tensorflow as tf import numpy as nptrX = np.linspace ...

最新文章

  1. Winform应用程序实现通用遮罩层二
  2. 潜在语义分析对认知科学的启示
  3. 在C++ Builder中用socket api来写网络通讯程序(同时支持TCP和UDP协议)
  4. Win10下启动telnet客户端
  5. 荣耀Magic3 Pro渲染图曝光:双打孔曲面屏+环形五摄
  6. Data Binding的使用总结
  7. 【Java从0到架构师】Maven
  8. java数组里的索引越界问题、空指针异常问题
  9. c#获取软件版本、windows用户名、windows用户目录、.net版本、windows版本等
  10. 支付宝-线上资金授权(小程序)
  11. 机器人仿真论文阅读2
  12. 暴走英雄坛怎么领服务器维护奖励,暴走英雄坛琅嬛福地奖励在哪里?福地奖励获取方法一览...
  13. python笔记本好_如何使用 Python 分析笔记本电脑上的 100 GB 数据
  14. Postman之CSV或JOSN文件实现数据驱动(参数化)
  15. 360查出 HEUR/Malware.QVMxx.Gen 病毒含义
  16. Excel函数公式大全—SUMIF/SUMIFS函数
  17. C# 构造器-实例构造器,类型构造器
  18. java_进阶:Map、自动装箱拆箱
  19. SSD模型(论文大致内容)
  20. 疫情导致招聘平台Xing的母公司New Work SE裁员

热门文章

  1. Linux 系统命令及其使用详解(用来查询备用)
  2. 几种实时数仓架构设计思路
  3. Route::controller和Route::resource
  4. xgboost与gdbt区别比较
  5. 解决Ubuntu18.04使用WPS文字时输入法候选列表无法跟随问题
  6. 第974期机器学习日报(2017-05-19)
  7. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (部分题解)
  8. 求助编译lede的openwrt固件是云编译出错
  9. CGAL环境配置(VS2019 PCL1.8)
  10. matlab如何产生两个两位随机整数,产生20个两位随机整数