初探神经网络-A Neural Network Playground -part1-CSDN博客
初探神经网络-A Neural Network Playground -part3-CSDN博客
这是playground的第二部分,主要讲述神经网络的内容和训练。
3.神经网络构建
界面内容从左到右分别是Data(数据)、Features(输入特征)、Hidden layers(隐藏层)、Output(输出)四个部分。
3.1数据设置(Data)
3.1.1数据集(Dataset)
数据集是深度学习中使用的样本,一般包含两个用途,一个是训练模型,占比较大;另一个是测试模型,占比较小,但结果是用来证明该模型的有效性。数据集的大小和质量对模型训练结果有直接的影响,因此目前开发的很多算法在比较时都是基于同样的数据集。
数量较少的数据集可以生成,使用随机函数再进行变换,得到想要的数据。
网页上的显示:Which dataset do you want to use?(你想用哪种数据集),内容参考2.2.5,这里是选择用于训练和测试的数据集。
3.1.2训练与测试比(Ratio of training to test data)
数据集通常是放在一起的,然后再根据一定规则划分训练集和测试集等。神经网络中训练集与测试集的划分比例通常为:
划分比例
适用于数据量较小(万级以下):
60%训练集、20%验证集、20%测试集
大数据量(百万级以上):
98%训练集、1%验证集、1%测试集
更大数据量的情况:
99.5%训练集、0.25%验证集(或0.4%验证集)、0.25%测试集(或0.1%测试集)
划分原则
- 验证集用于调整超参数(如学习率、网络结构),需独立于训练集以避免过拟合
- 测试集仅用于评估模型泛化能力,不参与任何模型调整过程
- 数据划分需确保训练集、验证集、测试集来自同一分布
调整建议
- 数据量小时,可适当增加验证集比例以减少过拟合风险
- 数据量大时,验证集和测试集比例需进一步降低以减少对总数据量的占用
网页上的显示:Ratio of training to test data: xx%(训练与测试数据之比),可调范围10%-90%,步距10%
3.1.3噪声(Noise)
当前任务上学习算法所能达到的期望泛化误差的下界(即模型学习的上限),即刻画了学习问题本身的难度。不可控的错误很难避免,这被称为不可约偏差(irreducible error),即噪声无法通过模型来消除。噪声通常是出现在“数据采集”的过程中的,且具有随机性和不可控性,比如采集用户数据的时候仪器产生的随机性偏差、或者在实验中受到其他不可控因素的干扰等。
噪声来源
噪声类型 | 来源 | 说明 |
---|---|---|
数据噪声 | 输入数据中的噪声 | 在训练数据中可能包含错误标记、不准确的特征、测量误差或外界干扰等,这些都会被视为数据噪声。例如,图像数据中的模糊或伪影 |
标签噪声 | 数据集中标签错误或不准确也会引入噪声,这会影响模型学习到的正确分类规则 | |
模型噪声 | 随机初始化 | 神经网络的权重通常会随机初始化,这会引入一些初始的噪声 |
正则化噪声 | 像 Dropout 这种正则化方法会在训练过程中随机丢弃一部分神经元,这种方法本身也是一种噪声,但这种噪声是有意引入的,以防止过拟合 | |
优化过程中的噪声 | 随机梯度下降(SGD) | 在每个迭代中只使用一部分数据进行梯度更新,这会引入一些噪声。尽管这些噪声是随机的,但它有助于跳出局部最优解 |
噪声的影响
负面影响:噪声可能会导致模型的训练不稳定、收敛速度变慢,甚至影响模型的最终性能。
正面影响:某些类型的噪声(如Dropout)可以提高模型的泛化能力,避免过拟合。
网页上的显示:Noise:(噪声),可调范围0-50,步距1。这里噪声应该是模型随机初始化产生噪声。
3.1.4批大小(Batch size)
量大小(Batch Size)是数据加载过程中的一个重要参数,它决定了每次模型权重更新时所使用的样本数量。选择合适的批量大小对于提高模型性能、控制计算资源使用以及实现高效的训练过程至关重要。
对于全批量学习(Full Batch Learning),即批量大小等于整个训练集的大小,每次更新都会使用整个数据集来计算梯度。虽然这种方式可以保证梯度下降的方向代表了整个数据集的方向,但在数据集很大的情况下,计算资源和内存消耗会非常大,导致训练过程非常缓慢。
在线学习(Online Learning)是另一个极端,每次只使用一个样本进行权重更新。这种方式虽然计算资源消耗小,但每次更新都是基于单个样本的梯度,可能导致训练过程不稳定,收敛速度较慢。
因此,实际应用中通常会选择一个介于两者之间的批量大小。在神经网络训练领域,遵循2的n次幂原则设置Batch大小,如64、128、256等,已成为一种标准操作。
网页上的显示:Batch size:(批大小),可调范围1-30,步距1。
3.1.5重新生成(Regenerate)
网页上的按钮:Regenerate按下后数据随机发生变化,用户可以比较不同输入的状态。
3.2特征(Features)
这里包含了以两个变量X1和X2构成了7类特征值:
这里的特征就是输入,具体的神经网络有不同的输入信息。如何提炼一个实际问题的输入特征对于建模有重要影响。有的问题很简单,有的还需要分析。
3.3隐藏层(Hidden layers)
不论是回归还是分类任务,选择合适的层数以及隐藏层节点数,在很大程度上都会影响神经网络的性能。
3.3.1输入层和输出层的节点数
-
输入层的神经元数量:等于待处理数据中输入变量的数量
-
输出层的神经元的数量:等于与每个输入关联的输出的数量
输入层和输出层的神经元数量很容易确认。真正的困难之处在于确定合适的隐藏层及其神经元的数量。
3.3.2隐藏层的层数
对于一般简单的数据集,一两层隐藏层通常就足够了。但对于涉及时间序列或计算机视觉的复杂数据集,则需要额外增加层数。单层神经网络只能用于表示线性分离函数,也就是非常简单的问题,比如分类问题中的两个类可以用一条直线整齐地分开。
多个隐藏层可以用于拟合非线性函数。隐藏层的层数与神经网络的效果/用途
隐藏层数 | 作用 |
---|---|
0 | 仅能够表示线性可分函数或决策 |
1 | 可以拟合任何“包含从一个有限空间到另一个有限空间的连续映射”的函数 |
2 | 搭配适当的激活函数可以表示任意精度的任意决策边界,并且可以拟合任何精度的任何平滑映射 |
>2 | 多出来的隐藏层可以学习复杂的描述(某种自动特征工程) |
层数越深,理论上拟合函数的能力增强,效果按理说会更好,但是实际上更深的层数可能会带来过拟合的问题,同时也会增加训练难度,使模型难以收敛。便捷的方法是参考已有资料的配置。
3.3.3隐藏层中的神经元数量
在隐藏层中使用太少的神经元将导致欠拟合(underfitting)。相反,使用过多的神经元可能会导致过拟合(overfitting)。
神经元数量通常可以由一下几个原则大致确定:(网上资料)
-
隐藏神经元的数量应在输入层的大小和输出层的大小之间。
-
隐藏神经元的数量应为输入层大小的2/3加上输出层大小的2/3。
-
隐藏神经元的数量应小于输入层大小的两倍。
隐藏层神经元的层数和数量就是深度学习的主要研究内容,针对不同神经网络主要是隐藏层的区别,也是后期主要讲的内容之一。比如卷积神经网络CNN增加了卷积层和池化层。
Playground里面如图所示:
隐藏层九韶神经网络的内部节点,层数设置从0-6,每层可以设置1-8个神经元。
橙色到蓝色代表权重(weight)的值,从-1到1,绝对值越大,线越粗。
鼠标移动到线会显示权重,单击后弹框可以编辑。
3.4输出显示(Output)
输出层(Output Layer)是神经网络的最后一层,负责生成最终的预测结果或分类结果。根据网络的目标任务,输出层的结构和激活函数会有所不同。最常见的输出层结构包括用于分类问题的 Softmax 层和用于回归问题的线性层。
3.4.1输出原理
输出层根据神经网络前几层提取的特征,将结果映射到最终的输出空间。它的作用可以通过不同的激活函数实现:
- 分类任务:使用 Softmax 激活函数,将神经网络的输出转换为概率分布。数学公式如下:
其中:
- yi是网络最后一层的输出
- zi是第 i类的概率
- 回归任务:输出层直接输出连续值,一般不使用激活函数(或使用线性激活函数),输出结果为模型的预测值。
注:看到一个图,神经网络核心知识比较好(引用),大家有兴趣可以参考
3.4.2应用场景
输出层根据任务的不同有以下几种典型应用场景:
场景名称 | 应用 |
---|---|
图像分类 | 输出层常使用 Softmax 函数将结果转化为各类的概率,并选择概率最大的类作为预测结果 |
目标检测 | 输出层可以输出边界框的坐标,以及每个目标类别的概率 |
回归任务 | 在回归问题中,输出层会直接给出连续值作为最终预测结果,如股票价格预测、房价估计等 |
Playground显示
Test loss 测试损失
Train loss 训练损失
Show test data 显示测试数据
Discretize output离散化输出。
下面是输出的初始和训练200次后的结果显示,可以看到明显区分了蓝点和橙点。