深度学习推理和训练

优化和泛化
深度学习的根本问题是优化和泛化之间的对立。
优化(optimization)是指调节模型以在 训练数据 上得到最佳性能(即机器学习中的学习)。
泛化(generalization)是指训练好的模型在 前所未见的数据 上的性能好坏。
数据集的分类
数据集可以分为:
1. 训练集:实际训练算法的数据集;用来计算梯度,并确定每次迭代中网络权值的更新;
2. 验证集:用于跟踪其学习效果的数据集;是一个指示器,用来表明训练数据点之间所形成的网络函数发生了什么,并且验证集上的误差值在整个训练过程中都将被监测;
3. 测试集:用于产生最终结果的数据集 。
为了让测试集能有效反映网络的泛化能力:
1. 测试集绝不能以任何形式用于训练网络,即使是用于同一组备选网络中挑选网络。测试集只能在所有的训练和模型选择完成后使用;
2. 测试集必须代表网络使用中涉及的所有情形。
交叉验证
这里有一堆数据,我们把他切成3个部分(当然还可以分的更多)
第一部分做测试集,二三部分做训练集,算出准确度;
第二部分做测试集,一三部分做训练集,算出准确度;
第三部分做测试集,一二部分做训练集,算出准确度;
之后算出三个准确度的平局值,作为最后的准确度。

 

bp 神经网络
BP网络(Back-Propagation Network) 是1986年被提出的,是一种按误差逆向传播算法训练的
多层前馈网络,是目前应用最广泛的神经网络模型之一,用于函数逼近、模型识别分类、数据压
缩和时间序列预测等。
BP网络又称为反向传播神经网络,它是一种有监督的学习算法,具有很强的自适应、自学习、非
线性映射能力,能较好地解决数据少、信息贫、不确定性问题,且不受非线性模型的限制。
一个典型的BP网络应该包括三层:输入层、隐藏层和输出层。各层之间全连接,同层之间无连接。
隐藏层可以有很多层。
1.将训练集数据输入到神经网络的输入层,经过隐藏层,最后达到输出层并输出结果,这就是前
向传播过程。
2.由于神经网络的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差
从输出层向隐藏层反向传播,直至传播到输入层;
3.在反向传播的过程中,根据误差调整各种参数的值(相连神经元的权重),使得总损失函数减
小。
4.迭代上述三个步骤(即对数据进行反复训练),直到满足停止准则。
我们利用神经网络去解决图像分割,边界探测等问题时候,我们的输入(假设为x),与期望的
输出(假设为y)之间的关系究竟是什么?也就是 y=f(x) 中, f是什么 ,我们也不清楚,但是我们
对一点很确信,那就是 f不是一个简单的线性函数 ,应该是一个抽象的复杂的关系,那么利用神
经网络就是去学习这个关系,存放在model中,利用得到的model去推测训练集之外的数据,得
到期望的结果。
训练(学习)过程:
正向传播
输入信号从输入层经过各个隐藏层向输出层传播。在输出层得到实际的响应值,若实际值与期
望值误差较大,就会转入误差反向传播阶段。
反向传播
按照梯度下降的方法从输出层经过各个隐含层并逐层不断地调整各神经元的连接权值和阈值,
反复迭代,直到网络输出的误差减少到可以接受的程度,或者进行到预先设定的学习次数。

 

 

(Epoch):使用训练集的全部数据对模型进行一次完整训练,被称为“一代训练”。
批大小(Batch size):使用训练集的一小部分样本对模型权重进行一次反向传播的参数更新,这一小部分样本被称为“一批数据”

 

