日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第4章-机器学习基础

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第4章-机器学习基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Keras 是一個模型級(model-level)的庫,為開發深度學習模型提供了高層次的構建模塊。
它不處理張量操作、求微分等低層次的運算。

相反,它依賴于一個專門的、高度優化的張量庫來完成這些運算,這個張量庫就是 Keras 的后端引擎(backend engine)。

Keras 沒有選擇單個張量庫并將 Keras 實現與這個庫綁定,而是以模塊化的方式處理這個問題(見圖 3-3)。

因此,幾個不同的后端引擎都可以無縫嵌入到 Keras 中。目前,Keras 有三個后端實現:TensorFlow 后端、Theano 后端和微軟認知工具包(CNTK,Microsoft cognitive toolkit)后端。未來 Keras 可能會擴展到支持更多的深度學習引擎。

?

TensorFlow、CNTK 和 Theano 是當今深度學習的幾個主要平臺。Theano 由蒙特利爾大學的MILA 實驗室開發,TensorFlow 由 Google 開發,CNTK 由微軟開發。你用 Keras 寫的每一段代碼都可以在這三個后端上運行,無須任何修改。

?

?

?

監督學習是目前最常見的機器學習類型。給定一組樣本(通常由人工標注),它可以學會將
輸入數據映射到已知目標[也叫標注(annotation)]。

雖然監督學習主要包括分類和回歸,但還有更多的奇特變體,主要包括如下幾種。

?

序列生成(sequence generation)。給定一張圖像,預測描述圖像的文字。序列生成有時可以被重新表示為一系列分類問題,比如反復預測序列中的單詞或標記。
語法樹預測(syntax tree prediction)。給定一個句子,預測其分解生成的語法樹。
目標檢測(object detection)。給定一張圖像,在圖中特定目標的周圍畫一個邊界框。這個問題也可以表示為分類問題(給定多個候選邊界框,對每個框內的目標進行分類)或分類與回歸聯合問題(用向量回歸來預測邊界框的坐標)。

圖像分割(image segmentation)。給定一張圖像,在特定物體上畫一個像素級的掩模(mask)。

?

降維(dimensionality?reduction)和聚類(clustering)都是眾所周知的無監督學習方法。

?

自監督學習是監督學習的一個特例,它與眾不同,值得單獨歸為一類。自監督學習是沒有人工標注的標簽的監督學習,你可以將它看作沒有人類參與的監督學習。

標簽仍然存在(因為總要有什么東西來監督學習過程),但它們是從輸入數據中生成的,通常是使用啟發式算法生成的。
舉個例子,自編碼器(autoencoder)是有名的自監督學習的例子,其生成的目標就是未經修改的輸入。同樣,給定視頻中過去的幀來預測下一幀,或者給定文本中前面的詞來預測下一個詞,都是自監督學習的例子[這兩個例子也屬于時序監督學習(temporally supervised learning),即用未來的輸入數據作為監督]。

注意,監督學習、自監督學習和無監督學習之間的區別有時很模糊,這三個類別更像是沒有明確界限的連續體。

?

分類和回歸術語表
樣本(sample)或輸入(input):進入模型的數據點。
預測(prediction)或輸出(output):從模型出來的結果。?

目標(target):真實值。對于外部數據源,理想情況下,模型應該能夠預測出目標。
預測誤差(prediction error)或損失值(loss value):模型預測與目標之間的距離。
類別(class):分類問題中供選擇的一組標簽。例如,對貓狗圖像進行分類時,“狗”和“貓”就是兩個類別。
標簽(label):分類問題中類別標注的具體例子。比如,如果 1234 號圖像被標注為包含類別“狗”,那么“狗”就是 1234 號圖像的標簽。
真值(ground-truth)或標注(annotation):數據集的所有目標,通常由人工收集。
二分類(binary classification):一種分類任務,每個輸入樣本都應被劃分到兩個互斥的類別中。
多分類(multiclass classification):一種分類任務,每個輸入樣本都應被劃分到兩個以上的類別中,比如手寫數字分類。
多標簽分類(multilabel classification):一種分類任務,每個輸入樣本都可以分配多個標簽。舉個例子,如果一幅圖像里可能既有貓又有狗,那么應該同時標注“貓”標簽和“狗”標簽。每幅圖像的標簽個數通常是可變的。
標量回歸(scalar regression):目標是連續標量值的任務。預測房價就是一個很好的例子,不同的目標價格形成一個連續的空間。
向量回歸(vector regression):目標是一組連續值(比如一個連續向量)的任務。如果對多個值(比如圖像邊界框的坐標)進行回歸,那就是向量回歸。
小批量(mini-batch)或批量(batch):模型同時處理的一小部分樣本(樣本數通常為 8~128)。樣本數通常取 2 的冪,這樣便于 GPU 上的內存分配。訓練時,小批量用來為模型權重計算一次梯度下降更新。

