Pytorch:神经网络基础
目录一、什么是神经网络二、神经网络的构成三、激活函数四、模型参数计算五、神经网络的优缺点六、损失函数七、网络优化方法八、学习率优化方法九、正则化方法 重点及目标1、知道什么是神经网络2、知道常见的激活函数3、了解常见的参数初始化方法4、能够完成神经网络模型的搭建5、知道神经网络模型的参数的计算方法一、什么是神经网络人工神经网络 Artificial Neural Network 简写为ANN也简称为神经网络NN是一种模仿生物神经网络结构和功能的计算模型。如下图所示:二、神经网络的构成1、神经网络构成输入层隐藏层和输出层。2、隐藏层的特点✅同一层的神经元之间没有连接✅第 N 层的每个神经元和第 N-1层 的所有神经元相连这就是full connected的含义)这就是全连接神经网络✅全连接神经网络接收的样本数据是二维的数据在每一层之间需要以二维的形式传递 第N-1层神经元的输出就是第N层神经元的输入✅每个连接都有一个权重值w系数和b系数3、构建神经网络示意图如下:三、激活函数1、激活函数的作用激活函数用于对每层的输出数据进行变换, 进而为整个网络注入了非线性因素。此时, 神经网络就可以拟合各种曲线。2、常见的激活函数(1)Sigmod2Tanh3ReLU(4)SoftMax3、各种激活函数的选择方法对于隐藏层:1、优先选择ReLU激活函数2、如果ReLu效果不好那么尝试其他激活如Leaky ReLu等。3、如果你使用了ReLU 需要注意一下Dead ReLU问题 避免出现0梯度从而导致过多的神经元死亡。4、少用使用sigmoid激活函数可以尝试使用tanh激活函数对于输出层:1、二分类问题选择sigmoid激活函数2、多分类问题选择softmax激活函数3、回归问题选择identity激活函数4、参数初始化激活函数的选择根据激活函数的类型选择对应的初始化方法Sigmoid/TanhXavier 初始化 ReLU/Leaky ReLUkaiming 初始化网络的深度浅层网络随机初始化即可深层网络需要考虑方差平衡如 Xavier 或 kaiming 初始化四、模型参数计算 神经网络的输入数据是为[batch_size, in_features]的张量经过网络处理后获取了[batch_size, out_features]的输出张量。模型参数的计算: 以第一个隐层为例该隐层有3个神经元每个神经元的参数为4个w1,w2,w3,b1所以一共用3x412个参数。 输入数据和网络权重是两个不同的事儿理解这一点十分重要要分得清。五、神经网络的优缺点1.优点 精度⾼性能优于其他的机器学习⽅法甚⾄在某些领域超过了⼈类 可以近似任意的⾮线性函数 近年来在学界和业界受到了热捧有⼤量的框架和库可供调。2.缺点 ⿊箱很难解释模型是怎么⼯作的 训练时间⻓需要⼤量的计算⼒ ⽹络结构复杂需要调整超参数 ⼩数据集上表现不佳容易发⽣过拟合。六、损失函数1、什么是损失函数?在深度学习中, 损失函数是用来衡量模型参数的质量的函数, 衡量的方式是比较网络输出和真实输出的差异。2、在多分类任务损失函数在多分类任务通常使用softmax将logits转换为概率的形式所以多分类的交叉熵损失也叫做softmax损失它的计算方法是其中: y是样本x属于某一个类别的真实概率而f(x)是样本属于某一类别的预测分数S是softmax激活函数,将属于某一类别的预测分数转换成概率L用来衡量真实值y和预测值f(x)之间差异性的损失结果3、二分类损失函数在处理二分类任务时我们不再使用softmax激活函数而是使用sigmoid激活函数那损失函数也相应的进行调整使用二分类的交叉熵损失函数其中: y是样本x属于某一个类别的真实概率 而y^是样本属于某一类别的预测概率 L用来衡量真实值y与预测值y^之间差异性的损失结果。 在pytorch中实现时使用nn.BCELoss() 如下所示4、回归任务的损失函数Mean Squared Loss/ Quadratic Loss(MSE loss)也被称为L2 loss或欧氏距离它以误差的平方和的均值作为距离 损失函数公式:曲线如下图所示特点是 L2 loss也常常作为正则项。 当预测值与目标值相差很大时, 梯度容易爆炸。Smooth L1说的是光滑之后的L1。损失函数公式:如下图所示其中f(x)−y 为真实值和预测值的差值。 从上图中可以看出该函数实际上就是一个分段函数 在[-1,1]之间实际上就是L2损失这样解决了L1的不光滑问题在[-1,1]区间外实际上就是L1损失这样就解决了离群点梯度爆炸的问题。七、网络优化方法1、梯度下降梯度下降法是一种寻找使损失函数最小化的方法。从数学角度来看梯度的方向是函数增长速度最快的方向那么梯度的反方向就是函数减少最快的方向所以有其中η是学习率如果学习率太小那么每次训练之后得到的效果都太小增大训练的时间成本。如果学习率太大那就有可能直接跳过最优解进入无限的训练中。解决的方法就是学习率也需要随着训练的进行而变化。在进行模型训练时有三个基础的概念Epoch: 使用全部数据对模型进行一次完整训练训练轮次Batch_size: 使用训练集中的小部分样本对模型权重进行以此反向传播的参数更新每次训练每批次样本数量Iteration: 使用一个 Batch 数据对模型进行一次参数更新的过程假设数据集有 50000 个训练样本现在选择 Batch Size 256 对模型进行训练。每个 Epoch 要训练的图片数量50000训练集具有的 Batch 个数50000/2561196每个 Epoch 具有的 Iteration 个数19610个 Epoch 具有的 Iteration 个数19602、梯度下降优化的方法梯度下降优化算法中可能会碰到以下情况 碰到平缓区域梯度值较小参数优化变慢 碰到 “鞍点” 梯度为 0参数无法优化碰到局部最小值参数不是最优对于这些问题, 出现了一些对梯度下降算法的优化方法例如Momentum、AdaGrad、RMSprop、Adam 等总结:- **简单任务和较小的模型**SGD 或 Momentum- **复杂任务或有大量数据**Adam 是最常用的选择因其在大部分任务上都表现优秀- **需要处理稀疏数据或文本数据**Adagrad 或 RMSProp八、学习率优化方法1、等间隔学习率衰减2、指定间隔学习率衰减3、按指数学习率衰减九、正则化方法在设计机器学习算法时希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小测试误差这些策略被统称为正则化。 神经网络强大的表示能力经常遇到过拟合所以需要使用不同形式的正则化策略。 目前在深度学习中使用较多的策略有范数惩罚DropOut特殊的网络层等。1、Dropout在神经网络中模型参数较多在数据量不足的情况下很容易过拟合。Dropout随机失活是一个简单有效的正则化方法。2、BN:批量归一化在视觉领域使用较多。对数据标准化再对数据重构缩放平移