码农知识堂 - 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)

  • 相关阅读:
    哪款蓝牙耳机性价比高?1000元左右高性价比蓝牙耳机推荐
    并行多核体系结构基础 Yan Solihin 第3章 共享存储并行编程 摘录
    【内网安全】——windows信息收集
    CRM系统的三大核心功能
    python【判断奇偶数】
    本地跟单EA安装教程详解
    Mysql进阶【3】论述Mysql优化
    生成删除数据库所有表的外检脚本
    从零用VitePress搭建博客教程(6) -– 第三方组件库的使用和VitePress搭建组件库文档
    Python&C++相互混合调用编程全面实战-21依赖的QT环境安装和信号槽机制的讲解
  • 原文地址:https://blog.csdn.net/qq_38975453/article/details/126772521
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号