1. 2020-02-14
訓練回歸模型所需要的信息包含-數據、模型、損失函數、優化函數(梯度下降演算法)。
step 1:對數據進行預處理使其可以fit到模型中
step 2:構建模型
step 3:選擇損失函數(回歸模型一般用mse)和優化函數
step 4:迭代訓練模型中的參數,並進行預測
回歸問題轉化為分類問題,分類問題相當於回歸的輸出是多個值。
回歸的輸出是實值可通過softmax將其轉化為對應的概率值,且數組中的最大值所處的index不變。
引用交叉墒損失函數-衡量兩個概率分布差異的測量函數。化簡得最小化交叉熵損失函數等價於最大化訓練數據集所有標簽類別的聯合預測概率。
多個全連接層的stack等價於一個全連接層,問題的根源在於全連接層只是對數據做仿射變換,而多個仿射變換的疊加仍然是一個仿射變換。可以通過解決非線性函數來解決該問題。
非線性激活函數如下:
1、ReLU(rectified linear unit)函數提供了一個很簡單的非線性變換。給定元素,該函數定義為 可以看出,ReLU函數只保留正數元素,並將負數元素清零。
2、Sigmoid函數可以將元素的值變換到0和1之間。 .導數在當輸入為0時,sigmoid函數的導數達到最大值0.25;當輸入越偏離0時,sigmoid函數的導數越接近0。
3、tanh(雙曲正切)函數可以將元素的值變換到-1和1之間。
激活函數的選擇
ReLu函數是一個通用的激活函數,目前在大多數情況下使用。但是,ReLU函數只能在隱藏層中使用。
用於分類器時,sigmoid函數及其組合通常效果更好。由於梯度消失問題,有時要避免使用sigmoid和tanh函數。
在神經網路層數較多的時候,最好使用ReLu函數,ReLu函數比較簡單計算量少,而sigmoid和tanh函數計算量大很多。
在選擇激活函數的時候可以先選用ReLu函數如果效果不理想可以嘗試其他激活函數。
預處理通常包括四個步驟:
現有的分詞工具,nltk.tokenize->word_tokenize;spacy
n元語法,防止序列長度增加,計算和存儲多個詞共同出現的概率的復雜度會呈指數級增加。元語法通過馬爾可夫假設簡化模型,馬爾科夫假設是指一個詞的出現只與前面n個詞相關,即n階馬爾可夫鏈。
元語法可能有哪些缺陷?參數空間過大,數據稀疏
兩種采樣方式,隨機采樣和相鄰采樣。對應的初始化方式不同。
卷積操作前w、h的長度
note: 為卷積後的w長度,p為padding長度,s為步長,k為卷積核大小。
卷積層與全連接層的對比:
二維卷積層經常用於處理圖像,與此前的全連接層相比,它主要有兩個優勢:
一是全連接層把圖像展平成一個向量,在輸入圖像上相鄰的元素可能因為展平操作不再相鄰,網路難以捕捉局部信息。而卷積層的設計,天然地具有提取局部信息的能力。
二是卷積層的參數量更少。
note:卷積核大小和圖像大小相同時等價於全連接層。
訓練誤差:指模型在訓練數據集上表現出的誤差。
泛化誤差:指模型在任意一個測試數據樣本上表現出的誤差的期望,並常常通過測試數據集上的誤差來近似。
target:降低泛化誤差。
數據集可分為:訓練集、測試集、驗證集(模型選擇,例如-超參數)。
note:由於驗證數據集不參與模型訓練,當訓練數據不夠用時,預留大量的驗證數據顯得太奢侈,因此採用k折交叉驗證。
欠擬合是模型無法得到較低的訓練誤差,我們將這一現象稱作欠擬合;
過擬合是模型的訓練誤差遠小於它在測試數據集上的誤差,我們稱該現象為過擬合。
模型復雜度和訓練數據集大小-過擬合及欠擬合的影響
模型復雜度越高越容易發生過擬合;
如果訓練數據集中樣本數過少,特別是比模型參數數量(按元素計)更少時,過擬合更容易發生。此外,泛化誤差不會隨訓練數據集里樣本數量增加而增大。因此,在計算資源允許的范圍之內,我們通常希望訓練數據集大一些。
過擬合的方法:正則化L1和L2及彈性網路,丟棄法-droupout。
當層數較多時,梯度的計算容易出現梯度消失或爆炸。
數據集可能存在的協變數、標簽和概念偏移。
隨著循環神經網路層數的增加可以出現梯度爆炸及消失,對應的使用梯度裁剪解決梯度爆炸。
困惑度是對交叉熵損失函數做指數運算後得到的值,使用它來對語言模型進行判定。特別地,
1、最佳情況下,模型總是把標簽類別的概率預測為1,此時困惑度為1;
2、最壞情況下,模型總是把標簽類別的概率預測為0,此時困惑度為正無窮;
3、基線情況下,模型總是預測所有類別的概率都相同,此時困惑度為類別個數。
encoder:輸入到隱藏狀態
decoder:隱藏狀態到輸出
在訓練時,將decoder的輸出不作為它的屬於。
可以關注到任意長度的字元信息。
有兩種實現方式:點方式和多層感知器方式
Transformer同樣基於編碼器-解碼器架構,其區別主要在於以下三點:
Transformer blocks:將seq2seq模型重的循環網路替換為了Transformer Blocks,該模塊包含一個多頭注意力層(Multi-head Attention Layers)以及兩個position-wise feed-forward networks(FFN)。對於解碼器來說,另一個多頭注意力層被用於接受編碼器的隱藏狀態。
Add and norm:多頭注意力層和前饋網路的輸出被送到兩個「add and norm」層進行處理,該層包含殘差結構以及層歸一化。
Position encoding:由於自注意力層並沒有區分元素的順序,所以一個位置編碼層被用於向序列元素里添加位置信息。
一共包含7層:十分類問題。
卷積6x28x28-平均池化6x14x14-卷積16x10x10-平均池化16x5x5-全連接120-全連接84-全連接10。
卷積神經網路就是含卷積層的網路。 LeNet交替使用卷積層和最大池化層後接全連接層來進行圖像分類。
AlexNet
1×1卷積核作用
1.放縮通道數:通過控制卷積核的數量達到通道數的放縮。
2.增加非線性。1×1卷積核的卷積過程相當於全連接層的計算過程,並且還加入了非線性激活函數,從而可以增加網路的非線性。
3.計算參數少
GoogLeNet
2. 訓練機器學習模型時,如何判斷數據量是否足夠
需要觀察擬合程度,一般來說如果出現明顯的欠擬合,則是數據量不夠,應該增大數據量到欠擬合不再明顯為止。
3. CS231n-K近鄰與線性分類器
1.易於理解,實現簡單。
2.演算法的訓練不需要花時間,因為其訓練過程只是將訓練集數據存儲起來。
1.測試要花費大量時間計算
2.Nearest Neighbor分類器在某些特定情況(比如數據維度較低)下,可能是不錯的選擇。但是在實際的圖像分類工作中,很少使用。因為圖像都是高維度數據(他們通常包含很多像素),而高維度向量之間的距離通常是反直覺的。
介紹了 圖像分類 問題。在該問題中,給出一個由被標注了分類標簽的圖像組成的集合,要求演算法能預測沒有標簽的圖像的分類標簽,並根據演算法預測准確率進行評價。
介紹了一個簡單的圖像分類器: 最近鄰分類器(Nearest Neighbor classifier) 。分類器中存在不同的超參數(比如k值或距離類型的選取),要想選取好的超參數不是一件輕而易舉的事。
選取超參數的正確方法是:將原始訓練集分為訓練集和 驗證集 ,我們在驗證集上嘗試不同的超參數,最後保留表現最好那個。
如果訓練數據量不夠,使用 交叉驗證 方法,它能幫助我們在選取最優超參數的時候減少噪音。
一旦找到最優的超參數,就讓演算法以該參數在測試集跑且只跑一次,並根據測試結果評價演算法。
最近鄰分類器能夠在CIFAR-10上得到將近40%的准確率。該演算法簡單易實現,但需要存儲所有訓練數據,並且在測試的時候過於耗費計算能力。
最後,我們知道了僅僅使用L1和L2范數來進行像素比較是不夠的,圖像更多的是按照背景和顏色被分類,而不是語義主體分身。
在接下來的課程中,我們將專注於解決這些問題和挑戰,並最終能夠得到超過90%准確率的解決方案。該方案能夠在完成學習就丟掉訓練集,並在一毫秒之內就完成一張圖片的分類。
如果你希望將k-NN分類器用到實處(最好別用到圖像上,若是僅僅作為練手還可以接受),那麼可以按照以下流程:
預處理你的數據:對你數據中的特徵進行歸一化(normalize),讓其具有零平均值(zero mean)和單位方差(unit variance)。在後面的小節我們會討論這些細節。本小節不討論,是因為圖像中的像素都是同質的,不會表現出較大的差異分布,也就不需要標准化處理了。
如果數據是高維數據,考慮使用降維方法,比如PCA( wiki ref , CS229ref , blog ref )或 隨機投影 。
將數據隨機分入訓練集和驗證集。按照一般規律,70%-90% 數據作為訓練集。這個比例根據演算法中有多少超參數,以及這些超參數對於演算法的預期影響來決定。如果需要預測的超參數很多,那麼就應該使用更大的驗證集來有效地估計它們。如果擔心驗證集數量不夠,那麼就嘗試交叉驗證方法。如果計算資源足夠,使用交叉驗證總是更加安全的(份數越多,效果越好,也更耗費計算資源)。
在驗證集上調優,嘗試足夠多的k值,嘗試L1和L2兩種范數計算方式。
如果分類器跑得太慢,嘗試使用Approximate Nearest Neighbor庫(比如 FLANN )來加速這個過程,其代價是降低一些准確率。
對最優的超參數做記錄。記錄最優參數後,是否應該讓使用最優參數的演算法在完整的訓練集上運行並再次訓練呢?因為如果把驗證集重新放回到訓練集中(自然訓練集的數據量就又變大了),有可能最優參數又會有所變化。在實踐中, 不要這樣做 。千萬不要在最終的分類器中使用驗證集數據,這樣做會破壞對於最優參數的估計。 直接使用測試集來測試用最優參數設置好的最優模型 ,得到測試集數據的分類准確率,並以此作為你的kNN分類器在該數據上的性能表現。
引用:知乎-智能單元-杜客
CS231n課程筆記翻譯:圖像分類筆記(上)
CS231n課程筆記翻譯:圖像分類筆記(下)
4. 數據量不夠,如何在少部分數據的基礎上生成大量的數據
這類似於半監督學習,先把少量數據生成標簽,並統計出分布規律,然後按照相同分布,採用半監督方法,讓計算機自動生成類似的大量數據。
5. 當數據量不夠大的時候,有什麼方法可以提高CNN訓練效果
做圖像增強,扭曲翻轉等等,keras裡面好像有集成
6. 數據增強的方法有哪些
1 什麼是數據增強?
數據增強也叫數據擴增,意思是在不實質性的增加數據的情況下,讓有限的數據產生等價於更多數據的價值。
比如上圖,第1列是原圖,後面3列是對第1列作一些隨機的裁剪、旋轉操作得來。
每張圖對於網路來說都是不同的輸入,加上原圖就將數據擴充到原來的10倍。假如我們輸入網路的圖片的解析度大小是256×256,若採用隨機裁剪成224×224的方式,那麼一張圖最多可以產生32×32張不同的圖,數據量擴充將近1000倍。雖然許多的圖相似度太高,實際的效果並不等價,但僅僅是這樣簡單的一個操作,效果已經非凡了。
如果再輔助其他的數據增強方法,將獲得更好的多樣性,這就是數據增強的本質。
數據增強可以分為,有監督的數據增強和無監督的數據增強方法。其中有監督的數據增強又可以分為單樣本數據增強和多樣本數據增強方法,無監督的數據增強分為生成新的數據和學習增強策略兩個方向。
2 有監督的數據增強
有監督數據增強,即採用預設的數據變換規則,在已有數據的基礎上進行數據的擴增,包含單樣本數據增強和多樣本數據增強,其中單樣本又包括幾何操作類,顏色變換類。
2.1. 單樣本數據增強
所謂單樣本數據增強,即增強一個樣本的時候,全部圍繞著該樣本本身進行操作,包括幾何變換類,顏色變換類等。
(1) 幾何變換類
幾何變換類即對圖像進行幾何變換,包括翻轉,旋轉,裁剪,變形,縮放等各類操作,下面展示其中的若干個操作。
水平翻轉和垂直翻轉
隨機旋轉
隨機裁剪
變形縮放
翻轉操作和旋轉操作,對於那些對方向不敏感的任務,比如圖像分類,都是很常見的操作,在caffe等框架中翻轉對應的就是mirror操作。
翻轉和旋轉不改變圖像的大小,而裁剪會改變圖像的大小。通常在訓練的時候會採用隨機裁剪的方法,在測試的時候選擇裁剪中間部分或者不裁剪。值得注意的是,在一些競賽中進行模型測試時,一般都是裁剪輸入的多個版本然後將結果進行融合,對預測的改進效果非常明顯。
以上操作都不會產生失真,而縮放變形則是失真的。
很多的時候,網路的訓練輸入大小是固定的,但是數據集中的圖像卻大小不一,此時就可以選擇上面的裁剪成固定大小輸入或者縮放到網路的輸入大小的方案,後者就會產生失真,通常效果比前者差。
(2) 顏色變換類
上面的幾何變換類操作,沒有改變圖像本身的內容,它可能是選擇了圖像的一部分或者對像素進行了重分布。如果要改變圖像本身的內容,就屬於顏色變換類的數據增強了,常見的包括雜訊、模糊、顏色變換、擦除、填充等等。
基於雜訊的數據增強就是在原來的圖片的基礎上,隨機疊加一些雜訊,最常見的做法就是高斯雜訊。更復雜一點的就是在面積大小可選定、位置隨機的矩形區域上丟棄像素產生黑色矩形塊,從而產生一些彩色雜訊,以Coarse Dropout方法為代表,甚至還可以對圖片上隨機選取一塊區域並擦除圖像信息。
添加Coarse Dropout雜訊
顏色變換的另一個重要變換是顏色擾動,就是在某一個顏色空間通過增加或減少某些顏色分量,或者更改顏色通道的順序。
顏色擾動
還有一些顏色變換,本文就不再詳述。
幾何變換類,顏色變換類的數據增強方法細致數還有非常多,推薦給大家一個git項目:
https://github.com/aleju/imgaug
預覽一下它能完成的數據增強操作吧。
2.2. 多樣本數據增強
不同於單樣本數據增強,多樣本數據增強方法利用多個樣本來產生新的樣本,下面介紹幾種方法。
(1) SMOTE[1]
SMOTE即Synthetic Minority Over-sampling Technique方法,它是通過人工合成新樣本來處理樣本不平衡問題,從而提升分類器性能。
類不平衡現象是很常見的,它指的是數據集中各類別數量不近似相等。如果樣本類別之間相差很大,會影響分類器的分類效果。假設小樣本數據數量極少,如僅占總體的1%,則即使小樣本被錯誤地全部識別為大樣本,在經驗風險最小化策略下的分類器識別准確率仍能達到99%,但由於沒有學習到小樣本的特徵,實際分類效果就會很差。
SMOTE方法是基於插值的方法,它可以為小樣本類合成新的樣本,主要流程為:
第一步,定義好特徵空間,將每個樣本對應到特徵空間中的某一點,根據樣本不平衡比例確定好一個采樣倍率N;
第二步,對每一個小樣本類樣本(x,y),按歐氏距離找出K個最近鄰樣本,從中隨機選取一個樣本點,假設選擇的近鄰點為(xn,yn)。在特徵空間中樣本點與最近鄰樣本點的連線段上隨機選取一點作為新樣本點,滿足以下公式:
第三步,重復以上的步驟,直到大、小樣本數量平衡。
該方法的示意圖如下。
在python中,SMOTE演算法已經封裝到了imbalanced-learn庫中,如下圖為演算法實現的數據增強的實例,左圖為原始數據特徵空間圖,右圖為SMOTE演算法處理後的特徵空間圖。
(2) SamplePairing[2]
SamplePairing方法的原理非常簡單,從訓練集中隨機抽取兩張圖片分別經過基礎數據增強操作(如隨機翻轉等)處理後經像素以取平均值的形式疊加合成一個新的樣本,標簽為原樣本標簽中的一種。這兩張圖片甚至不限制為同一類別,這種方法對於醫學圖像比較有效。
經SamplePairing處理後可使訓練集的規模從N擴增到N×N。實驗結果表明,因SamplePairing數據增強操作可能引入不同標簽的訓練樣本,導致在各數據集上使用SamplePairing訓練的誤差明顯增加,而在驗證集上誤差則有較大幅度降低。
盡管SamplePairing思路簡單,性能上提升效果可觀,符合奧卡姆剃刀原理,但遺憾的是可解釋性不強。
(3) mixup[3]
mixup是Facebook人工智慧研究院和MIT在「Beyond Empirical Risk Minimization」中提出的基於鄰域風險最小化原則的數據增強方法,它使用線性插值得到新樣本數據。
令(xn,yn)是插值生成的新數據,(xi,yi)和(xj,yj)是訓練集隨機選取的兩個數據,則數據生成方式如下
λ的取值范圍介於0到1。提出mixup方法的作者們做了豐富的實驗,實驗結果表明可以改進深度學習模型在ImageNet數據集、CIFAR數據集、語音數據集和表格數據集中的泛化誤差,降低模型對已損壞標簽的記憶,增強模型對對抗樣本的魯棒性和訓練生成對抗網路的穩定性。
SMOTE,SamplePairing,mixup三者思路上有相同之處,都是試圖將離散樣本點連續化來擬合真實樣本分布,不過所增加的樣本點在特徵空間中仍位於已知小樣本點所圍成的區域內。如果能夠在給定范圍之外適當插值,也許能實現更好的數據增強效果。
3 無監督的數據增強
無監督的數據增強方法包括兩類:
(1) 通過模型學習數據的分布,隨機生成與訓練數據集分布一致的圖片,代表方法GAN[4]。
(2) 通過模型,學習出適合當前任務的數據增強方法,代表方法AutoAugment[5]。
3.1 GAN
關於GAN(generative adversarial networks),我們已經說的太多了。它包含兩個網路,一個是生成網路,一個是對抗網路,基本原理如下:
(1) G是一個生成圖片的網路,它接收隨機的雜訊z,通過雜訊生成圖片,記做G(z) 。
(2) D是一個判別網路,判別一張圖片是不是「真實的」,即是真實的圖片,還是由G生成的圖片。
GAN的以假亂真能力就不多說了。
2 Autoaugmentation[5]
AutoAugment是Google提出的自動選擇最優數據增強方案的研究,這是無監督數據增強的重要研究方向。它的基本思路是使用增強學習從數據本身尋找最佳圖像變換策略,對於不同的任務學習不同的增強方法,流程如下:
(1) 准備16個常用的數據增強操作。
(2) 從16個中選擇5個操作,隨機產生使用該操作的概率和相應的幅度,將其稱為一個sub-policy,一共產生5個sub-polices。
(3) 對訓練過程中每一個batch的圖片,隨機採用5個sub-polices操作中的一種。
(4) 通過模型在驗證集上的泛化能力來反饋,使用的優化方法是增強學習方法。
(5) 經過80~100個epoch後網路開始學習到有效的sub-policies。
(6) 之後串接這5個sub-policies,然後再進行最後的訓練。
總的來說,就是學習已有數據增強的組合策略,對於門牌數字識別等任務,研究表明剪切和平移等幾何變換能夠獲得最佳效果。
7. NLP中簡單的數據增強方法
訓練機器學習或深度學習模型時,良好的數據往往是影響模型的效果最重要的因素之一。而數據不足時數據增強是一個常用的方法。
數據增強的方法可以作為我們訓練nlp模型時一個快速改善 數據不平衡 或 數據缺失 的等問題。
1,增加訓練的數據量,提高模型的泛化能力
2,增加雜訊數據,提升模型的魯棒性
現有NLP的Data Augmentation大致有兩條思路,
(1) 同義詞替換(SR: Synonyms Replace): 不考慮stopwords,在句子中隨機抽取n個詞,然後從同義詞詞典中隨機抽取同義詞,並進行替換。
Eg: 「我非常喜歡這部電影」 —> 「我非常喜歡這個影片」,句子仍具有相同的含義,很有可能具有相同的標簽。
(2) 隨機插入(RI: Randomly Insert): 不考慮stopwords,隨機抽取一個詞,然後在該詞的同義詞集合中隨機選擇一個,插入原句子中的隨機位置。該過程可以重復n次。
Eg : 「我非常喜歡這部電影」 —> 「愛我非常喜歡這部影片」。
(3) 隨機交換(RS: Randomly Swap): 句子中,隨機選擇兩個詞,位置交換。該過程可以重復n次。
Eg: 「如何評價 2017 知乎看山杯機器學習比賽?」 —> 「2017 機器學習?如何比賽知乎評價看山杯」。
(4) 隨機刪除(RD: Randomly Delete): 句子中的每個詞,以概率p隨機刪除。
Eg: 「如何評價 2017 知乎看山杯機器學習比賽?" —> 「如何 2017 看山杯機器學習 」。
回翻方法中,我們用機器翻譯把一段中文翻譯成另一種語言,然後再翻譯回中文。
Eg: 「周傑倫是一位華語樂壇的實力唱將,他的專輯賣遍了全球。
" —>「Jay Chou is a strength singer in the Chinese music scene, his albums are sold all over the world.
」—>「周傑倫是中國音樂界的優秀歌手,他的專輯暢銷全世界。」
這個方法已經成功的被用在Kaggle惡意評論分類競賽中。反向翻譯是NLP在機器翻譯中經常使用的一個數據增強的方法,其本質就是 快速產生一些翻譯結果達到增加數據的目的 。
回譯的方法往往能 夠增加文本數據的多樣性 ,相比替換詞來說,有時可以改變句法結構等,並保留語義信息。但是,回譯的方法產生的數據依賴於 翻譯的質量 ,大多數出現的翻譯結果可能並不那麼准確。
採用深度學習模型的方法主要為 生成和原數據相類似的數據 。
(1)增加的數據要保證和原數據一致的語義信息。
(2)增加的數據需要多樣化。
抄自原文:
8. 數據少合適用卷積神經網路進行訓練測試嗎
具體得看少到什麼程度了
扭曲變形確實能提高一些樣本數據數量,但數據太少的話,不如直接用線性分類器或者SVM
9. 神經網路,訓練樣本500條,為什麼比訓練樣本6000條,訓練完,500條預測比6000條樣本好!
並非訓練樣本越多越好,因課題而異。 1、樣本最關鍵在於正確性和准確性。你所選擇的樣本首先要能正確反映該系統過程的內在規律。我們從生產現場採得的樣本數據中有不少可能是壞樣本,這樣的樣本會干擾你的神經網路訓練。通常我們認為壞樣本只是個別現象,所以我們希望通過盡可能大的樣本規模來抵抗壞樣本造成的負面影響。 2、其次是樣本數據分布的均衡性。你所選擇的樣本最好能涉及到該系統過程可能發生的各種情況,這樣可以極大可能的照顧到系統在各個情況下的規律特徵。通常我們對系統的內在規律不是很了解,所以我們希望通過盡可能大的樣本規模來「地毯式」覆蓋對象系統的方方面面。 3、再次就是樣本數據的規模,也就是你要問的問題。在確保樣本數據質量和分布均衡的情況下,樣本數據的規模決定你神經網路訓練結果的精度。樣本數據量越大,精度越高。由於樣本規模直接影響計算機的運算時間,所以在精度符合要求的情況下,我們不需要過多的樣本數據,否則我們要等待很久的訓練時間。 補充說明一下,不論是徑向基(rbf)神經網路還是經典的bp神經網路,都只是具體的訓練方法,對於足夠多次的迭代,訓練結果的准確度是趨於一致的,方法隻影響計算的收斂速度(運算時間),和樣本規模沒有直接關系。如何確定何時訓練集的大小是「足夠大」的? 神經網路的泛化能力主要取決於3個因素: 1.訓練集的大小 2.網路的架構 3.問題的復雜程度 一旦網路的架構確定了以後,泛化能力取決於是否有充足的訓練集。合適的訓練樣本數量可以使用Widrow的拇指規則來估計。 拇指規則指出,為了得到一個較好的泛化能力,我們需要滿足以下條件(Widrow and Stearns,1985;Haykin,2008): N = nw / e 其中,N為訓練樣本數量,nw是網路中突觸權重的數量,e是測試允許的網路誤差。 因此,假如我們允許10%的誤差,我們需要的訓練樣本的數量大約是網路中權重數量的10倍。