迭代(Iteration):使用一个Batch数据对模型进行一次参数更新的过程,被称为“一次训练”(一次迭代)。 每一次迭代得到的结果都会被作为下一次迭代的初始值。一个迭代=一个正向通过+一个反向通过。
比如训练集有 500 个样本, batchsize = 10 ,那么训练完整个样本集: iteration=50 epoch=1
神经网络的训练过程
1.提取特征向量作为输入。
2.定义神经网络结构。包括隐藏层数,激活函数等等。
3.通过训练利用反向传播算法不断优化权重的值,使之达到最合理水平。
4.使用训练好的神经网络来预测未知数据(推理),这里训练好的网络就是指权重达到最优的情
况。
神经网络的训练过程
1、选择样本集合的一个样本(Ai,Bi),Ai为数据、Bi为标签(所属类别)
2、送入网络,计算网络的实际输出Y,(此时网络中的权重应该都是随机量)
3、计算D=Bi Y(即预测值与实际值相差多少)
4、根据误差D调整权重矩阵W
5、对每个样本重复上述过程,直到对整个样本集来说,误差不超过规定范围
更具体的:
1 参数的随机初始化
2 前向传播计算每个样本对应的输出节点激活函数值
3 计算损失函数
4 反向传播计算偏导数
5 使用梯度下降或者先进的优化方法更新权值
参数的随机初始化
对于所有的参数我们必须初始化它们的值,而且它们的初始值不能设置成一样,比如都设置成0或1。
如果设置成一样那么更新后所有参数都会相等。即所有神经元的功能都相等,造成了高度冗余。所
以我们必须随机化初始参数。
特别的,如果神经网络没有隐藏层,则可以把所有参数初始化为0。(但这也不叫深度神经网络了)
标准化( Normalization
原因:由于进行分类器或模型的建立与训练时,输入的数据范围可能比较大,同时样本中各数据可
能量纲不一致,这样的数据容易对模型训练或分类器的构建结果产生影响,因此需要对其进行标准
化处理,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行
比较和加权。
其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上

 

z-score标准化(零均值归一化 zero-mean normalization ):
经过处理后的数据均值为0,标准差为1(正态分布)
其中μ是样本的均值, σ是样本的标准差

 

损失函数
损失函数用于描述模型预测值与真实值的差距大小。一般有有两种常见的算法——均值平方差
(MSE)和交叉熵。
均值平方差(Mean Squared Error,MSE),也称“均方误差”:

 

交叉熵(cross entropy)也是loss算法的一种,一般用在分类问题上,表达意思为预测输入
样本属于哪一类的概率。值越小,代表预测结果越准。(y代表真实值分类(0或1),a代
表预测值):
损失函数的选取取决于输入标签数据的类型:
1. 如果输入的实数、无界的值,损失函数使用MSE。
2. 如果输入标签是位矢量(分类标志),使用交叉熵会更适合
梯度下降法
梯度 f=( x1 ​∂ f; x2 ​∂ f;…; xn ​∂ f)指函数关于变量x的导数,梯度的方向表示函数值增大的方向,梯度
的模表示函数值增大的速率。
那么只要不断将参数的值向着梯度的反方向更新一定大小,就能得到函数的最小值(全局最小值或者局部最小值)。
一般利用梯度更新参数时会将梯度乘以一个小于1的 学习速率(learning rate) ,这是因为往往梯度的模还是比较大的,直接用其更新参数会使得函数值不断波动,很难收敛到一个平衡点(这也是学习率不宜过大的原因)。

 

 

学习率
是一个重要的超参数,它控制着我们基于损失梯度调整神经网络权值的速度。
学习率越小,我们沿着损失梯度下降的速度越慢。
从长远来看,这种谨慎慢行的选择可能还不错,因为可以避免错过任何局部最优解,但它也意味
着我们要花更多时间来收敛,尤其是如果我们处于曲线的至高点。
新权值 = 当前权值 - 学习率 × 梯度

 紫色部分:正确结果与节点输出结果的差值,也就是误差;

红色部分:节点的激活函数,所有输入该节点的链路把经过其上的信号与链路权重做乘积后加总,再把加总结果进行激活函数运算;
绿色部分:链路w(jk)前端节点输出的信号值。
泛化能力分类
欠拟合:模型没有能够很好的表现数据的结构,而出现的拟合度不高的情况。模型不能在训练集上获得足够低的误差;
拟合:测试误差与训练误差差距较小;
过拟合:模型过分的拟合训练样本,但对测试样本预测准确率不高的情况,也就是说模型泛化能力很差。训练误差和测试误差之间的差距太大;
不收敛:模型不是根据训练集训练得到的。

 

过拟合
过拟合指的是给定一堆数据,这堆数据带有噪声,利用模型去拟合这堆数据,可能会把噪声数据也给拟合了。
一方面会造成模型比较复杂;
另一方面,模型的泛化性能太差了,遇到了新的数据,用所得到的过拟合的模型,正确率是很差的。

 

出现的原因:
1、建模样本选取了错误的选样方法、样本标签等,或样本数量太少,所选取的样本数据不足以代表预定的分类规则
2、样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则
3、假设的模型无法合理存在,或者说是无法达到假设成立的条件
4、参数太多导致模型复杂度过高
5、对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,,BP算法使权值可能收敛过于复杂的决策面;b)权值学习迭代次数足够多,拟合了训练数据中的噪声和训练样例中没有代表性的特征
过拟合的解决方法:
1. 减少特征:删除与目标不相关特征,如一些特征选择方法
2. Early stopping
        • 在每一个Epoch结束时,计算validation data的accuracy,当accuracy不再提高时,就停止训练。
        • 那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?并不是说validationaccuracy一降下来便认为不再提高了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。
        • 一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。
        • 这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30
