携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情
前言
在之前的文章中,我们对Tensor进行了深度的介绍。
今天,我们来介绍神经网络的基本概念,包括感知器的基本概念,前向计算,反向传播,分类与回归,过拟合和欠拟合,正则化问题。
-
1.1 神经网络的基本概念
-
人工智能领域 -> 机器学习 -> 神经网络
-
深度学习的基础
-
神经网络如下图所示:输入层、输出层、隐藏层、多层感知器
-
每个节点就是神经元,神经元之间通过相应的运算完成信息的传递或者特征的抽取
-
神经网络中的运算通常是线性运算,y=wx+b,b就是偏置项bias
-
如果输入层和输出层的维度都是非常高的,比如输入输出都是1024,那么连接线是非常稠密的,参数量是非常大的,通常会加入dropout层
-
深度学习就是将中间的隐藏层变得更加的深,也就是有更多的层
-
输出节点就是由输入节点经过多层的运算之后,最终得到了输出结果
-
每一个层的输出都是下一层的输入
-
对于神经网络,将某一个神经元提取出来,将这个结构称为一个感知器,从l1到l2之间就包含了多个感知器,所以也称神经网络为由多层感知器构造出来的网络结构,属于图结构的一种
-
1.1.1 感知器的基本概念
-
阶跃函数:定义为x>0,=1;x<=0,=-1,完成分类的任务
-
激活函数:relu,sigmoid,softmax
-
1.1.2 神经网络 VS 深度学习
-
多层感知器->神经网络,这里的神经网络一般指简单的神经网络或者人工神经网络
-
多隐层的多层感知器->深度学习,根据构造出来的网络结构所用的层和解决的问题,深度学习可以分为CNN,RNN等不同的网络结构,分别用来解决计算机视觉,自然语言处理,语音识别等不用的任务
-
1.1.3 前向运算
-
计算输出值的过程称为前向传播
-
在推理的时候用到的运算,也就是我们在进行逐层节点内容求解,从输入层经过网络运算之后拿到输出层结果的过程称之为前向运算
-
前向运算有一个基础,就是已经求解出了参数,我们在计算出网络中的参数之后,就可以利用输出层和每一层的参数来获取相应层的结果,最终拿到输出结果
-
1.1.4 反向传播
pytorch就完成了BP算法的求解参数的过程
而对于pytorch和tensorflow等深度学习的框架帮我们提供了模块化的算子,通过这些模块化的算子可以非常方便的搭建出网络结构,对于搭建出网络结构,网络结构中的未知的参数,通过提供相应的数据和标签,利用框架中帮我们实现的BP算法来求解神经网络中隐藏层节点的参数
- 反向传播(Backpropagation, BP)神经网络训练方法
- 该算法于1986年由Rumelhar和Hinton等人提出,该方法解决了带隐藏层的神经网络优化的计算量问题,使得带隐藏层的神经网络走向真正的使用
- 反向传播算法,通过计算输出层结果与真实值之间的偏差来机进行逐层调节参数
- 参数更新多少? 通过导数和学习率完成
-
1.2 分类与回归
-
回归就是拟合出一个这样的曲线,
- 优化的目标就是我们期望这些点尽可能的落在曲线上,
- 这样的话,在给一个输入值,就能够找到线上对应的一个输出值,
- 在神经网络中,就是把这个曲线变成网络,就是期望这些点尽可能的落在网络上,也就是希望给定x,预测值y和真实值尽可能接近。
- 目标检测和目标定位通常采用回归问题
-
分类问题就是去确保不同的类别之间的聚簇关系尽可能表现在空间状态上是分离的
- 那么将它描述在笛卡尔坐标系中,表达为输出的结果是两个离散的值
- 图像识别通常会采用分类问题
-
1.2.1 过拟合与欠拟合
-
可以看到,图片中的第二幅图是比较合理的一种解,
-
对于第一幅图就是欠拟合,
- 学到的函数太简单了
- 无论是在原有的样本上,还是在新给定的样本上,预测的结果和真是的结果偏差都很大
-
第三幅图就是过拟合,
- 虽然曲线图经过了这五个点,第二幅图有一个点不在曲线上,但是求解出的方程就会变得很复杂,
- 对于这样的复杂的方程,我们在拟合这些点的时候,没有考虑到噪声的干扰
- 这时,我们利用拟合出的函数曲线进行新的样本预测的时候,带来的问题就是,在当前给定的集合上的预测很好,但是在给定新的数据的时候,预测出来的结果和真实的结果偏差较大
-
概念
- 过拟合:在训练集上表现好,但是在测试集上效果差
- 欠拟合(高偏差):模型拟合不够,在训练集上表现效果差,没有充分的利用数据,预测的准确度低
- 偏差(bias):反映的是模型在样本上的输出和真实值之间的误差,即模型本身的精确度
- 方差(Variance):反映的是模型每一次输出结果和模型输出期望之间的误差,即模型的稳定性
-
1.2.2 如何防止过拟合与欠拟合
-
防止过拟合方法
- 补充数据集(数据增强)
- 减少模型参数
- Dropout
- Earlystopping
- 正则化&稀疏化
- 等
-
防止欠拟合方法
- 加大模型参数
- 减少正则化参数
- 更充分的训练
- 等
-
1.2.3 正则化问题
-
L0,L1,L2,无穷范数,核范数等等
- Pytorch通过weight_decay实现
-
Dropout
- nn.Dropout(p=0.5)