DL Homework 5

news2024/11/18 19:57:49

目录

习题4-1 对于一个神经元​编辑,并使用梯度下降优化参数w时,如果输入x恒大于0,其收敛速度会比零均值化的输入更慢。

习题4-5 如果限制一个神经网络的总神经元数量(不考虑输入层)为N+1,输入层大小为​编辑,输出层大小为1,隐藏层的层数为L,每个隐藏层的神经元数量为​编辑,试分析参数数量和隐藏层层数L的关系。

习题4-7 为什么在神经网络模型的结构化风险函数中不对偏置b进行正则化?

习题4-8 为什么在用反向传播算法进行参数学习时要采用随机参数初始化的方式而不是直接令W=0,b=0?

习题4-9 梯度消失问题是否可以通过增加学习率来缓解?

总结


习题4-1 对于一个神经元\sigma (w^{T}x+b),并使用梯度下降优化参数w时,如果输入x恒大于0,其收敛速度会比零均值化的输入更慢。

        分析一下这句话,首先采用的是Sigmoid函数,且函数的性质,如图所示

        代码如下:

import numpy as np
import matplotlib.pyplot as plt


def sigmoid(x):
    y = 1 / (1 + np.exp(-x))
    return y


x = np.linspace(start=-5, num=50, stop=5)
plt.figure()
y = sigmoid(x)
plt.plot(x, y)
# 设置坐标轴
ax = plt.gca()
# 取消右侧和上侧坐标轴
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 设置默认的x轴和y轴方向
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 设置坐标原点为(0,0)
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
plt.title('f(x)=Sigmoid')
plt.figure()
y = y * (1 - y)
plt.plot(x, y)
plt.title('f\'(x)')
# 设置坐标轴
ax = plt.gca()
# 取消右侧和上侧坐标轴
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 设置默认的x轴和y轴方向
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 设置坐标原点为(0,0)
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
plt.show()

        零均值化是什么?

        零均值化是一种常见的数据预处理方法,也称为特征中心化。它通过将数据减去其均值,使得数据的均值变为0。具体而言,对于输入数据集X,零均值化的过程可以表示为 X_new = X - mean(X),其中mean(X)是数据集X的均值。

        同时根据对Sigmoid梯度的观察我们得到了问题的答案,数据经过零均值化后,使得输入的数据分布接近零中心。从而使梯度大小和方向更加稳定(可见Sigmoid梯度的函数在零中心附近的分布),从而提高收敛的速度。

  扩展

        为什么要采取零均值化或者说零均值化有什么好处?

  1. 增加收敛速度:零均值化可以使数据的分布接近零中心,消除数据中的偏差。这有助于减少梯度下降过程中的震荡现象,使得优化算法更快地找到全局最优解或局部最优解,从而加快模型的收敛速度。

  2. 提高模型的稳定性:如果数据的均值较大,那么梯度更新的幅度也会相应增大。这可能导致模型训练过程不稳定,难以获得良好的收敛性能。通过零均值化,可以减小梯度的幅度,使得优化过程更加稳定,从而提高模型的稳定性和可靠性。

  3. 增加模型的泛化能力:零均值化可以减小特征之间的尺度差异,使得不同特征的权重更加平衡。这可以避免某些特征对模型训练的主导影响,从而提高模型的泛化能力。通过零均值化,模型能够更好地学习特征之间的关系,提高对新样本的预测准确性。

  4. 降低模型过拟合的风险:过拟合是指模型在训练集上表现良好,但在测试集或新样本上表现不佳的现象。零均值化可以帮助降低模型过拟合的风险,因为它有助于减小特征之间的相关性和共线性,提高模型对新数据的泛化能力。

     预处理的其他常用的操作:

        1.特征缩放:将输入数据按比例缩放到一定范围内,如[0, 1]或[-1, 1]。常用的特征缩放方法包括最小-最大缩放和标准化。

  • 最小-最大缩放(Min-Max Scaling):将数据线性映射到指定的范围内,公式为 X_scaled = (X - min(X)) / (max(X) - min(X))。

  • 标准化(Standardization):将数据转化为均值为0,标准差为1的标准正态分布。标准化的公式为 X_scaled = (X - mean(X)) / std(X)。

        2.特征编码:对于分类任务中的类别型特征,可以使用独热编码(One-Hot Encoding)将其转换为二进制表示,以便神经网络能够更好地处理。

        预处理的好处:

  • 提高模型性能:预处理可以使得数据更适合于神经网络的训练,从而提高模型的性能和泛化能力。
  • 改善优化过程:通过预处理,可以减小梯度下降的不稳定性,加快优化过程的收敛速度。
  • 减少模型偏见:预处理可以去除数据中的偏差,使得模型更加公正地学习特征之间的关系。
  • 提高模型鲁棒性:通过预处理可以减小数据的尺度差异,增加模型对噪声和异常值的鲁棒性。