?

?

評估模型的重點是將數據劃分為三個集合:訓練集、驗證集和測試集。在訓練數據上訓練模型,在驗證數據上評估模型。一旦找到了最佳參數,就在測試數據上最后測試一次。
你可能會問,為什么不是兩個集合:一個訓練集和一個測試集?在訓練集上訓練模型,然后在測試集上評估模型。這樣簡單得多!
原因在于開發模型時總是需要調節模型配置,比如選擇層數或每層大小[這叫作模型的超參數(hyperparameter),以便與模型參數(即權重)區分開]。這個調節過程需要使用模型在驗證數據上的性能作為反饋信號。這個調節過程本質上就是一種學習:在某個參數空間中尋找良好的模型配置。

因此,如果基于模型在驗證集上的性能來調節模型配置,會很快導致模型在驗證集上過擬合,即使你并沒有在驗證集上直接訓練模型也會如此。
造成這一現象的關鍵在于信息泄露(information leak)。每次基于模型在驗證集上的性能來調節模型超參數,都會有一些關于驗證數據的信息泄露到模型中。如果對每個參數只調節一次,那么泄露的信息很少,驗證集仍然可以可靠地評估模型。但如果你多次重復這一過程(運行一次實驗,在驗證集上評估,然后據此修改模型),那么將會有越來越多的關于驗證集的信息泄露到模型中。

?

書中提到的三種驗證方法:
1. 簡單的留出驗證

2.K折驗證

3. 帶有打亂數據的重復 K 折驗證
如果可用的數據相對較少,而你又需要盡可能精確地評估模型,那么可以選擇帶有打亂數據的重復 K 折驗證(iterated K-fold validation with shuffling)。我發現這種方法在 Kaggle 競賽中
特別有用。具體做法是多次使用 K 折驗證,在每次將數據劃分為 K 個分區之前都先將數據打亂。
最終分數是每次 K 折驗證分數的平均值。注意,這種方法一共要訓練和評估 P×K 個模型(P
是重復次數),計算代價很大。

?

4.2.2 評估模型的注意事項

選擇模型評估方法時,需要注意以下幾點。
數據代表性(data representativeness)。你希望訓練集和測試集都能夠代表當前數據。例
如,你想要對數字圖像進行分類,而圖像樣本是按類別排序的,如果你將前 80% 作為訓
練集,剩余 20% 作為測試集,那么會導致訓練集中只包含類別 0~7,而測試集中只包含
類別 8~9。這個錯誤看起來很可笑,卻很常見。因此,在將數據劃分為訓練集和測試集
之前,通常應該隨機打亂數據。
時間箭頭(the arrow of time)。如果想要根據過去預測未來(比如明天的天氣、股票走勢
等),那么在劃分數據前你不應該隨機打亂數據,因為這么做會造成時間泄露(temporal?
leak):你的模型將在未來數據上得到有效訓練。在這種情況下,你應該始終確保測試集
中所有數據的時間都晚于訓練集數據。
數據冗余(redundancy in your data)。如果數據中的某些數據點出現了兩次(這在現實中
的數據里十分常見),那么打亂數據并劃分成訓練集和驗證集會導致訓練集和驗證集之
間的數據冗余。從效果上來看,你是在部分訓練數據上評估模型,這是極其糟糕的!一
定要確保訓練集和驗證集之間沒有交集。   

?

?

