softmax regression 推导

本文详细解析了多分类问题中对数损失函数的定义及其梯度的推导过程,通过数学公式展示了如何从概率分布出发,计算每个样本对于参数θ的贡献,并进一步推导出了损失函数关于参数θ的偏导数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P(y(i)=k|x(i);θ)=exp(θ(k)x(i))Kj=1exp(θ(j)x(i))

似然函数

L=i=1Mk=1KP(y(i)=k|x(i);θ)1{y(i)=k}

对数损失函数为:

J(θ)=i=1mk=1K1{y(i)=k}logexp(θ(k)x(i))Kj=1exp(θ(j)x(i))

1{⋅} is the ”‘indicator function,”’ so that 1{a true statement}=1, and 1{a false statement}=0.

现在对对数损失函数求偏导

θ(n)J(θ)=i=1my(i)P(y(i)=n|xi;θ)θ(n)+k=1,knKy(i)P(y(i)=k|xi;θ)θ(n)

其中,
P(y(i)=n|xi;θ)=logexp(θ(n)x(i))Kj=1exp(θ(j)x(i))

P(y(i)=k|xi;θ)=logexp(θ(k)x(i))Kj=1exp(θ(j)x(i))

P(y(i)=n|xi;θ)θ(n)=Kj=1exp(θ(j)x(i))exp(θ(n)x(i))exp(θ(n)x(i))x(i)Kj=1exp(θ(j)x(i))exp(θ(n)x(i))exp(θ(n)x(i))x(i)[Kj=1exp(θ(j)x(i))]2=x(i)exp(θ(n)x(i))x(i)Kj=1exp(θ(j)x(i))=x(i)(1P(y(i)=n|xi;θ))

另外一个,

P(y(i)=k|xi;θ)θ(n)=Kj=1exp(θ(j)x(i))exp(θ(k)x(i))exp(θ(k)x(i))exp(θ(n)x(i))x(i)[Kj=1exp(θ(j)x(i))]2=exp(θ(n)x(i))x(i)Kj=1exp(θ(j)x(i))=P(y(i)=n|xi;θ)x(i)

θ(k)J(θ)=i=1m[x(i)(1{y(i)=k}P(y(i)=k|x(i);θ))]
### 软件回归的实现及原理 #### Softmax Regression 原理概述 Softmax Regression 是一种用于多类别分类问题的广义线性模型。它扩展了二元逻辑回归(Logistic Regression),能够处理多个离散类别的预测任务[^1]。给定输入特征 \( x \),Softmax 函数会计算每个类别的概率分布,最终输出的概率之和为 1。 Softmax 函数定义如下: \[ P(y=j | x; W, b) = \frac{e^{W_j^T x + b_j}}{\sum_{k=1}^{K} e^{W_k^T x + b_k}} \] 其中 \( K \) 表示类别总数,\( W \) 和 \( b \) 分别表示权重矩阵和偏置项[^3]。 #### 数学推导与优化目标 为了训练 Softmax Regression 模型,通常采用最大似然估计方法来最小化负对数损失函数(也称为交叉熵损失)。假设数据集中有 \( N \) 个样本,则损失函数可写成: \[ L(W, b) = -\frac{1}{N} \sum_{i=1}^{N} \log P(y_i | x_i ; W, b) \] 通过梯度下降法或其他优化算法调整参数 \( W \) 和 \( b \)[^2]。具体而言,对于每一轮迭代,我们计算损失函数关于 \( W \) 和 \( b \) 的梯度并更新它们。 #### Python 实现代码 以下是基于 NumPy 的 Softmax Regression 完整实现: ```python import numpy as np def softmax(z): """Compute the softmax function.""" exp_z = np.exp(z - np.max(z, axis=1, keepdims=True)) # 防止数值溢出 return exp_z / np.sum(exp_z, axis=1, keepdims=True) def compute_loss(X, y, W, b): """ Compute cross-entropy loss. X: 输入特征 (n_samples, n_features) y: one-hot 编码的目标标签 (n_samples, n_classes) W: 权重矩阵 (n_features, n_classes) b: 偏置向量 (1, n_classes) """ z = np.dot(X, W) + b probs = softmax(z) log_likelihood = -np.log(probs[np.arange(len(X)), np.argmax(y, axis=1)]).mean() return log_likelihood def gradient_descent(X, y, W, b, learning_rate=0.1, iterations=1000): """ Perform gradient descent to optimize parameters of softmax regression. Returns updated weights and biases after training. """ for _ in range(iterations): z = np.dot(X, W) + b probs = softmax(z) grad_W = np.dot(X.T, (probs - y)) / len(X) grad_b = np.mean((probs - y), axis=0, keepdims=True) W -= learning_rate * grad_W b -= learning_rate * grad_b return W, b # Example usage if __name__ == "__main__": from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.preprocessing import OneHotEncoder # Generate synthetic dataset with 3 classes X, y_labels = make_classification(n_samples=100, n_features=5, n_informative=5, n_redundant=0, n_clusters_per_class=1, random_state=42, n_classes=3) encoder = OneHotEncoder(sparse=False) y_onehot = encoder.fit_transform(y_labels.reshape(-1, 1)) # Initialize model parameters W_init = np.zeros((X.shape[1], y_onehot.shape[1])) b_init = np.zeros((1, y_onehot.shape[1])) # Train using gradient descent W_optimized, b_optimized = gradient_descent(X, y_onehot, W_init, b_init, learning_rate=0.1, iterations=1000) ``` 上述代码实现了完整的 Softmax Regression 训练过程,包括前向传播、损失计算以及反向传播更新参数。 --- #### 关键点总结 1. **Softmax Function**: 将原始分数转换为概率分布。 2. **Loss Function**: 使用交叉熵作为主要优化目标。 3. **Optimization Algorithm**: 利用梯度下降逐步逼近最优解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值