[深度学习基础] 2. 线性分类器

来源:互联网 发布:软件体系结构实验报告 编辑:程序博客网 时间:2024/03/28 17:50

本文将以 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.

1 0