Introduction to AI, Machine Learning and AI Toolboxes

ภาพจาก https://www.hackerearth.com/blog/developers/artificial-intelligence-101-how-to-get-started/

บทความโดย ผศ.ดร.ณัฐโชติ พรหมฤทธิ์
ภาควิชาคอมพิวเตอร์
คณะวิทยาศาสตร์
มหาวิทยาลัยศิลปากร

AI หรือ Artificial Intelligence เป็นศาสตร์ในการทำให้ Computer มีความฉลาดเหมือนมนุษย์ โดยเทคนิคหนึ่งที่จะทำให้คอมพิวเตอร์มีความฉลาด คือการทำให้คอมพิวเตอร์สามารถเรียนรู้ได้เองจาก Data ที่นำมาสอน โดยปราศจากการป้อนกฎหรือเขียนโปรแกรมโดยโปรแกรมเมอร์ ซึ่งเราเรียกวิธีการนี้ว่า Machine Learning

หลักๆ แล้ว ในการทำงานทางด้าน Machine Learning จะมีการสร้าง Model ขึ้นมาจากการ Train ด้วย Datasets แทนที่จะต้องเขียนกฎที่มีความซับซ้อนขึ้นมาเองเป็นจำนวนมาก

Deep Learning เป็นเทคนิคหนึ่งทาง Machine Learning ที่ประสบความสำเร็จอย่างสูงในปัจจุบัน โดย Deep Learning ถูกออกแบบโดยได้รับแรงบันดาลใจจากลักษณะของ Neuron Network ในสมองมนุษย์ ซึ่งใน Course นี้เราจะได้เรียนรู้และนำเทคนิคต่างๆ โดยเฉพาะเทคนิคทาง Deep Learning ไปแก้ปัญหาในงานทางด้าน AI

แต่ก่อนจะกล่าวถึง Deep Learning ที่ละเอียดขึ้น เราจะทำความเข้าใจพื้นฐานของ Machine Learning และการติดตั้งเครื่องมือที่จำเป็นในการพัฒนา Model กันก่อน

Traditional Programming vs Machine Learning

เพื่อให้ผู้อ่านเห็นภาพมากขึ้น จะขอเปรียบเทียบ Machine Learning กับ Traditional Programming ดังภาพต่อไปนี้

Traditional Programming VS Machine Learning

ในการแก้ปัญหาแบบ Traditional Programming นั้น Programmer จะต้องทำความเข้าใจปัญหา และเงื่อนไขที่โปรแกรมจะตอบสนอง หรือให้ผลลัพธ์เมื่อมีการรับข้อมูลแบบต่างๆ เข้ามา แล้วจึงเขียนโปรแกรม เช่น เมื่อต้องการคำนวณปัญหาการเพิ่มค่าตัวเลขแบบจำนวนเต็มขึ้นอีก 1  Programmer จะต้องออกแบบ Function เพื่อทำให้ได้ผลลัพธ์ตามที่ต้องการ นั่นคือได้ฟังก์ชันเป็น X + 1 แล้วจึงแปลงเป็นโปรแกรมนำไปรันในคอมพิวเตอร์ ซึ่งเมื่อมีการรับเลขจำนวนเต็ม 5 มันจะบวกค่าอีก 1 ได้ผลลัพธ์เท่ากับ 6

ขณะที่ในการแก้ปัญหาแบบ Machine Learning เราจะนำ Data มาสอนโดยใช้เทคนิคอย่างเช่น Deep Learning ในการสอนเราอาจต้องใส่ Input Data และผลเฉลยที่ถูกต้อง เช่น Input Data = 5 ผลเฉลยคือ 6

ด้วยการเรียนรู้จากจำนวนข้อมูลที่มากพอ มันจะสร้าง Model ที่คล้ายกับฟังก์ชัน X + 1 ซึ่งสามารถทำนายคำตอบที่ใกล้เคียงกับผลเฉลยที่ได้สอนมัน (Predictive Model)

