深度学习基础及技巧

机器学习中的监督学习

监督学习是通过对数据进行分析,找到数据的表达模型,对新输入的数据套用该模型做决策

主要分为训练和预测两个阶段

训练阶段:根据原始数据进行特征提取,然后使用决策树、随机森林等模型算法分析数据之间的特征或关系,最终得到关于输入数据的模型
预测阶段:按照同样特征工程的方法提取数据后,使用训练阶段得到的模型对特征向量进行预测,得到所属标签

深度学习

深度学习是机器学习的分支,属于监督学习的一种。然而深度学习不需要我们自己去提取特征,而是自动提取数据高维特征,大量节约时间

神经网络:
反向传播算法能够有效解决感知机异和回路的问题,使得训练多层的神经网络模型变成现实
非线性激活函数使得神经元模型能够解决非线性复杂数据分布问题

训练阶段:准备好原始数据和与之对应的分类标签数据,通过训练得到模型A
预测阶段:对新的数据套用该模型,预测新输入数据类别

训练阶段

对输入和输出数据进行量化
输入层神经元节点数为输入数据的个数
输出层神经元节点数为需要分类的个数
隐层神经元节点数目越多,神经网络的非线性越显著,增强神经网络的健壮性

训练阶段目标:通过算法不断修正权值向量W和偏置b,使其尽可能与真实模型接近
做法:使损失函数尽可能小,变为优化问题,使用反向传播算法求得网络模型所有参数的梯度,通过梯度下降算法对网络的参数进行更新

预测阶段

此时神经网络结构中所有参数都已知,只需要将向量化后的数据从神经网络输入层开始输入,顺着数据流动的方向在网络中进行计算,最终得到分类结果

梯度下降算法

沿着与梯度向量(损失函数对变量求偏导)相反的方向更新变量减少最快,直至损失收敛到最小值(梯度接近0),其中学习率控制梯度下降幅度或快慢。
越接近目标值,变化越小,梯度下降速度越慢

常见梯度下降算法

批量梯度下降算法Batch Gradient Descent

所有样本都参与参数的更新
优点:易于得到全局最优解;总体迭代次数不多
缺点:当样本数目很多时,训练时间过长,收敛速度变慢

随机梯度下降算法Stochastic Gradient Descent

从m个样本中随机抽取n个样本求解梯度
优点:训练速度快 ,每次迭代计算量少
缺点:准确度下降,得到的不一定是全局最优;总体迭代次数比较多

小批量随机梯度下降算法 Min-batch SGD

前两种算法的折衷,每次随机从m个样本中抽取k个进行迭代求梯度,每一次抽取方式是随机的,因此部分样本会重复。好处是计算梯度使让数据与数据之间产生关联,避免数据最终只能收敛到局部最优解

比较BGD与Min-batch SGD
BGD下降轨迹平滑,经过多次迭代后达到全局最优解处
Min-batch SGD在下降过程中有持续的小幅震荡,但每次迭代数据量少,能够更快找到全局最优解

反向传播算法

用于求解网络参数的梯度,利用链式求导法则,求出网络模型中的每个参数的导数

神经网络训练过程

从网络的输出层开始,反向计算神经网络中每一个参数的梯度,通过梯度下降算法,以一定的学习率对参数进行更新,接着运行一次向前传播算法,得到新的损失值

激活函数

激活函数性质

(1)单调可微
(2)限制输出值的范围。根据极限值判断是否需要激活神经元
(3)非线性

Sigmoid函数

是一种在不删除数据的情况下,减少数据的极值或异常值的函数。未激活值为0,完全饱和的激活值为1。

优点:
输出值映射在[0,1]范围内;
易于求导;
输出值为独立概率 ,可以用在输出层

缺点:
函数容易饱和,导致训练结果不佳
输出不是零均值,数据存在偏差,分布不均匀

双曲正切函数Tanh

归一化范围[-1,1]
可以更容易处理负数
0均值,数据分布平均
比Sigmoid函数收敛速度更快,易于训练
没有改变Sigmoid函数由饱和性引起的梯度消失问题

ReLU函数

优点:
在随机梯度下降算法中能快速收敛
梯度为0或常数,缓解梯度消散问题
引入稀疏激活性,在无监督预训练时也有较好的表现

缺点:
神经元在训练中不可逆死亡
随着训练的进行,可能会出现神经元死亡、权值无法更新的现象,流经神经元的梯度从该点开始将永远是0

Softmax函数

本质将一个K维的任意实数向量压缩映射成另一个K维的实数向量,其中向量的每个元素取值介于(0,1)范围内
是对逻辑回归(处理二分类问题)的推广,用于处理多分类问题
一般使用softmax函数获得同分布最高概率最伟输出结果

