李宏毅深度学习03——神经网络训练不起来怎么办

视频链接

如果Optimization失败的时候,怎么把梯度下降做的更好?
只考虑这种情况,不考虑overfitting

局部最小值(local minima)和鞍点(saddle point)

为什么Optimization会失败?

可能是gradient为0,导致梯度下降不继续工作了,即critical point(临界点)为0,原因要么是local minima,要么是saddle point(像马鞍一样的面,所以被称为鞍点)

在这里插入图片描述

数学解释

泰勒展开

使用泰勒级数近似法来逼近某一个复杂函数的近似值

海塞矩阵
在这里插入图片描述

海塞矩阵

由于在临界点的时候,gradient为0,所以我们只需要考虑后面那一项的形状即可知道当前处于什么样的情况
在这里插入图片描述

假设v = θ - θ’
我们可以通过v的值来判断当前值θ’的类型
即如果所有的v都是正的,则L(θ) > L(θ’),则为local minima
如果所有v都是负的,则L(θ) < L(θ’),则为local maxima
如果v有正有负,则为saddle point

但是我们没办法算出所有的v,所以上面的方法是理论上可行
但是有个结论是我们可以通过海塞矩阵H的特征值来判断θ’的类型:
如果所有的特征值为正,则为local minima
所有特征值为负,则为local maxima
特征值有正有负,则为saddle point

如图:
在这里插入图片描述

例子

分别算出g和H,然后算出H的特征值,即可知道某个临界点是属于什么类型
特征值的计算需要学习一下
在这里插入图片描述

如果是saddle point,可以通过海塞矩阵H知道要更新的方向,具体:
通过找到一个能够使海塞矩阵所在项值变小的u,即可确定要更新的方向
其中u是特征向量,通过特征值找出来
在这里插入图片描述
在这里插入图片描述
然而,实际上由于计算海塞矩阵H太过复杂,一般都不适用这种方式来找到更新方向

saddle point和local minima哪个更常见?

结论:在低维度的情况下是local minima,可能在高维度上实际上是saddle point在这里插入图片描述

批次(batch)和动量(Momentum)

batch批次

batch:批次,即把所有的数据分批次
epoch:遍历一次所有的batch
shuffle:遍历一次epoch,打乱一次顺序
在这里插入图片描述

为什么要用batch,使用小的batch Size还是大的batch Size

在这里插入图片描述
然而,考虑到并行运算,实际上遍历大的batch,未必就比小的时间长

在这里插入图片描述

在这里插入图片描述
虽然batch Size越大,所花的时间越少,看上去选择batch Size大的会比较合适。然而实验证明batch Size小的虽然noisy,但是有利于我们的训练,原因是因为大的batch Size可能会有Optimization的问题

在这里插入图片描述

在这里插入图片描述

batch Size 小的在测试数据上表现比大的好吗?

由于batch Size小的对应的Loss曲线更加曲折,而大的对应的曲线更加平缓;
一个直观的想法就是当训练数据和测试数据有一定偏差时,通过训练数据得到的曲线,越平缓,与测试数据的Loss就越小
在这里插入图片描述

结论

batch Size大和小都各自有各自的优点,所以这个就成了一个超参数,通过自己调整来得到更好的训练结果,许多文章都在探讨这个问题
在这里插入图片描述

Momentum动量

在实际的物理世界中,假设一个球从高处滑落,哪怕到达一个局部最低点,因为有动力的缘故,球也有可能翻越这个local minima继续往下走。
由这个想法引申出一个问题——能否将这个概念引入到梯度下降中呢?

只考虑gradient的方向:

在这里插入图片描述
gradient的方向加上movement的方向:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

结论

实际上就是考虑了之前运动的方向,与当前算出的gradient做了个角度的修改,从而减少了local minima的概率

自动调整学习率(learning rate)

其实,临界点问题(critical point)并不一定是训练过程中最大的阻碍
在这里插入图片描述
同样一个函数如凸函数,当learning rate设的很大的时候,他会来回震荡导致Loss一直减小不了
当learning rate设的很小时,虽然不会在震荡,但是在平坦的地方下降太过缓慢,导致永远都走不到最小的Loss;所以learning rate必须根据不同的Gradient,调整不同的值
在这里插入图片描述

使用客制化的learning rate

在这里插入图片描述

Root mean square(均方根)

在这里插入图片描述
这个方法被用于Adagrad算法上
当gradient变化比较平缓的时候,算出来的learning rate会更大,当gradient变化比较着急时,算出来的learning rate会比较小
在这里插入图片描述

