[淺談機器學習] #2 聊聊Tensorflow

Roye Qiu
Roye’s ResearchCraft
6 min readOct 4, 2018

Tensorflow 實作Iris 分類器比較

上一篇:[淺談機器學習] #1 Machine Learning 基本概念

[前言]
大家好大家好,上一篇稍微介紹了一下機器學習的概念,發完那篇文之後,有發現其實也有其他大大解釋的很棒。 也分享給各位朋友:文章連結
當然每個人的講的可能大同小異,就各位朋友可以多看看不同人的說法,說不定可以讓自己對Machine Learning有更多的了解。

再來聊聊這次講的主題Tensorflow吧,有鑑於其實大家都聽過Tensorflow,但是很多人對於他實際上到底是甚麼,怎麼支援我們完成Machine Learning都還有疑問,所以我想在這邊給大家簡單介紹一下。

Tensorflow

tensorflow.org icon

我相信上面那張圖大家已經看到不想再看了。

TensorFlow: A system for large-scale machine learning — Google AI TensorFlow:一套針對處理大型機器學習的系統

簡單來說,是一套由google所開發以及維護,用來協助進行”Machine Learning實作”的一套系統。當然你要把tensorflow當作一種程式語言的套件也是可以。

蛤? 甚麼意思? 聽不懂好籠統。 協助進行Machine Learning? 怎樣協助? 協助甚麼?

這裡給一下我自己認為的Machine Learning的基本概念
(強調)基本而已喔 0.<* 要定義的話可以上wiki上面看。

那看完那篇Machine Learning的基本概念後,應該感覺到機器學習是由很多數學運算所構築而成的,數學光要用紙筆算就很困難了,還要用程式碼算,很多人應該想到這又開始頭痛了吧。

Tensorflow就是來協助大家完成這些數學跟架構的。

我們來用一個很簡單的例子來做說明:
我們現在用經典的例子Iris data set然後用python實作一個非常簡單的Neural Network 的Multi-Class Classifier分類器。

架構圖預定長這個樣子:

Multi-Class Classifier Architecture

我在這邊不一步每一步講解怎麼實作的了,畢竟今天的主角不是Build a Neural Network from scratch。 這邊請先往下滑不要看程式碼內容,因為洋洋灑灑也沒講解,沒註解跟沒推導,實在是不容易看得明白。

Multi-Class Classifier from scratch

謝謝大家的配合,沒有先看上面那一長串的code。但是我們可以看的到,整體來說大約要寫80–90行程式碼。

當然Code多不代表一定不好,程式的好壞不是看Code的多寡!!!

重點是我們裡面的Sigmoid function、Softmax function、weight的學習更新,以及Sigmoid function 跟 Softmax function的微分,這些在實作這個multi-class classifier的時候,全部都要我們自己實作。 沒錯,全部! 所以實作起來會非常的花時間跟功夫。

接下來我們來看看用Tensorflow實作的版本,基本上兩邊的演算法一模一樣,參數也一模一樣,也是先不要看得太仔細,等看完文章,回頭再來慢慢看。

Multi-Class Classifier TF-Version

很好再次感謝大家,跳到這邊來,我裡面沒有放random_sampling,不過差不了多少。程式碼行數只剩下40行不到。我們下面來針對程式碼中幾個重點不同的地方做個比較說明。

  • Sigmoid Function

實作版:

TF版:

  • Softmax Function

實作版:

TF版:

Back-propagation:

實作版:

TF版:

TF的版本主要的差別,是很多數學上的運算都由TensorFlow的function以及物件來完成,像是學習更新Weight的這個動作,由TensorFlow的 GradientDescentOptimizer來幫忙完成,我們不需要了解backpropagation,不用了解sigmoid的微分方程,不用知道softmax的微分,這是一個多麼美好的世界是不是。

比較到這邊,我們來總結一下。

所以甚麼是TensorFlow?

TensorFlow 是一個幫助實作機器學習的一個套件,裡面會幫忙實作很多複雜的數學演算法、公式、組織架構、以及轉換的Function。

使用TensorFlow需要那些知識?

要知道他的各個function的使用方式,以及你要使用的演算法的名稱以及流程。

自己實做比較好還是使用TensorFlow比較好?

對於學習數學以及演算法的角度來說,沒有甚麼比自己實作還好的,可是假如你現在同時有工作,或是課業上的壓力,又要在時間內做出甚麼,那當然還是以節省功夫為主。

那為什麼不用其他完全包好的套件ex Sklearn或是 Keras?

其實不會不行,我們可以分成三種方式來實作ML:

  1. 完全自己實作
  2. Tensorflow (low level api)
  3. Keras Sklearn (High level api)

這三種方式其實各自都有各自的優缺,就跟軟體工程一樣,各種選擇都是一個trade off。

參考要素三角圖
  1. 完全自己實作
  2. Tensorflow (low level api)
  3. Keras Sklearn (High level api)
實作方式條件比較表

大概介紹到這邊,希望大家對於Tensorflow,有更多的認識,之後會再有一篇講解這篇的實作內容,包括說明推導BackPropagation。也會有更多的Tensorflow,從頭實作,或是其他ML應用跟玩具的文章。

因為時間的關係,文章目前是一周內一篇(一禮拜內至少一篇),假如看完之後意猶未盡,想要趕快看更多的Tensorflow教學,個人推薦:

莫煩的教學視頻

感謝大家再次看完這次的文章,假如有問題或是講不清楚的地方一樣,歡迎大家提出問題,假如覺得講得不錯,也拜託給點鼓勵。0w0)b

--

--

Roye Qiu
Roye’s ResearchCraft

一個喜歡科技、技術的自然語言工程師,喜歡參與workshop活動與參加比賽,曾獲得總統盃黑客松優勝與司法院團隊一起與總統蔡英文介紹自然語言對於司法改革的重要性~