ซึ่งเทคนิคทาง Machine Learning จะมีประโยชน์อย่างมากเมื่อปัญหาที่ต้องการแก้ เป็นปัญหาที่มนุษยต้องคิดกฎหรือเงื่อนไขจำนวนมากเพื่อให้ครอบคลุมเพียงพอ อย่างเช่น การจะบอกว่าภาพที่รับเข้ามาเป็นเป็ดหรือไม่ใช่เป็ด ซึ่งเป็นงานที่ค่อนข้างยากเมื่อต้องเขียนโปรแกรมแบบ Traditional Programming

ในการใช้เทคนิคทาง Machine Learning เราเพียงนำภาพเป็ดและภาพสัตว์อื่นๆ พร้อมผลเฉลย (Label Data) มาสอน ซึ่งเราเรียกวิธีการเรียนรู้แบบนี้ว่า Supervised Learninng

Supervised Learninng

เราสามารถแบ่งประเภทของ Machine Learning เป็น 3 ประเภท คือ 1) Supervised Learninng 2) Unsupervised Learninng และ 3) Reinforcement Learning

Supervised Learning และ Unsupervised Learninng

ในทางกลับกัน การเรียนรู้แบบ Unsupervised Learninng เราจะใช้เพียง Input Data โดยไม่จำเป็นต้องใส่ผลเฉลย ซึ่งคำตอบที่ได้จากการเรียนรู้แบบนี้ คือลักษณะโครงสร้างของข้อมูลที่อาจบอกได้ว่า ภาพสัตว์ทั้งหมดที่มี จะเแบ่งเป็น 3 กลุ่ม ได้แก่ภาพเป็ด ภาพกระต่าย และภาพตัวเม่น เป็นต้น

Reinforcement Learning
Reinforcement Learning

ในขณะที่ประเภทของ Machine Learning ประเภทสุดท้าย คือ Reinforcement Learning จะมีการเรียนรู้วิธีการแก้ปัญหา จากสถานะ (State) รางวัล (Reward) และการกระทำ (Action) ของ Agent/AI ต่อระบบ เช่น AI ที่เอาชนะแชมป์ Go ชาวเกาหลีใต้ในปี 2016 (AlphaGo)

ซึ่งก่อนที่ AI จะมีความสามารถในการตัดสินใจในแต่ละสถานการณ์ (State) เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ในช่วงแรกมันจะต้องลองผิดลองถูก (สุ่มเลือก Action) เพื่อดูผลลัพธ์ (Reward) เป็นจำนวนที่มากพอเช่นเดียวกับวิธีการแบบ Supervised Learninng

AI Toolboxes

ในการแก้ปัญหางานทางด้าน AI/MAchine Learning จะมีขั้นตอนการทำงาน ดังนี้

1) Business Understanding
2) Data Acquisition
3) Data Preparation
4) Exploratory Data Analysis
5) Data Modeling
6) Model Evaluation
7) Model Deployment

โดยในการทำ Workshop เราจะใช้ Python, Jupyter Notebook และ Library ต่างๆ เช่น Tensorflow และ Scikit-learn ฯลฯ เป็นเครื่องมือสำหรับการทำงานในขั้นตอนตั้งแต่การทำ Data Acquisition จนถึง Model Deploymentl

การลง Library ใหม่ เราจะใช้ Conda ครับ ซึ่ง Conda เป็นเครื่องมือที่มาพร้อมกับ Anaconda สำหรับการติดตั้ง Library และสร้าง Environment ในการรันโปรแกรม แต่ถ้าใครยังไม่ได้ติดตั้ง Anaconda ผู้เขียนแนะนำว่าให้ติดตั้ง Miniconda แทน เนื่องจากเราต้องการ Feature บางอย่างในการทำงานเท่านั้น ดังนั้นเพื่อจะรันโปรแกรมบน Environment เฉพาะ ไม่ให้ Package ใหม่ๆ ไปปะปนกับส่วนอื่นภายในเครื่องคอมพิวเตอร์ เราจะใช้ Conda จาก Miniconda ในการสร้าง Environment ใหม่

การติดตั้งบน Windows + NVIDIA GPU