存在的问题

同个参数,同个方向,均方根算出来的值是固定不变的,但是我们希望的是能够动态调整
在这里插入图片描述

RMSProp

在这里插入图片描述
开始时比较平缓,所以算出来的learning rate很大,对应走的步伐就很大;然后当坡度变陡,则通过调整a,从而使步伐变小;当坡度变缓后,通过调整a,使得步伐又变大
在这里插入图片描述

常用的Optimization策略

Adam:RMSProp + Momentum

在这里插入图片描述

解决开头提出的问题:无法达到最小Loss

在这里插入图片描述

Learning Rate Scheduling

解决上述突然喷射的问题的一种方式叫Learning rate scheduling
常见的Learning rate scheduling有Learning Decay和Warm up
其中Learning Decay指的是随着时间的推移,逐渐减小n,使得Learning rate也逐渐减小,类似于踩刹车

在这里插入图片描述
另一种方式Warm up则是指通过修改n先提高Learning rate的速度,再减小,类似于先加速再减速
在这里插入图片描述
Warm up是一个黑科技,很多论文都有用到
在这里插入图片描述

总结

在这里插入图片描述

损失函数Loss对Optimization也有影响

假设将分类问题按照回归问题来做
即假设class对应着数字1,2,3,
有时候可行,有时候不可行。
比如假设根据身高体重预测是几年级,由于年级之间有联系,所以可行
但是如果这几个class之间没有联系,则不可行

在这里插入图片描述

one-hot vector

为了解决class之间没有联系的问题,我们可以使用one-hot vector
在这里插入图片描述
由原来的一个value推广至多个value

在这里插入图片描述

softmax(归一化)

在这里插入图片描述

在这里插入图片描述
上述是多个class的情况,如果是2个class,一般直接使用sigmoid,但是实际上这两个是等价的

Loss of classfication(分类的Loss)

分类中常用的Loss方法是Cross-entropy
在这里插入图片描述
通过下面的例子我们可以看出,MSE在可能会在较大Loss的情况下卡主,而Cross-entropy则不没有问题,也侧面说明了不同的Loss定义对于优化的影响也不同
在这里插入图片描述

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

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

相关文章

南京邮电大学计算机网络实验一(网络操作系统的安装与配置)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验原理和步骤四、 实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09;&#xff08;一&#xff09;问题和解决方法&#xff08;二&#xff09;心得体会&#xff08;三&#xff09;意见与建…

爬山算法优点

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【stm32单片机应用】基于I2C协议的OLED显示(利用U82G库)

一、U8g2库 &#xff08;一&#xff09;U8g2简介 U8g2 是一个用于单色和彩色显示的嵌入式图形库&#xff0c;特别适用于单色OLED、LCD显示屏的驱动。它是对早期U8g库的扩展和改进&#xff0c;提供了更多功能和更广泛的硬件支持。U8g2作为一款强大而灵活的嵌入式图形库&#x…

JAVA语言开发的一套(智慧工地监管系统源码)让工地变得更加“聪明”

JAVA语言开发的一套&#xff08;智慧工地监管系统源码&#xff09;让工地变得更加“聪明” 数字智慧工地是指利用物联网、大数据、云计算、人工智能等先进技术&#xff0c;对工地进行全面数字化改造和智能化升级&#xff0c;实现工地管理的精细化、高效化和智能化。它通过实时…

Windows上PyTorch3D安装踩坑记录

直入正题&#xff0c;打开命令行&#xff0c;直接通过 pip 安装 PyTorch3D : (python11) F:\study\2021-07\python>pip install pytorch3d Looking in indexes: http://mirrors.aliyun.com/pypi/simple/ ERROR: Could not find a version that satisfies the requirement p…

聚焦AIoT最后一公里:EasyCVR+AI视频技术在各领域的创新应用

随着5G、AI、边缘计算、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联已经从概念逐渐转变为现实&#xff0c;全新的行业生态AIoT正在开启新时代。巨大的市场潜力与AI等新兴技术不断融合形成的庞大市场缺口&#xff0c;深度场景化应用落地诉求…

生产环境OpenLDAP主从集群

1、背景 在很多组织中&#xff0c;需要对用户和系统进行统一的身份认证和授权管理。为了实现这一目标&#xff0c;通常会使用LDAP&#xff08;轻量级目录访问协议&#xff09;来构建集中化的身份认证和授权服务。而在生产环境中&#xff0c;为了保证高可用性和可扩展性&#x…