3. 更多的训练样本。
4. 重新清洗数据。
5. Dropout
        在神经网络中,dropout方法是通过修改神经网络本身结构来实现的:
        1. 在训练开始时,随机删除一些(可以设定为1/2,也可以为1/3,1/4等)隐藏层神经元,即
认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变。
        2. 然后按照BP学习算法对ANN中的参数进行学习更新(虚线连接的单元不更新,因为认为这
些神经元被临时删除了)。这样一次迭代更新便完成了。下一次迭代中,同样随机删除一 些神经元,与上次不一样,做随机选择。这样一直进行,直至训练结束。
        Dropout方法是通过修改ANN中隐藏层的神经元个数来防止ANN的过拟合。
为什么Dropout能够减少过拟合:
        1. Dropout是随机选择忽略隐层节点,在每个批次的训练过程,由于每次随机忽略的隐层节点都不同,这样就使每次训练的网络都是不一样的, 每次训练都可以当做一个“新”模型;
        2. 隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现。
这样权值的更新不再依赖有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效果的情况。
        总结:Dropout是一个非常有效的神经网络模型平均方法,通过训练大量的不同的网络,来平均预测概率。不同的模型在不同的训练集上训练(每个epoch的训练数据都是随机选择),最后在每个模型用相同的权重来“融合”
经过交叉验证,隐藏节点dropout率等于0.5的时候效果最好。
dropout也可以被用作一种添加噪声的方法,直接对input进行操作。输入层设为更接近1的数。使
得输入变化不会太大(0.8)
dropout的缺点就在于训练时间是没有dropout网络的2-3倍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/8347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的0xFFFF在赋值、比较时引起的困惑

Java中的0xFFFF是整型,在赋值、比较的时候容易引起混淆,涉及到符号位、数值大小,赋值给什么类型的变量。我今天在编码的时候就遇到了一些困惑。用代码样例的形式记录下来,加深理解: package com.thb;public class Tes…

RT-Thread快速入门-定时器管理

1时钟节拍 任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如延时、线程的时间片轮转调度以及定时器超时等。时钟节拍(OS Tick)是操作系统中最小的时间单位。 时钟节拍是特定的周期性中断,这…

vue预览和下载txt、PDF、execl等在线文件

