2016年11月26日 星期六

ML初學筆記:Keywords 筆記

這裡主要是針對流程做一個紀錄, 也可以說是一個筆記, 所以會收錄一些從別人那轉載過來一些文字敘述或是圖等. 來源皆在最下面的網址中. 謝謝!

這次主要針對Google的TensorFlow作為機器學習的入門對象, 在學的時候有出現很多單字, 因此在這邊就紀錄下他們在TensorFlow中代表的意義是什麼.

TensorFlow

TensorFlow為Google開發的一個開源的機器學習工具, 官網有很多解釋以及相關的範例帶你上手這一個強大的工具.
架構如下圖所示, 支援Python跟C++. 在 Python 语言中, 返回的 tensor 是 numpy ndarray 对象; 在 C 和 C++ 语言中, 返回的 tensor 是 tensorflow::Tensor 實例.
主要是跑在Linux&Mac系統上. Windows在執行的時候必須先用虛擬機再安裝Linux才行.
enter image description here
執行的流程, 最大主題可以分成兩塊:
一:模型定義(modeling):抽象化,此階段完全是紙上談兵
1. 輸入項、輸出項的定義(tensorflow的術語叫:placehold)
2. 模型建構(隱藏層)
a. 定義 Variable (例:權重、誤差項)
b. 定義網路 (例:y = W*X+b)
3. 初始化 Variable
4. 定義Loss函數
5. 最佳化:讓Loss函數最小化(Tensorflow 內建 Gradient Desecnt 等,可直接叫用)
二:執行(session階段):計算資源投入(CPU/GPU)、實際資料投入
1. 開啟 Session 來run Graph
2. 要跑幾次去達成最佳化(Iterative Update)
3. 訓練資料讀入( feed)

Tensor

Tensor可以看作是一个 n 维的数组或列表. 計算Graph中, 操作間傳遞的數據都是 Tensor.

Operation

Graph 中的節點,也就是對資料的操作/計算

Variable

A variable maintains state in the graph across calls to run(). You add a variable to the graph by constructing an instance of the class Variable.
(Variable is something that can updated as your training. )

Placeholder

A input into neural network.

Data Flow Graphs

Data Flow Graphs使用節點(Nodes)與邊(Edges)所繪出的有向圖(Directed Graph)來描述數學運算[如下圖所示]。Nodes一般是用來實作數學運算,也可以儲存資料、運算結果或持久性變數,Edges描述Nodes之間的I/O關係。
這些數據的Edges進行動態調整多維數據陣列(或Tensors)的大小。TensorFlow的命名由來是Graph**[表示一整個計算任務]**上,Tensors的Flow在Nodes間藉著Edges穿梭傳遞。當系統中Nodes的所有Tensors從輸入端Edges取得,Nodes就被分配到的運算裝備中,Nodes可非同步且平行的方式作業。
enter image description here

Session

在 Session 階段中才會執行 graph.

Loss function

比較預估以及真實結果之間的差異, 在一開始的範例常使用下列的”Cross Entropy”.

Optimizer

根據Loss function的值 導入學習率去修正誤差.

Cross-Entropy

Entropy: 熵的概念最早起源於物理學,用於度量一個熱力學系統的無序程度。在資訊理論裡面,熵是對不確定性的測量。但是在資訊世界,熵越高,則能傳輸越多的資訊,熵越低,則意味著傳輸的資訊越少。
大多數人都會對犯錯感到不愉快。當發生錯誤的時候,可能當下會覺得非常的悲劇,但是如果可以記得這次的教訓下一次再遇到不犯錯其實就可以了. 且當犯的錯越大的時候,一般人對這錯誤的印象會記很久以避免再次的犯錯,相反,如果錯誤很不明顯的話,我們的學習改進的速度可能將會很慢。
對於電腦來說我們也是希望它在學習時,當發生錯誤的時候所做的修正就應該要越大. 而這就是使用Cross Entropy的一個優點,可以參考名稱的超連結有更近一步的介紹.

Gradient Descent

