吴恩达《机器学习》9-4-9-6:实现注意:展开参数、梯度检验、随机初始化

一、实现注意:展开参数

在上一个视频中,讨论了使用反向传播算法计算代价函数的导数。在本视频中,将简要介绍一个实现细节,即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。

二、梯度检验

在神经网络中使用梯度下降算法时,复杂模型可能导致一些难以察觉的错误,即使代价函数在减小,最终结果也可能并非最优解。为了解决这个问题,采用一种称为梯度检验(Gradient Checking)的数值方法,通过估计梯度值来验证我们计算的导数是否准确。

梯度检验方法

梯度检验的基本思想是在代价函数上沿着切线的方向选择离两个非常近的点,然后计算两个点的平均值,用以估计梯度。对于某个特定的参数 𝜃,计算在 𝜃-𝜀 处和 𝜃+𝜀 处的代价值,其中 𝜀 是一个很小的值(通常选取为 0.001),然后求两个代价的平均值,以估计在 𝜃 处的导数。

Octave 中的代码示例如下:

gradApprox = (J(theta + eps) - J(theta - eps)) / (2 * eps)

偏导数检验

如果 𝜃 是一个向量,我们需要对每个参数进行偏导数检验。以下是针对 𝜃1 的示例:

# 对参数𝜃1进行偏导数检验的示例
partialDerivativeTheta1 = (J(theta1 + eps, theta2, ..., thetaN) - J(theta1 - eps, theta2, ..., thetaN)) / (2 * eps)

最后,还需要对通过反向传播计算出的偏导数进行检验。计算出的偏导数存储在矩阵 𝐷𝑖𝑗(𝑙) 中。在检验时,将该矩阵展开成为向量,同时将参数矩阵 𝜃 展开为向量,对每个 𝜃 计算一个近似的梯度值,并将这些值存储于一个近似梯度矩阵中。最终,将这个近似梯度矩阵与反向传播计算的梯度矩阵进行比较。

通过梯度检验,能够更加确信我们的梯度计算是正确的,从而提高神经网络训练的可靠性。

三、随机初始化

在神经网络的训练中,任何优化算法都需要一些初始的参数。到目前为止,采用的是将所有参数初始化为 0 的方法。然而,对于神经网络来说,这种初始化方法是不可行的。如果所有参数都初始化为 0,那么第二层的所有激活单元都会具有相同的值。同样,如果将所有参数初始化为相同的非零值,结果也会相似。

为了解决这个问题,引入了随机初始化(Random Initialization)的概念。随机初始化的思想是将参数初始化为介于一定范围内的随机值,而不是固定的值。

随机初始化的代码示例

假设要随机初始化一个尺寸为 10×11 的参数矩阵,我们可以使用如下的 Octave 代码:

Theta1 = rand(10, 11) * (2 * eps) - eps

上述代码使用 rand 函数生成一个包含介于 0 和 1 之间的随机值的矩阵,然后通过乘法和减法操作将其缩放到介于负 eps 到正 eps 之间,其中 eps 是一个很小的数,通常取 0.01。

通过随机初始化,打破了对称性,防止了所有参数具有相同初始值的问题,有助于神经网络更好地学习数据的特征,提高了训练的效果。这是神经网络训练中一个重要的实现注意点。

参考资料

[中英字幕]吴恩达机器学习系列课程

黄海广博士 - 吴恩达机器学习个人笔记

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

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

相关文章

MySQL MHA高可用配置及故障切换

一、MHA相关概念 1.什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 …

pytorch中.to(device) 和.cuda()的区别