4.3.1 神經網絡的數據預處理
數據預處理的目的是使原始數據更適于用神經網絡處理,包括向量化、標準化、處理缺失值和特征提取。
1. 向量化
神經網絡的所有輸入和目標都必須是浮點數張量(在特定情況下可以是整數張量)。無論處理什么數據(聲音、圖像還是文本),都必須首先將其轉換為張量,這一步叫作數據向量化(data vectorization)。例如,在前面兩個文本分類的例子中,開始時文本都表示為整數列表(代表單詞序列),然后我們用 one-hot 編碼將其轉換為 float32 格式的張量。在手寫數字分類和預
測房價的例子中,數據已經是向量形式,所以可以跳過這一步。
2. 值標準化
在手寫數字分類的例子中,開始時圖像數據被編碼為 0~255 范圍內的整數,表示灰度值。將這一數據輸入網絡之前,你需要將其轉換為 float32 格式并除以 255,這樣就得到 0~1 范圍內的浮點數。同樣,預測房價時,開始時特征有各種不同的取值范圍,有些特征是較小的浮點數,有些特征是相對較大的整數。將這一數據輸入網絡之前,你需要對每個特征分別做標準化,使
其均值為 0、標準差為 1。
一般來說,將取值相對較大的數據(比如多位整數,比網絡權重的初始值大很多)或異質數據(heterogeneous data,比如數據的一個特征在 0~1 范圍內,另一個特征在 100~200 范圍內)輸入到神經網絡中是不安全的。這么做可能導致較大的梯度更新,進而導致網絡無法收斂。為了讓網絡的學習變得更容易,輸入數據應該具有以下特征。

?

取值較小:大部分值都應該在 0~1 范圍內。
同質性(homogenous):所有特征的取值都應該在大致相同的范圍內。
此外,下面這種更嚴格的標準化方法也很常見,而且很有用,雖然不一定總是必需的(例如,
對于數字分類問題就不需要這么做)。
將每個特征分別標準化,使其平均值為 0。
將每個特征分別標準化,使其標準差為 1。
這對于 Numpy 數組很容易實現。

 

3. 處理缺失值
你的數據中有時可能會有缺失值。例如在房價的例子中,第一個特征(數據中索引編號為0 的列)是人均犯罪率。

如果不是所有樣本都具有這個特征的話,怎么辦?那樣你的訓練數據或測試數據將會有缺失值。
一般來說,對于神經網絡,將缺失值設置為 0 是安全的,只要 0 不是一個有意義的值。

網絡能夠從數據中學到 0 意味著缺失數據,并且會忽略這個值。
注意,如果測試數據中可能有缺失值,而網絡是在沒有缺失值的數據上訓練的,那么網絡不可能學會忽略缺失值。在這種情況下,你應該人為生成一些有缺失項的訓練樣本:多次復制一些訓練樣本,然后刪除測試數據中可能缺失的某些特征。

?

我們來看一個直觀的例子。假設你想開發一個模型,輸入一個時鐘圖像,模型能夠輸出對
應的時間(見圖 4-3).

深度學習出現之前,特征工程曾經非常重要,因為經典的淺層算法沒有足夠大的假設空間來自己學習有用的表示。

?

幸運的是,對于現代深度學習,大部分特征工程都是不需要的,因為神經網絡能夠從原始
數據中自動提取有用的特征。這是否意味著,只要使用深度神經網絡,就無須擔心特征工程呢?
并不是這樣,原因有兩點。
良好的特征仍然可以讓你用更少的資源更優雅地解決問題。例如,使用卷積神經網絡來
讀取鐘面上的時間是非常可笑的。
良好的特征可以讓你用更少的數據解決問題。深度學習模型自主學習特征的能力依賴于
大量的訓練數據。如果只有很少的樣本,那么特征的信息價值就變得非常重要。

?

?

表 4-1 為模型選擇正確的最后一層激活和損失函數

問題類型最后一層激活損失函數
二分類問題sigmoidbinary_crossentropy
多分類、單標簽問題softmaxcategorical_crossentropy
多分類、多標簽問題sigmoidbinary_crossentropy
回歸到任意值mse
回歸到 0~1 范圍內的值sigmoidmse 或 binary_crossentropy

稍微補充下sigmoid函數與softmax函數:

激活函數SoftmaxSigmoid
公式

任務多分類二分類
定義域某個一維向量單個數值

另外回顧下機器學習方面的知識:

[1]中提到;

Neural networks are somewhat related to logistic regression.

Basically, we can think of logistic regression as a one layer neural network.(邏輯回歸就是單層神經網絡)

[2]提到:邏輯回歸就是在線性回歸的基礎上增加了激活函數

[3]提到:邏輯回歸也可以完成多分類(其實就是神經網絡的最后一層),

自己理解,其實就是輸出層的激活函數是不變,然后每個激活函數對應的權重和偏置不一樣,就可以讓各個softmax得到不同的輸出結果,然后選擇輸出結果最大的作為類別.

Reference:

[1]https://sebastianraschka.com/faq/docs/logisticregr-neuralnet.html

[2]https://blog.csdn.net/legalhighhigh/article/details/81367638

[3]https://blog.csdn.net/szu_hadooper/article/details/78619001

總結

以上是生活随笔為你收集整理的第4章-机器学习基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。