2023 AI ML - chanandrew96/MyLearning GitHub Wiki

** Use Anaconda to maintenance your Python Library to prevent library conflict **

Anaconda

Machine Learning

Dependency on Microsoft C++ 14.0

Microsoft C++ 14.0 Downlaod
Execute conda install libpython m2w64-toolchain -c msts2
(Conda required)
CSDN Discuss

Turi Create on Windows

  • Enable Windows Subsystem via PowerShell command Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  • Install Windows Subsystem for Linux (WSL2)
  • Found Ubuntu on Windows Store

Install Python on WSL

Install Python 3.9.1 on WSL

  • Follow all the instruction & use the version provided
  • Use Python 3.6/3.7 in virtual environment

Install Python on Ubuntu

How to Install Python 3.8 on Ubuntu 18.04

Some Keyword U Must Know

模型 (Model)

神經網絡 (Deep Neural Network)

DeepNeuralNetworkImage
深度學習其中一個元素
包含了:

  1. 輸入層 (Input Layer)
  2. 隱藏層/中間層 (Hidden Layer)
  3. 輸出層 (Output Layer)

參考資料

節點 (Neurons)

  • 每一層當中會包含多個節點 (Stacked Components - Neurons),基於識別結果該節點會有不同的對應結果
    • 輸入層 (興奮 Firing/靜息)
    • 隱藏層/中間層
    • 輸出層 (興奮度 - 用於對比不同節點的結果)
  • 每個節點都內置了自己的狀態條件 (Positive: Threshold / Negative: Bias)
  • 當結果減去Threshold或加上Bias後達到條件便會Fire該節點
  • Bias在每層中都應保持一致
  • 每個節點可以理解為一個"考慮因素"

輸入層 (Input Layer)

  • 主要用於獲取輸入信息
  • 輸入層只有一層但可有多個輸入點
  • 基於不同的輸入,各節點會得到興奮/靜息的狀態

隱藏層/中間層 (Hidden Layer)

  • 主要進行特征提取
  • 會有多層處理,處理輸入層輸入的資料後應比輸入層的點少
  • 每個節點對於輸入層的興奮有不同的接收權重 (Weight)
  • 節點中會對不同的神經單元配給不同的權重,影響識別偏向

輸出層 (Output Layer)

  • 主要對接隱藏層並輸出模型結果
  • 經隱藏層處理後最後所輸出的結果,應有最少的點
  • 根據隱藏層的興奮和權重回傳不同的興奮度
  • 節點會對各個隱藏層節點配給不同的權重,影響輸出結果偏向

權重 (Weights)

  • 等於敏感度
  • 隱藏層不同的節點都有各自的權重
  • 以權重判斷哪一個輸入較為重要 (當該輸入節點Fire時,最後的計算結果會因權重的大小改變)
  • 調整權重以避免因不同的Noise影響識別結果
  • 監督學習下,權重可以理解為損失函數/代價函數 (Cost Function),計算學習後預測值加上學習資料中偏差值(誤差)的平方
  • 監督學習中就是透過學習資料減少模型預測的誤差
    WeightsSample
    在上圖中,X0為Bias值,X1至X3為不同的輸入,W為不同的權重。當該輸入為正(1)時,該權重就會加至計算結果,當所有輸入加上(X1至X3)大於Bias(X0)時,該節點就會Fire/得到為正數的值

損失函數/代價函數 (Cost Function)

  • 用於衡量模型是否合理

Activation Functions

用於改變計算結果 FormulaOfCalculateTheNeuron
理論上計算節點的結果可以由"負無限"到"無限",但舉例我們用節點計算年齡時得出一個負數是不合理的(雖然我們仍可以這個數來介定該人是否年輕)
這個時候我們可以用ReLU function來把負數的可能刪去
PossibleResultOfCalculate
PossibleResultOfReLUFunction

ReLU Function

  • Activation Function的其中一種
  • 用於去除負結果

Sigmoid Function

  • Activation Function的其中一種
  • 用於限制結果介乎於0 - 1
    SigmoidFunction

Tanh Function

  • Activation Function的其中一種
  • 用於限制結果介乎於-1 - 1
    TanhFunction

時序特征 (Time Series)

  • 上下文信息
  • 單詞多義時,一般的神經網絡只會參考訓練時較多出現的結果,但現實情況是需要看上下文信息分辨

時間線

  • 可以理解為文字在文本中出現的時間

RCNN (Region-based Convolutional Neural Network)

參考資料

Tensor 張量

Tensor是使用統一類型的多維度矩陣(Multi-dimensional arrays with a uniform type),作為ML的基本單位
Tensor類近於NumPy的矩陣(Array),而NumPy只能於CPU上運行
Tensor無法進行更新(Update),只可以新建一個新的Tensor
在Program層面上Tensor相近於Object的存在

Scalar / Rank-0 Tensor

Scalar只儲存了單一值(Single Value),沒有軸線(Axes)

# Tensorflow
rank_0_tensor = tf.constant(4)

Rank 0 Tensor

Vector / Rank-1 Tensor

Vector儲存一個列表的值(List of Value),有一條軸線(One Axis)

# Tensorflow
rank_1_tensor = tf.constant([2.0, 3.0, 4.0])

Rank 1 Tensor

Matrix / Rank-2 Tensor

Matrix儲存帶有列表或值的列表,有兩條軸線(Two Axes)

# Tensorflow
rank_2_tensor = tf.constant([1, 2], [3,4], [5, 6](/chanandrew96/MyLearning/wiki/1,-2],-[3,4],-[5,-6), dtype=tf.float16)