因为浏览器默认能直接打开TXT、PDF等文件索引默认就是点击链接打开文件。但是浏览器却又不能在线打开execl、world等文件。 现在我们可以统一的实现文件的预览以及下载。 下载文件 downloadfile方法 downloadfile(url,fileName){const newUrl url;const x new XMLHttpRequ…

【vue3】vue3的一般项目结构、成功显示自己的vue3页面

一、vue3的一般项目结构 Vue 3并没有规定特定的项目结构,因此您可以根据项目的需求和个人偏好来组织您的Vue 3项目。以下是一个常见的Vue 3项目结构示例,供参考: your-project/|- public/| |- index.html # 应用程序的入口HTML文件…

智慧井盖监测管理系统解决方案

一、方案概述 近年来,随着城市化的不断发展,城市地下管道设施的一步步完善,井盖作为城市基础设施中必不可少的一部分,其重要性也逐渐凸显。然而,在实际应用中,井盖监测和管理并不容易。如井盖地理位置分散&…

第一百一十四天学习记录:C++提高:类模板案例(黑马教学视频)

类模板案例 main.cpp代码&#xff1a; #include "myarray.hpp"void printIntArray(MyArray <int>& arr) {for (int i 0; i < arr.getSize(); i){cout << arr[i] << " ";}cout << endl; }void test01() {MyArray <int&…

史上最全,接口测试-Fiddler抓包常用功能总结(超详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Fiddler中常用的功…

macOS Monterey 12.6.8 (21G725) 正式版发布,ISO、IPSW、PKG 下载

macOS Monterey 12.6.8 (21G725) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持…

C++运算符:优先级

#include <iostream> using namespace std;//#define INT int //宏命令 // typedef int BOO; //移动 // INT a10; // BOO b 12;void fun(string& str) {int pos str.find(a);cout << "位置" << pos << endl;str.replace(pos,…

Windows Active Directory密码同步

大多数 IT 环境中&#xff0c;员工需要记住其默认 Windows Active Directory &#xff08;AD&#xff09; 帐户以外的帐户的单独凭据&#xff0c;最重要的是&#xff0c;每个密码还受不同的密码策略和到期日期的约束&#xff0c;为不同的帐户使用单独的密码会增加用户忘记密码和…

Spring MVC -- 获取参数(普通对象+JSON对象+URL地址参数+文件+Cookie/Session/Header)

目录 1.获取参数 1.1获取单个参数 1.2获取多个参数 传参注意事项&#xff1a; 2.获取对象 3.后端参数重命名RequestParam 4.获取JSON对象RequestBody 5.从 URL 地址中获取参数 PathVariable 6.上传文件 RequestPart 7.获取Cookie/Session/Header 7.1 获取 Request 和…

【MySQL】MySQL索引、事务、用户管理

20岁的男生穷困潦倒&#xff0c;20岁的女生风华正茂&#xff0c;没有人会一直风华正茂&#xff0c;也没有人会一直穷困潦倒… 文章目录 一、MySQL索引特性&#xff08;重点&#xff09;1.磁盘、OS、MySQL&#xff0c;在进行数据IO时三者的关系2.索引的理解3.聚簇索引&#xff0…

Two Days wpf 分享 分页组件

迟来的wpf分享。 目录 一、序言 二、前期准备 三、前端界面 四、后台代码部分 1、先定义些变量后面使用 2、先是按钮事件代码。 首页按钮 上一页按钮 下一页按钮 末尾按钮 画每页显示等数据 每页显示多少条 判断是否为数字的事件 分页数字的点击触发事件 跳转到…

HCIP——OSPF基础

OSPF基础 一、OSPF基础二、OSPF的区域划分三、OSPF的数据包hello包数据库描述包DBD包链路状态请求包LSR包链路状态更新包LSU包链路状态确认包LSAck包 四、OSPF的状态机五、OSPF的工作过程六、链路状态型的路由生成过程七、条件匹配五、OSPF数据包头部八、OSPF的接口网络类型 一…

链动2+1系统开发模式有没有风险?

现在的分销模式层出不穷&#xff0c;很多人都不知道分销与传销的区别&#xff0c;甚至认为最近很火的一个分销模式链动21也是个传销盘。那么&#xff0c;链动21模式究竟涉不涉传&#xff1f;有没有风险呢&#xff1f;下面就来具体说一下。 首先分销不是传销&#xff0c;分销是商…

(css)列表点击前后样式

(css)列表点击前后样式 效果&#xff1a; html <ul v-show"rightOne" class"one-content"><liv-for"(item,index) in exampleList":key"index"click"searchHandle(item,index)"class"liClass":class&qu…

MySQL函数讲解(谓词、CASE)

目录 MySQL常见函数 字符串函数 进行字符串操作的函数 算术函数 进行数值计算的函数 日期函数 进行日期操作的函数 转换函数 进行数据类型和值转换的函数 流程函数 进行条件删选 聚合函数 进行数据聚合的函数 谓词 一般用于条件判断 什么是函数 函数指一段可以直接被…

【C++】-多态的语法细节详解

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

GPT-3.5:ChatGPT的奇妙之处和革命性进步

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

苹果开发“Apple GPT”AI科技迎来新格局

根据彭博社的马克・古尔曼&#xff08;Mark Gurman&#xff09;报道&#xff0c;苹果内部正在开发“Apple GPT”人工智能项目&#xff0c;足以媲美 OpenAI 的 ChatGPT &#xff0c;预计明年推出。就在彭博社消息发出之后&#xff0c;苹果股价上涨了2.3%&#xff0c;市值顶峰时增…