前文已对Logistic回归模型进行过讲解;http://blog.csdn.net/zSean/article/details/77880463,Softmax 回归模型是logistic回归模型在多分类问题上的推广,
在多分类问题中,类标签y可以取两个以上的值;
1.在Logistic回归中,给定训练数据集:T={(x1,y1),(x2,y2),....(xN,yN)}, xi为实数,yi为0,1;
假设某一类的概率函数为:
w为训练模型的参数,选择一个模型参数,是损失函数最小化:
2.而在Softmax中,解决的问题是多分类问题,类标签y可以取多个不同的值k;
给定训练数据集:T={(x1,y1),(x2,y2),....(xN,yN)}, xi为实数,yi为{1,2,...k};
对于给定的测试数据输入x, 估计每一个测试数据x的每一种分类结果出现的概率。由于y的分类个数有k个,
从而输出的结果对应的为k个估计的概率值; 然而概率函数可以表示为:
当估测第一个数据x1时,
3.损失函数:
继续先描述Logistic回归模型的损失函数,然后进步推广到Softmax回归模型中的损失函数;
还是因为Logistic回归模型是二分类,所以 j 的取值为{0,1},而Softmax回归模型为多分类,从而使类别就有多个:
我们可以观察到:仅仅是在Softmax损失函数中对类标记的k个可能值进行累加,而且 x 为类别 j 的概率可以由公式表示为:
对损失函数的最小化问题,其实就是对其优化,我们使用迭代的优化算法,随机梯度下降算法;从而求取梯度公式:
4.以上已讲解了SoftMax回归,接下来我们用这个简单的模型进行MNIST的识别:
大概流程为:
1.定义算法公式,即为神经网络Forward时的计算;
2.定义loss函数,选定优化器(随机梯度下降算法),并指定优化器优化loss函数;
3.迭代地对数据进行训练;
4.在测试集或验证集上对准确率进行评测。
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("D:/MNIST_data/", one_hot=True)
import tensorflow as tf
#设计算法
sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32,[None,784]) #第一个参数为数据类型,第二个参数代表张量的shape,即为数据的尺寸,
#None代表不限条数的输入,784代表每条输入时一个784维的向量
w = tf.Variable(tf.zeros([784,10])) #w的shape为[784,10]表示特征的维数为784,类别有10类;
b = tf.Variable(tf.zeros([10]))
#实现SoftMax Regression算法 公式为y=softmax(Wx+b)
y = tf.nn.softmax(tf.matmul(x,w)+b)
y_ = tf.placeholder(tf.float32,[None,10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ *tf.log(y),reduction_indices=[1])) #损失函数
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
tf.global_variables_initializer().run()
for i in range(1000): #迭代训练数据
batch_xs, batch_ys=mnist.train.next_batch(1000)
train_step.run({x: batch_xs,y_:batch_ys})
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
print(accuracy.eval({x: mnist.test.images,y_:mnist.test.labels}))
在这里Softmax回归的工作原理是:将可以判定为某类的特征相加,然后将这些特征转化为判定是这一类的概率;
5.接下来,我们讲解Softmax模型中的一些细节东西
a.Softmax回归模型参数化具有冗余的特点(在算法实现过程中,保留所有参数,为了方便清楚,从而不设任意向量来复杂化目标函数):
b.为解决冗余问题, 从而引入权重衰减:
权重衰减的方法是:添加一个权重衰减项,
因为 r>0 ,随意损失函数任为一个严格的凸函数,从而通过求取导数,找到极值点,求取损失函数的最小值;
6.Softmax回归与Logistic回归的关系:
前面说到过Softmax回归是Logistic回归的推广,然而这时候,我们将类别参数K设置为2,也就是将类别设置为2分类;
7.Softmax 回归与K 个二元分类器问题(Logistic):
选择使用那个模型则取决于数据集所属类别的之间的关系;
假如类别之间是互斥的,也就是K个类别是相互独立的,则选择Softmax回归;
假如类别之间有联系,也就说数据A既有可能属于这一类,又有可能属于另外一类,则选择Logistic回归;(为什么有联系就选择Logistic回归呢“)
(因为,Logistic是最优化划分二分类问题,找到一个极优的区分决策面来划分数据所属类别);