TensorFlow เป็นหนึ่งใน Deep-learning Framework ยอดนิยมที่ใช้ในการพัฒนางานทางด้าน AI และ Data Science ที่สามารถเพิ่มความเร็วในการประมวลผลได้ด้วย NVIDIA GPU, CUDA Toolkit และ cuDNN ซึ่งเป็นส่วนเสริมของ CUDA

โดย Version ล่าสุดของ TensorFlow ขณะที่เขียนบทความ คือ Version 2.7 ซึ่งใน Workshop นี้ เราจะติดตั้ง CUDA 11.2, cuDNN 8.1 และ Python 3.9 ที่ Compatible กับ Tensorflow 2.7 ตามตารางด้านล่าง

https://www.tensorflow.org/install/source#gpu

หมายเหตุ สำหรับการติดตั้งบน Windows โดยไม่ใช้ NVIDIA GPU ให้ไปที่หัวข้อ ติดตั้ง Miniconda ถึง ติดตั้ง Tensorflow

โดยมีขั้นตอนในการติดตั้ง ดังต่อไปนี้

ติดตั้ง CUDA Toolkit

  • เลือกระบบปฏิบัติการ Windows, สถาปัตยกรรม x86_64, Version 10 และ Install Type เป็น exe (local) แล้วคลิ๊กที่ Download
  • ดับเบิลคลิ๊กไฟล์ที่ Download มา เพื่อติดตั้ง แล้วคลิ๊ก OK
  • คลิ๊กที่ AGREE AND CONTINUE
  • เลือก Express แล้วคลิ๊ก NEXT
  • เลือก I understand... แล้ว คลิ๊ก NEXT
  • คลิ๊ก NEXT
  • คลิ๊ก CLOSE

ติดตั้ง cuDNN

  • ใส่ Email ของตัวเอง แล้วคลิ๊ก Next
  • คลิ๊กที่ Create account
  • กรอกข้อมูลให้ครบ ยืนยันว่าเป็นมนุษย์ด้วย Captcha แล้วคลิ๊ก CREATE ACCOUNT
  • ไปที่ Mailbox ของตัวเอง แล้วคลิ๊ก Link เพื่อ Verifile Email
  • คลิ๊ก SUBMIT
  • กรอกข้อมูลของตัวเองโดยละเอียด แล้วคลิ๊ก Submit
  • กรอกแบบสำรวจ แล้วคลิ๊ก Submit
  • เลือก cuDNN v8.0.5 สำหรับ CUDA 11.0โดย Download ไฟล์การติดตั้งบน Windows
  • Unzip ไฟล์ที่ Download มา แล้ว Copy Folder bin, include และ lib เพื่อนำไปวางที่ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0

ติดตั้ง Miniconda

  • Download และติดตั้ง Miniconda บน Windows สำหรับ Python Version ล่าสุด จาก https://docs.conda.io/en/latest/miniconda.html โดยคลิ๊กเลือก Add Miniconda3 to my PATH environment variable เมื่อถึงหน้า Advanced Installation Options
  • ไปที่ Anaconda Prompt โดยเลือกรันด้วยสิทธิ์ Administrator แล้ว Update Conda เป็น Version ล่าสุด ด้วยคำสั่ง conda update
conda update -n base -c defaults conda
  • พิมพ์ y แล้วกด Enter
  • ดู Version ของ Conda
conda -V
  • สร้าง Environment ใหม่ โดยตั้งชื่อเป็น deep_workshop1 สำหรับรัน Python Version 3.8 และติดตั้ง Jupyter Notebook โดยใช้คำสั่ง conda create -n
conda create -n deep_workshop1 python=3.8 jupyter

*ลบ Environment เดิมด้วยคำสั่ง sudo conda remove --name env_name --all

  • เข้าใช้ Environment ใหม่ โดยพิมพ์คำสั่ง conda activate ตามด้วยชื่อ Environment
conda activate deep_workshop1
  • ตรวจสอบ Python Version โดยพิมพ์คำสั่ง python แล้วกด Enter
python
  • พิมพ์ CTRL+Z แล้วกด Enter เพื่อออกมายัง Command Prompt

