# ML  ML分為三步驟: 1.Define a set of function 2.find the goodness of function 3.pick the best function function set裡可能有無限組function loss function:用來衡量function set(model)裡的function有多不好的function  只要L(f)可微分,就可以用gradient descent找到一個最好的function **超參數**:超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据(模型自動獲得),就像gradient descent裡的learning rate是人工去找出最合適的超參數。而超參數專用的確認資料即稱為validation data,利用著個來評估超參數的好壞 **對python而言** Numpy:N維陣列容器、矩陣 Scipy:科學計算函式庫 Pandas:表格容器 Matplotilb:繪圖 ### Gradient descent  先隨機取一個w0做微分找其切線斜率 如果是負的代表還不到最低點,所以要增加w值 若是正的代表在往上增加loss了,所以要減少w值 而要增加或減少多少(踏一步多大)?  取決於learning rate(事先人定的)及他微分的值(微分越大代表越斜,要踏的步數越多),通常一開始大,後來變小,通常最好的step為一次微分/二次微分 因材施教,每個參數都給特定learning rate:**Adagrad**(優化器)  看完全部examples在更新 **SGD**:update each examples **feature scaling**:讓gradient descent更好做 **過擬合(overfitting)**:function過於符合train的data使其有很小的誤差,但當套在test data時誤差卻很大 ### error 有分bias error 及variance error 找出model裡每個function的平均值f*,與不知道的完美f去比較 **bias error**:平均值f*與完美f的差別 **variance error**:model裡每個function各自的差別  複雜的model有大variance error小bias error(overfitting),解決:增加data或regulization 簡單的model有小variance error 大bias error(underfitting),解決:重新定義一個feature更多更複雜的model 正常做法:在training set分成training set及validation set,i.e.把validation set 當成原本的testing set(找出最小的error rate的model後在跟完整的training set train一次),這樣在真正的testing set時才可以更真實的去反應要去比的Testing set  **如何分validation set**:N-fold Cross Validation  ### Classification 與regression的不同:ex.神奇寶貝丟進function知道他進化後的樣子vs神奇寶貝丟進function後知道他的屬性  **guassian**:一個函式,可以看出他sampling出一個點的機率為多少   那個式子P整理一下會變成sigmoid ## DL 分為三步驟: 1.小批次:從訓練資料隨機取出部分資料 2.計算梯度:計算與各種權重參數有關的損失函數梯度 3.更新參數:往梯度方向微量更新全中參數 為何要深? 利用模組化的概念,分層解決問題,所以會比深瘦會比胖短好 雖然一層可以表達任何參數,但是沒有效率,所以才多層 ### 總攬 有輸入層x,輸出層y,中間可以再有很多層 每層中間有weight參數控制輸入值,到下一層內後有一個活化函數(sigmoid,ReLU...)改變一下值再與下下一層的weight做控制進入下下層 活化函數:sigmoid,ReLU(ReLU可以handle sigmoid的gradient消失問題) 而輸出層內在classification時有softmax函數(大的強化),在regression時有恆等函數 **loss functionu有**: 1.mean square error通常用在regression 2.cross entropy 通常用在classification ### 計算梯度(CH4,5) 現今有2種計算梯度的方式: 1.**數值微分**:可以找到梯度去更新 2.**反向傳播back propagation**:比數值微分方法可以更快地去找到梯度(反向回去就是微分),因為把神經網路以『層』的單位去執行處理,所以當遇到有大量的參數要計算可以很快,通常有上百萬個參數要更新  ### 更新參數(CH6) 也就是用SGD, Momentum, AdaGrad, Adam等optimizer來縮小損失函數(找到model裡更好的參數) **SGD**:簡單,但是沒有效率,因為梯度的方向可能不是指向最小值 **Momentum**:比SGD多了一個V(一個阻力與推力),意思類似在陡的地方下降較快,在比較不抖的地方下降較慢 **AdaGrad**:學習率衰減方法,去動態調整學習率使其一開始大,到後來變小,最後學習率 可能變零(RMSProp改善此問題) **Adam**:Momentum+AdaGrad 要選哪一種優化器看個人,可以試一試發現哪個比較快就用哪個 權重值的預設: 1.當活化函數使用的是*Sigmoid或Tanh*時使用*Xavier*預設值,也就是標準差為1/sqrt(n)的常態分佈來初始化節點 2.當活化函數使用的是*Relu*時使用*He*預設值,也就是標準差為2/sqrt(n)的常態分佈來初始化節點 Batch Normalization: 強制性的調整各層的活性化分佈,使各層能更具有適當的廣泛性,通常會是一個Batch Norm(Batch Norm演算法)層插在激活函數之前,可以加快學習時間、不過度依賴預設權重值的好壞、控制過度學習(過擬合) Dropout與Weight decay:避免overfitting的正規化技術,train data做完dropout,test data的weight要乘以一個1-dropout的值 一個資料分為train data, test data,我們再利用train data 去分割出validation data validation data:用來驗證超參數的隨機取樣是否有夠好的準確度,不夠好再去逼近 train data:用來訓練model,也就是參數(node的權重與bias值) test data:使用此資料來檢查上面找的是不是好超參數與好模型 梯度消失問題:https://kknews.cc/zh-tw/code/p95ko58.html ### CNN(CH7) 前面convolution層(filter)就像是把那張圖片你要的特徵找出來(看局部),做完卷積後圖上有那個特徵的地方值會是最大,所以之後再做max-pooling將其取出來 將原本的單層(Affine+Relu)換為convolution+Relu+Pooling層 通常全連接層只能接受一維資料,而CNN因為接收的是影像所以為三維 **卷積**通常為圖片大小不變,但是一張照片會增加成濾鏡的數量 **池化層**為照片數不變,但大小會縮小 **填補(Padding)**:將輸入圖周圍增加任意值(通常為0),控制輸出圖的大小 **步幅(stride)**:做卷積運算的間格大小,與填補均為控制輸出圖的大小 隨著層數的增加(取越來越多的特徵),可以使資料變得高階,進而提升準確率 何時適合用cnn: 1.有一個特定的小特徵(不用看整張圖) 2.那個小特徵在不同地方還會出現 3.將其簡化不影響看的結果(但是有時候dependent on the task ex.alpha go就沒有max-pooling) ### 深度學習(ch8) what is the class of this image網站可以看到對mnist做處理準確率前幾名的paper方法 其中提高辨識綠的方法有:1.整體學習2.學習率衰減3.資料擴增 **資料擴增**:旋轉、水平或垂直移動的小幅更改影像,使資料增加 通常加深層數與提高辨識效能成正比,且能讓參數減少,且分多層可以讓每層要處理、理解的問題簡化 著名的深度學習網路:VGG,GoogLeNet,ResNet 現今利用GPU去做大型的陣列運算(卷積),再利用分散式學習加快速度(Tensorflow) GAN(生成對抗網路):是一種非監督式學習,利用generator生成與本尊很像的像,再利用另一個discriminator去判斷是否為本尊,前者學習成更高明的偽裝,後者學習更高超的鑑定,兩者互相切磋抗衡學習 ### RNN  #### LSTM RNN只要有新資料舊的就會被洗掉,但在LSTM中可以存比較久,有Gate可以控制  LSTM總共有四組Input與一組Output,其中一個Cell可以看成是一個神經元  實作後簡化,Z是操控每個gate是否打開的Vector   **如何train 一個RNN**: RNN有error surface變化大的特性,所以train時會加一個clipping方法,gradient太大時就等於某一值、太小也等於某一值 LSTM可以handle gradient vanishing的問題:因為他的forgate gate不一定跟RNN一樣會一直開啟,所以會一直有影響 *其他應用:* 給文章判斷喜好分析、給文章擷取關鍵詞彙,聲音辨識 #### RNN Auto-encoder  ### Attention-based Model 也有運用到之前的記憶  之後還有writing head寫入mechine memory ## Semi-supervised learning training的時候會有很多unlabel data 1.Transductive learning:unlabel data 是test data 2.Inductive learning:unlabel data不是test data #### Low-density separation 兩個class之間有明顯鴻溝,用self-training,self-training: label data tarin出f後再去train unlabel data後就有更多label data #### smoothness Assumption 兩個不太像的data可以通過很多的相似data找到關系  可以做clustering:分class #### Graph-based 先去建立有連結起來的圖型,找到圖形去分class(有連結起來的就是同一個class),如何連起來K-Nearest Neightbor #### Better Representation ## Unsupervised Learning ### clustering 1.K-means 2.HAC ### Dimension Reduction  **1.Feature selection** **2.PCA:** 把一個東西切成好幾個component(看你要切成幾個就是變成幾維),只要將這些component相加就可以變成原本的東西 z就是X投影在W上的向量,找w時會希望Z越分開越好(z的variance越大越好),看要找幾維就找幾個W(每個w互相垂直)  也就是說可以變成:  找w1的方法結論  找w2  找w2的方法結論  **決定需要降到多少維**(以最大6維為例):  ### Word Embedding 目的:類似語彙在一個high dimesion可以較接近 方法:word 可以從他的context推論出來 * Count base:以出現頻率來判斷 * predition base:給前一個word 預測下一個字 * CBOW * Skip-Gram  可以找出字與字的關西,例如:台灣:台北=德國:柏林 參考資料:https://medium.com/life-of-small-data-engineer/%E8%83%BD%E8%A2%AB%E9%9B%BB%E8%85%A6%E7%90%86%E8%A7%A3%E7%9A%84%E6%96%87%E5%AD%97-nlp-%E4%B8%80-word-embedding-4146267019cb #### Neighbor Embedding Manifold:將高維空間攤平變成低維空間有時才可以比較歐式空間 * LLE:舊空間同樣的距離去新空間找點 * Laplacian Eigenmaps * t-SNE:上述方法能將靠近的類別區分出來,但個群之間不一定分的出來,跑起來很複雜,所以通常用來PCA降維後(50-10),再用這個做視覺化,例如你有很多個點x是高維,可以將它降到二維去看(10-2) 重疊bad:  t-distribution使他有差距可以分越開good:  #### Auto-encoder encoder可以降維,再利用decoder去回復 效果好不會失真太多 #### Deep Generative model 讓Machine知道自己在做什麼 1. pixelRNN 遮住一半,機器可以自己去生出下半段  2. Varational Autoencoder  sigma讓機器自己學習,但因為如果是0一定error最小但就與普通autoencoder沒有差別,所以加了一個限制也就是minimize那裡 用VAE目的:可以控制你要輸出的東西 3. GAN Discriminator的learn法:  Generator的learn法: 將Generator network(1代)與Discriminator network(1代) 合起來變成一個大的network,固定Discriminator network的參數即可訓練出Generator network(2代) ### Transfer learning  **model fine-tune:** target data很少,source data很多,要防overfitting可以用1.*conservative training*2.*layer transfer*解決 **Multitask laerning**:可以用來訓練各種國家語言 **Domain-adversarial training**:處理類似的task時,因為target data沒有label,所以將domian消除,利用source data來train **Zero-shot learning**:task的區別更嚴格,利用attribute去做不同task的聯繫 ## SVM ### loss function用Hinge loss:  Linear SVM架構:  Linear SVM gradient descent原理方法:  平常看到的SVM:  ### Kernal Method 因為Hinge loss使得Cn(w)通常為0,所以An*通常為0,Xn乘上飛0的An*就是support vector   K就是將Xn與x做inner product ## Ensemble 將很多種分類器混合,術以專攻,以創造更高的準確率 **Bagging:** 將不同varience很大的model合起來使其varience變小(model強的時候用) **Boosting:** (model較弱的時候用)classifing時用互補的第二個分類器幫忙,照順序延續下去ex.*Adaboost*,最後在合起來判斷分類 **Stacking**: 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up