深度学习-

张开发
2026/6/8 2:48:16 15 分钟阅读
深度学习-
二分类逻辑回归输出是1或者不是0。例子以一张彩色图片64×64像素为例预测对应标签y是1还是01.计算特征向量原始输入一张64×64像素的彩色图片通道维度RGB三通道形状为64×64×3特征展平将所有像素值按顺序拼接为一维向量输入维度计算64×64×312288最终输入特征向量2.模型前向传播线性变换维度与输入特征一致。sigmoid函数激活将线性输入映射到[0,1]区间预测为1否则预测为0。3.损失函数和优化损失函数loss function衡量单个样本的预测误差。。代价函数cost function:衡量所有样本的整体误差。代码import cv2 import numpy as np def sigmoid(x): return 1 / (1 np.exp(-x)) #读取图片、调整成64×64像素并处理成模型所需要的特征向量 def image(input_image_path,output_image_pathresized_64×64): #加载图片 img cv2.imread(input_image_path) if img is None: raise ValueError(加载图片错误请检查图片路径) #转换 img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #调整图片 resized_img cv2.resize(img_rgb,(64,64)) #归一化 img_normalized resized_img / 255.0 #计算特征维度 x img_normalized.reshape(-1,1) #-1自动计算总长度 return x #判断是否为猫 def is_cat(input_image_path,threshold0.5): x image(input_image_path) #使用随机数模拟训练好的w、b w np.random.randn(12288,1) * 0.01 b 0.0 #前向传播 z np.dot(w.T,x) b y_hat sigmoid(z) cat y_hat threshold return cat.item(),y_hat.item() if __name__ __main__: image_path cat.jpg try: result,prob is_cat(image_path) if result: print(预测结果这是一张猫的图片) else: print(预测结果这不是一张猫的图片) except Exception as e: print(f出错了{e})向量化大幅提升运行速度避免使用显示for循环。前向传播应用1.多特征输入只使用一个for循环使用np.zeros()对w进行梯度更新。2.多特征输入不使用for循环使用。如何避免使用显示for循环使用numpy库1.u np.exp(v)计算的值2.np.log(v)计算逐元素对数3.np.ads()计算绝对值4.np.Maximun()计算逐元素的最大值多样本向量化单样本→多样本全样本第一个隐藏层第一个训练样本矩阵中水平索引表示遍历训练集向右扫描是遍历不同的训练样本垂直索引表示神经网络中的不同节点矩阵左上角的值对应的是第一个训练样本中第一个隐藏单元的激活值向下扫描是索引隐藏单元编号。矩阵同理向量化实现解析为了简化。利用广播机制将加到矩阵每一列里也同理。偏差和方差偏差欠拟合方差过拟合高偏差低方差模型太简单欠拟合低偏差高方差模型太复杂过拟合最佳平衡点偏差和方差都较小总误差最低机器学习调试流程偏差-方差诊断与解决第一步诊断高偏差欠拟合看训练集表现若训练集误差很大→高偏差。解决方法用更大或更深的网络提高模型容量延长训练时间使模型充分收敛尝试其他网络结构。第二步诊断高方差过拟合训练集表现好但验证或测试集误差很大→高方差。解决方法增加更多训练数据加入正则化尝试其他网络结构。解决后回到第一步重新评估偏差。第三步若训练、验证、测试集表现都足够良好时流程结束。正则化L1正则化作用让很多参数变成0实现特征稀疏。选重要特征不重要的直接删掉。L2正则化防止过拟合作用让所有参数变小、接近0 但不会变成0。防止过拟合。带L2正则化的神经网络总损失公式如下其中为数据损失项。为正则化项权重衰减。为Frobenius范数的平方。矩阵版L2给权重W正则化。Frobenius范数的平方公式为。含义把第层权重矩阵里所有元素平方后求和。公式目的在最小化数据误差的同时惩罚权重矩阵的大小防止模型过拟合。维度说明形状第l层神经元个数第l层中第i个神经元与第l-1层第j个神经元之间的权重Dropout正则化随机失活训练时随机“关掉”一部分神经元让模型不依赖某几个神经元强迫它学更通用的特征防止过拟合。缺点测试时需要手动缩放输出如训练时关闭了50%神经元测试时要把输出乘以0.5。会带来两个问题测试阶段要额外加缩放逻辑容易忘记、出错训练/测试的输出分布不一致可能导致预测偏差。训练时不缩放测试时缩放正向逻辑。反向随机失活(Dropout优化版)把Dropout的“缩放操作从测试时移到训练时”让测试阶段无需额外调整更简单、稳定。训练时缩放测试时不缩放反向逻辑。例子假设某层有4个神经元输出为a[2,4,6,8]Dropout率p0.51.生成掩码D[1,0,1,0]关掉第2、4个神经元2.传统Dropout训练测试时要乘以0.53.反向Dropout训练测试时直接用原输出不用缩放其他正则化方法1.数据增强分类遇到过拟合情况。解决方法获取更多训练集。对图片将训练集里的图片进行水平翻转或旋转或随机裁剪成新的图片再添加到训练集中。对数字通过对数字施加随机旋转和扭曲再添加到数据集中2.早停法运行梯度下降解决方法绘制训练误差或者绘制正在优化的代价函数J和验证集开发集误差error在验证集最小误差处停止。输入归一化训练神经网络时加速训练的技巧之一。步骤步骤1.均值归一化零均值化。目的是把数据平移到原点附近。公式为所有样本的均值向量假设有个含两个输入特征的训练集经过均值归一化后的结果如右图所示。步骤2.方差归一化特征缩放/标准化计算方差再开根号得到标准差。输入特征均值都为0方差都为1特征尺度完全统一。梯度消失和梯度爆炸更深的深度神经网络解决方法谨慎选择权重初始化权重初始化ReLU→He初始化Sigmoid/Tanh→Xavier初始化梯度数值逼近梯度检验的测试可以确认反向传播的实现是否正确。双边差分法更准确、误差很小。梯度检验节省时间、发现反向传播中的错误。方法数值梯度使用双边差分法为数学上的近似导数直接计算损失函数的变化。与反向传播算出来的梯度对比若值约等于反向传播正确反之则错误。小批量梯度下降(MBGD)用一小批数据如32、64、128、256算梯度更新一次参数。优点速度快梯度稳缺点需要选择合适的“批量大小”例子假设总数据有m1000个选批次大小batch_size1001.打乱数据把1000个样本随机洗牌避免顺序影响。2.切分成小批量分成1000/1010个批次每个批次100个样本。3.逐批训练取第一批数据算梯度→更新参数取第二批数据算梯度→更新参数......10批训练完 1个epoch一轮4.重复多轮直到损失函数收敛。优化算法指数加权平均给最近的数据更高的权重给更早的数据更低权重用来平滑波动、追踪趋势是动量优化器Momentum、Adam的基础。公式越接近于1平滑效果越强。作用给新数据更高权重平滑波动、追踪趋势。偏差修正修正指数加权平均在初期阶段的偏差让初始值更接近真实均值。问题指数加权平均的初始值前几步会严重偏小偏向0和真实均值有偏差好。公式作用纠正初期的估计偏差让结果从第一步就更准确。动量梯度下降关注梯度方向。基本思想是计算梯度的指数加权平均再用这个梯度更新权重。减少通向最小值的路径上的振荡动量让参数更新“顺着下坡方向”加速避免来回绕路。公式1.先算当前小批量的梯度2.计算梯度的指数加权平均一般等于0.9。3.用动量更新参数RMSProp均方根传播关注梯度幅度。针对梯度的不同维度做“自适应学习率”调整。梯度波动大的梯度把步长调小梯度波动小的维度把步长调大从而解决动量梯度下降在“狭长山谷”中收敛慢的问题。步骤1计算梯度的平方的指数加权平均衡量梯度波动。公式衡量梯度的“波动幅度”平滑系数常用0.9。平方的作用消除梯度方向正负只关注“波动大小”。步骤2用均方根调整梯度自适应步长。公式梯度的“均方根”RMS)极小值防止分母为0。核心逻辑梯度波动大大分母大步长小避免冲过谷底。反之步长变大加速收敛。Adam算法自适应矩估计本质上是动量 RMSProp自适应步长 偏差修正。步骤1计算梯度权重梯度偏置梯度。步骤2计算梯度的一阶矩动量关注方向。公式。步骤3计算梯度的二阶矩均方根关注幅度。公式。步骤4偏差修正解决初期估计偏差。公式t为迭代周期。步骤5更新参数结合动量 自适应步长。公式。一般使用0.001重点调。一般使用0.9几乎不用调。一般使用0.99几乎不用调。一般使用1e-8不用调。学习率衰减训练初期用大学习率快速接近最优解训练后期用小学习率精细调整参数避免在最优解附近“来回晃”最终让模型收敛到更好的结果。常见学习率衰减方法1.分步衰减逻辑训练到指定轮数epoch把学习率乘以系数。公式衰减系数常用0.1迭代次数迭代步长。特点训练ResNet、Transformer时常用。例子初始学习率为0.01每10轮乘以0.1第10轮学习率为0.001第20轮学习率为0.0001。2.指数衰减逻辑学习率随步长指数级下降衰减速度比分布衰减更平滑。公式衰减系数接近1。特点学习率持续缓慢下降不会突然跳变。3.余弦退火逻辑学习率按余弦函数周期变化后期衰减更平缓还能小幅回升避免卡在局部最优。核心不是单调衰减而是“衰减→小幅回升→再衰减”适合难训练的深层模型如CNN、大语言模型。特点收敛效果更好是目前竞赛/论文常用的高级策略。4.自适应衰减逻辑不按固定步数衰减而是看验证集损失。如果损失连续几轮不下降就衰减学习率。特点最“智能”不用手动设衰减步数PyTorch/TensorFlow都有现成API新手优先使用这个。局部最优问题鞍点导数为0的点。调超参流程用系统的方法找到让模型性能最好的一组超参数学习率、批次大小、优化器等本质是“在效率和效果之间找平衡”。参数与超参数参数模型自己学习出来的如权重w、偏置b。超参数手动设置如学习率、批次大小等决定了模型怎么学。调参流程步骤1确定目标和评估指标。目标提升准确率降低损失防止过拟合指标分类任务常用准确率、精确率、召回率、F1回归任务常用MSE\MAE\R²。步骤2确定要调的参数范围。步骤3选择调参策略。1.网格搜索穷举所有组合适合参数少、范围小的场景慢但全面。2.随机搜索随机采样参数组合比网格搜索高效适合高维空间。3.贝叶斯优化用概率模型智能选择下一组参数效率最高适合复杂任务。步骤4迭代优化。1.使用默认参数如使用Adam优化器 学习率 0.001 小批量batch_size 32。2.每次只调一个超参数控制变量方便定位问题。3.观察验证集指标欠拟合增大模型容量、提高学习率、减少正则化。过拟合增加正则化、减少模型容量、早停。4.重复直到验证集指标不再提升最后用测试集确认效果。超参数尺度选择按照“尺度”选点----大部分超参在“对数尺度”上搜。两种最常用尺度1.线性尺度点之间间隔相等。比较平稳12345适合变化影响比较均匀的超参。如batch_size、层数、隐藏单元数。2.对数尺度点之间数量级相等。剧烈变化0.00010.0010.010.11适合稍微一变效果就剧烈变化的超参。如学习率、正则化系数。操作步骤步骤1先确定合适的尺度线性尺度还是对数尺度。步骤2确定合适范围。通常通常步骤3在这个范围内随机搜索。对数尺度上随机取点效率远高于均匀网格。网络激活归一化在神经网络的每一层激活输出后将数据调整为【均值接近0方差接近1】的标准分布。核心是解决“内部协变量偏移”让模型训练更快、更稳定。激活归一化的本质强制每层输入分布稳定让模型不用花精力适应分布变化专注学习特征。最常用的激活归一化批量归一化Batch NormalizetionBN步骤1计算批量统计对当前小批量batch)的激活值算均值和方差。步骤2基础归一化把激活值拉到【均值0方差1】防止分母为0。步骤3可学习的缩放/偏移缩放系数和偏移系数是模型学出来的----避免归一化破坏特征表达强制归一化可能让ReLU丢失部分信息。关键特点1.作用位置通常在【卷积/全连接层后激活函数前】。2.训练时用当前batch的均值/方差推理时用训练过程中统计的【移动平均均值/方差】避免单样本无统计信息。3.核心收益允许用更大的学习率训练速度提升 2~10 倍缓解梯度消失 / 爆炸深层网络更容易训练轻微正则化效果batch 统计有噪声减少过拟合。其他常见的激活归一化方式1.层归一化NL2.实例归一化IN3.组归一化GN整合批量归一化到神经网络将归一化层BN/LN/GN等按照【合理位置】嵌入到网络的层结构中形成“线性层/卷基层→归一化层→激活函数”的标准范式最终让模型训练更快、更稳定。实际应用批量归一化的方法步骤1取第一个小批量使用参数、计算只用这个小批量计算的均值和方差。步骤2批量归一化BN减去均值并除以标准差再用重新缩放、偏移得到批量归一化后的再应用激活函数得到同理计算。同理计算。步骤流程如图图中w1b1改为改成。公式1.批量归一化会消除偏置的影响。2.对做归一化。3.可学习缩放与偏移。维度维度都为为隐藏层单元数。例子带BN的小批量梯度下降法步骤1遍历所有小批量。for t 1...numMinBatches步骤2前向传播BN替换在当前小批量数据上执行前向传播。在每个隐藏层使用批量归一化后的替换原始线性输出.步骤3反向传播计算梯度。步骤4参数更新。可以使用梯度下降法RMSprop、Adam等优化器。将批量归一化添加到算法中的参数。测试阶段的批量归一化训练时均值、方差是整个小批量如64、128上计算的测试时可能需要逐个处理样本。其计算方法为从训练集估计。将在整个训练集通过最终网络来获取均值和方差的平方通常采用指数加权平均即跟踪训练时看到的均值和方差平方的值并使用指数加权平均来获得均值和方差平方的粗略估计在测试时使用该值对隐藏单元值z进行所需的缩放。多分类----Softmax回归接受一个输入向量输出一个向量。训练Softmax分类器深度学习框架TensorFlow框架TF只需指定如何计算代价函数通过计算题实现前向传播后TensorFlow自动计算反向传播导数并最小化代价。即梯度计算。红色线画的自定义代价函数的目的是让TensorFlow构建计算图实现前向传播再自动计算出所有必要的反向步骤实现反向传播。对TensorFlow的解释TensorFlow是端到端深度学习框架核心是通过“张量Tensor”的计算流Flow构建和训练神经网络至此从模型设计、训练到部署的全流程。核心概念1. 张量TensorTF的核心数据结构。多维数组是TF中所有数据的载体。0维张量标量单个数值。1维张量向量特征向量。2维张量矩阵批量特征。4维张量图像数据批量数×高度×宽度×通道数。2. 计算图TF的执行逻辑。把模型的计算过程抽象成“节点操作边张量”的有向图。静态图先定义图、再运行图灵敏度低但性能高。动态图默认“即时执行”边定义边运行新手友好。3. KerasTF的高层API。TF内置的高层神经网络API封装了底层复杂操作几行就可以搭建模型。TF核心能力机器学习策略的意义对某个应用来说系统达到90%的准确率还不够好。有以下方法或许可以提升单一评估指标算法C的平均错误率最低。满足指标和优化指标自动或者近乎自动化快速评估多个分类器并选择“最佳”分类器的方法关心多个指标时可以将其中一个设为优化指标尽可能优化它同时将一个或多个设为满意指标只要它们达到某个阈值即可接受。注意这些评估指标必须在训练集、验证集、测试集上进行评估计算。训练—验证—测试集分布设置验证集和测试集时选择能反应未来会获得的数据的验证集和测试集并考虑需要表现良好的方面。验证集和测试集应来自相同分布。验证集、测试集的划分方法数据集规模较小训练集70%、验证集30%或训练集60%、验证集20%、测试集20%。数据集规模较大训练集98%、验证集1%、测试集1%。提升模型性能清理错误标注数据快速构建初始系统并迭代建立初始系统使用偏差-方差分析错误分析。跨分布训练与测试数据分布不匹配的偏差与方差解决数据不匹配迁移学习。。。。计算机视觉应用图像分类、目标检测、神经风格迁移。卷积运算的工作原理以边缘检测为例3×3垂直边缘检测滤波器。3×3水平边缘检测滤波器3×3Sobel滤波器给中心行赋予更多权重使检测可能更加稳健。3×3Scharr滤波器以上两种滤波器顺时间旋转90°即水平滤波器。填充Padding)卷积后图像大小的计算公式n-f1 ×n-f1即原始图像6×6经过卷积之后变小4×4。Padding等于几时原始图像和卷积后的图像大小一致Padding1即原始图像为Padding2,3,......同理。步长卷积步长(stride2)等于2填充(Padding)为0时。卷积后图像大小的计算公式即即卷积后图像大小为3×3。计算结果不为偶数时向下取整。三维卷积RGB和卷积核滤波器对位相乘再将所有值进行相加得到第一个数。若想检测红色通道中的垂直边缘卷积核为若想检测任何颜色的边缘卷积核为

更多文章