深度学习入门:梯度消失问题浅谈(Sigmod,ReLu)

在这里插入图片描述

Sigmoid的梯度消失

以下是一个通过简单的神经网络示例来解释 Sigmoid 函数的梯度消失问题。

假设有一个非常简单的三层神经网络,输入层有两个神经元,隐藏层有两个神经元,输出层有一个神经元。我们使用均方误差作为损失函数,并且假设我们正在处理一个二分类问题。

  1. 前向传播

    • 假设输入为 x = [ x 1 , x 2 ] x=[x_1,x_2] x=[x1,x2],连接输入层和隐藏层的权重矩阵为 W 1 W_1 W1,隐藏层的输出为 h h h,则 h = s i g m o i d ( W 1 x ) h = sigmoid(W_1x) h=sigmoid(W1x)
    • 设连接隐藏层和输出层的权重为 w 2 w_2 w2,输出为 y y y,则 y = s i g m o i d ( w 2 h ) y = sigmoid(w_2h) y=sigmoid(w2h)
  2. 反向传播

    • 计算损失函数对输出层权重 w 2 w_2 w2 的梯度。假设真实标签为 t t t,损失函数为 L = ( t − y ) 2 L=(t - y)^2 L=(ty)2

    • 首先计算 ∂ L ∂ y = − 2 ( t − y ) \frac{\partial L}{\partial y}=-2(t - y) yL=2(ty)

    • 然后计算 ∂ y ∂ w 2 = y ( 1 − y ) h \frac{\partial y}{\partial w_2}=y(1 - y)h w2y=y(1y)h

    • 所以 ∂ L ∂ w 2 = ∂ L ∂ y ∂ y ∂ w 2 = − 2 ( t − y ) y ( 1 − y ) h \frac{\partial L}{\partial w_2}=\frac{\partial L}{\partial y}\frac{\partial y}{\partial w_2}=-2(t - y)y(1 - y)h w2L=yLw2y=2(ty)y(1y)h

    • 接着计算损失函数对隐藏层输出 h h h 的梯度,由于 ∂ L ∂ h = ∂ L ∂ y ∂ y ∂ h = − 2 ( t − y ) y ( 1 − y ) w 2 \frac{\partial L}{\partial h}=\frac{\partial L}{\partial y}\frac{\partial y}{\partial h}=-2(t - y)y(1 - y)w_2 hL=yLhy=2(ty)y(1y)w2

    • 再计算损失函数对隐藏层权重 W 1 W_1 W1 的梯度。这里 ∂ h ∂ W 1 = h ( 1 − h ) x \frac{\partial h}{\partial W_1}=h(1 - h)x W1h=h(1h)x

    • 所以 ∂ L ∂ W 1 = ∂ L ∂ h ∂ h ∂ W 1 = − 2 ( t − y ) y ( 1 − y ) w 2 h ( 1 − h ) x \frac{\partial L}{\partial W_1}=\frac{\partial L}{\partial h}\frac{\partial h}{\partial W_1}=-2(t - y)y(1 - y)w_2h(1 - h)x W1L=hLW1h=2(ty)y(1y)w2h(1h)x

  3. 梯度消失分析

    • 观察上述梯度表达式,其中包含了 y ( 1 − y ) y(1 - y) y(1y) h ( 1 − h ) h(1 - h) h(1h),这是 Sigmoid 函数的导数。

    • y y y h h h 的值接近 0 或 1 时,Sigmoid 函数的导数非常小,接近于 0。

    • 在深度神经网络中,如果经过多次前向传播后,隐藏层的输出值接近 0 或 1,那么在反向传播过程中,梯度会变得非常小,随着层数的增加,梯度会呈指数级减小,导致靠近输入层的权重更新非常缓慢甚至停滞不前,这就是梯度消失问题。

    • 例如,假设在训练过程中,隐藏层的输出值 h h h 接近 0 或 1,那么 h ( 1 − h ) h(1 - h) h(1h) 的值就会非常小。如果这个网络有很多层,那么在反向传播时,从输出层传递到输入层的梯度会越来越小,使得输入层的权重几乎无法更新,从而影响整个网络的训练效果。

ReLU的不会梯度消失

对于使用 ReLU(Rectified Linear Unit)激活函数的神经网络,我们来推导为什么它一般不会出现梯度消失问题。