Batch Normalization层
让下一层的输入数据有相同的分布
如果遇到神经网络训练时收敛速度慢,或梯度爆炸或梯度消失等无法训练的状况都可以尝试加入BN层观察训练结果

损失函数

回归损失函数

均方误差损失函数Mean Squared Error Loss MSE

可以看作欧式距离的计算公式,对异常值非常敏感,平方操作会放大异常值。如果异常值较多,可以使用平均绝对误差作为损失函数

一般先把输入数据归一化到一个合理范围内然后使用均方误差或平均绝对误差计算损失
因为小范围的数据方便GPU/CPU运算,并提高浮点运算精度,方便观察数据的变化趋势和变化形式

分类损失函数

Logistic损失函数

Logistic损失函数为每一个分类产生一个有效的概率,为了让某一分类的概率最大,引入最大似然估计函数。在最大似然估计函数中,定义一个损失函数为loss(Y,P(Y|X)),利用已知样本X的分布,找到最有可能的参数使得样本X属于Y 的概率P(Y|X)最大

负对数似然损失函数

将最大似然函数中的连乘转化为求和,在前面加一个负号,最大化概率等价于寻找最小化的损失

交叉熵损失函数

前两个损失函数都只能处理二分类问题,交叉熵损失函数可以处理多分类问题

常用的激活函数和损失函数组合

Leak ReLU+MSE

Leak ReLU可以减少梯度消失

Sigmiod Logistic

Softmax+交叉熵损失函数

超参数

也是调优参数,目的是让模型训练的效果更好,收敛速度更快

学习率

学习率过大:权重参数可能会越过最优值,在误差最小的一侧来回跳动
学习率过小:许哟啊很长优化时间,导致算法长时间无法收敛
好的学习率对应的误差曲线具有很好的平滑性

动量

物理意义:当把球推下山时,球会不断累积动量,速度越来越快,当上坡时动量减小
当梯度保持相同方向维度时动量不断增大;而梯度方向不断变化时动量持续减少,因此可以加快收敛速度并减少震荡
当前梯度方向与前一步的梯度方向一样,则增加这一步的权值更新,否则减少参数更新,最终达到在一定程度上增加稳定性,加快学习速率,并有一定的摆脱局部最优的能力
动量系数取值0-1,常用取值为0.5,0.9,0.95,0.99。在网络训练的起始阶段由于梯度可能很大,初始值设为0.5,当梯度下降到一定程度时,可以改为0.9或更大

数据集

原始数据分为训练集,验证集,测试集

训练集:训练网络模型或确定网络模型参数

测试集:测试已经训练好的网络模型的泛化能力,不能保证模型的正确性,仅用于检验该模型是否满足期望

验证集:辅助模型优化。在模型训练过程中,可以通过验证集来观察模型的拟合情况,还可以通过验证集确定一些超参数(根据验证集精确率确定迭代次数,收敛情况确定学习率)

划分数据

划分数据。让不同数据集之间各自的方差不会相差太大
可以将数据集按8:2划分为训练集和测试集,从测试集中随机抽取80%的数据进行多次训练,把训练集剩下的数据作为验证集,观察不同抽取结果在测试集中的性能,把最好的一次训练结果当作最终模型

数据预处理

0均值:数据中每一维度的数据减去所在维度的数据均值
归一化:将0均值后的数据除以每一维的标准差
主成分分析:寻找有效表示数据主轴的方向,通过线性变换,将原始数据变化为一组各维度线性无关的数据,可用于提取数据的主要特征分量,常用于高维数据的降维,有效减少后续计算量,降低数据噪声

具体做法:
对数据进行0均值处理,然后计算协方差矩阵,得到数据不同维度之间的相关性,接着对协方差矩阵进行SVD分解,返回的U矩阵是按照特征值的大小排序的,通过选取前几个特征向量来降低数据的维度

白化:降低数据的冗余性,使得特征之间相关性较低,所有特征有相同的方差
将主成分分析去相关后的数据,从对角矩阵变成单位矩阵,使得数据有相同的方差

缺点:将数据的维度拉伸到相同的大小,扩大数据的噪声

网络的初始化

把模型的权重和偏置参数初始化为0是不科学的,为了让初始化的权重参数尽可能小但不是0,可以参考高斯分布函数,使用独立高斯随机变量来选择初始化模型的权重和偏置
在实际工程实践中,为了避免重新训练网络模型参数花费大量的时间,可以使用ImageNet数据集已经训练好的模型,加载到网络中开始训练,节省时间

网络过度拟合

泛化:指容错能力,可以接受一定的错误输入,经过内部纠正后输出正确的结果

