2017年12月4日 星期一

Machine Learning 快速上手指南

A Quick Guide for Machine Learning
井民全, Jing, mqjing@gmail.com
Google doc: This Document
Back to the Main Page

Purpose

這份文件描述如何在最短時間內進入 Machine Learning 的領域. 我還是初學者, 我也在學習, 所以請專家多多包涵, 這是一篇遺漏很多的指南.

備忘錄

這份 quick guide 主要是以 Google Tensorflow 為主, 但 Machine Learning Framework 不只有 Google 的 tensorflow, 還有 Facebook AI research Group 開發的 Torch, 再來是微軟研究院的 CNTKCaffe,. 另外, 還有一個重要的網站 OpenAI 必須瀏覽, 這是由 Elon Musk 投資的重要非營利人工智慧研究公司. 裡面有一個公開的人工智慧研究開發平台 OpenAI Gym, 這裡面有許多 toolkit 以及非常有價值的文件, 可提供學習.




文件大綱與目錄

你必須會最簡單的 Python

網路上有一大堆 Python 的教學文件, 你隨便搜尋都可以找到. 以 Machine Learning 應用來說, 最常使用的還是 影像處理. 你可以參考我寫的 Python + OpenCV 的文章, 可以在 10 分鐘內建立 python + OpenCV 開發環境
  • [install, opencv] How to install Anaconda with OpenCV (view)
  • [main] Python FAQ Page (view), 裡面包含 基本 python 語法, 陣列操作, DSP, 影像處理的範例, 有圖, 有 code.

選擇 Machine Learning framework

其實現在最熱門的就是 Google 的 TensorFlow, 我們從 GitHub 的統計資料 (見下圖) 也可以看得出來. 使用 TensorFlow 來開發的專案數量幾乎是第二名 Torch 的兩倍, 這表示如果你遇到問題時, 可能比較有機會能獲得解答.

Fig. GitHub 上使用 Machine Learning Framework 的專案統計數量.

安裝 AI 開發工具

首先你要先知道, 用什麼工具來實現你的 AI 應用程式. 最簡單的方式就是使用 Google 的 tensorflow 搭配 Anaconda Pythone 開發環境. 你可以用下面我寫的教學文件在 20 分鐘內, 不需要動頭腦思考的方式, 完成安裝開發環境的工作.
  1. [install, Anaconda] How to install TensorFlow using Anaconda (view)

直接開始寫數字辨識 tensorflow code

我的習慣是先看到 code, 然後我照著做, 它會動. 那麼我才會相信這東西可以用. 你可以按照我寫的文件, 一步一步在兩個小時內完成所有 tensorflow 初學者第一個會寫的程式. 完成後, 你會建立無比的信心, 繼續往更近一步的理論前進.
  1. [dense, digital] *** MNIST for ML Beginners -- Digital number recognition -- 手寫辨識 (view) -- 92.14%
  2. [cnn, digital] A Guide to TF Layers: Building a Convolutional Neural Network (view) (ref) -- 97.3%

機器學習的理論

在學會怎麼使用 tensorflow 解決手寫數字的問題後, 你應該要針對機器學習的理論開始研究, 下面我列了幾個不錯的網站, 內容從簡單開始.
  1. [user net] Usenet newsgroup comp.ai.neural-nets FAQ (ref), 裡面有很多的名詞解釋, 對你看不懂的名詞查詢非常有用
  2. [ts, tutorial] Tensorflow 深度學習講義 (ref), 講的是基本 neural network 與 程式寫法
  3. [ts, tutorial] Tensorflow 深度學習快速上手班 (ref), 講的是基本參數選擇
  4. [ts, tutorial] AI 從頭學 (ref)
  5. [ts, tutorial] Google Deep Learning Course (ref)
  6. [ts, tutorial] The TensorFlow tutorial (ref)
  7. [openai] WILDML, Artificial Intelligence, Deep Learning, and NLP  (ref)
    1. OpenAI Gym, (ref)
  8. Mathematicalmonk 製作的一系列的 (ML 1.1) Machine learning 教學影片, 超棒 (ref)
  9. [nn] Information Theory***  (ref)
  10. [[nn] Neural Networks and Deep Learning (ref)
  11. Bay Area Deep Learning School Day 1 at CEMEX auditorium, Stanford (ref)
  12. Bay Area Deep Learning School Day 2 at CEMEX auditorium, Stanford (ref)

雜項

Mindset

  1. [ml, feature] use “learning” algorithms which aim to learn the features, without any assumptions
  2. [ml, feature, classifer] 人類仔細挑選 "good" feature, 使用簡單的 classifer 分類. 機器挑選 feature (甚至使用原資料), 使用非常複雜的 classifer
  3. [ml, description] 機器學習是找規則, 進行預測
  4. [ml, description] 從資料出發, 要算出 g, 接近真實 f
  5. [ml, condition] 機器學習的必要條件 (view)
  6. [ml, hypothesis set] 從一堆 hypothesis 裡面 (h1, h2,... hn) 的參數調整, 產生結果
  7. [data mining] 找出有趣的東西

Resource/Competition

  1. 大數據競賽平台, https://www.kaggle.com/
數據科學家可在其上進行競賽,提供潛在的解決方案. 涉及領域涵蓋了計算機科學、計算機視覺、生物、醫藥、甚至冰川學等等. 每個月Kaggle論壇有超過4,000條新帖子,每天Kaggle比賽有超過3,500次提交.
  1. 國際知識發現和數據挖掘競賽, http://www.kdd.org/kdd-cup
  2. 國內人工智慧協會比賽, https://taai-test.herokuapp.com/award/winner

Paper

  1. 機器學習和深度學習引用量最高的20篇論文(2014-2017) (ref)

Database

  1. GooleNet (ref)
    1. Paper (ref)
  2. ImageNet (ref)
  3. [har] Human Activity Recognition Database, WISDM (ref)
    1. Activity: jogging, walking, ascending stairs, descending stairs, sitting and standing
    2. 36 users using a smartphone in their pocket with the 20Hz sampling rate (20 values per second)
  4. [32x32, 60k, 10 classes] The CIFAR-10 dataset (ref)
    1. The dataset consists of 60000 32x32 colour images in 10 classes, with 6000 images per class. There are 50000 training images and 10000 test images.
  1. [28x28, 70k, 250 writers] The MNIST database of handwritten digits (ref)
    1. The MNIST database of handwritten digits, available from this page, has a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image


Image Processing

  1. [install, opencv] How to install Anaconda with OpenCV (view)
  2. [image, load & show] How to load and show an image (view)
  1. [image, save] How to save an image to png file (view)

  1. [image, matplot, show] How to use matplot to show an image (view)

  1. [image, colormap] How to use color map for an image data (view)
  1. [convert, bgr -> rgb] How to conver the BGR image to RGB image (ref)
  2. [camera, capture] How to capture a frame from default camera (view)
  1. [video, playback] How to play a video (view)
  1. [video, save, xvid] How to save a video in XVID (view)
  2. [image, contour] How to get the contour from an image (view)
  1. [image, contour, CHAIN_APPROX_NONE] How to use APPROX_NONE mode to get the contour from an image (view)
  2. [image, contour, moment] How to get the all moments from an image (view)
  3. [image, contour, features] How to get the contour features for an image (view)
  4. [image, contour, approx] How to get an approximation contour for a giving contour (view)