Tensorflow快餐教程(5) – 範數

Tensorflow快餐教程(5) – 範數
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

摘要: 範數的定義和Tensorflow實現

矩陣進階 – 範數

作為快餐教程,我們儘可能多上程式碼,多介紹工具,少講原理和公式。但是我也深知這樣是無法講清楚的,畢竟問題的複雜度擺在這裡呢。與大家一起在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)

下面我們將向量的範數推廣到矩陣。其實還是換湯不換藥,還是求平方和的平方根。

>>> 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)

原來一排的向量,現在換成2×2的矩陣,我們繼續求範數。現在有個高大上的名字叫做Frobenius範數。

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

嗯,一算下來還是跟[1,2,3,4]向量的範數值是一樣的。

範數的定義
歐幾里得範數和Frobenius範數只是範數的特例。更一般地,範數的定義如下:
∥x∥p=(∑i|xi|p)1p
其中,p∈R,p≥1
範數本質上是將向量對映到非負值的函式。當p=2時,L2範數稱為歐幾里得範數。因為在機器學習中用得太多了,一般就將∥x∥2簡寫成∥x∥。

更嚴格地說,範數是滿足下列性質的任意函式:

  1. f(x)=0⇒x=0
  2. f(x y)≤f(x) f(y) (這條被稱為三角不等式, triangle inequality)
  3. ∀α∈R,f(αx)=|α|f(x)

範數的推廣

除了L2範數之外,在機器學習中還常用L1範數,就是所有元素的絕對值的和。

有時候,我們只想計算向量或者矩陣中有多少個元素,這個元素個數也被稱為L0範數。但是,這種叫法是不科學的,因為不符合上面三條定義中的第三條。一般建議還是使用L1範數。

我們來看下L1範數的例子:

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

10.0
另外,還有一個範數是L∞範數,也稱為最大範數(max norm). 最大範數表示向量中具有最大幅值的元素的絕對值。

我們可以用ord=np.inf的引數來求最大範數。

>>> sess.run(tf.norm(a03,
  1. 列表專案

ord=np.inf))

4.0

範數與賦範空間
最後,我們還是看一下數學上對於範數的嚴格定義。經過上面對於概念和程式碼實現的瞭解,現在這個定義已經不難理解了。

定義1 向量範數:設V是數域F上的線性空間,且對於V的任一個向量x,對應一個非負實數∥x∥,滿足以下條件:

  1. 正定性:∥x∥≥0, ∥x∥=0當且僅當x=0
  2. 齊次性:∥αx∥=|α|∥x∥,a∈F
  3. 三角不等式:對任意x,y∈V,都有∥x y∥≤∥x∥ ∥y∥,則稱∥x∥為向量x的範數,[V;∥⋅∥]為賦範空間。

定義2 矩陣範數:設A∈Cm×n,對每一個A,如果對應著一個實函式N(A),記為∥A∥,它滿足以下條件

  1. 非負性:∥A∥≥0, 正定性:A=Om×n⇔∥A∥=0

齊次性:∥αA∥=|α|∥A∥,α∈C
三角不等式: ∥A B∥≤∥A∥∥B∥,∀B∈Cm×n,則稱N(A)=∥A∥為A的廣義矩陣範數。進一步,若對Cm×n,Cn×l,Cm×l上的同類廣義矩陣範數∥⋅∥,有下面的結論:
(矩陣乘法的)相容性:∥AB∥≤∥A∥∥B∥,B∈Cn×l,則稱N(A)=∥A∥為A的矩陣範數。

相關文章

IOS開發 最新文章