Rank 2 Tensor

帶有多條軸線的Tensor

Tensor不限於兩條軸線,下面是一個3-axes Tensor的例子

rank_3_tensor = tf.constant([
[[0, 1, 2, 3, 4],
 [5, 6, 7, 8, 9]],
[[10, 11, 12, 13, 14],
 [15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
 [25, 26, 27, 28, 29]],])

當Tensor帶有多於兩條軸線時,我們可以用不同的方式進行可視化
Rank 3 tensor in NumPy Rank 3 tensor in Front Rank 3 tensor in Block

Tensor的運算(Basic Math)及比較(Ops)

我們可以基於Tensor作基本的運算和比較

Tensor 軸線排列次序 (Indexing)

TensorFlow使用與Python相同的Indexing方法
Tensor的軸線排列大多由全局排到本地(Tensor Axis ordering from global to local)就如下圖所示
根據不同的框架也有對應的功能可以調換軸線的排列次序
Order of Tensor Axis

重塑Tensor形狀(Manipulating/Reshaping Tensor)

重塑Tensor時,新的Shape的元素總數量必須與舊有的相同
原則上新的Shape應該與舊有的大致相近如下圖
Reshape Good Result 1 Reshape Good Result 2 Reshape Good Result 3
上面的結果可見重塑後每層的數據與舊有相同,重塑的只有單層的數據排列方法
Reshape Bad Result 1 Reshape Bad Result 2 Reshape Bad Result 3
而上面的結果是一個不良的重塑結果,可見重塑後每層的數據來自不同的層級

為什麼和什麼時候我們需要重塑Tensor?

以下答案由ChatGPT提供

Point Descripiton
Compatibility Sometimes, two tensors need to have the same shape or dimensions to perform certain operations. For example, when concatenating two tensors along a particular dimension, they need to have the same size along that dimension. 當我們需要對多個Tensor進行運算處理時通常需要它們有相同的Shape,所以我們需要重塑以繼續運算。
Model requirements Different machine learning models may require input tensors of different shapes or dimensions, depending on their architecture. Reshaping the input tensor to fit the model's requirements can improve its performance. 基於不同的模型所需求的Tensor Shape也有所不同,所以我們需要重塑以符合所需的Shape。
Memory optimization Reshaping can also be used to optimize memory usage. For example, if we have a tensor with a large number of elements but only need to perform operations on a small subset of them, we can reshape the tensor to only include the relevant elements.
Visualization Reshaping can be useful for visualizing the data. For example, a 3D tensor can be reshaped into a 2D tensor for easier visualization on a 2D screen.

Tensor和NumPy Array間的轉換

要將Tensor轉換為NumPy Array,我們可以使用np.arraytensor.numpy功能

np.array([YOUR_TENSOR])
[YOUR_TENSOR].numpy()

Tensor的型態(Shapes)

基本的Tensor要求每條軸線上的元素(Element)量相同以形成一個長方體
一些有關於Tensor的Shapes的概念

Vocab Description TF Code For the Value
Shape 每條軸線上的元素數量(The length/number of elements of each axes) [YOUR_TENSOR].shape
Rank Tensor裡面軸線(Axes)的數量 [YOUR_TENSOR].ndim
Axis/Dimension Tensor裡的軸線/維度 [YOUR_TENSOR].ndim
Size Tensor裡元素的總數 tf.size([YOUR_TENSOR]).numpy()

Uniform Type 統一類型 / DType

Tensor中可支援的類型在不同的框架下有少量分別,但大多都支援以下類別:

  • floats / floating point
  • strings
  • complex 要查看不同框架下支援的類型可參考另一篇或各框架的官方文件
Tensor Reference

Introduction to Tensors
Pytorch 基本介紹與教學


神經網絡結構(Neural Network Architectures)

RNN

LSTM (Long short-term memory)

梯度消失問題 (Vanishing Gradient Problem)
參考資料

Transformer

  • 神經網絡結構(Neural Network Architectures)的一種
  • 表現比RNN好
  • 三大重點
    1. Encoder-decoder 的架構
    2. 注意力機制 (Attention)
    3. Transfer learning
GPT (Generative Pretrained Transformer)
  • 自然語言處理架構的一種
  • 由OpenAI開發的深度學習模型
ChatGPT
BERT (Bidirectional Encoder Representations from Transformers)
  • 自然語言處理架構的一種

注意力機制 (Attention)


單向關係 (Unidirectional Relationship)

  • 在說明兩個名詞間的互動時只能用單方面的動詞,如:
    • Email Service "installed on" the server
  • 如果需要達到"互動"的效果就需要加上多條情況,如:
    • Email Service "installed on" the server
    • Server "installed with" the email service

雙向關係 (Bidirectional Relationship)

  • 在說明兩個名詞間的互動時不需要用多條情況說明該互動

單向/雙向關係參考資料

自然語言處理應用 (NLP - Natural Language Processing)

深度學習

框架:

  • PyTorch
  • TensorFlow
  • JAX

HuggingFace

  • 用於自然語言處理應用的主流工具
  • 支援模型在不同的深度學習框架間轉換,主要支援:
    • PyTorch
    • TensorFlow
    • JAX

Hugging Face Hub

  • 用於存放已訓練好的AI模型

Hugging Face Library

  • Hugging Face所提供的庫
  • 三個常用的Library:
    1. Transformer
    2. Tokenizers
    3. Datasets
HuggingFace - Transformer
HuggingFace - Tokenizers
HuggingFace - Datasets
HuggingFace 參考資料