# 人工智慧導論
###### tags: `Machine Learning`
## 認識 AI
* 把問題化為函數(function)
* 輸入可能是單一文數、圖片矩陣、過往歷史文數紀錄、過往字符加先前狀態
* 找出定義域與值域的映射
* 收集歷史資料
* 過度考古(訓練):**過適/過擬合(overfitting)**
* 資料類型
* 訓練資料 training data
* 測試資料 test data
* 設計函數
* 機器學習 machine learning
* 神經網路 neural network
* 訓練
* 訓練成果誤差評估:**損失函數(loss function)**
* $L(\theta)=\sum_{i=1}^{n}(\overline{P_iQ_i})^2$
* 限制
* 電腦無法設計問題
* 電腦無法設計人工智慧
* 經典演算法
* 問題類型
* 分類問題 classification
* 未知新訊息歸納入已知資訊
* 都屬於監督式學習(supervised learning)
* 分群問題 clustering
* 一群沒有分類或群體的資料透過特徵區分
* 非監督式學習(unsupervised learning)
* 分類結果:標籤(label)
* 函數參數:特徵(feature)
* 結果
* 預測 predition
* 線性分類器 linear classifier:迴歸向量
* 超平面 hyperplane:多維迴歸分類平面,一個特徵形成一個維度
* 非線性分類器 nonllinear classifier
* 支持向量機 support vector machine, SVM
* 分類演算法
* 找出在兩個分類間可平移出最大寬帶線性分類器的支持向量
* 核函數(kernal function)可以非線性,支援非線性分類
* 決策樹 decision tree
* 從根節點經由分支進行決策
* 分類特徵經由決策樹後可以變成分類規則
* 資訊獲利(information gain):最高整體準確率的特徵分類方式,需要藉由迭代測試生成
* K 近鄰演算法 K-Nearest Neighbor, KNN
* 監督式學習分類演算法
* 利用樣本點與點之間的距離判斷新的資料像哪類
* k: 參考幾個最接近的鄰居
* 原則上奇數
* K 平均分群法 K-means clustering
* 分群演算法
* 找分群重心位置
* 先隨機分群,取重心後再計算各點距離重心位置重新分類
## 基本神經網路架構
* 維度:輸入與輸出的變數數量
* 人工神經網路 Artificial Neural Networks, ANN
* 發想源自生物神經網路
* 對新舊事物產生連結,得到學習、記憶、推理、判斷
* 三階級
* 輸入層:接收刺激向後傳遞
* 隱藏層:資料轉換整理
* 輸出層:辨識結果
* **神經網路函數學習機的設計重點**
* 隱藏層數量
* 每隱藏層神經元數量
* 前饋神經網路 Feedforward Neural Network:一層一層向下傳遞,每個神經元的動作類似
* 輸入:$\sum_{i=1}^nw_ix_i+b$
* $x$: 上一層傳來輸入
* $w$: 針對每筆輸入設定的權重
* $b$: 為了讓所有神經元都能被激發設定的偏值(bias)
* 處理:啟動函數 activation function
* 把輸出變成非線性
* 如讓小刺激歸零、大刺激變一
* 輸出:損失函數 loss function, L
* 輸出結果與實際的差距
* 梯度下降法 gradient descent/反向傳播法 backpropagation:使 L 變最小
* 找出區域極小值
* $w\to w-rL'(w)$
* $r$: 學習速率,調整的步進值
* 操作訣竅:偏微分,每個參數獨立看待,把其他參數當常數
* 表記為多維度的梯度(gradient)向量
* 深度學習 deep learning:具有多個(三或以上)隱藏層
* 三大神經網路
* (全連結)神經網路 (fully connected) neural network
* 每一層的神經元都與下一層的所有神經元相連
* 也叫標準神經網路
* 最常見
* 最萬用
* 針對特定應用表現不如其他
* 可搭配其他使用
* 捲積神經網路 Convolutional NN
* 最適合照片影片
* CNN 之父:楊立昆
* 特殊結構
* 捲積層 convolution layer
* 看出是否具有某些特徵並依強度賦值的過濾器 filter
* 池化層 pooling layer
* 把圖片概略分區,每一區只看最具代表性的值
* 目前最常見的是看最大值的最大池化層 max pooling layer
* 在這兩層後再接上全連接層
* 遞迴神經網路 Recurrent NN
* 有記憶能力
* 隱藏狀態 hidden state:先前輸出結果的暫存
* 每個神經元的輸出會送回同一層的所有神經元
* Chat AI:所有輸入完成後逐字生出回復
## 圖像識別
* 預處理 preprocessing
* 縮放 scaling
* 旋轉 rotation
* 捲積運算
* 移動-對齊-計算純量積
* 空間濾波 spatial filtering
* 濾波器與原圖像做捲積運算
* 濾波器又叫遮罩 mask 或核心 kernal
* 種類
* 平滑濾波器 Smoothing Filter:模糊化 blurring、減少雜訊 noise reduction
* 平均濾波器 average filter:每格權重相同
* 權重平均濾波器 weighted average filter:中心權重較高、邊緣較低
* 中值濾波器 Median Filter:取遮罩的中間值做輸出
* 索伯濾波器 Sobel Filter:邊緣檢測、左右/上下的差距
* AlexNet
* 2012 ILSVRC(ImageNet Large Scale Visual Recognition Competition) 冠軍
* 捲積層分成 RGB 三通道,模型主要部分
* 多個捲積層的輸出會讓特徵逐漸明顯形成特徵圖 feature map
* 池化層壓縮特徵圖留下主要特徵,降低運算負擔
* 全連接層作最後分類使特徵不受圖片中位置影響
* 啟動層 (activation layer) 分類特徵空間解決線性系統疊加性 (superposition property)
* 非線性啟動函數
* Sigmoid (S 函數):$S(x)=\dfrac1{1+e^{-x}}$
* tanh (雙曲正切函數,hyperbolic tangent):$\tanh x=\dfrac{e^x-e^{-x}}{e^x+e^{-x}}$
* **ReLU (線性整流函數,Rectified-Linear):**$f(x)=\max(x,0)$
* 標準化指數層(softmax layer)將輸出結果標準化到 0 與 1 之間的值
* 訓練
* 訓練集調整參數
* 驗證集調整結構
* 測試集測試成果
* ImageNet 世界最大圖像資料庫
* 過擬合 overfitting
* 資料增強 data augmentation:調整圖片讓一張看起來像是很多張
* 丟棄 dropout:隨機停止少數神經元運作
* 應用
* 影像整理
* 圖片影片網
* 資料庫
* 行銷
## 視訊識別
* 動作估計 motion estimation
* 使用動作向量(motion vector)表示兩取樣時間中向素、區塊、物件的水平垂直位移量
* 前提假設
* 物件兩影格間的位移量不會太大
* 物件不會隨時間改變顏色
* 物件不會隨時間改變形狀
* 切分區塊,在搜尋範圍內尋找絕對值相差最少的區塊
* RGB 轉換成向量資料量會變成原來的 2/3
* 物件追蹤 object tracking
* 找到特定物件隨時間在空間的位置變化
* 把滑動視窗(滑窗,sliding windows)掃過圖片的結果應用在視訊影格,特徵差異小於閾值(threshold)就視為相同物件
* 誤差絕對值
* 誤差平方和
* 將特徵圖做等比例切割,讓不同大小的物件有同樣大小的特徵圖
* 行為識別 action recognition
* 識別視訊中發生的行動
* 難題
* 方位、光線、角度影響線索採集
* 深度神經網路更能克服不同環境變化
* 同一類別行為的個別差異可能極大
* 分析所有必要動作的完備性
* 不同取樣率下,不同類別行為可能部分特徵極為相似
* 低取樣率得到部分資訊,搭配高取樣率的動作估測結果
* 干擾物件多
* 篩選機制
* 架構
* 以較低再採樣率對視訊/動作採樣
* 單影格再採樣
* 多影格再採樣
* 原始視訊
* **多影格混合**
* **多影格分組混合再採樣**
* 動作資訊
* 輸入神經網路提取特徵
* 分類器取得識別結果
* 注意力機制 attention mechanism
* 遮罩
## 音訊識別
* 音訊:基頻(fundamental frequency)介於 20Hz 到 20kHz
* 電腦對音訊儲存
* 取樣率 sample rate
* 一秒內取樣點數
* 8kHz:電話
* 16kHz:語音識別錄音
* 44.1kHz:音樂CD
* 位元解析度 bit resolution
* 每個取樣點的位元數
* 8or16
* 聲道數 number of channels
* 單聲道 mono
* 雙聲道/立體聲 stereo
* 聲學特徵
* 音框 frame:音訊切分單位,至少要比基本週期(fundamental period)長
* 音框率 frame rate:每秒音框數量,越大所需資源越多
* 音量 volume:強度(intensity)或能量(energy),震幅,單位分貝(decibel, dB)
* 音高 pitch:高低,每秒基本週期個數
* 半音差 semitone:$pitch=69+12\log_2(\dfrac{freq}{440})$
* 音色 timbre:內容,發音方式,以不同頻率的能量分布表示
* 快速傅立葉轉換(FFT)將訊號轉換成幅度頻譜(magnitude spectrum),但常有諧波(harmonics)
* 語音識別時使用梅爾倒頻譜係數(mel-frequency cepstral coefficients, MFCC)
* 語音識別
* 使用者
* 語者相關 specker dependent:限定特定人使用
* 語者獨立 specker independent:不限定
* 功能
* 語音命令 voice command:從有限命令集找出使用者最有可能下達的指令
* 關鍵詞偵測 keyword spotting:從語句中找出特定關鍵詞彙
* 聽寫 dictation:從語句生成逐字稿
* 對話 dialog:從語句生成聊天回應
* 語者相關的語音命令系統
* 最簡單
* 動態時間扭曲 dynamic time warping, DTW
* 一種動態規劃
* 根據音色比對
* 針對語速伸縮
* 達到最好對位(alignment)
* 錄樣本時進行端點偵測(endpoint detection)計算 MFCC
* 語者無關的對話系統
* 最複雜
* 語音助理
* 使用不同聲學模型代表不同音色,估算MFCC向量的機率密度(probability density)
* 使用高維度機率密度函數(PDF)建立聲學模型
* 最常用方法:最大似然率估測法 maximum likehood estimate, MLE
* 計算模型最佳平均向量(mean vector)、共變異矩陣(covariance matrix)與函數加權權重(weighting factor)
* 最常用模型:高斯混合模型 Gaussian mixture models, GMM
* 高斯 PDF 的加權平均
* 進階模型:隱藏式馬可夫模型 hidden Markov models, HMM
* 描述序列(sequence)的PDF
* 由數個狀態(state)組成
* 狀態轉移由轉移機率表示(transition probability)
* 不知音框的MFCC狀態,需用 segmental k-means 估算似然率
1. 對於每語句,用動態規劃將MFCC向量分配到每個狀態
2. 對於每狀態,根據MFCC計算對應的GMM最佳參數
3. 根據每個音框分配的狀態,計算tp matrix
4. 回到步驟1.,直到所有參數收斂
* 能表示發音隨時間變化
* 音素 phoeme:最小發音單位,可以建立更準確音學模型
* 單音素 monophone:粗略,所需資料與運算需求皆小
* 雙連音素 biphone:右相關(right-content deppendent, RCD)
* 三連音素 triphone:左右相關
* 似然率:維特比搜尋(Viterbi search)
* 動態規劃演算法
* 最短距離
* 聽寫
* 樹或圖建立詞格(word lattice)
* 新方法:DNN
* GMM-HMM變成DNN-HMM
* 使用GPU
* 哼唱選歌 Query By Singing/Humming, QBSH
* 音高追蹤(pitch tracking)
* 聲門振動頻率作為音高基本頻率
* 自相關函數 audo-correlation function, ACF:對音框反覆平移與內積得到曲線,兩個最大值位置的區間間隔即是基本週期
* $acf(\tau)=\sum_{i=0}^{n-1-\tau}s(i)s(i+\tau)$
* 音高向量與資料庫比對
* 線性伸縮 linear scaling, LS
* 進階方法:DTW
* 難題
* 複音音訊音樂(polyphonic audio music)的音高追蹤
* 資料庫運算量:雲端運算 cloud computing
* 原生音高準確度(raw pitch accuracy)仍沒有顯著進步
* 應用
* 醫療診斷
* 音訊事件偵測
## 自然語言處理 Natural Languague Processing, NLP
* 斷詞處理
* 決定詞彙邊界
* 中央研究院 中文斷詞系統
* 史丹佛大學 Stanford CoreNLP
* 詞性(part of speech, POS)標記
* 詞彙性質
* 中研院 平衡語料庫 詞類標記集
* 詞意消歧
* 詞彙意思
* 語法剖析
* 詞彙成分(constituent)組成片語
* 輸出剖析樹(parse tree)
* 簡化:相依剖析(dependency parsing)
* 不必逐字標記的應用可只標記詞彙間關係
* 智慧問答系統
* 將問句與資料庫比對計算相似度輸出對應答案
* 問句與資料庫表示
1. 斷詞:擷取關鍵字構成詞袋(bag of word)
2. 斷詞+詞性標記:只保留某些詞性的詞彙構成詞袋
3. 斷詞+詞性標記+相依剖析
* 兩表示的比較與評分
* 雅卡爾係數(Jaccard coefficient): $J=(A,B)=\dfrac{|A\cap B|}{|A\cup B|}$
* Stanford CoreNLP 相依剖析
* 代名詞處理:代名詞消解(pronoun resolution)
* 資料庫:倒置列表(inverted list)記住關鍵字出現的問題
* 深度學習方法
* 詞向量(word vector):衡量詞彙關聯度,由詞嵌入(word embedding)產生
* 單詞組(word unigram)、雙連詞組(word bigram)、三連詞組(word trigram)等不同尺寸過濾器捲積出不同特徵
* 池化出句向量
* 餘弦相似度(cosine similarity)計算關聯度
* 參考:Neural Network Methods for Natural Language Processing, Yoav Goldberg
## 知識發現 knowledge discovery
* 知識發現流程
1. 資料篩選 data selection:統一資料格式、選出目標
2. 資料預處理 data preprocessing:去除缺失、雜訊與不完整資料
3. 資料轉換 data transformation:轉換成資料探勘演算法的格式
4. 資料探勘 data mining:探勘隱藏樣式、建立預測模型
5. 知識評估 knowledge evaluation:評估知識正確性可用性
* 關聯規則探勘 Association Rule Mining
* 找出相關組合
* $信賴度(\Bbb{confidence})=\dfrac{規則中前項與後項共同出現的次數}{前項出現的次數}$
* 最小信賴度 minimum confidence:篩選出信任度高於特定值
* 支持度 support:規則在整個資料庫裡的占比
* 最小支持度 minimum support:篩選出支持度高於特定值
* 步驟
1. 找出支持度夠高的頻繁項目集
* 窮舉法 method of exhaustion
* 先驗演算法 Apriori Algorithm
* FP-growth
2. 生成信賴度夠高的關聯規則
* 應用
* 購物習慣分析
* 疾病關聯分析
* 機台異常分析
* 入侵偵測
* 基因表現製藥分析
* 序列樣式探勘 Sequential Pattern Mining
* 找出隨時間變化的序列樣式
* 以時間為分類的關聯規則
* 應用
* 購物預測
* 網站推薦
* 移動行為預測
* 疾病診斷
* 用藥指南
* 分類模型 classification modeling
* 根據已知模型對資料進行分類
* 決策樹 decision tree
1. 樹的建構:將所有訓練集放在根節點,根據選定特徵由上向下遞迴把訓練集分開,特徵可選擇分開資料後錯誤較少的
2. 樹的剪枝:刪除包含雜訊與異常值(outliner)的分叉
* 新資料進入時就依各特徵依序判斷
* 支援向量機 support vector machine
* 找到一個可以分開資料的超平面(hyperplane)
* 支援向量:代表類別邊界的資料點
* 決策邊界 decision boundary:距離各個支援向量最遠的邊界位置
* 非線性可分時要使用核技巧(kernal trick)
* ANN
* 應用
* 顧客分析
* 推薦系統
* 醫學診斷
* 財經決策
* 電腦視覺
* 聚類 clustering
* 不預先含有分類標籤
* k-means
1. 初始化:資料正規化,隨機選K個資料點作為群中心
2. 分群:將所有其他資料點分配給最近的群中心
3. 更新中心:用群內資料點更新群中心位置
4. 終止:重複分群與更新中心直到沒有資料被重新分配
* 階層式聚類 hierarchical clustering
* 凝聚式 agglomerative:bottom-up
1. 每筆資料視為各自一個群
2. 找到最近的兩群合併
3. 計算新群與舊群之間的距離
* 單一連接法 Single Linkage Method:不同群兩點最大距離
* 完全連接法 Complete Linkage Method:不同群兩點最小距離
* 平均連接法 Average Linkage Method:不同群各點距離總和平均,抗雜訊
* 中心點連接法 Centroid Linkage Method:不同群中心點距離,抗異常值
4. 重複 2. 與 3. 直到達到目標群數量
* 分裂式 divisible:top-down
* 應用
* 市場行銷
* 城市規劃
* 犯罪分析
* 社群網路分析
* 人員配置
## 創作 AI
* 生成對抗
* 對抗式學習 adversarial learning
* 藉由生成、判別兩角度對抗來達成進步
* 生成模型(generative model)的中心思想
* 希望能產出資料沒有的東西
* 資料空間 data space:所有可能資料點(data point)的集合
* 資料分布 data distribution:資料點在資料空間中的出現趨勢
* 生成對抗網路 generative adversarial network, GAN
* 生成器 generator:從潛在空間(latent space)中生成資料
* 判別器 discriminator:評分系統
* 訓練方式
* 固定生成網路,訓練判別網路
* 希望提高分辨生成與真實的區別
* 固定判別網路,訓練生成網路
* 希望讓生成的東西難以被分辨
* 條件式生成對抗網路 conditional GAN:可根據指令生成
* 藉由指令向量對生成空間進行限制
* 循環式生成對抗網路 CycleGAN:圖片風格轉換
* 其他技術
* 變分自編碼器 Variational Autoencoder, VAE
* 自回歸模型 autoregressive model
* 以流為基礎的生成模型 flow-based generative model
## 強化學習 reinforcement learning, RL
* 歷史:1970 專家系統(expert system)
* 背景:行為主義心理學 Behavioristic Psychology
* 制約刺激/反應
* 代理人(agent)從環境獲取狀態(state)決定行動(action),環境則依行動給予獎勵(reward)
* Q-learning
* 華金斯 Chris Watkins
* Q-table:W(action, state)
* $W'(a,s)=W(a,s)+v(s')$
* 接收新刺激時先根據先前經驗做出動作a,再根據這次的回饋調整記憶矩陣
* 列(row)為狀態,行(column)為行動,中間各格為獎勵值
* 運作流程
* 初始化:把表格全部填成0
* 選擇一個行動執行
* 量測獎勵並記錄
* 更新Q表
* 試誤法(trial and error)
* 貝爾曼方程式 Bellman Equation
* $newQ(s,a)=Q(s,a)+\alpha[R(s,a)+\gamma maxQ'(s',a')-Q(s,a)]$
* $\alpha$:學習率
* $\gamma$:折價因子
* $maxQ'(s',a')$:新狀態與行動下選擇最大Q值的方法
* 應用
* 遊戲人工智慧
* 對弈遊戲
* 參考
* 機率學
* 馬可夫鏈 Markov chain
* 馬可夫程序 Markov process
* 套件
* Deeplearning4j(Java)
* TensorFlow(Python)
* Keras(Python)
* MXNet(Python)
* PyTorch(Python)
* OpenAI Gym
## 未來世界
* 智慧辦公室
* 影像聲音文件全紀錄
* 語音辨識
* 自然語言處理
* 影像識別擷取文字
* 智慧教育
* 學習歷程
* 專屬學習計畫
* 智慧娛樂
* 智慧家庭
* 物聯網智慧感測器
* 醫療巨量資料與預防醫學
* 金融管理
* 想要從事人工智慧領域工作精進技術?
* 基礎學科專業
* 數學、物理學
* 應用學科專業
* 計算機科學、心理學、生物學
* 跨領域應用