回归可以用于预测_多少_的问题。 比如预测房屋被售出价格,或者棒球队可能获得的胜场数,又或者患者住院的天数。
事实上,我们也对_分类_问题感兴趣:不是问“多少”,而是问“哪一个”
3.4.1 分类问题 #
- [[One-hot encoding 独热编码]]
3.4.2 网格架构 #
- 为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的[[Affine Function 仿射函数]]
E.X.
- 假设现在有3个未规范化的预测(Logit):\(o_1,o_2和o_3\) \(o_1=x_1w_{11}+x_2w_{12}+x_3w_{13}+x_4w_{14}+b_1\) \(o_2=x_1w_{21}+x_2w_{22}+x_3w_{23}+x_4w_{24}+b_2\) \(o_1=x_1w_{31}+x_2w_{32}+x_3w_{33}+x_4w_{34}+b_3\)
3.4.3 全连接层的参数开销 #
- 对于任何具有d个输入和q个输出的全连接层[[3.1_LinearRegression#Fully-Connected Layer 全连接层]],其参数开销为\(O(dq)\),但可以通过超参数减少到\(O(\frac{dq}{n})\)
3.4.4 softmax 运算 #
- 我们希望模型的输出\(\hat y_j\)可以视为属于类\(j\)的概率,然后选择具有最大输出值的类别\(argmaxx_jy_j\)作为我们的预测,例如\(\hat y_1,\hat y_2\)和\(\hat y_3\)分别为\(\hat y={0.1,0.8,0.1}\)那么我们的预测变为独热编码的\(y={0,1,0}\),即为鸡
能否将未规范化的预测o直接视作我们感兴趣的输出呢 #
- 不行
- 因为将线性层的输出直接视为概率时存在一些问题
- 我们没有限制这些输出数字的总和为1
- 根据输入的不同,它们可以为负值
- 其违反了[[概率论公理]]
概率论 #
- 要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1
- 此外,我们需要一个训练的目标函数,来激励模型精准地估计概率
Calibration 校准 #
- 例如, 在分类器输出0.5的所有样本中,我们希望这些样本是刚好有一半实际上属于预测的类别
Softmax 函数 #
- 社会科学家邓肯·卢斯于1959年在选择模型(choice model)的理论基础上发明的softmax函数
- softmax函数能够将未规范化的预测变换为非负数并且总和为1,同时让模型保持 可导的性质
- 为了完成这一目标,我们首先对每个未规范化的预测求幂,这样可以确保输出非负
- 为了确保最终输出的概率值总和为1,我们再让每个求幂后的结果除以它们的总和。如下式$$\hat y=softmax(o),其中\hat y_j=\frac{exp(o_j)}{\sum_kexp(o_k)}=\frac{e^j}{\sum_ke^k}$$
- 这里,对于所有的j总有\(0\leq\hat y_j\leq1\),因此\(\hat y\)可以视为一个正确的概率分布
- 尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。 因此,softmax回归是一个线性模型(linear model)。
3.4.5 小批量样本的矢量化 #
- 为了提高计算效率并且充分利用GPU,我们通常会对小批量样本的数据执行矢量计算
3.4.6 损失函数 #
- 使用[[Maximum Likehood Estimation 极大似然估计]]
3.4.6.1 对数似然 #
-
softmax函数给出了一个向量\(\hat y\), 我们可以将其视为“对给定任意输入x的每个类的条件概率
-
通过计算softmax的对数似然,可以推导出他的损失函数
-
假设现在有一个数据集 \({X,Y}\),其具有n个样本,其中索引i的样本由特征向量\(x^{(i)}\)和独热标签向量\(y^{(i)}\)组成,可以将估计值与实际值进行比较$$P(Y|X)=\prod^n_{i=1}P(y^{(i)}|x^{(i)})$$
-
根据[[3.1_LinearRegression#Likehood 似然]],已知最大化$P(Y|X),相当于最小化负对数似然 $$P(Y|X)=\sum^n_{i=1}-logP(y^{(i)}|x^{(i)})=\sum^n_{i=1}l(y^{(i)},\hat y^{(i)})$$
-
其中对于任何标签y和预测模型\(\hat y\),损失函数为$$l(y,\hat y)=-\sum^{q}_{j=1}y_j\log \hat y_j$$
-
这个[[3.1_LinearRegression#Loss Function 损失函数]]并没有介绍过,他的名字为Cross-entropy Loss交叉熵损失,将在后面介绍到
为什么要加入对数,而不是直接取负数 #
- 数值稳定性: 在概率模型中,可能会有大量的乘法运算,这可能导致数值下溢或溢出问题,尤其是当概率很小的时候。通过取对数,可以将乘法运算转换为加法运算,从而提高计算的稳定性。
- 对数函数的导数相对于原函数来说更简单,这使得梯度的计算更加高效。特别是在梯度下降等优化算法中,简化的导数计算可以显著减少计算量。
- 对数函数的特性使得推导和分析变得更加简单,因为它可以将乘法转换为加法,并且有很多性质,例如对数函数的导数比原函数更容易处理
3.4.6.2 softmax及其导数 #
- 由于softmax和相关的损失函数很常见, 因此我们需要更好地理解它的计算方式
- 将3.4.3带入Cross-entropy Loss Function中,得到 $$\begin{align}l(y,\hat y)=-\sum^{q}{j=1}y_j\log \frac{e^{o_j}}{{\sum^{q}{k=1}e^{o_k}}} \=-\sum_{j=1}^{q}y_j[\ln e^{o_j}-\ln \sum^q_{k=1}e^{o_k}] \=\sum^q_{j=1}y_j\log\sum^q_{k=1}e^{o_k}-\sum^q_{j=1}y_jo_j \=\log \sum^q_{k=1}e^{o_k}-\sum^q_{j=1}y_jo_j\end{align}$$
Softmax结合Cross Entropy的求导过程 #
-
已知Cross Entropy Function$$H(y_i,p_i)=-\sum_iy_i\log pi$$
-
\(y_i\)为预测事件,\(\log p_i\)为一个分布的最优编码
-
得到[[Home Page]]
3.4.6.3 交叉熵损失 #
- [[Cross-Entropy 交叉熵]]
3.4.7.1 熵 #
- [[Cross-Entropy 交叉熵#2. 熵]]