本文将以 softmax 线性分类器为例, 讨论数据驱动过程的各组成部分. 同时本章是后文非线性分类器和深度学习的铺垫.

1 训练数据
给定由 m 张图像组成的训练集, 每个图像的标记是 K 个不同类中的一个,

其中, i 用于对训练实例进行索引: x^(i) 是第 i 张图像展成列向量之后的结果. n 是每个向量的维数, 若图像的大小是 1024 × 768 × 3, 则 n = 1024 × 768 × 32 = 359296. y^(i) 是 x^(i) 对应的标记.

2 假设函数
在给定训练集后, 我们将从训练集中学到一个映射 h, 称为假设 (hypothesis), 使得 h(x) 给出了 x 属于某个类的信心或分数, 从而能进一步对 y 做预测, 见下图. 对于不同的分类模型, h 有不同的函数形式.

2.1 线性分类模型的假设函数
在线性分类模型中, 假设函数 (hypothesis) h 采用的是一种最简单的线性映射

W, b 是函数的参数, W 通常叫做权值 (weights), b 通常叫做偏置向量 (bias vector).

我们的目标是设置 W, b 使得我们计算的分数匹配真实值 (ground truth), 这个过程称作学习参数 W, ⃗b. 一旦学习过程结束, 我们可以丢弃训练集, 通过参数 W, b 即可做预测.

2.2 对假设函数的理解
公式3, 4可以看作是同时有 K 个分类器进行计算

其中 d 用于对 W 中各元素索引. w_d^T x + b_d 计算的是 x 属于第 d 个类的信心或分数.

另外一种理解方式是将 w_d^T  x 看作是一种相似度的度量, 每个 w_d 代表了每个类的一个原型 (prototype). 预测的过程是将 x 与各个类的原型相比较, 找到一个与 ⃗x 最相似的类.

2.3 Softmax 分类器的假设函数

Softmax 分类器是一种线性分类器, 它对于 s = h(x ) = Wx + b 计算得到的各类的分数有概率上的理解

其中称为 softmax 函数.

3 损失函数

在给定假设函数 h 后, 我们可以计算对于每个数据 x^(i) 得到的对各个类的分数. 我们需要一个能通过比较假设函数得到的分数与数据真实值 y^(i) 相符 (或不相符) 程度的度量, 通过这个度量来定量的表示当前参数的好坏. 损失函数 (loss function) 计算的是不相符的程度, 即当损失函数高的时候当前参数 W, b 表现很差, 当损失函数低的时候当前参数 W, b 表现很好.

3.1 交叉熵损失

通过最大似然估计 (maximum likelihood estimate) 可以得到 softmax 分类器的损失函数.

其中, 称为交叉熵损失 (hinge loss). 在后文, 为了叙述方便, 将err(W, b; x^(i) , y^(i) )记做 err^(i) .

3.2 正则化

在上一子节我们知道了对 softmax 来说, 好的 (W, b) 使得

达到最小值. 但是根据式3.21计算得到的 (W, b) 并不唯一. 假设 (W⋆ ,b⋆) 是最优解, 那么给 W⋆ 和 b⋆ 中所有元素都加一个常数 c, c > 0 得到的结果也是式3.21的最优值.

为了解决这个问题, 我们将对 (W, b) 的取值设定一些偏好, 这个偏好的设定通过在损失函数中添加正则项 (regularization)Ω(W ) 来实现. 最常用的正则项利用 l_2 范数 (norm)(对应于矩阵是 l_F 范数)

l_2 正则化倾向于小而且分散的权值, 因此分类器倾向于考虑 x 的全部维度同时每个维度对输出的影响较小, 而不是只考虑 x 的几个维度同时这几个维度对输出有很大影响. 这样的正则化有助于提高泛化 (generalization) 能力.

这样, 完整的损失函数变成

其中, λ 是一个数字, 用于调节正则化对损失函数的影响, 1/2是为了随后的数学计算方便一些.

4 优化

我们的目的是找到 (W, b), 最小化损失函数

这是个无约束的优化问题.

4.1 梯度下降

当训练集给定后, 损失函数 J 只是参数 (W, b) 的函数. 通常 (W, b)维数很高, 我们很难可视化 (W, ⃗b) 与 J 的关系. 但是, 通过选取参数空间的某两个方向 (θ_0 , θ_1 ), 做出 J 的值沿着 (θ_0 , θ_1 ) 方向变化的曲线, 即计算J(W + c_0 θ_0 + c_1 θ_1 , b) 随 (c_0 , c_1 ) 的变化, 其中 (W, b) 是随机给定的初始点, 对 b 的可视化方法也是一样的. 根据曲线, 我们仍然可以得到一些直观上的理解, 见下图.

