线性回归与 Softmax 回归学习总结
今天学习了线性回归和 Softmax 回归,这些都是深度学习里挺基础的内容。线性回归的核心就是找一个合适的函数来拟合这些数据。它的基本表达式有两种写法,一种是y=wTx+b,另一种是y=Xw+b。这里面,x 或者 X 代表的是房子的各种特征,比如卧室数、车库面积这些输入信息;w 是权重,就好比不同特征对房价影响的大小,比如卧室多可能对房价影响更大,那对应的权重就会高一些;b 呢,就是偏置项,相当于一个基础值。
从神经网络的角度看,线性回归其实就是一个最简单的单层神经网络。输入层就是我们收集到的各种特征,比如房子的卧室数、车库大小等,输出层就是我们要预测的结果,也就是房价。输入层的每个特征通过对应的权重 w 和偏置项 b,最终得到输出结果 y。
接下来就涉及到怎么让这个模型变得更准确,这就离不开损失函数、训练数据、学习参数和优化算法了。
损失函数就像是一把尺子,用来衡量模型预测的结果和真实结果之间的差距。如果预测值和真实值差得越多,损失函数的值就越大;反之,损失函数的值就越小。我们训练模型的目标,就是找到合适的参数(也就是权重 w 和偏置 b),让损失函数的值最小。
训练数据就是我们用来 “喂” 给模型的数据,比如前面提到的往年房价数据和对应的房子特征。模型通过分析这些数据,不断调整参数,来提高预测的准确性。
学习参数其实就是我们要找的权重 w 和偏置 b,这些参数决定了模型的预测能力。
然后是基础优化算法,这里重点讲了梯度法。咱们可以把寻找损失函数最小值的过程,想象成在一座山上找最低点。我们不知道最低点具体在哪儿,而梯度就像是指南针,它能告诉我们在当前位置,往哪个方向走,损失函数的值能减小得最多。不过要注意,梯度指的方向只是当前位置函数值减小最快的方向,不一定就是最终的最低点方向,但沿着这个方向走,总能让我们离最低点越来越近。
梯度法的具体流程也不复杂:先在某个初始位置计算梯度,然后沿着梯度方向前进一定的距离,到达新的位置后,再重新计算梯度,接着沿着新的梯度方向前进,就这么反复下去,一步一步靠近损失函数的最小值。在梯度法的基础上,又衍生出了随机梯度下降。它的思路是通过不断在损失函数递减的方向上更新参数,来降低预测误差。不过用随机梯度下降的时候,有个很关键的问题就是学习率的选择。
学习率可不能随便设。如果学习率太大,就好比在找山的最低点时,步子迈得太大,很可能一下子就跨过头了,不仅找不到最低点,还可能在山上来回晃悠,导致损失函数的值不稳定,甚至越来越大。但如果学习率太小,步子迈得太小,虽然每一步都在靠近最低点,但速度太慢了,要走到最低点得花特别多的时间,效率特别低。
除了随机梯度下降,还有小批量随机梯度下降。这种方法是把训练数据分成一小批一小批的,每次用一小批数据来计算梯度,然后更新参数。这里就涉及到批量值的选择了。批量值不能太小,不然没办法充分利用电脑的计算资源,训练效率不高;但批量值也不能太大,太大的话会浪费计算资源,而且可能会让模型陷入局部最优解,没办法找到全局的最小值。
总的来说,梯度下降就是通过不断沿着反梯度方向更新参数来求解问题,小批量随机梯度下降现在基本上是深度学习里默认的求解算法了。在使用的时候,有两个重要的超参数一定要好好调,就是批量大小和学习率,它们对模型的训练效果和效率影响特别大。
讲完了线性回归,再来说说 Softmax 回归。它和线性回归不一样,线性回归主要是用来估计一个连续的值,比如房价、温度这些;而 Softmax 回归是用来做分类的,就是预测一个事物属于哪个离散的类别。
生活里分类的例子也不少,比如 ImageNet 项目,要把自然对象分成 1000 类;还有 MNIST 手写数字识别,要把手写的数字分成 0 到 9 这 10 类。在 Kaggle 上也有很多分类任务,比如把人类蛋白质显微镜图像分成 28 类,或者把维基百科上的恶语评论分成 7 类,像有毒的、有威胁性的、侮辱性的等等。从线性回归到多类分类,其实是有一个转变的。线性回归只有一个连续数值的输出,输出的范围是自然区间,计算损失的时候就是看预测值和真实值的区别。而分类问题通常有多个输出,每个输出代表预测为对应类别的置信度,我们要根据这些置信度来判断样本属于哪个类别。
从神经网络结构上看,Softmax 回归也是一个单层神经网络,而且它的输出层是全连接层。因为计算每个输出的时候,都要用到所有的输入特征。比如输入层有 x1、x2、x3、x4 这几个特征,输出层有 o1、o2、o3 这几个输出,计算 o1、o2、o3 的时候,都会用到 x1 到 x4 所有的特征和对应的权重。
输出层的神经元数量也有讲究,一般是根据要分类的类别数量来定的。比如前面说的 MNIST 手写数字识别,要分 10 类,那输出层的神经元就设为 10 个,每个神经元对应一个数字类别的置信度。
在 Softmax 回归里,有个很关键的操作就是 Softmax 运算。它的作用是把输出层的结果转换成概率分布,让每个输出值都非负,而且所有输出值加起来等于 1。这样一来,我们就能更直观地看出模型预测样本属于每个类别的概率了。
Softmax 运算的公式是y=softmax(o),具体计算的时候,先对每个输出 o_i 做指数运算,得到 exp (o_i),这一步能保证结果都是大于 0 的;然后再用每个 exp (o_i) 除以所有 exp (o_k) 的和,这样就能得到每个类别的概率了。举个例子,比如输出层的结果是 [1, -1, 2],经过 Softmax 运算后,得到的概率就是 [0.26, 0.04, 0.7],这就说明模型预测这个样本属于第三类的概率最大,有 70%。
所以说,Softmax 回归是一个多类分类模型,它通过 Softmax 操作把输出转换成每个类别的预测置信度(也就是概率),然后我们根据这些概率来判断样本的类别。
最后再聊聊损失函数,除了之前在线性回归里可能用到的平方损失(L2 损失)和 L1 损失,在 Softmax 回归里,交叉熵损失用得比较多。平方损失是计算预测值和真实值的平方差,L1 损失是计算两者的绝对差。Huber 损失则是综合了 L1 损失和 L2 损失的优点,在误差较小时用 L2 损失,误差较大时用 L1 损失,这样能减少异常值对模型的影响。
而交叉熵损失通常用于比较两个概率分布,在分类问题中,我们希望模型预测的概率分布和真实的概率分布尽可能接近,交叉熵损失就能很好地衡量两者之间的差距。它的公式是H(p,q)=−∑pilog(qi),其中 p 是真实的概率分布,q 是模型预测的概率分布。交叉熵损失的值越小,说明模型预测的概率分布和真实分布越接近,模型的分类效果就越好。
以上就是我对线性回归和 Softmax 回归的学习总结啦,把这些基础知识点弄明白,后续再学更复杂的深度学习模型,应该就能轻松不少。

被折叠的 条评论
为什么被折叠?