Ubuntu server 24 (Linux) 安装lua + 卸载软件

1 apt 安装 # sudo apt update #查看可安装的lua版本 sudo apt-get install luaversion # sudo apt-get install lua5.3 #查看版本 testiZbp1g7fmjea77vsqc5hmmZ:/data/soft$ lua -v Lua 5.3.6 Copyright (C) 1994-2020 Lua.org, PUC-Rio2 Ubuntu卸载软件 #查找lua已安装…

python安装包中的.dist-info作用

在使用pip install 包名 进行python第三方库的时候&#xff0c;安装完库之后通常会出现一个库名&#xff0c;还有一个.dist-info的文件&#xff0c;以安装yolov8所依赖的框架ultralytics为例&#xff0c;成功安装后会出现以下文件夹&#xff1a; 第一个ultralytics是概该框架包…

【Android】构建 Android Automotive OS:适合初学者的指南

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

深入探究RTOS的IPC机制----邮箱

阅读引言&#xff1a; 因为将来工作需要&#xff0c; 最近在深入学习OS的内部机制&#xff0c;我把我觉得重要的、核心的东西分享出来&#xff0c; 希望对有需要的人有所帮助&#xff0c; 阅读此文需要读友有RTOS基础&#xff0c; 以及一些操作系统的基础知识&#xff0c; 学习…

行列式和矩阵的区别

目录 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 同济大学数学系. 工程数学…

Dynamics 365 on-premise 隐藏高级查找导出按钮

提示 着急可以直接看结果代码部分 背景 Dynamics 365 on-premise中有个高级查找的功能,查询的结果支持导出,如下图 业务反馈这个有数据安全风险,要修改显示规则。 一开始想着能用RibbonWorkbench改,就很爽快得答应了业务。结果用RibbonWorkbench改不了。 反复尝试 既…

Linux远程管理日志

实验介绍 本实验旨在实现主机将日志远程发送到堡垒机或远程服务器上&#xff0c;实现通过一台机器管理整个网络内的主机的效果。 准备两台虚拟机作为生产主机和管理机&#xff0c;保证网络通畅&#xff0c;展示如下&#xff1a; 关闭firewalld&#xff0c;通过配置rsyslog&a…

Sklearn之朴素贝叶斯应用

目录 sklearn中的贝叶斯分类器 前言 1 分类器介绍 2 高斯朴素贝叶斯GaussianNB 2.1 认识高斯朴素贝叶斯 2.2 高斯朴素贝叶斯建模案例 2.3 高斯朴素贝叶斯擅长的数据集 2.3.1 三种数据集介绍 2.3.2 构建三种数据 2.3.3 数据标准化 2.3.4 朴素贝叶斯处理数据 2.4 高斯…

Treeselect是介绍及使用(梳理了我使用这个组件遇到的大部分问题)

介绍&#xff1a; Treeselect是一款基于Vue.js的树形选择器组件&#xff0c;可以快速地实现树形结构的选择功能。 这里梳理了我使用这个组件遇到的大部分问题 安装依赖&#xff1a; 首先&#xff0c;你需要在你的项目中安装Treeselect的依赖。这通常可以通过npm或yarn等来完…

基于STM32和人工智能的智能农业监测系统

目录 引言环境准备智能农业监测系统基础代码实现&#xff1a;实现智能农业监测系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;智能农业管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业监测系统通过结合STM32嵌…

Linux - 输入输出

一、输出格式 echo //末尾自带换行 -n //取消自带换行 -e //支持转移符 常见转义符 \n换行 \t制表符 printf // 格式化输出字符串 %-10s // %s代表字符串 -10 左对齐容纳10个字符 二、输入输出重定向 file descriptors &#x…

Python | Leetcode Python题解之第155题最小栈

题目&#xff1a; 题解&#xff1a; class MinStack:def __init__(self):self.stack []self.min_stack [math.inf]def push(self, x: int) -> None:self.stack.append(x)self.min_stack.append(min(x, self.min_stack[-1]))def pop(self) -> None:self.stack.pop()sel…

AD域离线破解新思路:Trustroasting和TimeRoasting

简介 近期Tom Tervoort发表了白皮书《TIMEROASTING, TRUSTROASTING AND COMPUTER SPRAYING》并在Github发布了名为Timeroast的工具包&#xff0c;其中介绍了几种新的攻击思路TimeRoasting、Trustroasting和计算机账户密码喷洒&#xff0c;本篇文章主要对TimeRoasting和Trustro…