习题4-5 如果限制一个神经网络的总神经元数量(不考虑输入层)为N+1,输入层大小为M_{0},输出层大小为1,隐藏层的层数为L,每个隐藏层的神经元数量为,试分析参数数量和隐藏层层数L的关系。

首先,对于一个前馈神经网络,参数主要包括权重和偏置,层与层之间是全连接

假设隐藏层平分所有神经元,且能完整平分

可以把神经网络分成三部分

  1. 输入层到第一个隐藏层之间的参数数量:

    • 权重:需要连接输入层的每个神经元与第一个隐藏层的每个神经元,共有个权重。
    • 偏置:由于每个隐藏层的神经元数量都是 ,所以第一个隐藏层共有 个神经元,因此需要 个偏置。
  2. 第一个隐藏层到最后一个隐藏层之间的参数数量:

    • 权重:每个隐藏层之间的连接都满足每个神经元与其他神经元之间都有权重连接,因此共有个权重。
    • 偏置:由于每个隐藏层的神经元数量都是 ,所以从第二个隐藏层到最后一个隐藏层共有个偏置。
  3. 最后一个隐藏层到输出层之间的参数数量:

    • 权重:需要连接最后一个隐藏层的每个神经元与输出层的神经元,共有 个权重。
    • 偏置:因为输出层只有一个神经元,所以只需要1个偏置。

综上所述,参数数量的计算公式为: 

大概化简一下

咳咳,看不出来单调性,虽然我们都知道一定是单调增的

代数法!!!

  1. 当L=1时,即只有一个隐藏层

  2. 当L=2时,有两个个隐藏层

 到此我好像都没弄清楚到底是不是递增的嘶,插个眼,等晚点回来再算,现在脑子有点迷糊

习题4-7 为什么在神经网络模型的结构化风险函数中不对偏置b进行正则化?

        在神经网络模型中,偏置 b 是每个神经元的偏移量,用于控制神经元的激活水平。虽然偏置b和权重w具有类似的作用,都是调整神经元的输出,但两者的性质有所不同。权重 w 在模型训练过程中是需要更新的,通过反向传播算法来进行梯度下降更新。正则化可以有效地控制权重的大小,抑制过拟合现象。而对于偏置 b,它不同于权重 w,一般情况下是初始化为 0 或者随机值,而不是需要训练得到的。因此,在训练过程中不需要对偏置b进行正则化操作,因为偏置 b本身不会引起过拟合问题。

        并且如果对b进行惩罚,其实是没有作用的,因为在对输出结果的贡献中,参数b对于输入的改变是不敏感的,不管输入改变是大还是小,参数b的贡献就只是加个偏置而已。举个例子,如果你在训练集中,w和b都表现得很好,但是在测试集上发生了过拟合,b是不背这个锅的,因为它对于所有的数据都是一视同仁的(都只是给它们加个偏置),要背锅的是w,因为它会对不同的数据产生不一样的加权。

        更直白的说,偏置在偏导中是为0的是不对对模型参数引起改变,真正会引起不良改变的是w。

        顺便提一下,吴恩达老师说,其实是可以对b加偏置的,但是没必要,因为做不做没什么区别,所以这也是个不加正则化的理由吧~老师的视频链接

习题4-8 为什么在用反向传播算法进行参数学习时要采用随机参数初始化的方式而不是直接令W=0,b=0?

    

  1. 对称性破坏: 当所有的权重和偏置都被初始化为零时,神经网络中每个隐藏层的所有神经元将是对称的。这样一来,在反向传播过程中,梯度的更新会变得对称,导致每个隐藏层的神经元始终更新相同的梯度。结果是,无论网络有多少层,它们最终都会执行相同的功能,失去了多层网络的优势,这种现象称为对称权重现象。

  2. 防止陷入局部最优解: 如果所有的参数都初始化为零,那么所有的神经元在前向传播过程中将会计算相同的值,从而导致在反向传播过程中梯度也相等。这将使得神经网络更容易陷入局部最优解。通过随机初始化,我们可以给每个参数赋予一个随机的初始值,增加了网络发现全局最优解的可能性,并且能够更好地逃离局部最优解。

