• umich cv-2-2


    UMICH CV Linear Classifiers

    在上一篇博文中,我们讨论了利用损失函数来判断一个权重矩阵的好坏,在这节中我们将讨论如何去找到最优的权重矩阵
    想象我们要下到一个峡谷的底部,我们自然会选择下降最快的斜坡,换成我们这个问题就是要求权重矩阵相对于损失函数的梯度函数,最简单的方法就是使用定义法:
    img
    我们也可以使用解析梯度,这里需要用到矩阵对向量,矩阵对标量求导的一些知识,在后面我们也会采用反向传播的方法,因为自己手算微积分毕竟比较容易出错,尤其是涉及到很多层神经网络的时候。
    在作业assignment2 的第一个线性分类器的实现中,我们会使用两张种损失函数,分别是svm与softmax函数,需要我们使用解析梯度来计算,这里推荐两篇博文的推导过程,因为我这边基础也不是很好,需要再深入学习一下😭
    svm:http://giantpandacv.com/academic/算法科普/深度学习基础/SVM Loss以及梯度推导/
    softmax:https://blog.csdn.net/qq_27261889/article/details/82915598

    计算得到梯度函数之后,我们就可以让loss沿着梯度的方向下降:
    img
    这里有三个超参数,是我们自己手动设置的,分别是权重矩阵初始化的策略,迭代步骤与学习率

    但是对所有的样本都进行梯度下降,显然是非常耗时的一件事,所以我们一般采用sgd方法,也就是随机梯度下降:
    img
    这里又多了batch size与抽样方法两个超参数

    但是SGD的缺点在于会导致梯度剧烈波动,有的地方下降很快有的地方下降很慢,同时也面临着陷入局部最优解的困境,所以出现了SGD + Momentum
    img
    img
    加入一个速度变量这样在下降快的时候可以抑制梯度的下降,起到一个平衡作用
    Momentum也有变体 Nesterov Momentum,与Momentum唯一区别就是,计算梯度的不同。Nesterov动量中,先用当前的速 v临时更新一遍参数,在用更新的临时参数计算梯度,就是一种向前看的思想:
    img
    img

    另一类进行优化的方法采用dw的平方
    Adagrad 与 Rmsprop
    img
    由于adagrad会导致下降的过快,因为有平方的存在,所以又提出了RMSProp,加入decay_rate来放缓下降速度

    最常用的优化方法就是adam
    img
    注意这里要加入偏差修正项防止起始的时候误差太大

    这里有一篇知乎的回答可供参考:https://www.zhihu.com/question/323747423

    上面的方法都是采用一阶导数:
    img
    有时候我们也可以采用二阶导数
    img
    但是二阶导的计算可想而知的复杂,所以我们一般很少采用二阶导进行优化
    最后是一些二阶导的讨论:
    img
    img
    img

    本次assignment A2 的第一个线性分类器 主要内容就是分别采用svm与softmax损失函数进行优化计算,也没有用到后面复杂的优化方法,就是最简单的学习率乘以dw,比较复杂的就是解析梯度的推导,可参考上面的两篇博文

  • 相关阅读:
    代码随想录训练营Day56:Leetcode647、516
    深入浅出索引(下)
    vivado查看报告和消息4
    Docker存储卷
    Etcd教程 — 第四章 Etcd集群安全配置
    怎么批量删除WordPress自定义栏目?
    leetcode - 2038. Remove Colored Pieces if Both Neighbors are the Same Color
    算法和数据结构解析-9 : 排序相关问题讲解
    渲染引擎什么情况下才会为特定的节点创建新的图层
    创建型设计模式- C++实现
  • 原文地址:https://www.cnblogs.com/dyccyber/p/17759697.html