直接找到最佳的参数 (W, b) 通常是很难的 (尤其在神经网络中, J(W, b)是非凸函数). 因此, 我们的策略是开始时随机选定一组参数 (W, b), 之后迭代地修正 (W, b) 使得 J(W, b) 越来越小. 对应于图3.2, 开始时随机位于 J 曲线上的某一点, 之后每次朝着到达谷底最快的方向前进一步.

将 W 展成列向量并与 ⃗b 拼接成一个大的列向量⃗ θ,  θ 的维度是 K × n + K. 因此, 优化问题可以写成

这仍然是个无约束的优化问题.

在每一步, 我们要找到一个方向 ∥⃗v ∥ = 1, 使得 J 在这个方向下降最快, 然后朝着这个方向前进 η > 0 大小. 优化变成带约束的优化问题

当 η 很小时, J 可以用泰勒展开近似:

因此, 最佳的方向 v 是梯度 ∇J( θ) 的反方向.

η 的选择对优化的收敛有决定性的影响. η 过小时收敛过慢, η 过大时收敛过程会很不稳定. 我们希望 η 在开始时大一些以更快收敛, 而在之后变小使得不会错过最优值. 可以取 η = α∥∇J (θ) || 达到. 开始时 ∥∇J( θ)∥较大, 在收敛时∥∇J( θ)∥ = 0. 更新规则是

式3.36就是梯度下降 (gradient descent, GD), α 是学习速率 (learning rate).

用 (W, b) 表示的梯度下降规则是

注意式3.37, 3.38是同时对 (W, b) 进行更新, 而不是先更新 W , 再更新 b.

4.2 随机梯度下降
在更新规则式3.37, 3.38中, 每更新一次, 需要把所有的训练集看过一遍, 因此它也称为批量梯度下降 (batch gradient descent). 当 m 很大时, 例如在 ImageNet 中 m 是百万级别, 这样的更新就显得效率很低.

如果利用 ∇J 的无偏估计来替代 ∇J, 这样每更新一次只需要一个训练实例

这种更新规则为随机梯度下降 (stochastic gradient descent, SGD). SGD 通常比 GD 更快地收敛. 在神经网络这样的非凸优化中, 存在着多个局部最优点, GD 找到的局部最优点取决于参数初始化时所在的位置. 而在 SGD 中, 由于在更新过程中存在噪声, 噪声可能使参数跳到另一个比当前局部最优更好的局部最优. SGD 也可以跟踪数据分布的变化.

在实际中, GD 和 SGD 都较少用到, GD 每更新一个需要看到 m 个训练数据, SGD 每更新一次需要看到 1 个数据. 小批量梯度下降 (mini-batch gradient descent) 介于两者之间, 每更新一次需要看到 m ′ 个数据, m ′ 被称为批量 (batches). 小批量梯度下降继承了 SGD 的优点, 同时可以利用高效的向量化代码优化的技巧, 因此在涉及大数据优化时经常被用到. 由于批量大小是一个在 1 和 m 之间的人为指定超参数, 因此在下文的计算中, m 即可以代表训练数据大小, 也可以代表批量大小.

4.3 softmax 优化规则

利用微积分, 很容易计算对于交叉熵损失对参数的导数.

因此

将上面两式合并写成向量形式

其中 e_y^(i) 是个 K 维向量, 在 y^(i) 的位置为 1, 其余位置为 0.

利用链式求导法则可得

之后利用式3.37, 3.38就可以对 W, b 进行更新.

总之, softmax 的完整训练过程可用算法1表示.

5 预测和评估
让分类模型在一组从未在训练集中出现过的图像组成的测试集上做预测, 通过比较预测的标记和测试集真实的标记来评价这个模型的好坏. 我们希望一个好的分类模型会有很多的预测标记和真实标记相一致.

5.1 预测
对于一个未知输入数据x , 分类模型的预测是

即找到线性分类器输出分数最大的那项对应的类作为 x 的标记.

5.2 评估
给定测试集

对每个 x^(i) , 根据式3.50计算模型的预测值 ŷ^(i) . 用准确率

表示分类器的性能. 其中 1{·} 是指示函数,

若分类器将全部测试样本分对, 则 Acc = 1, 其余情况下 Acc < 1.