出现过拟合后可以:
(1)增加训练集的数据,同时增加数据的多样性,但不够,因为提升过的数据仍可能是高度相关的
(2)关注网络模型允许存储的信息量(熵容量),只能存储少量信息的网络模型,其存储的特征将会集中在真正相关的特征上,使得网络拥有更好的泛化能力。可以调整模型的层数和每层的规模,也可以在网络权重更新时进行正则化约束

正则化方法

最大作用:防止过拟合,提高网络模型的泛化能力
做法:在损失函数中增加惩罚因子

由于特征过多而导致的过度拟合可以通过以下方法解决
(1)减少特征
(2)惩罚不重要特征(正则化)

正则化常见方法

L2正则化

在损失函数后加上L2正则化项(所有权值的平方和除以训练集中的样本大小n,正则化系数用来调节正则化项和原始损失值的比重)
L2正则化可以让权值变得更小,更小的权值表示神经网络的复杂度更低,网络模型相对简单,越简单引起的过拟合可能性越小

L1正则化

在损失函数后加上L1正则化项(权值w绝对值的和),当权值为正时,更新后的权值变小;当权值为负时,更新后的权值变大。目的是让权值趋于0,使得神经网络中的权值尽可能小,减小网络复杂度,防止过拟合

输入神经网络中的训练集数据越多,正则化系数的作用就越小,因为数据越多,出现过拟合的可能性就会降低

Dropout层

L1,L2正则化是通过修改损失函数实现的,而Dropout层是通过修改神经网络的模型实现的。
具体是在神经网络训练时让部分隐层神经元失效,进而不能对其权重参数和偏置进行更新。
因为在每次训练时,神经元之间随机地被移除,可以让一个神经元的出现不依赖于另一个神经元,阻止特征互相依赖,减少错误信息的传递,防止过度拟合
实际操作中Dropout的概率通常为50%

训练过程的技巧

精确率曲线和损失曲线

深度神经网络模型的训练时间长,不应该一直等待训练结束,应该持续观察精确率曲线和损失值曲线,不满足期望及时停止训练

在精确率曲线发现训练和验证集精确率差异越来越大,意味着模型过拟合;
如果验证集和训练集精确率曲线差别较少,但两者精度都无法提升,则意味着神经网络模型的学习能力差

网络微调fine-tune

将预先训练好的模型权重文件的整体或部分用到类似的任务中,称为网络模型的微调
优点:节省训练时间;当新数据集很小时,直接训练容易造成过度拟合,网络微调可以避免发生该情况

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

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

相关文章

AuthorizationPolicy 是一个重要的配置对象,用于定义服务间的访问控制和权限管理。

在 Istio 服务网格中,AuthorizationPolicy 是一个重要的配置对象,用于定义服务间的访问控制和权限管理。它允许管理员根据一系列规则来决定服务间的访问权限,从而增强系统的安全性。 AuthorizationPolicy 的作用 AuthorizationPolicy 主要用…

vue项目npm run serve 报错,Error: read ECONNRESET at TCP.onStreamRead

背景:vue2的项目,之前npm run serve一直可以正常使用,突然每次启动都会报错了,报错信息如下: node:events:492 throw er; // Unhandled error event ^ Error: read ECONNRESET at TCP.onStreamRead (n…

使用python搭建Web项目

使用python搭建Web项目 服务器基本配置安装python配置仓库镜像源安装conda管理python环境(可选) 使用django 框架搭建web项目迁移数据库到mysql项目依赖 服务器基本配置 安装python // 检测python版本 python --version python3 --version // 安装pyth…

【动态规划-多重背包】【hard】力扣2585. 获得分数的方法数

考试中有 n 种类型的题目。给你一个整数 target 和一个下标从 0 开始的二维整数数组 types ,其中 types[i] [counti, marksi] 表示第 i 种类型的题目有 counti 道,每道题目对应 marksi 分。 返回你在考试中恰好得到 target 分的方法数。由于答案可能很…

Leetcode 136 只出现一次的数字

题目链接:136. 只出现一次的数字 - 力扣(LeetCode) 题目描述: 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性…

计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI

首先安装需要的python库, 安装完之后利用navicat导入数据库文件bili100.sql到mysql中, 再在pycharm编译器中连接mysql数据库,并在设置文件中将密码修改成你的数据库密码。最后运行app.py,打开链接,即可运行。 B站爬虫数…

Java语言程序设计基础篇_编程练习题**18.31 (替换单词)

目录 题目:**18.31 (替换单词) 习题思路 代码示例 运行结果 替换前 替换后 题目:**18.31 (替换单词) 编写一个程序,递归地用一个新单词替换某个目录下的所有文件中出现的某个单词。从命令行如下传递参数: java Exercise18…

CSS中的字体样式、文本样式、列表样式以及背景和渐变

