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

沒有留言:

張貼留言