逻辑回归的目的
逻辑回归只判断样本属于正类的概率是多大,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判断的误差