码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • NNDL 实验五 前馈神经网络(2)自动梯度计算&优化问题



    37cf3ea4bffe47eb9101d2ed504b25d9.png

    4.3 自动梯度计算

    虽然我们能够通过模块化的方式比较好地对神经网络进行组装,但是每个模块的梯度计算过程仍然十分繁琐且容易出错。在深度学习框架中,已经封装了自动梯度计算的功能,我们只需要聚焦模型架构,不再需要耗费精力进行计算梯度。

    飞桨提供了paddle.nn.Layer类,来方便快速的实现自己的层和模型。模型和层都可以基于paddle.nn.Layer扩充实现,模型只是一种特殊的层。继承了paddle.nn.Layer类的算子中,可以在内部直接调用其它继承paddle.nn.Layer类的算子,飞桨框架会自动识别算子中内嵌的paddle.nn.Layer类算子,并自动计算它们的梯度,并在优化时更新它们的参数。

    pytorch中的相应内容是什么?请简要介绍。

      4.3.1 利用预定义算子重新实现前馈神经网络

    使用Paddle的预定义算子来重新实现二分类任务。主要使用到paddle.nn.Linear。

    1. 使用pytorch的预定义算子来重新实现二分类任务。(必做)

    2. 增加一个3个神经元的隐藏层,再次实现二分类,并与1做对比。(必做)

    3. 自定义隐藏层层数和每个隐藏层中的神经元个数,尝试找到最优超参数完成二分类。可以适当修改数据集,便于探索超参数。(选做)

      4.3.2 完善Runner类

      4.3.3 模型训练

      4.3.4 性能评价


    【思考题】

    自定义梯度计算和自动梯度计算:

    从计算性能、计算结果等多方面比较,谈谈自己的看法。


    4.4 优化问题

      4.4.1 参数初始化

    实现一个神经网络前,需要先初始化模型参数。

    如果对每一层的权重和偏置都用0初始化,那么通过第一遍前向计算,所有隐藏层神经元的激活值都相同;在反向传播时,所有权重的更新也都相同,这样会导致隐藏层神经元没有差异性,出现对称权重现象。

      4.4.2 梯度消失问题

    在神经网络的构建过程中,随着网络层数的增加,理论上网络的拟合能力也应该是越来越好的。但是随着网络变深,参数学习更加困难,容易出现梯度消失问题。

    由于Sigmoid型函数的饱和性,饱和区的导数更接近于0,误差经过每一层传递都会不断衰减。当网络层数很深时,梯度就会不停衰减,甚至消失,使得整个网络很难训练,这就是所谓的梯度消失问题。
    在深度神经网络中,减轻梯度消失问题的方法有很多种,一种简单有效的方式就是使用导数比较大的激活函数,如:ReLU。

      4.4.3 死亡ReLU问题

    ReLU激活函数可以一定程度上改善梯度消失问题,但是在某些情况下容易出现死亡ReLU问题,使得网络难以训练。

    这是由于当x<0x<0时,ReLU函数的输出恒为0。在训练过程中,如果参数在一次不恰当的更新后,某个ReLU神经元在所有训练数据上都不能被激活(即输出为0),那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远都不能被激活。

    一种简单有效的优化方式就是将激活函数更换为Leaky ReLU、ELU等ReLU的变种。


    了解并使用Git、GitHub、Gitee(选学)

    Git是什么?

    Git是目前世界上最先进的分布式版本控制系统(没有之一)。

    Git有什么特点?简单来说就是:高端大气上档次! 

    Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)

    使用GitHub - 廖雪峰的官方网站 (liaoxuefeng.com)

    使用Gitee - 廖雪峰的官方网站 (liaoxuefeng.com)

    GitHub、Gitee 编写 ReadMe.md - HBU_DAVID - 博客园 (cnblogs.com)

    Git - Gitee - HBU_DAVID - 博客园 (cnblogs.com)


     ref:

    NNDL 实验4(上) - HBU_DAVID - 博客园 (cnblogs.com)

    NNDL 实验4(下) - HBU_DAVID - 博客园 (cnblogs.com)

    2.5. 自动微分 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)

    4.7. 前向传播、反向传播和计算图 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)

  • 相关阅读:
    自然语言处理综述
    Redis常见性能问题及解决方案
    Codeforces Round #833 (Div. 2) C. Zero-Sum Prefixes
    【TypeScript介绍】一文带你初步了解TypeScript
    用GDB调试程序的栈帧
    Vuex与前端表格施展“组合拳”,实现大屏展示应用的交互增强
    【微服务全家桶】-实用篇-4.1-ES-上篇
    Beyond Compare 外部转换规则
    Linux02-常规使用和命令
    float型和double型的区别
  • 原文地址:https://blog.csdn.net/qq_38975453/article/details/126772521
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号