Softmax算法原理及实现

    逻辑回归主要是用于处理二分类问题,如果面对的是多分类问题,如手写字识别,其中有十个类别,这时候就需要对逻辑回归进行推广,且同样任意两个类之间都是线性可分的。

Softmax Regression

    Softmax Regression是Logistic Regression在多分类上的推广,即类标签数量至少为2,也可以用在DNN中最后一层Layer后通过Softmax激活输出。假设有m个训练样本{(X(1),y(1)),(X(2),y(2)),…,(X(m),y(m))},其输入特征为:Rn+1'X(i),标签为{0,1,...,k}'y(i)。假设函数为每一个样本估计其所属的类别的概率P(y=j|X),具体的假设函数为:

    其中q为权重向量,对于每一个样本估计其所属的类别的概率为:

    同样引入类似逻辑回归中交叉熵损失函数中各类别概率的幂,即指示函数,形式如下:

    最终损失函数为:

  

梯度下降法

    这里求解选用迭代法中的梯度下降法来求解,其优点和原理在上一篇中已给出了通俗易懂的解释。qj梯度表达式为:

     

    最后形式为:

     现在可以用代码实现训练的具体过程:

def st_gd(feature_data, label_data, k, maxCycle, alpha):
    '''input: feature_data特征
            label_data标签
            k类别的个数
            maxCycle最大的迭代次数
            alpha学习率
    output: weights权重'''
    m, n = np.shape(feature_data)
    weights = np.mat(np.ones((n, k)))
    i = 0
    while i <= maxCycle:
        err = np.exp(feature_data * weights)
        if i % 500 == 0:
            print("\t-----iter: ", i , ", cost: ", cost(err, label_data))
        rowsum = -err.sum(axis=1)
        rowsum = rowsum.repeat(k, axis=1)
        err = err / rowsum
        for x in range(m):
            err[x, label_data[x, 0]] += 1
        weights = weights + (alpha / m) * feature_data.T * err      
        i += 1           
    return weights

     其中计算损失函数值的函数为cost,具体实现如下:

def cost(err, label_data):
    '''input: err类别概率
              label_data标签的值
    output: sum_cost / m损失函数的值'''
    m = np.shape(err)[0]
    sum_cost = 0.0
    for i in range(m):
        if err[i, label_data[i, 0]] / np.sum(err[i, :]) > 0:
            sum_cost -= np.log(err[i, label_data[i, 0]] / np.sum(err[i, :]))
        else:
            sum_cost -= 0
    return sum_cost / m

小结

    本文介绍的Softmax Regression存在参数冗余的特点,即权重向量减去一个任意向量后对预测结果没有任何影响,也就是说存在多组最优解,而之前提到的Logistic Regression则是本文模型中的k取2时的特殊情况。

    到这里整个流程基本就结束了~

来都来了,点个在看再走吧~~~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值