偷的学长的一个图(因为我跑了半天,没跑出来这个图,咳咳),很明确的指出,对称权重的危害!!!二分类准确率维持为50%左右,说明模型没有学到任何内容。反向更新毫无效果,训练和验证loss几乎没有怎么下降。

        除了随机参数初始化,我们还可以怎样令网络避免对称权重现象?

        Dropout正则化:Dropout是一种通过随机断开网络中某些神经元连接的方法,在网络的训练过程中起到随机删除部分神经元的作用。Dropout可以有效避免对称权重现象,因为它可以防止网络中某些神经元过于强调某些输入特征,从而保证了每个神经元都学习到不同的特征。同时,Dropout还可以有效地防止过拟合,提高了模型的泛化能力。

习题4-9 梯度消失问题是否可以通过增加学习率来缓解?

        梯度消失问题是指。在深度神经网络中,随着反向传播算法向前传递梯度时,梯度逐渐变小到接近于零的现象

        增加学习率在一定程度上可以缓解。适当增大学习率可以使学习率与导数相乘结果变大,缓解梯度消失;过大学习率可能梯度巨大,导致梯度爆炸。

为缓解梯度消失问题,可以考虑以下方法:

  1. 使用激活函数:选择合适的激活函数可以缓解梯度消失问题。例如,ReLU (Rectified Linear Unit) 激活函数能够有效地抑制梯度消失,并且在实际应用中被广泛使用。

  2. 权重初始化:合理的权重初始化可以减少梯度消失问题。通过选取适当的初始化方法,如Xavier或He初始化,可以使得权重具有合理的范围和分布,有助于梯度的传播和避免梯度消失。

  3. 使用批归一化(Batch Normalization):批归一化可以加速模型的训练过程,同时有助于缓解梯度消失问题。它通过对每一层的输入进行归一化操作,使得数据分布更加稳定,有利于梯度的传播。

  4. 调整网络结构:合理设计网络结构也可以减轻梯度消失问题。例如,使用残差连接(Residual Connections)可以使得信息更容易跨层传播,从而避免梯度逐渐消失。

        总之,增加学习率并不是解决梯度消失问题的有效方法。合理选择激活函数、权重初始化,使用批归一化和调整网络结构等方法更为可靠。

总结

        本次作业其实总体来说比较简单,很多东西好像在写实验的博客的时候都接触过,这次作业就像一个汇总,把零零碎碎之前写过的一些知识点合起来写一个博客,但是也是有新收获的,之前虽然考虑过为什么不对b做偏置,但是后来因为自己懒还是没有明确,这次作业也算是一个敲响自己的警钟了, 以后不能随便偷懒,万一面试等等环境遇到,岂不是亏死!!!fighting!

参考

4.3 正则化_哔哩哔哩_bilibili

【精选】NNDL 作业4:第四章课后题-CSDN博客

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

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

相关文章

回归预测 | Matlab实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测

回归预测 | Matlab实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测 目录 回归预测 | Matlab实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.RIME-CNN-SVM霜冰优化算…

[SHCTF 2023 校外赛道] reverse

week1 ez_asm 想不到第1题是个汇编,咱也不知道拿啥能弄成c,不过这题也不难,直接能看懂,关键部分。 取出异或0x1e然后保存,再取出-0xa再保存。 .text:0000000000401566 loc_401566: …

赛宁网安多领域创新成果亮相第五届“纵横”论坛

10月27日,第五届“纵横”网络空间安全创新论坛在安徽合肥举办,来自中央国家机关、地方政府、军队有关单位、高校、科研院所和部分高新技术企业的领导、专家和代表500余人参加。 本届论坛由军事科学院和国防科技大学等单位共同主办,国防科技大…

电脑出现找不到d3dcompiler_43.dll的情况怎么办,分享d3dcompiler_43.dll丢失的办法

在使用电脑时你是不是也遇到过“未找到d3dcompiler_43.dll”的情况?是使用电脑的过程中d3dcompiler_43.dll丢失是一个经常出现问题,是一件大概率的事情,但是对于不了解这个文件的小伙伴而言出现这个问题是一件棘手的事情,那么今天…

postman做接口测试

之前搞自动化接口测试,由于接口的特性,要验证接口返回xml中的数据,所以没找到合适的轮子,就自己用requests造了个轮子,用着也还行,不过就是case管理有些麻烦,近几天又回头看了看postman也可以玩…

悠络客携新品UMind亮相安博会,从深耕商业连锁出发,正式进军ToG、ToC领域