还是考虑上述简单的三层神经网络结构:输入层有两个神经元,隐藏层有两个神经元,输出层有一个神经元,使用均方误差作为损失函数,处理二分类问题。

  1. 前向传播

    • 假设输入为 x = [ x 1 , x 2 ] x=[x_1,x_2] x=[x1,x2],连接输入层和隐藏层的权重矩阵为 W 1 W_1 W1,隐藏层的输出为 h h h,对于 ReLU 激活函数, h = m a x ( 0 , W 1 x ) h = max(0,W_1x) h=max(0,W1x)
    • 设连接隐藏层和输出层的权重为 w 2 w_2 w2,输出为 y y y,则 y = s i g m o i d ( w 2 h ) y = sigmoid(w_2h) y=sigmoid(w2h)(这里输出层仍使用 Sigmoid 以便于对比,实际中输出层的激活函数会根据任务而定)。
  2. 反向传播

    • 计算损失函数对输出层权重 w 2 w_2 w2 的梯度。假设真实标签为 t t t,损失函数为 L = ( t − y ) 2 L=(t - y)^2 L=(ty)2

    • 首先计算 ∂ L ∂ y = − 2 ( t − y ) \frac{\partial L}{\partial y}=-2(t - y) yL=2(ty)

    • 然后计算 ∂ y ∂ w 2 = y ( 1 − y ) h \frac{\partial y}{\partial w_2}=y(1 - y)h w2y=y(1y)h

    • 所以 ∂ L ∂ w 2 = ∂ L ∂ y ∂ y ∂ w 2 = − 2 ( t − y ) y ( 1 − y ) h \frac{\partial L}{\partial w_2}=\frac{\partial L}{\partial y}\frac{\partial y}{\partial w_2}=-2(t - y)y(1 - y)h w2L=yLw2y=2(ty)y(1y)h

    • 接着计算损失函数对隐藏层输出 h h h 的梯度,由于 ∂ L ∂ h = ∂ L ∂ y ∂ y ∂ h = − 2 ( t − y ) y ( 1 − y ) w 2 \frac{\partial L}{\partial h}=\frac{\partial L}{\partial y}\frac{\partial y}{\partial h}=-2(t - y)y(1 - y)w_2 hL=yLhy=2(ty)y(1y)w2

    • 再计算损失函数对隐藏层权重 W 1 W_1 W1 的梯度。对于 ReLU 函数,当输入大于 0 时,导数为 1;当输入小于等于 0 时,导数为 0。

    • 假设 h i h_i hi 是隐藏层第 i i i 个神经元的输出,那么如果 h i > 0 h_i>0 hi>0 ∂ h i ∂ W 1 i j = x j \frac{\partial h_i}{\partial W_{1ij}}=x_j W1ijhi=xj(其中 W 1 i j W_{1ij} W1ij 是连接输入层第 j j j 个神经元和隐藏层第 i i i 个神经元的权重);如果 h i ≤ 0 h_i\leq0 hi0 ∂ h i ∂ W 1 i j = 0 \frac{\partial h_i}{\partial W_{1ij}}=0 W1ijhi=0

    • 所以 ∂ L ∂ W 1 = ∂ L ∂ h ∂ h ∂ W 1 \frac{\partial L}{\partial W_1}=\frac{\partial L}{\partial h}\frac{\partial h}{\partial W_1} W1L=hLW1h,当 h i > 0 h_i>0 hi>0 时,该梯度为 − 2 ( t − y ) y ( 1 − y ) w 2 x j -2(t - y)y(1 - y)w_2x_j 2(ty)y(1y)w2xj,不为 0;当 h i ≤ 0 h_i\leq0 hi0 时,该梯度为 0,但不会出现像 Sigmoid 那样导数趋近于 0 导致梯度呈指数级减小的情况。

  3. 分析

    • 在使用 ReLU 激活函数时,只要隐藏层神经元的输出大于 0,梯度就可以正常地反向传播,不会出现因为激活函数导数趋近于 0 而导致的梯度消失问题。
    • 虽然当隐藏层神经元输出小于等于 0 时,梯度为 0,但这只是部分神经元的情况,而且在实际训练中,随着权重的调整,不同的神经元会在不同的时间被激活,使得网络整体能够有效地进行学习。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chromium127编译指南 Linux篇 - 额外环境配置(五)

引言 在成功获取 Chromium 源代码后,接下来我们需要配置适当的编译环境,以便顺利完成开发工作。本文将详细介绍如何设置 Python 和相关的开发工具,以确保编译过程无碍进行。这些配置步骤是开发 Chromium 的必要准备,确保环境设置…

批量混剪矩阵发布助力短视频营销快速获客

内容概要 在现代营销环境中,短视频已经成为品牌传播的重要工具,尤其是在获取潜在客户方面,短视频营销展现出了卓越的效率。那么,为什么要做短视频营销呢?首先,短视频能够迅速抓住观众的注意力,…

uni-app小程序echarts中tooltip被遮盖

图表中的文案过长,tooltip溢出容器,会被遮盖住 解决方案: 在echarts的tooltip中有confine属性可将tooltip限制在容器内,不超过容器,就不易被遮盖

怎么把图片快速压缩变小?图片在线压缩的3款简单工具

随着互联网的快速发展,将图片上传到网上平台来展示是很常用的一种方式,但是现在图片质量越来越高,导致图片也比较大,经常会出现无法上传的情况。那么在遇到这个问题时,通过图片压缩功能来处理图片会比较简单。本文给大…

科学计算服务器:如何计算算力?如何提升科学研究效率?

