Tensorflow快餐教程(5) - 范数
矩阵进阶 - 范数
作为快餐教程,我们尽可能多上代码,多介绍工具,少讲原理和公式。但是我也深知这样是无法讲清楚的,毕竟问题的复杂度摆在这里呢。与大家一起在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) - 范数相关推荐
- Tensorflow快餐教程(12) - 用机器写莎士比亚的戏剧
高层框架:TFLearn和Keras 上一节我们学习了Tensorflow的高层API封装,可以通过简单的几步就生成一个DNN分类器来解决MNIST手写识别问题. 尽管Tensorflow也在不断推进 ...
- Tensorflow快餐教程(1) - 30行代码搞定手写识别
摘要: Tensorflow入门教程1 去年买了几本讲tensorflow的书,结果今年看的时候发现有些样例代码所用的API已经过时了.看来自己维护一个保持更新的Tensorflow的教程还是有意义的 ...
- TensorFlow快餐教程:程序员快速入门深度学习五步法
作者简介:刘子瑛,阿里巴巴操作系统框架专家:CSDN 博客专家.工作十余年,一直对数学与人工智能算法相关.新编程语言.新开发方法等相关领域保持浓厚的兴趣.乐于通过技术分享促进新技术进步. 作为一个程序 ...
- Tensorflow快餐教程(8) - 深度学习简史
深度学习简史 从机器学习流派说起 如果要给机器学习划分流派的话,初步划分可以分为『归纳学习』和『统计学习』两大类.所谓『归纳学习』,就跟我们平时学习所用的归纳法差不多,也叫『从样例中学习』. 归纳学习 ...
- Tensorflow快餐教程(9) - 卷积
摘要: 卷积的计算方法 卷积 卷积就是滑动中提取特征的过程 在数学中,卷积convolution是一种函数的定义.它是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠 ...
- Tensorflow快餐教程(6) - 矩阵分解
摘要: 特征分解,奇异值分解,Moore-Penrose广义逆 矩阵分解 特征向量和特征值 我们在<线性代数>课学过方阵的特征向量和特征值. 定义:设A∈Fn×nA∈Fn×n是n阶方阵.如 ...
- Tensorflow快餐教程(4) - 矩阵
摘要: Tensorflow矩阵基础运算 矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了.光靠tf.linspace,tf.range之类的线性生成函数已经不够用了. 可以通过先生成一个线 ...
- Tensorflow快餐教程(3) - 向量
向量 向量在编程语言中就是最常用的一维数组. 二维数组叫做矩阵,三维以上叫做张量. 向量虽然简单,高效,且容易理解.但是与操作0维的标量数据毕竟还是不同的.比如向量经常用于表示一个序列,生成序列像标量 ...
- Tensorflow快餐教程(7) - 梯度下降
梯度下降 学习完基础知识和矩阵运算之后,我们再回头看下第一节讲的线性回归的代码: import tensorflow as tf import numpy as nptrX = np.linspace ...
最新文章
- Winform应用程序实现通用遮罩层二
- 潜在语义分析对认知科学的启示
- 在C++ Builder中用socket api来写网络通讯程序(同时支持TCP和UDP协议)
- Win10下启动telnet客户端
- 荣耀Magic3 Pro渲染图曝光:双打孔曲面屏+环形五摄
- Data Binding的使用总结
- 【Java从0到架构师】Maven
- java数组里的索引越界问题、空指针异常问题
- c#获取软件版本、windows用户名、windows用户目录、.net版本、windows版本等
- 支付宝-线上资金授权(小程序)
- 机器人仿真论文阅读2
- 暴走英雄坛怎么领服务器维护奖励,暴走英雄坛琅嬛福地奖励在哪里?福地奖励获取方法一览...
- python笔记本好_如何使用 Python 分析笔记本电脑上的 100 GB 数据
- Postman之CSV或JOSN文件实现数据驱动(参数化)
- 360查出 HEUR/Malware.QVMxx.Gen 病毒含义
- Excel函数公式大全—SUMIF/SUMIFS函数
- C# 构造器-实例构造器,类型构造器
- java_进阶:Map、自动装箱拆箱
- SSD模型(论文大致内容)
- 疫情导致招聘平台Xing的母公司New Work SE裁员
热门文章
- Linux 系统命令及其使用详解(用来查询备用)
- 几种实时数仓架构设计思路
- Route::controller和Route::resource
- xgboost与gdbt区别比较
- 解决Ubuntu18.04使用WPS文字时输入法候选列表无法跟随问题
- 第974期机器学习日报(2017-05-19)
- “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (部分题解)
- 求助编译lede的openwrt固件是云编译出错
- CGAL环境配置(VS2019 PCL1.8)
- matlab如何产生两个两位随机整数,产生20个两位随机整数