美文网首页
Task01&Task02. 动手学深度学习——从线性回归出发

Task01&Task02. 动手学深度学习——从线性回归出发

作者: 且不了了 | 来源:发表于2020-02-14 21:45 被阅读0次

    最近正在参加一个公益AI课程,学习深度学习,打卡监督自己。由于刚开始学习pytorch和深度学习,进度比较慢,没有时间仔细写笔记,因此先简单列出提纲,以后再进行补充。本文目录如下:

    Task01

    • 1.线性回归
    • 2.logistic回归
    • 3.softmax分类模型
    • 4.多层感知机

    Task02

    • 1.文本预处理
      1. 语言模型
      1. 循环神经网络基础

    1. 线性回归

    1.1 线性回归的形式

    y=W^TX+b

    1.2 平方损失函数

    如何衡量线性回归模型拟合得怎么样?一个直观的想法就是预测值和真实值的相差越小越好,但是由于正负会相互抵消,因此不直接进行求和,而是取平方和。
    \sum_{i=1}^{n}(\hat{y_i}-y_i)^2

    1.3 如何估计系数?

    模型中的待估系数包括Wb,应该如何估计这两个系数呢?
    我们的目标是最小化损失函数,也就是
    argmin\sum_{i=1}^{n}(\hat{y_i}-y_i)^2
    那么就有两种思路,一种是求解析解,另一种是求数值解。

    • 解析解即最小化一阶导数,解出Wb的表达式。
    • 很多情况下,最小化损失函数无法得到解析解,因此就需要求数值解,这里可以用梯度下降的方法求数值解。

    1.4 补充知识点:梯度下降法

    2. logistic回归

    2.1 sigmoid函数

    线性回归可以对y的值是连续值时建模,但我们想象一下,当我们的y值的值域是{0,1}时,用线性回归模型显然不合适,因为等式右边的范围时负无穷到正无穷。

    但是,如果我们依然想利用线性回归模型怎么办呢?有一个方法就是想办法将负无穷到正无穷映射到0到1区间。那么怎么映射呢?——sigmoid函数就是一个方法。
    \text{sigmoid}(x) = \frac{1}{1 + \exp(-x)}.

    2.2 logistic回归的损失函数——交叉熵损失函数

    对于样本i,我们构造向量\boldsymbol{y}^{(i)}\in \mathbb{R}^{q} ,使其第y^{(i)}(样本i类别的离散数值)个元素为1,其余为0。这样我们的训练目标可以设为使预测概率分布\boldsymbol{\hat y}^{(i)}尽可能接近真实的标签概率分布\boldsymbol{y}^{(i)}

    • 平方损失估计

    \begin{aligned}Loss = |\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}|^2/2\end{aligned}

    然而,想要预测分类结果正确,我们其实并不需要预测概率完全等于标签概率。例如,在图像分类的例子里,如果y^{(i)}=3,那么我们只需要\hat{y}^{(i)}_3比其他两个预测值\hat{y}^{(i)}_1\hat{y}^{(i)}_2大就行了。即使\hat{y}^{(i)}_3值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,例如\hat y^{(i)}_1=\hat y^{(i)}_2=0.2\hat y^{(i)}_1=0, \hat y^{(i)}_2=0.4的损失要小很多,虽然两者都有同样正确的分类预测结果。

    改善上述问题的一个方法是使用更适合衡量两个概率分布差异的测量函数。其中,交叉熵(cross entropy)是一个常用的衡量方法:

    H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},

    其中带下标的y_j^{(i)}是向量\boldsymbol y^{(i)}中非0即1的元素,需要注意将它与样本i类别的离散数值,即不带下标的y^{(i)}区分。在上式中,我们知道向量\boldsymbol y^{(i)}中只有第y^{(i)}个元素y^{(i)}{y^{(i)}}为1,其余全为0,于是H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\log \hat y{y^{(i)}}^{(i)}。也就是说,交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。当然,遇到一个样本有多个标签时,例如图像里含有不止一个物体时,我们并不能做这一步简化。但即便对于这种情况,交叉熵同样只关心对图像中出现的物体类别的预测概率。

    假设训练数据集的样本数为n,交叉熵损失函数定义为
    \ell(\boldsymbol{\Theta}) = \frac{1}{n} \sum_{i=1}^n H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ),

    其中\boldsymbol{\Theta}代表模型参数。同样地,如果每个样本只有一个标签,那么交叉熵损失可以简写成\ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{y^{(i)}}^{(i)}。从另一个角度来看,我们知道最小化\ell(\boldsymbol{\Theta})等价于最大化\exp(-n\ell(\boldsymbol{\Theta}))=\prod_{i=1}^n \hat y_{y^{(i)}}^{(i)},即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。

    2.3 估计系数

    这里依然使用梯度下降法

    2.4 反向传播

    3. 多层感知机

    3.1 softmax

    logistic回归能解决二分类问题,但是当y的取值是多个的情况下,就需要用到softmax进行分类。
    softmax运算符(softmax operator)解决了以上两个问题。它通过下式将输出值变换成值为正且和为1的概率分布:

    \hat{y}_1, \hat{y}_2, \hat{y}_3 = \text{softmax}(o_1, o_2, o_3)

    其中

    \hat{y}1 = \frac{ \exp(o_1)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}2 = \frac{ \exp(o_2)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}3 = \frac{ \exp(o_3)}{\sum_{i=1}^3 \exp(o_i)}.

    容易看出\hat{y}_1 + \hat{y}_2 + \hat{y}_3 = 10 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 1,因此\hat{y}_1, \hat{y}_2, \hat{y}_3是一个合法的概率分布。这时候,如果\hat{y}_2=0.8,不管\hat{y}_1\hat{y}_3的值是多少,我们都知道图像类别为猫的概率是80%。此外,我们注意到

    \underset{i}{\arg\max} o_i = \underset{i}{\arg\max} \hat{y}_i

    因此softmax运算不改变预测类别输出。

    4.多层感知机

    其实logistic函数就是一个一层的神经网络模型,但如果想要使网络更加复杂,就可以在其中增加隐藏层。

    4.1 不同的激活函数

    • sigmoid
    • tanh
    • ReLu

    4.2 反向传播

    相关文章

      网友评论

          本文标题:Task01&Task02. 动手学深度学习——从线性回归出发

          本文链接:https://www.haomeiwen.com/subject/rcxsfhtx.html