ติดตั้ง Tensorflow

  • ติดตั้ง Tensorflow 2.4
pip install tensorflow==2.4
  • ดู Version ของ Tensorflow โดยพิมพ์ python กด Enter แล้วพิมพ์คำสั่งต่อไปนี้
import tensorflow as tf
tf.__version__
  • พิมพ์ CTRL+Z แล้วกด Enter เพื่อออกมายัง Command Prompt
  • ติดตั้ง scikit-learn
conda install scikit-learn
  • สร้าง Project ชื่อ deepbasic_pj โดยใช้คำสั่ง mkdir deepbasic_pj แล้วไปยัง Folder ดังกล่าว
mkdir deepbasic_pj
cd deepbasic_pj
  • เปิด Jupyter Notebook
jupyter notebook
  • สร้าง Notebook โดยคลิ๊กที่ New->Python 3
  • พิมพ์ print('Hello Jupyter Notebook') ใน Cell แรก แล้วกด Shift+Enter เพื่อรันโปรแกรมและสร้าง Cell ใหม่ไปพร้อมกัน
  • กดที่ Untitled พิมพ์ชื่อไฟล์ที่ต้องการจะ Save แล้วกด Rename
  • กลับไปแก้ไข Code ใน Cell แรกเป็น print('Hello Jupyter Notebook again') แล้วกด Ctrl+Enter เพื่อรันโปรแกรมโดยไม่มีการสร้าง Cell ใหม่

ทดสอบ GPU

  • แสดงรุ่นของ NVIDIA GPU ด้วยคำสั่ง nvidia-smi
!nvidia-smi -L
  • แสดง Version ของ Tensorflow
import tensorflow as tf
import tensorflow.python.platform.build_info as build

tf.__version__
  • แสดงจำนวน GPU และชื่อ Device
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
print(f'Default GPU Device:{tf.test.gpu_device_name()}')
  • แสดง Version ของ CUDA และ cuDNN
print(build.build_info['cuda_version'])
print(build.build_info['cudnn_version'])

การติดตั้งบน macOS + Apple M1

TensorFlow เป็นหนึ่งใน Deep-learning Framework ยอดนิยมที่สามารถเพิ่มความเร็วในการประมวลผลได้ด้วย NVIDIA GPU, CUDA Toolkit และ cuDNN แต่น่าเสียดายที่ Apple ได้หยุดให้การสนับสนุน GPU ของ NVIDIA มาระยะเวลาหนึ่งแล้ว

จนกระทั่งในยุคสมัยของ Apple Silicon เราจึงสามารถใช้งาน TensorFlow 2.4 เวอร์ชัน Fork ที่ Apple ได้ปรับแต่งให้สามารถทำงานได้ดีขึ้น บนเครื่องคอมพิวเตอร์ที่ใช้ชิป M1 (รวมทั้งรุ่นที่ใช้ CPU Intel) ทำให้เราสามารถดึงประสิทธิภาพ CPU และ GPU 8 Core ของ M1 ออกมาได้อย่างเต็มที่

Requirements

เพื่อจะติดตั้ง TensorFlow เวอร์ชัน Fork เราจะต้องเตรียม Software ต่างๆ ให้พร้อม ดังนี้

macOS 11.0+
Xcode Command Line Tools
Python 3.8

โดยเราสามารถตรวจสอบ Version ของ macOS ได้จากคำสั่ง sw_vers -productVersion

sw_vers -productVersion

และตรวจสอบ Xcode Command Line Tools ด้วยคำสั่ง which xcrun

which xcrun

ซึ่งถ้าใน Terminal ของเราไม่แสดง Path /usr/bin/xcrun ตามภาพด้านบน จะต้องมีการติดตั้ง Xcode Command Line Tools ก่อน ด้วยคำสั่ง xcode-select --install ครับ

xcode-select --install

