八斗深度学习
八斗深度学习第二周笔记
一、深度学习步骤:
1. 选定模型结构
首先选择适合任务需求的模型架构。在这个例子中,我们选择了二次函数作为模型结构,它可以表示为:
[ y = w_1x^2 + w_2x + w_3 ]
这里 (w_1, w_2, w_3) 是待学习的参数。
2. 模型参数随机初始化
在开始训练之前,需要对模型的所有权重(或参数)进行初始化。通常我们会使用小的随机值来初始化这些参数,目的是打破对称性并且确保梯度的有效传播。对于我们的二次函数模型,这意味着给 (w_1, w_2, w_3) 分配随机初始值。
3. 构造模型损失函数
接下来定义一个损失函数(或成本函数),用来衡量模型预测输出与真实标签之间的差异。在本例中,均方误差(MSE)被用作损失函数:
Loss = 1 N ∑ i = 1 N ( y pred , i − y true , i ) 2 \text{Loss} = \frac{1}{N}\sum_{i=1}^{N}(y_{\text{pred},i} - y_{\text{true},i})^2 Loss=N1i=1∑N(ypred,i−ytrue,i)2
其中 (N) 是样本数量,(ypred,i) 是模型预测值,而 (yture,i) 是真实值。
对损失函数中的权重求导实际上是,一个复合函数求导。首先损失函数是一个关于w的多元复合函数。对损失函数的W求导,就使用链式求导法则。以二元一次函数为例对W1求导结果如下:
∂ w 1 ∂ L = 2 ( y p r e d − y t r u e ) ⋅ x 2 ∂w1∂L=2(ypred−ytrue)⋅x2 ∂w1∂L=2(ypred−ytrue)⋅x2
4. 选择优化算法并设置超参数
选择适当的优化算法来最小化损失函数,比如梯度下降法及其变种(如SGD、Adam等)。同时设定**必要的超参数,如学习率(lr)、批量大小(batch size)、迭代次数(epochs)**等。
5. 数据准备与预处理
将原始数据集划分为训练集、验证集和测试集,并进行必要的预处理步骤,例如标准化、归一化等。
6. 训练模型
使用训练数据集来进行模型训练,在每次迭代中执行以下子步骤:
- 前向传播:计算输入数据通过当前模型参数后的预测结果。
- 计算损失:根据预测结果和实际标签计算损失值。
- 反向传播:计算损失相对于每个参数的梯度。
- 更新参数:利用优化算法调整模型参数以减少损失。
7. 模型评估
在独立的验证集上评估模型性能,检查是否过拟合或欠拟合,并据此调整模型配置或超参数。
8. 测试模型
一旦模型训练完成且经过调优,最后一步是在完全未见过的测试集上评估其泛化能力。
9. 应用模型
如果模型表现良好,则可以将其部署到生产环境中,用于解决实际问题。
损失函数极小值、导向
损失函数越小,模型越好; 损失函数最小化;模型权重影响损失函数值;通过梯度下降来找到最优权重
梯度:多元函数导数,是个向量
梯度下降法:
-
根据梯度,更新权重。
-
w′=w−α ∂w/∂L
-
其中:w′ 是更新后的权重。w 是当前的权重。α 是学习率,决定了我们沿着梯度方向移动的步伐大小。偏导数也称为梯度。
意义
- 最小化损失:梯度下降的目标是找到使损失函数最小化的模型参数。通过计算损失函数相对于每个参数的梯度,并在每次迭代中调整参数值以减小损失,我们可以逐渐接近全局最小点或局部最小点(对于非凸问题)。
- 优化方向:梯度给出了损失函数增长最快的方向,而负梯度则指向了减少最快的方向。因此,当我们用负梯度乘以一个小的学习率并从当前参数中减去它时,我们实际上是在尝试“下坡”,即朝向更低损失的方向前进。
- 收敛速度与稳定性:学习率 α 控制着更新步骤的大小。如果 α 设置得太小,那么算法可能会非常慢才能收敛;如果太大,则可能导致算法无法稳定地收敛,甚至发散。选择合适的学习率对于确保有效和稳定的训练至关重要。
- 泛化能力:通过最小化训练数据上的损失,我们希望模型能够很好地泛化到未见过的数据。虽然这并不是梯度下降直接保证的,但一个训练良好的模型通常也会在新数据上有较好的表现。
- 自适应调整:在某些高级变体中,如Adam、RMSprop等优化器,它们不仅考虑了梯度的一阶信息(即平均梯度),还考虑了二阶信息(例如梯度的方差)。这可以帮助加速收敛并在不同类型的损失表面上提供更好的性能。
总结来说,通过应用梯度下降来更新权重,我们可以在损失空间中导航,寻找使得预测输出尽可能接近真实标签的模型参数。这是一个基础但极其重要的概念,在机器学习和深度学习领域被广泛使用。
-
-
学习率控制权重更新的幅度
-
损失函数变种SGD(Stochastic gradient descent)
超参数的影响
迭代次数epoch
- 过少的 Epochs
- 欠拟合(Underfitting):如果
epoch
数量过少,模型可能没有充分学习到数据中的特征和模式,导致训练不足。这可能会使得模型性能较差,无法很好地捕捉输入数据与输出之间的关系。 - 低准确度:模型在训练集上的表现不佳,同时也会在验证集和测试集上表现出较低的准确性。
- 过多的 Epochs
- 过拟合(Overfitting):当
epoch
数量过多时,模型可能会过度适应训练数据,以至于它不仅学到了数据中的有用信息,还记住了噪声或不相关的细节。这样的模型在训练集上的表现会非常好,但在未见过的数据(如验证集和测试集)上的泛化能力差。 - 资源浪费:额外的训练时间增加了计算成本,并且不会带来性能上的显著提升,甚至可能导致性能下降。
- 合适数量的 Epochs
- 最佳性能:找到一个恰当的
epoch
数量可以保证模型既能从数据中学习到足够的信息,又不会陷入过拟合的状态。通常,我们会通过监控验证集上的损失或准确率来确定这个点。 - 早停法(Early Stopping):一种常用的策略是在验证集上的性能不再改善时提前停止训练。这种方法可以帮助我们避免不必要的训练迭代,从而节省时间和资源。
实践建议:
- 交叉验证:使用交叉验证技术可以在多个子集上评估模型性能,帮助更可靠地估计模型的最佳
epoch
数。 - 学习曲线:绘制训练集和验证集的学习曲线(即随着
epoch
的增加,损失或准确性的变化),有助于直观地观察是否存在过拟合或欠拟合现象。 - 动态调整:某些高级优化器具有自适应学习率的能力,可以根据训练进度自动调整学习率,这也间接影响了
epoch
的效果。
批次量大小batch size
批次量(Batch Size)是深度学习模型训练中的一个重要超参数,它决定了在每次迭代中用于更新模型权重的样本数量。批次量的选择对模型训练的效果、速度以及最终性能有着显著的影响。以下是批次量对深度学习模型可能造成的影响:
- 训练稳定性
-
小批次量:使用较小的批次量(如1或2),即所谓的随机梯度下降(SGD),可以引入更多的噪声到梯度估计中。这有助于跳出局部极小值和鞍点,但同时也可能导致训练过程更加不稳定,损失函数值波动较大。
-
大批次量:较大的批次量通常会提供更稳定和准确的梯度估计,因为它们平均了更多样例的信息。然而,过大的批次量可能会使模型收敛于次优解,尤其是在复杂的非凸优化问题中。
- 内存占用
-
小批次量:较小的批次量需要较少的内存来存储中间计算结果和梯度信息,因此更适合资源受限的环境,如移动设备或嵌入式系统。
-
大批次量:较大的批次量需要更多的内存,这可能限制了可以在单个GPU上训练的最大模型规模或者迫使你使用分布式训练。
- 训练速度
-
小批次量:虽然每次迭代的速度较快,但由于每轮epoch内需要进行更多次的权重更新,总体训练时间可能不会明显减少。此外,由于频繁的参数更新,通信开销(特别是在分布式训练环境中)也会增加。
-
大批次量:每次迭代处理的数据更多,理论上可以在更少的迭代次数下完成训练,但这取决于硬件是否能够高效地并行处理这些数据。
- 泛化能力
-
小批次量:研究表明,适当的小批次量可以帮助提高模型的泛化能力,因为它引入了一定程度的正则化效果,使得模型不易过拟合训练数据。
-
大批次量:非常大的批次量可能会导致模型过拟合训练数据,因为它减少了训练过程中参数空间探索的机会,使得模型更容易找到与训练集吻合得非常好的解决方案,但未必是对测试集表现最佳的解。
- 优化路径
-
小批次量:由于其固有的随机性和不稳定性,小批次量倾向于探索更广泛的参数空间,有时能找到更好的全局最小值。
-
大批次量:较大批次量提供的平滑梯度可能导致优化路径更加直接地指向某个局部最优解,而忽略了其他潜在的更优解。
实践建议
选择合适的批次量通常是一个实验性的过程,并且依赖于具体的应用场景和可用资源。一些常见的策略包括:
- 从一个合理的默认值开始:例如32、64或128,然后根据实际情况调整。
- 尝试不同的批次量组合:结合学习率和其他超参数一起调优。
- 考虑使用动态批次量:在训练初期使用较小的批次量以促进更好的探索,随着训练进程逐渐增大批次量以加快收敛。
总之,批次量的选择对于确保模型的有效训练和良好的泛化性能至关重要。通过实验和分析,可以找到最适合特定任务的最佳批次量。
学习率 lr
学习率(Learning Rate, LR)是深度学习模型训练过程中一个至关重要的超参数,它决定了在每次迭代中权重更新的步长。学习率的选择对模型训练的效果和效率有着直接的影响。以下是学习率对深度学习模型可能造成的影响:
- 过大的学习率
- 不稳定训练:如果学习率设置得过大,可能会导致损失函数值剧烈波动,无法稳定收敛,甚至发散。这是因为每一步的更新幅度过大,使得权重跳跃式变化,从而错过损失函数的最小值。
- 难以找到最优解:由于每次更新都跨越了较大的距离,模型可能会跳过全局最小点或陷入局部极小值附近,而不能精确地定位到最佳参数位置。
- 过小的学习率
- 训练速度慢:较小的学习率意味着每次权重更新都非常微小,因此需要更多的迭代次数才能达到收敛状态,这会导致训练时间显著增加。
- 容易陷入局部极小值或鞍点:当学习率非常小时,模型可能会被困在局部极小值、鞍点或者平坦区域,难以逃脱并继续向更好的解决方案前进。
- 合适的学习率
- 有效且快速的收敛:一个适当的学习率可以使模型既不会因为步子太大而错过最优点,也不会因为步子太小而导致训练过程漫长无果。它可以确保损失函数值逐渐下降,并最终稳定在一个较低水平,表示模型找到了较好的参数组合。
- 动态调整学习率
为了克服固定学习率带来的问题,实践中经常采用自适应学习率的方法,例如:
- 学习率衰减:随着训练的进行逐渐降低学习率。
- 循环学习率:周期性地改变学习率,在一定范围内上下浮动。
- 基于性能的学习率调整:根据验证集上的表现自动调整学习率,如当验证误差不再改善时降低学习率。
总之,选择合适的学习率对于确保模型能够有效地学习数据中的模式至关重要。通常情况下,通过实验来寻找最佳学习率范围,或者使用自动化工具和技术来优化这个过程。
模型问题
业内有固定模型(CNN、Transformer)
打乱样本顺序
梯度爆炸
梯度计算求和,是一个差的平方和,但是没有取平方;导致梯度值越来越大
或者是初始权重值特别大
梯度消失
过拟合
二、神经网络结构-全连接层
- 又叫线性层
- y = w * x + b
- w b 是参与训练的参数
- x 是 一个矩阵或者是转置矩阵
- W维度决定了隐含层输出的维度,一般称为隐单元个数(hidden size)
激活函数
Sigmoid
为模型添加非线性因素,使模型具有拟合非线性函数的能力
无激活函数时 y = w1(w2(w3 * x + b3)+b2)+b1 仍然是线性函数
tanh
Relu
Gelu
Softmax
相关文章:
八斗深度学习
八斗深度学习第二周笔记 一、深度学习步骤:1. 选定模型结构2. 模型参数随机初始化3. 构造模型损失函数4. 选择优化算法并设置超参数5. 数据准备与预处理6. 训练模型7. 模型评估8. 测试模型9. 应用模型 损失函数极小值、导向意义 超参数的影响迭代次数epoch批次量大小…...
安卓报错Switch Maven repository ‘maven‘....解决办法
例如:Switch Maven repository ‘maven(http://developer.huawei.com/repo/)’ to redirect to a secure protocol 在库链接上方添加配置代码:allowInsecureProtocol true...
Scala编程技巧:正则表达式与隐式转换
1. 引言 在Scala编程中,正则表达式和隐式转换是处理字符串匹配和类型转换的强大工具。本文将通过一个实用的示例——电话号码和身份证号码验证器,来展示如何使用这些工具。 2. 知识概括 2.1 正则表达式基础 正则表达式是用于字符串搜索和匹配的强大工…...
UnityShaderLab 实现黑白着色器效果
实现思路:取屏幕像素的RGB值,将三个通道的值相加,除以一个大于值使颜色值在0-1内,再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现: ShaderLab实现: Shader "Bl…...
在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)
SSH 在 linux 中是一种重要的系统组件,用户可以使用 SSH 来远程连接 linux 系统的计算机,或者传输文件。不过在 win10 以前,windows 并不原生支持 SSH,需要借助第三方工具来使用 SSH 功能。而实际上,微软在 2015 年就曾…...
在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)
Stable Diffusion无疑是AIGC领域中的AI绘画利器,具有以下显著优势: 1、开源性质,支持本地部署 2、能够实现对图像生成过程的精确控制 虽然SD在使用上有很多的有点,但缺点也是不言而喻的,由于AI绘画的整个过程以及现…...
ubuntu存储空间不足快速解决
几个自己常用的释放空间命令,备忘 将文件夹下的文件按从大到小排列 ls -lhS /var/log/syslog 过大 sudo truncate -s 0 /var/log/syslog /var/log/Xorg.0.log.old过大 sudo truncate -s 0 /var/log/Xorg.0.log.old 清理系统日志文件: sudo journalctl --…...
Prescan simulink carsim联合仿真平台搭建问题总结
解决办法主要来自忠厚的老王:自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 这部分直接复制的老王视频的: Q1:prescan安装了,但是找不到Demo_Carsim3D A1:这个文件夹是我自己建立的不是prescan自带的࿰…...
STM32(HAL_工程模板的搭建)
目录 一、准备文件 二、创建工程 三、创建分组 四、配置文件处理 五、编译错误处理 一、准备文件 准备HAL库文件: ST官网( 意法半导体-STMicroelectronics )搜索STM32Cube, 本文使用“STM32Cube_FW_F4_V1.24.1” 版本的HAL库, 使用的是F4的库文件。 创建文件:…...
Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)
文章目录 一、Flask介绍二、Flask创建和运行 1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装 介绍watchdog使用python–dotenv使用(操作环境变量) 七、虚拟环境 介绍Mac/linux创建虚拟…...
CAD C# 批量替换当前图中块
本案例功能为选择当前文档中一个块(旧块),然后选择新图元(新块),运行插件后新块将替换图中所有的旧块。 效果如下: public static class Class1{//选取对象替换块定义[CommandMethod("TT&…...
Android -- [SelfView] 自定义多行歌词滚动显示器
Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明;* 2. 外部可控制进度变化;* 3. 支持屏幕拖动调节进度(回调给外部);效果 歌词文件(.lrc) 一. 使用…...
vscode 配置C/C++环境控制台参数
您可以通过以下步骤在VS Code中配置C/C环境的控制台参数: 1,打开VS Code并进入您的C/C项目 2,点击左侧的"调试"图标,然后点击顶部的齿轮图标,选择“launch.json”。 3,在"launch.json&qu…...
【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)
文章目录 TCP/IP协议族ARPDNS标志字段:协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…...
多系统对接的实现方案技术分析
前言 随着信息化和大数据时代的到来,数据资产变得至关重要,企业纷纷上线多种软件系统和移动端应用以适应这一变化。这些系统和应用虽然发挥了各自的优势,但也导致了信息孤岛问题。为了解决这一问题,数据中台和异构系统集成技术应…...
kv类型算子使用
对kv类型的RDD数据集进行操作。 keys """ 获取所有的key转换算子"""inputRdd sc.parallelize([(laoda, 11), (laoer, 22), (laosan, 33), (laosi, 44)]) print(inputRdd.keys().collect()) # [laoda, laoer, laosan, laosi] values "&…...
3维建模blender
官网稳定版下载:https://www.blender.org/download/lts/ windows有安装版和portable版 教程:https://www.bilibili.com/video/BV1kX4y1m7G5 1. 基础操作 场景操作 场景位移:shift鼠标中键长按场景旋转:鼠标中键长按场景缩放&…...
百问FB网络编程 - UDP编程简单示例
6.5 UDP编程简单示例 UDP服务器首先进行初始化操作:调用函数socket创建一个数据报类型的套接字,函数bind将这个套接字与服务器的公认地址绑定在一起。然后调用函数recvfrom接收UDP客户机的数据报。UDP客户机首先调用函数socket创建一个数据报套接字&…...
面试题:什么是ThreadLocal,如何实现的?
强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 你是否还在为简历无人阅读而感到沮丧?是否因为寻觅不到理想的工作机会而感到焦虑不安?试试:看看…...
js后端开发之Next.js、Nuxt.js 与 Express.js
后端js之Next.js、Nuxt.js 与 Express.js 在现代 Web 开发中,JavaScript 已经成为前后端通用的编程语言,而选择合适的后端框架则是构建高效、可扩展应用程序的关键。本文将带你深入了解三个流行的 JavaScript 后端框架:Next.js、Nuxt.js 和 …...
飞牛Nas如何实现阿里云盘、百度网盘的资料迁移!
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 如何使用飞牛NAS实现阿里云盘与百度网盘的数据互相迁移 📒📝 操作步骤注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 你是否有将百度网盘的文件迁移到阿里云盘,或是将阿里云盘的资料转移到百度网盘的需求?本文将给大家演示如…...
如何在小米平板5上运行 deepin 23 ?
deepin 23 加入了 ARM64 支持,这里尝试将 deepin 系统刷入平板中,平常使用中,带个笔记本电脑有时候也会嫌比较麻烦,把 Linux 系统刷入平板中既满足了使用需要,又满足了轻便的需求。为什么不使用 Termux ?虽…...
【PlantUML系列】流程图(四)
目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字;结束一般使用stop/end关键字。基础用法包括: start ... stopstart ...…...
操作系统:进程、线程与作业
背景介绍: 因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。 多道程序致力于提高处理机、设备、内存等各种资源的利用率,从而提高系统效率,也就是吞吐量,吞吐量定义为单位时…...
先验地图--slam学习笔记
先验信息 (Prior Information) 先验信息指的是在收集新数据之前已有的知识或假设。这种信息可以来自之前的实验、历史数据、理论模型或专家意见。 地图信息:在无人驾驶中,车辆通常会预先加载高精度地图数据,这些地图数据提供了道路布局、车…...
空指针异常:软件开发中的隐形陷阱
在软件开发的世界里,bug如同隐藏在代码森林中的小怪兽,不时跳出来给开发者们制造惊喜(或惊吓)。其中,空指针异常(Null Pointer Exception, NPE)无疑是最令人头疼的一类。它悄无声息,…...
【Java从入门到放弃 之 GC】
垃圾回收 垃圾回收什么是垃圾引用计数法可达性分析算法 垃圾回收算法标记清除法标记复制法标记整理法分代 常用的垃圾回收器 垃圾回收 如果你学过C,你肯定知道,我们没申请一块内存,都要自己写回收内存的方法。而Java不需要我们管理内存&…...
【C++】等差数列末项计算题解析及优化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述与输入输出要求💯数学分析与公式推导公差的计算通项公式推导 💯示例解析解题步骤 💯程序实现与解析初版代码代码解析优点与不足…...
vue中父组件接收子组件的多个参数的方法:$emit或事件总线
方法一:使用 $emit 方法 原理 子组件通过 $emit 方法向父组件发送事件,同时可以传递多个参数,父组件通过事件监听来接收这些参数。 示例 子组件代码 <template><div><button click"sendData">发送数据</…...
2024.12.10——攻防世界Web_php_include
知识点:代码审计 文件包含 伪协议 伪协议知识点补充: 在PHP中,伪协议(Pseudo Protocols)也被称为流包装器,这些伪协议以 php://开头,后面跟着一些参数,用于指定要执行的操作或需要…...
网站设计深圳市/今天的新闻内容
单例写法 在OC中,我们通常是采用dispatch_once函数来帮助我们实现单例。dispatch_once可以保证马上执行函数并且线程安全。 (instancetype)sharedInstance { static id _instance nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ …...
kali做钓鱼网站/注册网站的免费网址
在正式进入主题之前,笔者想先聊一聊产品研发工作中那些“令人头大”,但又 “似乎无法解决”的“千年”老话题,比如:该如何获得仿真结果与实测数据的最高一致性?该如何赋值CAE模型中的未知参数?哪些参数对仿真结果的影响较大&…...
建网站需要哪些条件/seo关键词报价查询
简单选择排序(Simple Select Sort) 简单选择排序是入门级别的排序算法,算法易懂,实现简单。假设现在有一个待排序序列,长度是n,要求从小到大排序。简单选择排序将要进行n-1次外循环(不需要进行n…...
网站改造设计方案/《新闻联播》 今天
通过在agent中加入脚本,来获取数据,生成图形 转载于:https://www.cnblogs.com/li-tian-jun/p/10073804.html...
智慧团建官方网站电脑版/国内优秀网页设计赏析
域环境,俩DC,A主域控,B额外域控, 公司搬迁,把A主域控搬至外地,留B辅域控在本地,结果出现部分用户无法登陆的情况。 没办法,搬迁工作准备不足,只好在辅域控上做了出下操作…...
对网站建设需求/百度一下你就知道
Simple Transformations 简单的变换 A transformation manipulates the geometry of an object. QML Items can, in general, be translated, rotated and scaled. There is a simple form of these operations and a more advanced way. 变换操作改变元素对象的几何形状。Q…...