# AI筆記 (期末考) ###### tags: `課堂筆記` # Chap 19 ## Supervised Learning (監督式學習) * 給定 N 個 pairs , 共有輸入以及結果,我們的目標為找到一個f 去逼近x 的真實取縣 :::success 這邊給予學習的定義: 如果學習的東西會得出 布林值的話,那這個問題為(classification)分類問題 如果學習的東西會得出 實數 的話,那這個問題為(Regression)回歸問題 ::: * Ockham's razor is: to **prefer the simplest hypothesis consistent with the data** ## Learning Decision Trees * 他是一種 Greedy divide_and_conquer 演算法,每次都會找最重要的 **參數** 參考 * 可以得到一個 **還算不錯** 的解法 * 每次進到下一層都會得到少一個參數(因為前一層把她拔掉了) Pseudo code 如下: ```javascript! function Decision_Tree_Learning(examples, attributes, parent_examples){ // It returns a Tree if(example == 'empty') return Plurality_Value(parent_examples); else if(all examples have the same classification) return the classification; else if(attributes == 'empty') return Plurality_Value(examples) else{ A = argmax_Importance(a,examples); tree = {a new decision tree with root test A}; for v in A{ exs = {every e} subtree = Decision_Tree_Learning(exs,attr-A,examples) // add a branch to tree with label (A = v_k) } return tree } } // Plurality_Value selects the most common output value among a set of examples braking ties randomly ``` ## Entropy 的意義: - 通常,這個可以用來表示一個空間裡面的亂度,如果數值越大,這個空間裡面包含的東西越多,而且會越亂 ## Evaluating and Choosing the Best Hyphothesis * 我們必須要定義甚麼是 "future data" 以及 "best",我們先利用簡易的定義: * There is a probability distribution over examples that remains stationary over time * 並且假設每一個E_J都是獨立且相同的 * 符合以上的假設我們稱它做 Independent and identically distributed : i.i.d :::info K-fold Cross-validation: ``` 首先把所有資料分成K個子集合,然後對她做K個回合的學習 每一次使用1/k 個資料點來做訓練,其他都當作驗證集 **當K = n 的時候,我們稱它做 Leave-one-out cross-validation** LOOCV ``` 當整體資料少得可憐的時候,LOOCV很重要 但是一直調參數,會導致data peeking的問題,而且訓練不夠嚴謹 ::: 也因以上的data peeking 的問題,如此一來我們現代的訓練通常都把它分成三個集合 * training * testing * validation ### 到底要怎麼選model, model selection * 複雜度的問題,太高--> overfitting 太低 --> too general ### 在計算 Error rate 的時候,如果考慮加權,可以更好的表示 F 的能力 * 假設有一個(x,y)出現的機率很低,這樣搞到loss 中會倒至學習效果不好 * 於是我們利用 GenLoss(h) 來表示你的Loss Function * ![](https://i.imgur.com/E1sNmYv.png) * 它的目的就是把所有機率都加總之後再考慮loss 但是大部分的時候我們都不知道資料要怎麼樣有加權直,所以利用平均數可以比較好(比較快)的表示loss **EmpLoss** ![](https://i.imgur.com/RUdf5yP.png) 基本上就是Loss 加總之後除N ## L1 regularization * it Tends to produce a sparce model ## Linearly separable 代表,如果這個資料可以被一條直線分類,即是 ## linearly separable 太武斷了,可以使其軟化(softening),利用logistic function ![](https://i.imgur.com/UmKllrt.png) ![](https://i.imgur.com/WXHmZzl.png) 如此一來,對於graph的描述可以變成曲線的型態,這樣一來,我們labeling的時候得到就不會是0 1 這種武斷的結果 ![](https://i.imgur.com/f0fX207.png) 最開始是假設內積 大於某個threadhold ,他就是1 反之則0 * 用這種logistic 方法去找出output 這種方法就是logistic regression * Learning rate 可以經由a(t) = 1000/(1000 + t) 隨著iteration 時間越長越小 ## Nonparametric Model (不具參數性的模型) * 之前都在描述有參數的模組,也就是如果有參數的話,就可以描述這個麼型,但這邊無法 * 我們不去找這些餐數,而我們用資料表示資料本身的特性 :::success 這個做法也稱作 Instance_based learning or memory based learning ::: 最簡單的作法為 ==查表法== 但如果用查表法的話,我們永遠都不知道X如果不再表中我們要怎麼做 ## K-Nearest neighbor models 以分類來說,我們先找出K個鄰居,找到他們的特性(通常是奇數) ==以資料本身表示== * 這邊有個很好玩的距離算法 * 雖然我們已經很熟悉歐式空間的距離了,那我們可以用其他方法算距離 * Minkowski distance 在 L$p 的空間 * ![](https://i.imgur.com/8XLmr9g.png) 而這個圖片, 當p = 1的時候為 **Manhattan distance** 當p = 2的時候為 **Euclidean distance** 而在input 只有boolean val的時候,我們把她稱作為 hamming distance * K-Nearest 中,每次找鄰居實在非常沒有效率,於是有一個方法叫做k-d tree 可以有效率地找到鄰居 * 找的方法為: * 利用一個tree來代表 * 先利用一個col/row 來討論,然後開始一一放入tree中,之後就可以用這種方法來找 https://blog.yucheng.me/post/kd-tree/ * 還有另外一個方法 Locality-sensitive hash 是利用一系列的hashfunction來幫忙找 ## 另外一個 Non parametric model -- SVM Support Vector Machine ### 目標為找到 decision boundry * SVM 利用 Kernel trick來對資料進行大改 * SVM 利用超平面\\ * 那甚麼是 Kernel trick? * 經由數學模型推出來的 alpha (support vector) 可以幫忙帶入參數模型的優點 :::success Kernel trick 把低維度的向量進行內積,在平方,跟把vector 對應到更高維的空間的內積相同 也就是 低維度丟給 function 直接吐出高維度的內積結果 ::: ## Ensemble Learning (策略) ### Random forest (一堆樹) * 隨機變動 attribute 的選擇,每次選擇隨機的中斷點來進行訓練(基本上就是決策樹) ### Stacking (堆疊法) * 同樣的訓練資料,利用更多不同的方法(模組)來進行訓練,藉由不同的模組 ### Boosting -- 19-113 * 最常見的一種,要先了解甚麼是weighted training set,在這training set中,如果w_j 越大的話,對於set的影響力會越大 * 其中一個很有名的方法為 adaboost * ![](https://i.imgur.com/yqbs9BB.png) ### Online Learning * 也是一種策略 * 當data 不是iid(資料互不干擾)時,用過去train出來的model進行判斷,跟實驗室的灌新詞的意義差不多,他假設資料跟過去的東西都有關,根據新的東西對舊的東西調整(重新訓練/建構) ### 結語: SVM 在資料集合沒有很大的時候,用NN可能還沒有很好 * 而Machine Learning 的問題在於以下兩點 * Interpretability * 他得出的答案為啥會這樣,是否可以解釋 * Explainability * 為甚麼input 這樣會得到 如此的output # chap 20 -- Statistical Learning ## Key concept * Data * instantiations of some or all of the random variable describing the domain * Hypothesis * probabilistic theories of how the domain works ## Bayesian Learning * 基本上就是 ==利用data的特性/機率,找出原本的分類== ## Maximum a posteriori (MAP hypothesis) * [看不懂](https://chih-sheng-huang821.medium.com/%E8%B2%9D%E6%B0%8F%E6%B1%BA%E7%AD%96%E6%B3%95%E5%89%87-bayesian-decision-rule-%E6%9C%80%E5%A4%A7%E5%BE%8C%E9%A9%97%E6%A9%9F%E7%8E%87%E6%B3%95-maximum-a-posterior-map-96625afa19e7) ## Density estimation * 意思就是利用data 觀察到的東西進而去推估模型 ## Maximum-likelihood 的流程 -- 離散狀況 1. 先把likelihood 寫成 function parameters的樣子 2. 對他們作微分 3. 找微分=0的狀況 ## Maximum-likelihood 流程-- 連續情況 # chap 21 -- deep learning * Dl 相對於本來前面介紹的方法來說,存在更多資料以及運算 * feedforward network has connections only in one direction * 整個DL可以視為一堆function的集合 ## 一個Node 在幹嘛 * 在計算 input 的 weighted sum,之後丟進一個 activaction function * ![](https://i.imgur.com/dbBNebP.png) * 目標就是把W (模組參數) 調整成可以變成預測的狀況 ![](https://i.imgur.com/GJsDN70.png) 基本上可以寫成線性代數的樣子,變成下面這個樣子 ![](https://i.imgur.com/mOjPDNy.png) * 當所有 node 都會連結到前一層的結果時,我們稱它做==fully connected network== ## activaction Function * 重點之一為必須要壤他是連續的函數 * activaction function 的微分永遠不是負的 ## Loss function * 意義上來講,基本上就是預估值與實際狀況的差距 ==> 越小越好 ## back propagation (反向傳遞) * 因為對於 function Parameters,loss function 必須要把誤差傳回前面,所以存在此演算法 ## Gradient Vanishing (梯度消失) * 一旦中間有一個很接近0的 gradient,這樣會導致整個func para變成0或趨近於0 ## input ? output? * input encoding * 表示法通常為 N 維的向量 (one-hot encoding) * output layers and loss function * 分類的結果 ## hidden layer * 表現的好的部分原因 ## Convolutional Networks * 在影像處理中非常重要 * 由於pixels附近的pixels也很重要,而考慮整張圖的成本又太大==> 考慮一張圖片中,一個部位(batch),並且對她處理 * CNN構成要素: * ==具有可以分享weight的特性 => Spatial Invariance== * ==具有局部process的特性== * CNN中 一種local pattern(一種遮罩/特性) 為一種kernel * 由左到右,由上到下對於圖片進行process我們稱作[convolution](https://www.youtube.com/watch?v=KuXjwB4LzSA) * CNN不要亂做,一開始只是因為圖像跟cnn會有關聯,所以使用CNN有意義,但在其他狀況不一定有意義 ## Residual networks * 應該不用解釋 ## SGD * 每次找一定量的batch 去做gradient decent SGD一定有一些缺點,才會有後續的演進,在當下的問題如果學習率太大,容易造成參數更新呈現鋸齒狀的更新,這是很沒有效率的路徑。 ## 反向傳遞的缺點:一路傳回去的時候,必須要用很多額外的記憶體空間儲存計算好的資料 ## Batch Normalization * 可以讓SGD收斂的速度更快 * 把同一個minibatch的output做適當的調整 * 假設z_i是output, mu是平均 gamma, beta 都是希望model可以學到的參數 * ![](https://i.imgur.com/NIvPNNz.png) ## adversarial example (attack) 意義為:當你在本來的input中 汙染了部分的資料,導致,雖然用人眼辨識不出來,但機器卻辨識錯誤 * 那我們的目標就是要找出更有效的方法去反制他 ## Weight decay -- generalization * ![](https://i.imgur.com/Sw7S496.png) * 把所有weight平方之後加總,但大部分的人不知道為啥有用 * 有人解釋:他可以模擬sigmoid的樣子 ## Dropout-- generalization * 隨機把一些node給停掉,具體來說: * 你有一個p 的機率,每次有p的機率output會呈上1/p再output * ==目標就是,遇到詭異的資料的時候會有比較高的機率可以ignore他== ## RNN * RNN 可以讓我們再運算的過程中存在cycle,讓整個NN 有記憶性,除此之外,他做出了markov assumption(前面的資料會影響後面 ![](https://i.imgur.com/d3vfdgo.png) 這邊的W_ij 都是一樣的 ## 梯度爆炸原因 * 因為在RNN 或是其他NN 具有markov assumption的狀況,如果gradient一直都大於1的狀況,就會產生梯度爆炸,他會越乘越大 * 梯度消失反之,他們都是基於markov assumption * 必須要寫出 Back-proba over time ## LSTM (為了解決梯度消失/但無法解決梯度爆炸) * LSTM 中存在的memory cell 用加法,可以比較有效避免梯度消失 ![](https://i.imgur.com/aJawOsl.png) ## Unsupervised Learning 不需要從output學習模組,直接從data本身學習 * 通常只能看 沒有被標記的 x * 算完之後,可以對於input做一些好玩的運算 ### 在這之前,有個東西叫做 PPCA Probabilistic PCA * ![](https://i.imgur.com/7UAgaHt.png) * 我們假設有一個 z ,他input還要低維度,我們用這個z來表示高維度的X ### Autoencoder 1. encoder先把input (x) map到 z 上 2. decoder再把 z map到x上面,而我們預估出來的x要跟原本的x很接近 :::success 基本上就是seq2seq的概念 ![](https://i.imgur.com/TpakNUx.png) ::: * 他很難利用線性代數的方法表示,因為data本身不一定是線性的 * 而如果用這種方式來做的話,他實際上的意義跟PCA差不多 ### GAN generative adversarial network 生成對抗網路 * generator 把 input(z) map 到 x * discriminator 把 x 變成 real or fake的資訊 --> 他用來分辨資料是否是經過訓練的 * 語言翻譯可以利用GAN * 先利用GAN 把x轉變成y * 同時利用discriminator干涉 * 另外訓練一個GAN把Y轉回x * 這個方法好處是不用很多y就可以訓練(搞不好可以用在台語翻譯上) ## Transfer learning 轉移學習就是把已經訓練好的模型、參數,轉移至另外的一個新模型上 使得我們不需要從零開始,重新訓練一個新model * 也就是微調模型 * 也會利用梯度下降之類的方法對於新的模型做最佳化 * 很重要的點就是==可以站在巨人的肩膀上,利用很多人已經訓練好的model去做調整== * 可以用來模擬現實世界的狀況 ### Multi-task learning - 也是一種 transfer learning # Chap 24, deeplearning 在NLP中的貢獻 ## 文字的元件 * one-hot vector * 也就是瓊舉所有的文字,把它給予編號,在某一列是1,其他都是0 * 缺點是他們之間的co-relation不夠好(距離不好) * word embedding * 可以視作把vector mapping到一個新的空間(比較小) * 如果做完這個事情之後,可以得到一種關聯 B-A = C * word2vec, gloVe, FastText * 其實也可以自己訓練自己的word embedding * 也可以用其他方法進行fine tune * word embedding 不夠,此時要看前後文 * Language Model 可以表達這個狀況 * 要如何建構? * N-gram Language Models,FFN-language model * N-gram無法看到更前面的問題,FNN 也有這個問題 * 可以用在語音辨識、 ## seq2seq model * 機器翻譯中的很重要的工作 * 原本seq2seq只考慮最後一個地方算出來的info,但如此會導致最後一個字的權重最高,也可能導致後面的資訊忘掉 * 此時attention機制就介入了 * 而利用一個context vector c_i 去考慮整個output * 原本RNN長成這樣![](https://i.imgur.com/muUBuen.png) * 後續利用context vector,整個算式變成這樣![](https://i.imgur.com/FG2S3in.png) * S![](https://i.imgur.com/wfV7D36.png ### Decoding * 從source 訓練出來的資料,把她經由(attention) 之類的參數考慮進去之後生成的資料 * 通常採用 Greedy decoding (最高機率的字就吐出來) * 或是用Beam Search * ![](https://i.imgur.com/obVlaz0.png) ## From Target_to_Transformer * Transformer中的參數/會經由三個model matrix W_i 乘過去 * query vector q_i = W_q * x_i * 可以把它視為attention * key vector k_i = W_k * x_i * 可以把它視為source的attention * value vector v_i = V_i * x_i * 沒有之前的對應,他代表著上下文的對應 * transformer -- architecture * Multi-attention * 會把sentence 分成m個同樣大小的碎塊,然後丟進attention model之後,每個碎塊都有自己的weight,最後在把這些weight拚在一起形成c_i * 如果要對文字做描述,可以對於文字做positional embedding ## Transfer Learning * 通常對於研究者來說,我們基本上無法拿到巨量的資料,所以我們拿別人訓練好的資料來進行微調 ## RNN 可以做到描述上下文的word embedding ## Masked Language Models * 有時候前文對於context有幫助,也有時候後面的東西對於context非常重要 * 為了要考慮到前後文,MLM(Masked Language Models) 有幫助,而他實作的方法就是有點像克漏字填充的方法,要求模型取出句子上下文的意義,然後猜出空白區域的文字 * 如此一來,所需要訓練資料並不用這麼多,而且不用labeling # Ch25 -- Computer Vision * Perception(感知)到的東西,會賦予sensors(感測器) 感受到 * 而這個章節主要要講的東西就是 ==視覺==的sensor :::success 總共有兩個重點 * Reconstruction: * 此agent 能否藉由感知到的東西重建這個世界 * Recognition: * 此agent能否辨識出遇到的物體 ::: ## 影像的構成:The pinhole camera(針孔攝影機) * 攝影機會有感光的元件, * 通常存在CMOS物件來感知光源 * 但他也會有motion blur的缺點 ## Gaussian smoothing (convolution的一種變種) 詳情可以看 [but what is convolution](https://www.youtube.com/watch?v=KuXjwB4LzSA) # Chap 22 -- Reinforcement Learning(強化學習) * 概念圖: * ![](https://i.imgur.com/4mUZBYB.png) * action 導致環境的變動,如果這個action對於整體狀態變好的話,reinforcement learning使用了 ==Reward function== 來告訴agent 下次的action該怎麼做 * 很多時候,資料蒐集不到,所以在很東情況下,我們沒有辦法學習一個資料by data pair * 事實上,以下棋來說,只能以最後的結果**輸贏** 來表達這個action是好還是不好 ## 基本上 Reinforcement Learning就是以Reward的方法來對於模型進行調整 ## Learning from Rewards ### Model_based Reinforcement learning * 利用transition model 來判別當下做的決定是否好 ### Model-free reinforcement learning * Action-util learning: * 利用 Q-learning(Q-function) 來判別在某個情況下會得到的utility(這邊應該是指reward) * Policy Search * 這個agent會自動學習一個model,他會告訴你每個states要怎麼act ### 怎麼找policy變為這個章節的一個大課題: * 在被動式學習中,agent的policy 是被固定住的 * 而這個agent要設法學習 U_pi(s:state) utility_function ==> 意思是在此policy下做出的選擇會得到多少的reward * 注意:此 utility function 是在一開始就要定義好的,他會經由(markov assumption) 也就是以過往紀錄來判斷state的reward值 此種找過往紀錄的方法導出了一個新的議題: ### Revisit * 我們規定: * 在每一個 s:state ,reward 必須要在一定的區間之內(must be bounded) * 每一個 utility function 的 output 必須要清楚描述agent要做甚麼,而此solution又稱 ==policy== * 以下的function 為 Bellman equation,他可以幫我們找出optimal solution of utility function * ![](https://i.imgur.com/8FELbqy.png) ## Direct utility estimation (直接性的 utility 估算) * Reward-to-go * The idea is that the utility of a state is defined as the expected total reward from that state onward, and that each trial provides a sample of this quantity for each state visited 意思是:每一個state 的utility 為前面所有reward的加總 * ![](https://i.imgur.com/tbOxFXS.png) ## Adaptive dynamic programming (ADP) * ADP 可以理解成,利用dynamic programming的方法,記住每個state 的 utilities,然後再用這些值去計算出合理的reward ## Temporal-difference learning(TD) * 可以理解為,當一個state重複出現過多次,我們去調整他的utility estimates * ![](https://i.imgur.com/9ZUduui.png) :::warning ## 重要! ADP跟TD的差別 * 相同點: * 兩個都會局部性調整(local adjustments) utility estimates,只為了 * 相異點: * ADP 會根據所有前面的資料作調整 * TD 只會根據部分資料的特性做調整 ::: ## Active reinforcement Learning * Active(活躍的) agent 必須要自己決定action * 相比之下 Passive(被動的) agent 仰賴其他人幫忙做決定 ==以下為active learning的步驟== 1. agent 必須要學會對於所有action的機率 2. 在來,必須要讓agent知道他有action的選擇(比如一個pi(s:state) 對應到很多種選擇==> output 機率) ****** 大概就這樣 # 會考的 1. Describe what is the kernel trick in SVM :::spoiler 在SVM中,我們必須要有效率的算出距離,但有時候把更高維度的向量算出他們之間的距離非常浪費計算資源,而kernel trick就是一個function 可以在低維度空間直接算出他們在高維度空間的距離的function ::: 2. Describe the idea of ensemble learning :::spoiler 指的是以一個系統化的方式將好幾個監督式學習的模型結合在一起,目的是希望結合眾多的模型產生一個更強大的模型。 ::: 3. The random forest model is a kind of ensemble learning method. Describe the idea of random forest. :::spoiler 隨機變動 attribute 的選擇,每次選擇隨機的中斷點來進行訓練(基本上就是決策樹) ::: 1. What is overfitting :::spoiler 是指過於緊密或精確地匹配特定資料集,以致於無法良好地調適其他資料或預測未來的觀察結果的現象 ::: 2. We may suffer from overfitting when learning a decision tree. What strategies we can apply to reduce overfitting :::spoiler 修剪(pruning)decision tree 是一個很好的做法 ::: 1. In a hidden Markov model, to solve the filtering problem and the smooth problem, what is the main idea of the forward-backward algorithm that can largely reduce the time complexity :::spoiler Dynamic programming :::