机器学习(ML),深度学习(DL)都采用梯度下降的方法向目标函数拟合。
梯度下降:梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
https://baike.baidu.com/item/梯度下降/4864937?fr=aladdin
E0:
- 你明白什么是激活函数吗?
激活函数是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。(类似于函数中的映射,使可以处理更复杂的问题) - 为什么不加激活函数多层全连接的输出一直是直线?
不加激活函数,每一层都是上一层函数的线性函数(矩阵相乘),输出永远是输入的线性组合。 - 道理我都懂,可是梯度下降在神经网络里是怎么工作的?

就一个二次函数有啥意思啊,试试其他函数!
y = torch.pow(x, 2) 将2改成3
E1:
- 对 Dataset 和 DataLoader 很好奇?他们是什么?
Dataset是一个包装类,用来将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。
DataLoader是一个比较重要的类,它为我们提供的常用操作有:batch_size(每个batch的大小), shuffle(是否进行shuffle操作), num_workers(加载数据的时候使用几个子进程)
(感觉就是dataset只是一个包装,但是dataloader里面有一些功能) - 你发现这个数据分布是什么分布了吗?那你知道这个分布的两个约束该怎么求吗?
正态分布。
相关概念:
- epoch:一个完整数据集经过神经网络一次并返回一次
- Batch:(一批样本集)将一个非常庞大的完整的数据集分成若干批样本
- Batch_size:一批样本的大小
- Iteration:训练一个Batch就是一个Iteration(迭代)
E2:
- Sigmoid() 是什么?不加这个东西可以吗?
使得答案分布在0-1之间,从而进行二分类,从而表示是黑客或是正常用户访问。 - 发现实验 1 和 实验 2 之间任务输出的区别了吗?
本实验中对于一个输入的数据,它的分布一般是分为靠近0或靠近1,如果结果落在中间则表示没有很好地判断是否是黑客。 - 为什么一次要把一个 batch_size 的数据投进去训练,一次1个不行吗,一次全部不行吗?
将完整的数据集分成不同的样本集,在进行机器学习时,使用一个样本集作为一个训练过程。对于有限数据集,使用一个迭代过程即梯度下降可以优化学习过程。但是随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。所以需要选择合适的样本大小。 想知道这个数据有什么规律吗?去看看 data 文件夹下的 create.py吧!
没太看懂,好像是通过函数转换,得到的一系列数据。
这才只有两类啊(只能分出是或不是),想知道多类该怎么办!
利用softmax分类器,将线性分类得到的得分值转化为概率值,进行多分类,在SVM中的输出是得分值,Softmax的输出是概率。用不同的数值范围表示不同的情况。
E3:
做完这些实验,你发现全连接网络有什么特性?
感觉全连接网络具有可重复性,对于符合该网络的数据集都可以进行处理,但是还需要根据需要解决的问题更改相应的参数。由于全连接网络分为正向传播和反向传 播。有一组出入得到的输出按理来说可以将输出作为新输入,得到类似的原输入数据。