迴歸方程式是一次方程式, 所以是一條線, 而Loss Function是計算最小平方和,是自變項的二次方程式(下圖右),所以是個曲線(如果是多元迴歸就是一個高維度的山谷)
enter image description here
那做法就是將問題從線性方程式轉換成求最小平方和的最佳解.要求最佳解用的方法是,先隨便站在山谷上的任何一點,發現哪邊比較低,就往哪邊走. 透過多次的迭代來找到最低點,化成公式就長得像下面這樣:
enter image description here
當θ落在最小值的右邊,斜率是正的,帶到公式中,就會減少θ值;反之,如果θ比最小值還小,那斜率是負的,帶到迭代公式中就會增加θ值.由於曲線越接近谷底越為平緩,所以當θ靠近最低點時,每次移動的距離也會越來越小,最終將收斂在最低點.
enter image description here
講完微分的部分,接下來是α值(learning rate).α值的用途主要在控制每次θ移動的距離,下圖顯示移動距離太大或太小的狀況:
enter image description here
如果一次移動太短的距離(左圖),那收斂速度會相當的慢.但是如果移動的距離太大(右圖),反而可能造成無法收斂的情形.所以會需要根據不同的狀況來調整這個α的大小.
References:
1. http://mropengate.blogspot.tw/2016/10/ai-ch165-tensorflow.html
2. http://www.slideshare.net/ckmarkohchang/tensorflow-60645128
3. http://tensorflow-tw.blogspot.tw/2015/12/tensorflow.html
4. http://blog.moebigdata.com/2016/01/tensorflow.html
5. https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap3/c3s1.html

2016年11月18日 星期五

ML初學筆記:安裝Tensorflow

這裡主要是針對流程做一個紀錄, 也可以說是一個筆記, 所以會收錄一些從別人那轉載過來一些文字敘述或是圖等. 來源皆在最下面的網址中. 謝謝!

安裝步驟

參考Tensorflow官網的安裝流程, 按照以下步驟就可以在Mac上安裝當下最新的版本.

$ virtualenv --system-site-packages ~/tensorflow
$ source ~/tensorflow/bin/activate
(tensorflow)$  # Your prompt should change

(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0-py2-none-any.whl

(tensorflow)$ pip install --upgrade $TF_BINARY_URL

在這邊我是參考在Youtube上看的Tutorial .

(tensorflow)$ pip install --upgrade jupyter
(tensorflow)$ pip install --upgrade Pillow

接著去下載在Github上的課程文件. 執行完下面的指令後, 存取課程文件即可.

(tensorflow)$ jupyter notebook

enter image description here

Virtualenv

Virtualenv 可以隔離函數庫需求不同的專案,讓它們不會互相影響。在建立並啟動虛擬環境後,透過 pip 安裝的套件會被放在虛擬環境中,專案就可以擁有一個獨立的環境,也降低了不同版本套件間衝突的可能。

簡而言之,Virtualenv 可以幫你做到:
1. 在沒有權限的情況下安裝新套件
2. 不同專案可以使用不同版本的相同套件
3. 套件版本升級時不會影響其他專案

使用方法
I. 建立虛擬環境
請於命令列模式下輸入下列指令:

$ virtualenv [指定虛擬環境的名稱]

例如下列指令會建立名為 “ENV” 的虛擬環境:

$ virtualenv ENV

預設在建立虛擬環境時,會依賴系統環境中的 site packages,如果想完全不依賴系統的 packages,可以加上參數 –no-site-packages 來建立虛擬環境:

$ virtualenv --no-site-packages [指定虛擬環境的名稱]

II. 啟動虛擬環境
請先切換當前目錄至建立的虛擬環境中。前例中,建立名稱為 “ENV”,則:

$ cd ENV

接著,啟動虛擬環境:

$ source bin/activate

III. 退出虛擬環境

$ deactivate

Reference:
1. https://www.tensorflow.org/
2. https://github.com/sherrym/tf-tutorial/blob/master/install-mac-native.md