作為快餐教程,我們盡可能多上**,多介紹工具,少講原理和公式。但是我也深知這樣是無法講清楚的,畢竟問題的複雜度擺在這裡呢。與大家一起在tensorflow探索一圈之後,我一定要寫乙個數學基礎比較紮實的進一步教程。
一般大學本科的《線性代數》教材中是不講範數、廣義逆這些知識的,需要學習《矩陣論》課程。但是很不幸,深度學習中會頻繁用到。所以我們還是要有個基礎的概念的。
不管是乙個向量,還是乙個矩陣,我們在機器學習中都經常需要有乙個對於它們大小的度量。
對於向量的度量,我們的第一印象就用向量的長度就是了麼。換成更有文化一點的名詞就是歐基里得距離。這麼高大上的距離,其實就是所有的值的平方的和的平方根。
我們可以用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
>>> 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|x_i|^p)^} $
其中,$p\in}, p\ge1$
範數本質上是將向量對映到非負值的函式。當p=2時,$l^2$範數稱為歐幾里得範數。因為在機器學習中用得太多了,一般就將$\|x\|_2$簡寫成$\|x\|$。
更嚴格地說,範數是滿足下列性質的任意函式:
$f(x) = 0 \rightarrow x=0$
$f(x+y) \le f(x) + f(y)$ (這條被稱為三角不等式, ******** inequality)
$\forall\alpha\in}, f(x) = |\alpha|f(x)$
除了$l^2$範數之外,在機器學習中還常用$l^1$範數,就是所有元素的絕對值的和。
有時候,我們只想計算向量或者矩陣中有多少個元素,這個元素個數也被稱為$l^0$範數。但是,這種叫法是不科學的,因為不符合上面三條定義中的第三條。一般建議還是使用$l^1$範數。
我們來看下$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\|$,滿足以下條件:
正定性:$\|x\|\ge 0$, $\|x\|=0$當且僅當x=0
齊次性:$\|\alpha\|=|\alpha|\|x\|, a\in$
三角不等式:對任意$x,y\in{}v$,都有$\|x+y\|\le \|x\|+\|y\| $,則稱$\|x\|$為向量x的範數,$[v;\|\cdot\|]$為賦範空間。
定義2 矩陣範數:設$a\in{}c^}$,對每乙個a,如果對應著乙個實函式n(a),記為$\|a\|$,它滿足以下條件:
非負性:$\|a\|\ge$, 正定性:$a=o_} \leftrightarrow \|a\|=0$
齊次性:$\|\alpha\| = |\alpha|\|a\|, \alpha\in{}c$
三角不等式: $\|a+b\|\le\|a\|\|b\|, \forall{}b\in}}$,則稱n(a)=$\|a\|$為a的廣義矩陣範數。進一步,若對$c^},c^},c^}$上的同類廣義矩陣範數$\|\cdot\|$,有下面的結論:
(矩陣乘法的)相容性:$\|ab\|\le{}\|a\|\|b\|, b\in{}c^}$,則稱$n(a)=\|a\|$為a的矩陣範數。
雲棲社群 Tensorflow快餐教程
雲棲社群 tensorflow快餐教程 1 30行 搞定手寫識別 雲棲社群 tensorflow快餐教程 2 標量運算 雲棲社群 tensorflow快餐教程 3 向量 雲棲社群 tensorflow快餐教程 4 矩陣 雲棲社群 tensorflow快餐教程 5 範數 雲棲社群 tensorflow...
Tensorflow快餐教程 6 矩陣分解
摘要 特徵分解,奇異值分解,moore penrose廣義逆 我們在 線性代數 課學過方陣的特徵向量和特徵值。定義 設a f n na fn n 是n階方陣。如果存在非零向量x f n 1x fn 1使ax xax x 對某個常數 f f成立,則稱 是a的特徵值 eigenvalue x是屬於特徵值...
安裝TensorFlow教程
1.安裝anaconda 2.建立乙個conda環境,命名為tensorflow conda create n tensorflow3.用以下命令進入conda環境 source activate tensorflow tensorflow 進入tensorflow後的顯示符4.安裝tensorfl...