邏輯回歸的目的
邏輯回歸只判斷樣本屬于正類的概率是多大,0-1之間
找到一組最佳的權重(w1,w2,w3,…) ,b,使得模型預測的概率 P(Y=1) 盡可能接近樣本的真實標簽(1 或 0)。
計算過程
前向傳播過程如下:
假設有一個簡單的神經網絡層,包括輸入 ( x )、權重 ( w )、偏置 ( b ) 和激活函數( σ),輸出為 ( a )。損失函數為 ( L ),我們希望計算損失函數對權重 ( w ) 的梯度。
線性變換:z=w?x+b
激活函數:a=σ(z) 這個a就是預測的概率
損失計算:L=Loss(a,y),其中 y 是真實標簽,a是預測值
σ ( z ) = 1 1 + e ? z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e?z1?
損失函數,也就是誤差
L ( y ^ , y ) = ? y log ? ( y ^ ) ? ( 1 ? y ) log ? ( 1 ? y ^ ) L(\hat{y}, y) = - y \log(\hat{y}) - (1 - y) \log(1 - \hat{y}) L(y^?,y)=?ylog(y^?)?(1?y)log(1?y^?)
訓練的目的是把L(y^,y)趨近0,讓損失最小,就是趨向于最低點
其有w與b兩個變量
減小損失,進行優化
這里的 α是△w的意思,w的優化就是通過減去w的偏導數來達成的
J和L是一樣的含義
偏導數如何求(計算梯度)
反向傳播中的梯度計算
-
計算損失函數 L L L 對激活值 a a a 的梯度:
? L ? a \frac{\partial L}{\partial a} ?a?L? -
計算激活函數 σ \sigma σ 對 z z z 的梯度:
? a ? z = σ ′ ( z ) \frac{\partial a}{\partial z} = \sigma'(z) ?z?a?=σ′(z) -
計算 z z z 對權重 w w w 的梯度:
? z ? w = x \frac{\partial z}{\partial w} = x ?w?z?=x -
使用鏈式法則計算損失函數 L L L 對權重 w w w 的梯度:
? L ? w = ? L ? a ? ? a ? z ? ? z ? w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w} ?w?L?=?a?L???z?a???w?z?
4中就是w關于L的偏導數
計算梯度代碼現
import numpy as np# 激活函數及其導數
def sigmoid(x):return 1 / (1 + np.exp(-x))
#倒數
def sigmoid_derivative(x):return sigmoid(x) * (1 - sigmoid(x))# 假設數據
x = np.array([0.5]) # 輸入
w = np.array([0.2]) # 權重
b = 0.1 # 偏置
y = np.array([0.7]) # 實際目標# 前向傳播
z = w * x + b
a = sigmoid(z)# 計算損失(均方誤差)
loss = 0.5 * (a - y) ** 2
print(f'損失對權重的梯度: {loss}')# 反向傳播(鏈式法則)
dL_da = a - y # 損失函數對激活值的梯度
da_dz = sigmoid_derivative(z) # 激活函數對 z 的梯度
dz_dw = x # z 對權重 w 的梯度# 使用鏈式法則計算損失函數對權重的梯度
dL_dw = dL_da * da_dz * dz_dwprint(f'損失對權重的梯度: {dL_dw}')
#這個就是J對w的梯度,就是那個偏導數
總的來說
邏輯回歸只會給出 0 1的判斷,而我們優化的就是減小這個0 1判斷的誤差