机器学习(ML),深度学习(DL)都采用梯度下降的方法向目标函数拟合。

    梯度下降:梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
    https://baike.baidu.com/item/梯度下降/4864937?fr=aladdin

    E0:

    1. 你明白什么是激活函数吗?
      激活函数是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。(类似于函数中的映射,使可以处理更复杂的问题)
    2. 为什么不加激活函数多层全连接的输出一直是直线?
      不加激活函数,每一层都是上一层函数的线性函数(矩阵相乘),输出永远是输入的线性组合。
    3. 道理我都懂,可是梯度下降在神经网络里是怎么工作的?

    image.png

    1. 就一个二次函数有啥意思啊,试试其他函数!

      y = torch.pow(x, 2) 将2改成3

    E1:

    1. 对 Dataset 和 DataLoader 很好奇?他们是什么?
      Dataset是一个包装类,用来将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。
      DataLoader是一个比较重要的类,它为我们提供的常用操作有:batch_size(每个batch的大小), shuffle(是否进行shuffle操作), num_workers(加载数据的时候使用几个子进程)
      (感觉就是dataset只是一个包装,但是dataloader里面有一些功能)
    2. 你发现这个数据分布是什么分布了吗?那你知道这个分布的两个约束该怎么求吗?
      正态分布。

    相关概念:

    1. epoch:一个完整数据集经过神经网络一次并返回一次
    2. Batch:(一批样本集)将一个非常庞大的完整的数据集分成若干批样本
    3. Batch_size:一批样本的大小
    4. Iteration:训练一个Batch就是一个Iteration(迭代)

    E2:

    1. Sigmoid() 是什么?不加这个东西可以吗?
      使得答案分布在0-1之间,从而进行二分类,从而表示是黑客或是正常用户访问。
    2. 发现实验 1 和 实验 2 之间任务输出的区别了吗?
      本实验中对于一个输入的数据,它的分布一般是分为靠近0或靠近1,如果结果落在中间则表示没有很好地判断是否是黑客。
    3. 为什么一次要把一个 batch_size 的数据投进去训练,一次1个不行吗,一次全部不行吗?
      将完整的数据集分成不同的样本集,在进行机器学习时,使用一个样本集作为一个训练过程。对于有限数据集,使用一个迭代过程即梯度下降可以优化学习过程。但是随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。所以需要选择合适的样本大小。
    4. 想知道这个数据有什么规律吗?去看看 data 文件夹下的 create.py吧!

      没太看懂,好像是通过函数转换,得到的一系列数据。

    5. 这才只有两类啊(只能分出是或不是),想知道多类该怎么办!

    利用softmax分类器,将线性分类得到的得分值转化为概率值,进行多分类,在SVM中的输出是得分值,Softmax的输出是概率。用不同的数值范围表示不同的情况。

    E3:

    1. 做完这些实验,你发现全连接网络有什么特性?

      感觉全连接网络具有可重复性,对于符合该网络的数据集都可以进行处理,但是还需要根据需要解决的问题更改相应的参数。由于全连接网络分为正向传播和反向传 播。有一组出入得到的输出按理来说可以将输出作为新输入,得到类似的原输入数据。