一、字体样式和文本样式 1.span标签 span标签的作用&#xff1a;能让某几个文字或者是词语凸显出来 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-…

【ComfyUI】生成图细节更清晰——Consistency_Decoder

原文&#xff1a;https://github.com/openai/consistencydecoder comfyui: https://github.com/gameltb/Comfyui_Consistency_Decoder_VAE 博文资料下载&#xff1a;https://pan.baidu.com/s/1SwfA4T6iMsA8IrRrGXm4sg?pwd0925 安装 【秋葉aaaki】comfyui一键运行包 夸克网盘…

Vue3 + TS 实现同一项目同一链接,pc端打开是web应用,手机打开是H5应用

前言&#xff1a; 我自己搭建的项目基本都是用 postcss-px-to-viewport 插件进行适配的&#xff1b; 最近在做一个项目&#xff0c;需求是同样的功能&#xff0c;用户可以在电脑上打开操作使用&#xff0c;也可以在手机上登录进去操作使用&#xff0c;但是跳转链接是同一个&am…

LVS-DR实战案例,实现四层负载均衡

环境准备&#xff1a;三台虚拟机&#xff08;NET模式或者桥接模式&#xff09; 192.168.88.200 &#xff08;web1&#xff09;(安装nginx服务器作为测试) 192.168.88.201 &#xff08;服务器&#xff09;&#xff08;用于部署lvs-dr&#xff09; 192.168.88.202 (web2)…

猫头虎分享:Python库 Jinja2 的简介、安装、用法详解入门教程

猫头虎分享&#xff1a;Python库 Jinja2 的简介、安装、用法详解入门教程 &#x1f42f; 摘要 今天有粉丝问猫哥&#xff1a;“如何使用Jinja2进行Python模板渲染&#xff1f;”这是一个非常常见的问题&#xff0c;特别是在开发Web应用时。Jinja2是一个强大的模板引擎&#x…

一篇带你搞定数据结构散列表

数据结构入门学习&#xff08;全是干货&#xff09;——散列表 1 散列表 1.1 引子&#xff1a;散列的基本思路 C语言变量名的管理&#xff1a; 定义/声明&#xff1a;先定义后使用。插入与查找&#xff1a; 插入&#xff1a;新变量定义。查找&#xff1a;检查变量是否已定义。…

2024年10月计划(工作为主,Ue5独立游戏为辅,)

我发现一点&#xff0c;就是工作很忙&#xff0c;比如中秋也在远程加班&#xff0c;周末有时也远程加班&#xff0c;国庆节甚至也差点去甲方工作。甚至有可能驻场。可见&#xff0c;小公司确实不能去。 好在&#xff0c;9月份时&#xff0c;通过渲染 除了上班时间外&#xff0…

Remotion:使用前端技术开发视频

前言 最近做文章突然想到很多文章其实也可以用视频的方式来展现&#xff0c;以现在短视频的火爆程度&#xff0c;肯定能让更多的人看到。 恰巧最近看了很多关于动画的前端 js 库&#xff0c;那如果将这些动画帧连续起来&#xff0c;岂不是就成了一个视频吗&#xff1f; 而且…

mysql 用户相关操作

用户账号的crud # create user account CREATE USER usernamehost IDENTIFIED BY password;# delete user account DROP USER usernamehost;# alter ALTER USER usernamehost IDENTIFIED BY new_password;# select select user, host from mysql.user;用户权限的crud # creat…

smartctl 命令:查看硬盘健康状态

一、命令简介 ​smartctl​ 命令用于获取硬盘的 SMART 信息。 介绍硬盘SMART 硬盘的 SMART (Self-Monitoring, Analysis, and Reporting Technology) 技术用于监控硬盘的健康状态&#xff0c;并能提供一些潜在故障的预警信息。通过查看 SMART 数据&#xff0c;用户可以了解硬…

Python第一篇:Python解释器

一&#xff1a;python解释器 python解释器是一款程序&#xff0c;用于解释、执行Python源代码。 一般python解释器都是c python使用c编写的&#xff0c;还有j python用java编写的。 二&#xff1a;python下载 三&#xff1a;使用示例 python进入控制台&#xff0c;python。 三…

在 VS Code 中配置 C/C++ 开发环境(详细指南)

前言 Visual Studio Code&#xff08;VS Code&#xff09;是一个广泛使用的代码编辑器&#xff0c;支持多种编程语言&#xff0c;包括 C 和 C。本指南将详细介绍如何在 VS Code 中设置 C/C 开发环境&#xff0c;适合新手。 1. 安装编译器 1.1. Windows 系统 推荐使用 MinGW-…

golang如何把微信支付结构体拼接为对参数按照key=value的格式,并按照参数名ASCII字典序排序

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…