神经网络基础知识点及手搓BP神经网络
温故而知新,可以为师矣。发现有时候学的知识久了就容易忘,脑子一瞬间想不起来,加上学的东西越多越杂,一些基础的知识就会在恍惚间忘掉,这篇笔记主要记录一下学习神经网络的一些基础知识点,包括神经网络的前向传播模型推理和反向传播参数更新的原理和一些细节,以及采用numpy“手搓”一个BP神经网络进行一个实战演示。
神经网络
神经网络的一些深刻概念和定义这里不再详细介绍,主要简单讲解一下的它的结构组成,神经网络由输入层、隐藏层和输出层构成,层内有神经元。而此神经元就是构建输入端与输出端复杂映射关系的关键,每个神经元就是一个数学公式 $$y=wx+b$$ ,层与层之间通过神经元连接从而构造输入数据(特征)之间的复杂联系。输入层和输出层一般都是单层,且其神经元个数一般也会由任务固定定义了,而隐藏层的层数和每层隐藏层内的神经元个数则是由学者根据具体工况设置,工况欲复杂其隐藏层数及神经元个数一般就会增加,但隐藏层的层数和神经元个数都是在学者反复训练、修改、对比后确定的,这个过程也就是常说的“神经网络模型结构超参数的优化选择”。下图1展示了两种不同的结构的神经网络模型。
上式是构 ...
M-P模型
M-P模型
McCulloch-Pitts(M-P)模型在1943年,由美国神经生理学家沃伦·麦卡洛克(Warren McCulloch)和数学家沃尔特·皮茨(Walter Pitts)对生物学神经进行建模,首次提出了一种形式于神经元模型,并命名为McCulloch-Pitts模型。其通过输出的正负(0作为阈值)用于识别两种不同类型的输入,但随着Sigmoid函数的提出,M-P模型通常采用Sigmoid函数作为激活函数,将模型输出映射到(0, 1)。将0.5作为阈值,输出大于等于0.5的归为一类,小于0.5的归为一类。
在M-P模型中,神经元接受n个神经元的输入信号x,将所有的输入信号x通过加权求和后与阈值θ进行比较,经激活函数处理后得到模型输出值。其数学表达式如下。
$$\overset{\hat{} }{y} = sigmoid( \sum_{i=1} ^{n} x_{i}w_{i} )$$
数据预处理
数据预处理的原因
在神经网络进行模型训练之前,通常会对数据进行预处理以提高模型的性能和稳定性,同时加快模型的收敛速度。采用的数据预处理方法如主成分分析(PCA)、最小最大归一化(MinMaxNormalization)、标准化(ZScore)等,在数据增强方面可以通过进行旋转、裁剪等方式增加训练数据样本。
其实数据需不需要预处理,对于一些较为简单的任务,数据在不进行预处理的情况下也可以表现出很好的效果,当然进行数据预处理后效果较比于不处理的情况下会有所提升。哪为什么进行数据预处理后模型的稳定性和性能就会提高呢?原因有以下几点(个人、经验):
减少计算量:在对于高维度数据,也就是高维度输入或输出,其中包含着一些无关或者冗余的特征,通过清洗去掉这些特征(降维,如PCA)不仅可以减少模型的复杂度,让模型更好的学习映射输入特征与输出的复杂关系,还能减少模型的计算量加快收敛速度,毕竟在神经网络层与层之间的关系是乘积关系,在一些较小网络模型下计算量变化不大还可以接受,但在一些较大的网络模型中,计算量的增加可是成倍数的。
数值量级对应:在多维度输入特征时,由于任务的特征各式各样,特征之间就会存在数值 ...
正则化
偏差与方差 在讨论正则化之前,有必要先对机器学习和深度学习中的偏差和方差进行一个简单了解,这两个概念是模型学习中衡量模型预测精度,拟合、泛化能力的重要指标之一,对调节模型结构提高模型性能有着至关重要的作用。
偏差
偏差是指模型预测的期望值与真实值之间的误差。它反映了模型对数据的拟合程度。
当偏差高时,模型对数据的拟合能力差,意味着模型结构过于简单,欠拟合。其表现在训练集和测试集上的误差都较高,预测值系统性的偏离真实值。
反之,偏差低时,模型对数据的拟合能力好,训练集与测试集的误差较低,预测值系统性的趋于真实值。“系统性”说明的是数据整体上预测值与真实值的趋近程度方向是一致的,但样本个体间是存在差异的。
但要注意的是,拟合能力好并不能表明模型的整体性能就好,拟合能力只是衡量模型性能的指标之一。偏差通常由模型的假设导致(如线性模型假设数据分布是线性的)。
解决模型偏差高常用的方法有:
可以加深模型的结构,如:增加模型的深度(层数)和宽度(神经元);
采用更复杂的模型,如:残差结构、Inception模块、注意力机制等;
对数据预处理或者进行数据特征工程。
方差 ...