สำหรับ Python 3.8 เราจะติดตั้งมันด้วย Conda จาก Miniforge (https://github.com/conda-forge/miniforge#miniforge3)

โดยเลือก Download Miniforge ที่จะติดตั้งแบบ arm64 (Apple Silicon) แล้วรันโปรแกรมด้วยคำสั่งดังนี้

chmod +x Miniforge3-MacOSX-arm64.sh

./Miniforge3-MacOSX-arm64.sh

ปิดแล้วเปิด Terminal ขึ้นมาใหม่ ซึ่งเมื่อติดตั้ง Miniforge เสร็จแล้วเราควรได้ผลลัพธ์คล้ายภาพด้านล่างเมื่อใช้คำสั่ง which python และ which pip เพื่อตรวจสอบ Path ของ Python และ pip

which python

which pip

พิมพ์ python ใน Terminal และดู Activity Monitor เพื่อยืนยันว่ามันถูกรันอยู่บน Apple Architecture หรือไม่

ซึ่งจะเห็นว่า Python ที่ติดมากับ Miniforge จะเป็น Python 3.9 ดังนั้นเราจะติดตั้ง Python 3.8 บน Environment ใหม่ด้วยคำสั่ง conda env create

  • ก่อนอื่น Update Conda เป็น Version ล่าสุด ด้วยคำสั่งดังนี้
conda update -n base -c defaults conda
  • ดู Version ของ Conda
conda -V

environment.yml

เพื่อจะสร้าง Environment ใหม่ เราจะเตรียมรายการของ Library ที่ต้องติดตั้ง โดยบันทึกลงไฟล์ environment.yml ดังนี้

name: deep_workshop1
channels:
  - conda-forge
  - nodefaults
dependencies:
  - grpcio
  - h5py
  - ipython
  - numpy
  - pip
  - python=3.8.6
  - scipy
  - termcolor
  - typeguard
  - wheel
  - absl-py
  - astunparse
  - python-flatbuffers
  - gast
  - google-pasta
  - keras-preprocessing
  - opt_einsum
  - protobuf
  - tensorboard
  - tensorflow-estimator
  - termcolor
  - typing_extensions
  - wrapt
  - pandas
  - matplotlib
  - scikit-learn
  - jupyterlab

Create Conda Environment

สร้าง Conda Environment ชื่อ deep_workshop1 ด้วยคำสั่งดังนี้

conda env create --file=environment.yml

Install TensorFlow 2.4

ไปที่ tfm1 Environment ด้วยคำสั่ง conda activate tfm1 แล้วพิมพ์ python ใน Terminal และดู Activity Monitor เพื่อยืนยันว่า Python 3.8 ถูกรันอยู่บน Apple Architecture หรือไม่

conda activate deep_workshop1

ติดตั้ง TensowFlow 2.4 ด้วยคำสั่ง pip install

pip install --upgrade --force --no-dependencies https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha2/tensorflow_addons_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha2/tensorflow_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl

ทดสอบ GPU

  • สร้าง Project ชื่อ deepbasic_pj โดยใช้คำสั่ง mkdir deepbasic_pj แล้วไปยัง Folder ดังกล่าว
  • เปิด Jupyter Notebook
jupyter notebook
  • สร้าง Notebook โดยคลิ๊กที่ New->Python 3 แล้วกดที่ Untitled พิมพ์ชื่อไฟล์ที่ต้องการจะ Save แล้วกด Rename
  • Import Library ที่ต้องใช้
import tensorflow as tf
from tensorflow.python.compiler.mlcompute import mlcompute
from tensorflow.python.framework.ops import disable_eager_execution
  • ตรวจสอบ TensorFlow Version
tf.__version__
  • ตรวจสอบการทำงานของ TensorFlow กับ Apple ML Compute
mlcompute.is_apple_mlc_enabled()
mlcompute.is_tf_compiled_with_apple_mlc()
  • Disable TensorFlow ในโหมด Eager Execution ที่ทำให้รันทีละคำสั่งได้เหมือนการรันโปรแกรมปกติ
disable_eager_execution()
tf.executing_eagerly()
  • Config ให้ Train Model บน M1 GPU
mlcompute.set_mlc_device(device_name='gpu')

การติดตั้งบน macOS (ไม่ใช้ GPU)

สำหรับ macOS เราจะต้องติดตั้ง Xcode Command Line Tools ก่อน ดังต่อไปนี้

  • ตรวจสอบ Xcode Command Line Tools ด้วยคำสั่ง which xcrun
which xcrun

ซึ่งถ้าใน Terminal ของเราไม่แสดง Path /usr/bin/xcrun ตามภาพด้านบน จะต้องมีการติดตั้ง Xcode Command Line Tools ก่อน ด้วยคำสั่ง xcode-select --install แล้วคลิ๊ก Agree ครับ

xcode-select --install

เบื้องต้นเราจะสร้าง Environment ชื่อ deep_workshop1 สำหรับรัน Python Version 3.8 โดยที่มี Library ต่างๆ ได้แก่ Tensorflow, Scikit-learn รวมทั้ง Jupyter Notebook เช่นเดียวกันกับการติดตั้งบน Windows โดยมีขั้นตอนดังต่อไปนี้

  • เพื่อจะทำงานกับ Zsh Shell หรือ Bash Shell บน macOS ให้รันคำสั่งต่อไปนี้
source /opt/miniconda3/bin/activate

แล้วรันคำสั่ง conda init

#สำหรับ Zsh Shell 
conda init zsh

#สำหรับ Bash Shell
conda init
  • Update Conda เป็น Version ล่าสุด
conda update -n base -c defaults conda
  • ดู Version ของ Conda
conda -V
  • สร้าง Environment ใหม่ ตั้งชื่อเป็น deep_workshop1 สำหรับรัน Python Version 3.8 และติดตั้ง Jupyter Notebook โดยใช้คำสั่ง conda create -n
conda create -n deep_workshop1 python=3.8 jupyter
  • พิมพ์ y แล้วกด Enter เพื่อสร้าง Environment ใหม่
  • เข้าใช้ Environment ใหม่ โดยพิมพ์คำสั่ง conda activate ตามด้วยชื่อ Environment
conda activate deep_workshop1
  • ตรวจสอบ Python Version โดยพิมพ์คำสั่ง python แล้วกด Enter
python
  • กลับมายัง Command Line อีกครั้งโดยกด Ctrl+d
  • ติดตั้ง Tensorflow 2.4
pip install tensorflow==2.4
  • ดู Version ของ Tensorflow โดยพิมพ์ python กด Enter แล้วพิมพ์คำสั่งต่อไปนี้
import tensorflow as tf
tf.__version__

กด Ctrl+d เพื่อออกมายัง Command Line

  • ติดตั้ง scikit-learn
conda install scikit-learn
  • สร้าง Project ชื่อ deepbasic_pj โดยใช้คำสั่ง mkdir deepbasic_pj แล้วไปยัง Folder ดังกล่าว
mkdir deepbasic_pj
cd deepbasic_pj
  • เปิด Jupyter Notebook
jupyter notebook
  • สร้าง Notebook โดยกดที่ New->Python 3
  • พิมพ์ print('Hello Jupyter Notebook') ใน Cell แรก แล้วกด Shift+Enter เพื่อรันโปรแกรมและสร้าง Cell ใหม่ไปพร้อมกัน
`
  • กดที่ Untitled พิมพ์ชื่อไฟล์ที่ต้องการจะ Save แล้วกด Rename
  • กลับไปแก้ไข Code ใน Cell แรกเป็น print('Hello Jupyter Notebook again') แล้วกด Ctrl+Enter เพื่อรันโปรแกรมโดยไม่มีการสร้าง Cell ใหม่

สรุป

ในบทความนี้ผู้อ่านได้เข้าใจเนื้อหา Introduction to AI ดังนี้

  • AI และการนำวิธีการเรียนรู้ทาง Machine Learning มาแก้ปัญหา
  • ความแตกต่างระหว่าง Machine Learning กับ Traditional Programming
  • ชนิดของ Machine Learning แบบต่างๆ

รวมทั้งได้ติดตั้งเครื่องมือที่จำเป็นสำหรับการทำ Workshop ในงานทางด้าน AI โดยใช้ Python และ Jupyter Notebook โดยในบทความต่อไปเราจะทดลองสร้าง Model แบบ Deep Learning กันครับ