在现代科学研究的舞台上,科学计算服务器犹如一位强大的幕后英雄,为复杂科学计算任务的攻克提供着坚实支撑。准确计算其算力并充分发挥优势,对提升科学研究效率意义非凡。 服务器的中央处理器(CPU)计算力。在科学计算服…

【MRAN】情感分析中情态缺失问题的多模态重构和对齐网络

abstract 多模态情感分析(MSA)旨在通过文本、视觉和声音线索识别情感类别。然而,在现实生活中,由于各种原因,可能会缺少一到两种模式。当文本情态缺失时,由于文本情态比视觉和听觉情态包含更多的语义信息&…

Kafka生产者如何提高吞吐量?

1、batch.size:批次大小,默认16k 2、linger.ms:等待时间,修改为5-100ms 3、compression.type:压缩snappy 4、 RecordAccumulator:缓冲区大小,修改为64m 测试代码: package com.bigd…

【论文笔记】SparseRadNet: Sparse Perception Neural Network on Subsampled Radar Data

原文链接:https://arxiv.org/abs/2406.10600 简介:本文引入自适应子采样方法和定制网络,利用稀疏性模式发掘雷达信号中的全局和局部依赖性。本文的子采样模块选择 RD谱中在下游任务贡献最大 像素 的子集。为提高子采样数据的特征提取&#xf…

如何制定公司软件测试策略

在当今快速发展的软件行业,制定一套有效的软件测试策略至关重要。尤其是在互联网产品的背景下,测试策略不仅需要高效,还要具备灵活性,以便快速响应市场变化。本文将对比传统测试策略与互联网产品测试策略,并提供制定公…

【JWT】Asp.Net Core中JWT刷新Token解决方案

Asp.Net Core中JWT刷新Token解决方案 前言方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。方案二:实现用户无感知的刷新token值,我们希望当响应返回的数据是401身份过期时,响应阻拦器自动帮我…

机器学习—Softmax

Softmax回归算法是Logistic回归的推广,它是一种针对多类分类上下文的二进制分类算法。 当y可以接受两个可能的输出值时,Logistic回归就适用了,不是零就是一,它计算这个输出的方式是首先计算zw*xb,然后计算ag(z)&#…

docker镜像文件导出导入

1. 导出容器(包含内部服务)为镜像文件(docker commit方法) 原理:docker commit命令允许你将一个容器的当前状态保存为一个新的镜像。这个新镜像将包含容器内所有的文件系统更改,包括安装的软件、配置文件等…

【韩老师零基础30天学会Java 】02笔记

sublime Text中本身没有GBK编码,需要安装 要在sublime Text中设置编码为GBK,请按照以下步骤操作 打开Sublime Text编辑器,点击菜单栏中的“Preferences”(首选项)选项,找打Package Control选项。点击Package Control,随后搜索Inst…

如何设置 TORCH_CUDA_ARCH_LIST 环境变量以优化 PyTorch 性能

引言 在深度学习领域,PyTorch 是一个广泛使用的框架,它允许开发者高效地构建和训练模型。为了充分利用你的 GPU 硬件,正确设置 TORCH_CUDA_ARCH_LIST 环境变量至关重要。这个变量告诉 PyTorch 在构建过程中应该针对哪些 CUDA 架构版本进行优…

Matlab 基于声学超表面的深亚波长厚度完美吸收体

传统吸声器的结构厚度与工作波长相当,这在低频范围的实际应用中造成了很大的障碍。我们提出了一种基于超表面的完美吸收器,能够在极低频区域实现声波的全吸收。该超表面具有深亚波长厚度,特征尺寸为k223,由穿孔板和卷曲共面气室组…

【HarmonyOS】not supported when useNormalizedOHMUrl is not true.

【HarmonyOS】 not supported when useNormalizedOHMUrl is not true. 问题背景: 集成三方库编译时,IDE提示报错信息如下: hvigor ERROR: Bytecode HARs: [cashier_alipay/cashiersdk] not supported when useNormalizedOHMUrl is not true…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)

概述 从 WWDC 24 开始,苹果推出了全新的测试机制:Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式,并且使得单元测试更加灵动自由,更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

嘉吉携百余款产品与解决方案再度亮相进博会

第七届中国国际进口博览会(下称“进博会”)于11月5日至10日在上海国家会展中心举办。嘉吉连续第七年参与进博会,并以“新质绿动,共赢未来”为参展主题,携超过120款创新产品与解决方案,共赴进博之约。 今年嘉…

LLMs之MemFree:MemFree的简介、安装和使用方法、案例应用之详细攻略

LLMs之MemFree:MemFree的简介、安装和使用方法、案例应用之详细攻略 目录 MemFree的简介 1、MemFree的价值 2、MemFree 配备了强大的功能,可满足各种搜索和生产力需求 3、MemFree AI UI生成器功能 MemFree 安装和使用方法 1. 前端安装 2. 向量服务…

LeetCode:103. 二叉树的锯齿形层序遍历

目录 题目描述: 代码: 这个与二叉树的层序遍历有点类似 题目描述: 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)…