• cs231n --- 1:线性svm与softmax


    cs231n:线性svm与softmax

    参数信息:

    权重 W:(D,C)

    训练集 X:(N,D),标签 y:(N,1)

    偏置量bias b:(C,1)

    N:训练样本数;   D:样本Xi 的特征维度,Xi = [ Xi1,Xi2,...,XiD];  C:类别数量


    正则化系数 λ :控制正则化的强度

    delta / Δ : 间隔


    linear svm:

    对训练样本(Xi,yi),其对应每个类别的得分为:

      score = W*Xi+ b

    是长度为C的矢量,以s表示 score, s = [s1, s2, s3, ..., sC] = [W1*Xi,  W2*Xi, W3*Xi, ..., WC*Xi]

    Xi对应的损失(hinge loss)

      loss[i] = ∑j≠yi max(0,s- syi + delta)

    总的损失,加入正则化项 R(W):

       loss = (1/N)*ΣNi=1 loss[i] + R(W) = (1/N)*ΣNi=1 ∑j≠yi max(0,s- syi + delta)+  λ*ΣΣj Wi,j2



    softmax:

    对训练样本(Xi,yi), 利用 yi 构造长度为C的矢量 p = [0, 0, 0, ..., 1, ...],第 yi 位置为 1,其余为 0,

    先计算每个类别的得分:

      score = W*Xi+ b ,与上同

    但是softmax继续对得分进行 归一化处理,得到 Xi 在每个类别的概率:

      h = exp(s) / Σexp(s),

    即有 h = [h1, h2, ..., hC],hj = exp(sj) / ΣCk=1 exp(sk)

    Xi对应的损失(交叉熵损失 cross-entropy loss):

      loss[i] = -∑log( p*h) =  -∑Cj=1 log(pj*hj)= -log(hyi

    总的损失,加入正则化项 R(W):

      loss =  (1/N)* ΣNi=1 loss[i]  + R(W)  =   -(1/N)*ΣNi=1 log{ exp(syi) / ΣNk=1 exp(sk) } +  λ*ΣΣj Wi,j2


    softmax 梯度计算:

     对 loss 关于 w 进行求导即可得到梯度∂L/∂wj ,w = [w1, w2, w3, ... , wC],wj 是 Dx1的列向量

    ∂L / ∂wj = -(1/N) * ΣNi=1 Xi*[ 1{yi=j} - hj ] 

     梯度方向即是,w沿着梯度变化时,loss值变化最快的方向。利用梯度对loss进行优化,

    (求w)从而最小化    loss

    利用SGD训练

    W := W - ∂L / ∂wj 

    算法程序:

    1. 随机初始化 w

    2. 迭代( 一定次数 或者 前后两次迭代是 loss 差值小于阈值 )

    repeat {

      2.1 计算 loss,计算梯度∂L / ∂wj 

      2.2 更新w

        w := w - 2. 计算梯度∂L / ∂wj 

    }


    讨论:

    1. linear svm的关键在于将样本的正类别得分score[yi]与 负类别得分score[-]区分开,只要正、负类别得分的差值大于 delta,就认为样本的分类结果正确,分类损失loss = 0;

    它并不关心正负类别得分的细节,比如,对于某三分类,正类别是 1 (delta = 1),在svm看来,得分s1 = [ 10, 9, 9]  与得分s2 = [10,  -10, -10] 结果是一样的,都能够得到正确分类结果,所以二者的损失都是 0;

    2. softmax 不仅要求样本的正、负类别概率(其实是将类别得分score归一化后用概率表示)能够区分开,而且还想尽力使它们之间的差值越大越好;softmax即使对样本正确进行分类,其分类损失 loss 也 不为0,正、负类别的概率差值越大,其损失 loss就越小。比如,同样的三分类,正类别是 1,在softmax看来,得分s1 = [ 10, 9, 9]  与得分 s2 = [10,  -10, -10] 分类结果虽然是一样的,但是他们的损失却不一样,

    loss[s1] =  -log( [1,0,0] * [0.57611688,  0.21194156,  0.21194156] )  =  0.5514,

    loss[s2] =  -log( [1,0,0] * [ 0.999999996,   0.000000002,   0.000000002] ) = 0.000000004 

    所以softmax会认为s2比s1分类损失小。从而在分类中,softmax会尽力使正类概率大,而负类概率小

    3. linear svm上述特性既是不足,也是优点,比如在分类时,在A类,B类已经有不同得分,可以分开的情况下,不必再花费精力尽力使A、B两类的得分差别变大。

  • 相关阅读:
    base64加密/解密
    js split 的用法和定义 js split分割字符串成数组的实例代码
    js获取html5 audio 音频时长方法
    获取虾米音乐的歌词
    ajax请求QQ音乐
    MarkdownPad2.5 注册码
    neovim 使用
    tmux的使用方法和个性化配置
    linux 安装libevent
    boost.sha1
  • 原文地址:https://www.cnblogs.com/banluxinshou/p/7843117.html
Copyright © 2020-2023  润新知