吳恩達機器學習-第二課-第二週

猫猫不会吃芋头發表於2024-04-16

吳恩達機器學習

學習影片參考b站:吳恩達機器學習
本文是參照影片學習的隨手筆記,便於後續回顧

TensorFlow實現神經網路

image

模型訓練細節

訓練步驟與和邏輯迴歸的比較

訓練模型分為三步:
1.確定f(x)函式
2.確定損失函式和代價函式
3.透過資料訓練尋找最小值
image

詳細介紹

1.建立模型
image
2.損失和代價函式
如果模型解決迴歸而不是分類問題,可以用別的損失函式,例如下方的MeanSquareError()
image
3.梯度下降
呼叫model.fit函式設定輸入輸出與迭代次數
image
Neural network libraries--神經網路庫:像是TensorFlow和PyTorch

啟用函式(Activation Function)

sigmoid啟用函式替代(Alternatives to the sigmoid activation)

需求預測模型
替代函式像是ReLU(Rectified Linear Unit)
image
常用的啟用函式
使用線性啟用函式經常說是沒有使用啟用函式,因為g(z)=z
image

如何選擇啟用函式

如果是二進位制分類問題,使用sigmoid函式
如果是迴歸,輸出有正負,使用線型啟用函式
如果是迴歸,輸出只有正,使用ReLU函式
image
現如今大多數都是使用ReLU函式而不是sigmoid函式,原因:
1.sigmoid要取冪等等操作,繁瑣
2.ReLU左邊一段是平的,而sigmoid兩邊都是平的,會導致梯度下降會很慢,影像有很多平坦
image

Summary

隱藏層建議只使用ReLU,輸出層如果是二進位制分類問題,可以使用sigmoid
image
還有很多不同不同的啟用函式,在某些具體情況可能效率高

為什麼需要啟用函式

如果啟用函式都是用線性函式,模型訓練會跟線性迴歸沒有什麼區別
image
image
全部使用線性函式,模型做的就是線性迴歸,只在最後輸出層使用sigmoid函式,模型做的就是邏輯迴歸
所以不要在隱藏層使用線性函式
image

多分類問題(Multiclass

定義&示例

定義:不只是取0,1兩個值,可以取少量的超過兩個的值
image
示例:劃分空間界限,求不同值的機率
image

Softmax(Regression Algorithm)

輸出值a的表示式

是邏輯迴歸的推廣,是多類分類上下文的二進位制分類演算法
4個可能輸出示例(Softmax):
所有值的可能性相加為1,如果輸出值只有2個,那麼Softmax迴歸演算法和邏輯迴歸演算法一樣
image

損失函式與代價函式

image

神經網路的Softmax輸出

使用Softmax函式的輸出層常常稱為Softmax層
Softmax層的每一個輸出值都需要z1......z10所有的函式值作為輸入
image

TensorFlow實現

損失函式使用SparseCategoricalCrossentropy(稀疏分類交叉熵)函式
以下這個版本的程式碼不推薦使用,下面會提供效果更好的實施版本,使用下面標題的程式碼!!!
image

TensorFlow的改進實現

同一個值,透過不同的計算方式減少舍入誤差
image
image

邏輯迴歸改進

直接指定他的loss函式而不是透過中間值a來傳值,效果會更好
from_logits=true指的是透過z來傳值,就像是跳過中間值a直接指定loss函式
image

Softmax函式改進

記住輸出層的啟用函式要改成線性函式,因為要直接提供z
image
因為輸出層改成線性函式,所以輸出值不再是輸出機率a1......a10,而是值z1......z10
image
image

多個輸出的多分類(Classification with multiple outputs)

每個圖都檢測三個01的分類問題(多標籤分類)
image
用一個神經網路解決三個分類問題,輸出層使用sigmoid函式(解決01問題),而不是用三個神經網路
image

高階最佳化方法

為什麼需要最佳化方法?

在梯度下降過程中,學習率或大或小,導致梯度下降引數更新的效率並不高,所以需要一個演算法更新學習率α
因此引入Adam演算法
image

Adam演算法

並沒有全域性單一的學習率α
image
梯度下降朝著正確的方向進行,就可以增大學習率,如果來回震盪,就可以適當減少學習率
具體實現比較複雜,在此不做講解
image
Adam需要設定初始學習率,這裡設定的是0.03
image

其他的網路層型別

之前學習的網路層都是密集層型別(dense),每一個神經元都使用上一層的所有輸出
image
這裡介紹一個不同的型別,像是卷積層(Convolutional Layer)
每一個神經元都使用前一層的一部分輸出作為輸入
原因:
1.加快計算速度
2.可以使用更少的訓練資料,並且不太容易過擬合(Overfitting)
image
如果有多個卷積層,就稱為卷積神經網路(Convolutional Neural Network)
示例心電圖
把列資料分為x1......x100作為輸入
image

Summary

本週主要學習了以下內容:
1.如何使用TensorFlow實現神經網路,模型訓練的步驟
2.如何選擇啟用函式,為什麼需要啟用函式
3.Softmax迴歸演算法實現多分類,損失函式與代價函式,程式碼實現,程式碼改進
4.高階最佳化方法Adam演算法
5.卷積層與卷積神經網路的概念

相關文章