2023年10月25日,第十九届中国国际社会公共安全博览会(CPSE安博会)在深圳会展中心隆重开幕。悠络客作为以公有云为核心的人工智能企业,联合海外事业部以全新面貌亮相展会现场。 本次参展,对悠络客而言有着非同寻常的重要…

【c++|opencv】二、灰度变换和空间滤波---4.高斯滤波

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 1. 高斯滤波 #include <iostream> #include <opencv2/opencv.hpp> #include"Salt.h"using namespace std; using namespace cv;/…

Android 13 Handler详解

1.Handler 简介 Handler 是一套 Android 消息传递机制。在多线程应用场景中&#xff0c;将子线程中需要更新 UI 的操作消息&#xff0c;传递到 UI 主线程&#xff0c;从而实现子线程通知 UI 更新最终实现异步消息处理。说白了是用于线程之间的通信。 Handler主要有4个重要类&a…

对xss-labs靶场的一次XSS攻击

1、首先我们进入靶场&#xff0c;提示我们开始测试 2、我使用AWVS工具进行了先行扫描&#xff0c;发现爆出XSS漏洞 3、然后对症下药 在输入框中输入&#xff1a; <script>alert(document.cookie)</script> 4、进入下一关 5、我们直接执行<script>…

priority_queue 的模拟实现

priority_queue 的底层结构 我们已经学习过栈和队列了&#xff0c;他们都是用一种容器适配出来的。今天我们要学习的 prority_queue 也是一个容器适配器。在 priority_queue 的使用部分我们已经知道想要适配出 priority_queue&#xff0c;这个底层的容器必须有以下接口&#x…

040-第三代软件开发-全新波形抓取算法

第三代软件开发-全新波形抓取算法 文章目录 第三代软件开发-全新波形抓取算法项目介绍全新波形抓取算法代码小解 关键字&#xff1a; Qt、 Qml、 抓波、 截获、 波形 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object …

【错误: 找不到或无法加载主类】回归java运行的本质

【错误: 找不到或无法加载主类】回归java运行的本质 一&#xff0c;背景 当有了idea这种工具后&#xff0c;java的mian方法执行起来是如此简单&#xff0c;很少有人再手动编辑并通过命令行执行了。 同时&#xff0c;在当今Spring Boot盛行的今天&#xff0c;恐怕很少再有人执…

基于SSM的模具制造企业订单跟踪管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

阿里云国际服务器如何申请退款

如果您的服务器配置购买错了&#xff0c;可以通过工单方式申请退款如何发工单&#xff1f; 打开如下链接登录阿里云国际多云管理服务商_Cloud MSP_九河云 (9he.com) 选择一个类目&#xff0c;提交工单&#xff0c;编辑需求内容 退款之前一定记录好当前剩余余额&#xff0c;避免…

【LeetCode:150. 逆波兰表达式求值 | 栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【驱动开发】注册字符设备使用gpio设备树节点控制led三盏灯的亮灭

注册字符设备使用gpio设备树节点控制led三盏灯的亮灭 设备树&#xff1a; 头文件&#xff1a; #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int OD…

三.RocketMQ单机安装及集群搭建

RocketMQ单机安装及集群搭建 一&#xff1a;安装环境1.软硬件要求2.下载RocketMQ 二.安装单机MQ1.上传并解压2.目录介绍3.修改MQ启动时初始JVM内存4.启动NameServer与Broker5.测试RocketMQ 三.RocketMQ集群搭建1.集群概念特点2.集群模式分类3.集群工作流程4.双主双从集群搭建4.…

力扣刷题-队列-滑动窗口最大值

239. 滑动窗口最大值 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶&#xff1a; 在线性时间复杂度内解决此题&#xff1f; …

【网络协议】聊聊http协议

当我们输入www.baidu.com的时候&#xff0c;其实是先将baidu.com的域名进行DNS解析&#xff0c;转换成对应的ip地址&#xff0c;然后开始进行基于TCP构建三次握手的连接&#xff0c;目前使用的是1.1 默认是开启了keep-Alive。可以在多次请求中进行连接复用。 HTTP 请求的构建…

【C++的OpenCV】第十四课-OpenCV基础强化(三):单通道Mat元素的访问之data和step属性

&#x1f389;&#x1f389;&#x1f389; 欢迎来到小白 p i a o 的学习空间&#xff01; \color{red}{欢迎来到小白piao的学习空间&#xff01;} 欢迎来到小白piao的学习空间&#xff01;&#x1f389;&#x1f389;&#x1f389; &#x1f496; C\Python所有的入门技术皆在 我…