在PyTorch中,使用GPU加速可以显著提高模型的训练速度。在将数据传递给GPU之前,需要将其转换为GPU可用的格式。 函数原型如下: def cuda(self: T, device: Optional[Union[int, device]] None) -> T:return self._apply(lambda t: t.cuda…

【C++进阶之路】第八篇:智能指针

文章目录 一、为什么需要智能指针?二、内存泄漏1.什么是内存泄漏,内存泄漏的危害2.内存泄漏分类(了解)3.如何检测内存泄漏(了解)4.如何避免内存泄漏 三、智能指针的使用及原理1.RAII2.智能指针的原理3.std:…

Windows安装MongoDB

1、下载MongoDB的zip,解压 2、创建目录 mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\db mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\log 3、创建一个配置文件mongod.cfg&#xff0c…

7.Gin 路由详解 - 路由分组 - 路由文件抽离

7.Gin 路由详解 - 路由分组 - 路由文件抽离 前言 在前面的示例中,我们直接将路由的定义全部写在 main.go 文件中,如果后面 路由越来越多,那将会越来越不好管理。 所以,下一步我们应该考虑将路由进行分组管理,并且将其抽…

使用jmeter对接口进行简单测试

JMeter是一个开源的性能测试工具,它可以对于Web应用程序、FTP、数据库服务器等各种服务器进行性能测试和负载测试,以确定它们是否能够承受预期的负载。JMeter支持多种协议和技术,如HTTP、HTTPS、FTP、JDBC、LDAP、SOAP、JMS等。它使用Java编写…

maven pom引入依赖不报红,但是项目Dependencies中没有引入jar包

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注一下! 也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习&…

maven打包项目,然后给其他项目引用

A项目(这个项目需要被打包,作为被引入的项目),不需要启动类,因为作为公共模块被B项目引入: package com.yunya.mvndependontest.rest;import org.springframework.web.bind.annotation.RequestMapping; im…

kubeadm join 192.168.10.16:6443 --token xxx报错Failed to request cluster-info

1、node节点执行 kubeadm join 192.168.10.16:6443 --token hak4zi.hrib9uv4p62t1uok --discovery-token-ca-cert-hash sha256:4337638eef783ee6a66045ad699722079e071c2dfbaa21e37d3174f04d58ea97 --v2 报错 [discovery] Failed to request cluster-info, will try again: G…

Qt应用开发(进阶篇)——线程 QThread

一、前言 QThread类继承于QObject基类,是Qt经典基础工具类,QThread类提供了一种独立于平台的方式来管理线程,让开发者能够快速的完成多线程的创建和使用。 正常情况下,一个PC程序使用到多线程的概率是非常高的,在不同方…

智能座舱架构与芯片- (11) 软件篇 上

一、智能汽车基础软件平台分类 汽车软件主要分为应用软件和基础软件。应用软件和业务形态高度关联,不同控制器的应用软件之间差异较大。基础软件介于应用软件和硬件之间,用于屏蔽硬件特性、支撑应用软件。可有效地实现应用软件与硬件之间解耦&#xff0…

Kubernetes容器状态探测的艺术

在Kubernetes集群中维护容器状态更像是一种艺术,而不是科学。原文: The Art and Science of Probing a Kubernetes Container[1] 在Kubernetes集群中维护容器状态更像是一种艺术,而不是科学。 本文将带你深入理解容器探测[2],并特别关注相对较…

C++ LibCurl实现Web隐藏目录扫描

LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP、FTP、SMTP、POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发送HTTP请求、下载文件、发送电子邮件等…

Stable Diffusion XL网络结构-超详细原创

强烈推荐先看本人的这篇 Stable Diffusion1.5网络结构-超详细原创-CSDN博客 1 Unet 1.1 详细整体结构 1.2 缩小版整体结构 以生成图像1024x1024为例,与SD1.5的3个CrossAttnDownBlock2D和CrossAttnUpBlock2D相比,SDXL只有2个,但SDXL的Cros…

如何选择示波器?

简介 对于很多工程师来讲,从市场中上百款不同价格和规格的各种型号的示波器中,选择一台新示波器是一件很挠首的事情。本文就旨在指引你拨开迷雾,希望能帮助你避免付出昂贵的代价。 重中之重 选择示波器的第一步不是要看那些示波器的广告和规…

MAVEN——PACKAGE、INSTALL、DEPLOY的联系与区别

我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命令还是有区别的。下面通过分别执行这三个命令的输出结…

Openlayer【三】—— 绘制多边形GeoJson边界绘制

1.1、绘制多边形 在绘制多边形和前面绘制线有异曲同工之妙,多边形本质上就是由多个点组成的线然后连接组成的面,这个面就是最终的结果,那么这里使用到的是Polygon对象,而传给这个对象的值也是多个坐标,坐标会一个个的…

分享几个MicroPython开发的ES32项目源码

最近在学习物联网,必不可少的就是需要玩一下ESP8266和ESP32,当然开发它们的语言分为C/C 今天带给大家几个MicroPython开发的几个ESP32的项目源码,喜欢的童鞋可以关注一下 1、点亮开发板LED灯 from machine import Pinled_pin Pin(4,Pin.O…

软件测评中心进行安全测试有哪些流程?安全测试报告如何收费?

在当今数字化时代,软件安全测试是每个软件开发团队都不能忽视的重要环节。安全测试是指对软件产品进行系统、全面的安全性评测与检测的过程。它旨在发现并修复软件中存在的漏洞和安全隐患,以确保软件能够在使用过程中保护用户的数据和隐私不被非法访问和…

SpringSecurity+JWT权限认证

SpringSecurity默认的是采用Session来判断请求的用户是否登录的,但是不方便分布式的扩展 虽然SpringSecurity也支持采用SpringSession来管理分布式下的用户状态,不过现在分布式的还是无状态的Jwt比较主流 一、创建SpringBoot的项目 spring-boot-starte…