[深度学习基础] 2. 线性分类器相关推荐

  1. 【深度学习-CS231n】线性分类器和神经网络

    文章目录 神经网络静态部分 基本概念和小细节 算法设计选项 神经网络动态部分 学习过程 [梯度检查](https://zhuanlan.zhihu.com/p/21741716?refer=intel ...

  2. TensorFlow 深度学习笔记 从线性分类器到深度神经网络

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 L ...

  3. 二分类交叉熵损失函数python_【深度学习基础】第二课:softmax分类器和交叉熵损失函数...

    [深度学习基础]系列博客为学习Coursera上吴恩达深度学习课程所做的课程笔记. 本文为原创文章,未经本人允许,禁止转载.转载请注明出处. 1.线性分类 如果我们使用一个线性分类器去进行图像分类该怎 ...

  4. 深度学习基础(基本概念、优化算法、初始化、正则化等)

    2020-04-25 16:29:09 引言 深度学习目前已成为发展最快.最令人兴奋的机器学习领域之一,许多卓有建树的论文已经发表,而且已有很多高质量的开源深度学习框架可供使用.然而,论文通常非常简明 ...

  5. 高效计算基础与线性分类器

    高效计算基础与线性分类器 标签: 深度学习线性分类器 2016-06-29 16:01 131人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 深度学习笔记(1) 作者同类文章X 版权声明:本 ...

  6. [深度学习基础] 深度学习基础及数学原理

    图像分类 (image classification) 问题是指, 假设给定一系列离散的类别(categories)(如猫, 狗, 飞机, 货车, ...), 对于给定的图像, 从这些类别中赋予一个作 ...

  7. 第三章_深度学习基础

    文章目录 第三章 深度学习基础 3.1 基本概念 3.1.1 神经网络组成? 3.1.2神经网络有哪些常用模型结构? 3.1.3如何选择深度学习开发平台? 3.1.4为什么使用深层表示? 3.1.5为 ...

  8. 深度学习基础知识点【更新中】

    深度学习基础知识点 文章目录 深度学习基础知识点 1. 数据归一化 2. 数据集划分 3. 混淆矩阵 4. 模型文件 5. 权重矩阵初始化 6. 激活函数 7. 模型拟合 8. 卷积操作 9. 池化操 ...

  9. 【神经网络与深度学习】1.线性分类与感知机

    线性分类与感知机 线性分类 线性回归 线性二分类 多分类回归 多层感知机 神经元模型 感知机模型 作为机器学习的一类,深度学习通常基于神经网络模型逐级表示越来越抽象的概念或模式. 这里从线性回归和so ...

最新文章

  1. 李彦宏:从没觉得百度模仿谷歌;马化腾:做ICO数字货币有很多风险
  2. 区块链基础知识系列 第一课 区块链网络简介
  3. Tomcat安装及配置教程(超详细的图文教程)(亲测)
  4. 聚类dbi指数_一种基于DBI-PD聚类算法的异常检测机制
  5. MySQL等级考试题目练习_全国计算机等级考试二级MySQL练习题
  6. 大数据技术是“地球的神经系统”
  7. 网络资源(7) - JAX-WS视频
  8. 安徽省月度降水量分布数据
  9. Hbase 查询命令 条件筛选
  10. TOGAF9中文版(五)
  11. linux用户权限不够解析及解决方案
  12. 论文清单:一文梳理因果推理在自然语言处理中的应用(附链接)
  13. css动画效果-animation
  14. 网站服务器在什么地方怎么查,如何查询一个网站所在服务器信息
  15. SQL Server 2008 R2 安装 (转)
  16. android将图片转成字符串,再将字符串转成图片
  17. 关于Numpy数组中属性shape的理解
  18. 深入了解 Animation Scripting 动画脚本
  19. Android 使用OkHttp支持HttpDNS
  20. matlab和saber哪个好用,实例分析 saber与simulink谁更适合仿真

热门文章

  1. boost::python::detail::copy_ctor_mutates_rhs相关的测试程序
  2. bgi::detail::path_intersection用法的测试程序
  3. VTK:图表之BoostBreadthFirstSearchTree
  4. VTK:Filtering之GenericClip
  5. OpenCV camshift算法的实例(附完整代码)
  6. Qt D-Bus类型系统
  7. C++实现对链表的选择排序算法(附完整源码)
  8. QML基础类型之vector4d
  9. C++虚析构和纯虚析构
  10. 经典C语言程序100例之八八