深度学习:(七)梯度下降法在神经网络中的应用

devtools/2024/9/24 6:31:39/

梯度下降法在神经网络中的应用

事先规定:

n n n 表示个数(维度):

n [ 0 ] = n x n^{[0]}=n_x n[0]=nx ,表示单个训练样本 x x x 的元素个数;

n [ 1 ] n^{[1]} n[1] 表示隐藏层 1 1 1 的单元(节点)个数;

n [ 1 ] n^{[1]} n[1] 表示……

梯度下降法公式:

w w w b b b 参数随机初始化;

②计算预测值

③求导: d w [ 1 ] dw^{[1]} dw[1] d b [ 1 ] db^{[1]} db[1] d w [ 2 ] dw^{[2]} dw[2] d b [ 2 ] db^{[2]} db[2]

④更新参数:
W [ 1 ] = W [ 1 ] − α ⋅ d W [ 1 ] b [ 1 ] = b [ 1 ] − α ⋅ d b [ 1 ] W [ 2 ] = W [ 2 ] − α ⋅ d W [ 2 ] b [ 2 ] = b [ 2 ] − α ⋅ d b [ 2 ] \begin{align*} &W^{[1]}=W^{[1]}-\alpha·dW^{[1]}\\ &b^{[1]}=b^{[1]}-\alpha·db^{[1]}\\ &W^{[2]}=W^{[2]}-\alpha·dW^{[2]}\\ &b^{[2]}=b^{[2]}-\alpha·db^{[2]} \end{align*} W[1]=W[1]αdW[1]b[1]=b[1]αdb[1]W[2]=W[2]αdW[2]b[2]=b[2]αdb[2]
第三部反向传播求导的详细步骤:
d Z [ 2 ] = A [ 2 ] − Y d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T d b [ 2 ] = 1 m n p . s u m ( d Z [ 2 ] , a x i s = 1 , k e e p d i m s = T r u e ) d Z [ 1 ] = W [ 2 ] T d Z [ 2 ] ∗ g [ 1 ] ′ ( Z [ 1 ] ) / / 这里的 ∗ 是元素对应相乘 d W [ 1 ] = 1 m d Z [ 1 ] X T / / 这里的转置是因为 W [ 1 ] 是由 w i [ 1 ] T 组成的 d b [ 1 ] = 1 m n p . s u m ( d Z [ 1 ] , a x i s = 1 , k e e p d i m s = T r u e ) \begin{align*} &dZ^{[2]}=A^{[2]}-Y\\ &dW^{[2]}=\frac{1}{m}dZ^{[2]}A^{[1]T}\\ &db^{[2]}=\frac{1}{m}np.sum(dZ^{[2]},axis=1,keepdims=True)\\ &dZ^{[1]}=W^{[2]T}dZ^{[2]}*g^{[1]'}(Z^{[1]})//这里的*是元素对应相乘\\ &dW^{[1]}=\frac{1}{m}dZ^{[1]}X^{T}//这里的转置是因为W^{[1]}是由w_i^{[1]T}组成的\\ &db^{[1]}=\frac{1}{m}np.sum(dZ^{[1]},axis=1,keepdims=True)\\ \end{align*} dZ[2]=A[2]YdW[2]=m1dZ[2]A[1]Tdb[2]=m1np.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]g[1](Z[1])//这里的是元素对应相乘dW[1]=m1dZ[1]XT//这里的转置是因为W[1]是由wi[1]T组成的db[1]=m1np.sum(dZ[1],axis=1,keepdims=True)

参数随机初始化

神经网络的参数 w i [ l ] w_i^{[l]} wi[l] 和不能像逻辑回归一样,初始化为零,否则梯度下降算法就会无效。

也不要将隐藏层中的所有节点参数都初始化成一样的,否则每个节点都在做相同的运算,毫无意义。

W [ 1 ] = n p . r a n d o m . r a n d n ( ( n [ 1 ] , n [ 0 ] ) ) ⋅ 0.01 / / 高斯分布随机变量再乘以 0.01 b [ 1 ] = n p . z e r o s ( ( n [ 1 ] , 1 ) ) W [ 2 ] = . . . b [ 2 ] = . . . \begin{align*} &W^{[1]}=np.random.randn((n^{[1]},n^{[0]}))·0.01~//高斯分布随机变量再乘以0.01\\ &b^{[1]}=np.zeros((n^{[1]},1))\\ &W^{[2]}=...\\ &b^{[2]}=... \end{align*} W[1]=np.random.randn((n[1],n[0]))0.01 //高斯分布随机变量再乘以0.01b[1]=np.zeros((n[1],1))W[2]=...b[2]=...

通常情况下,会把参数随机初始化成很小很小的值,这也是乘以 0.01 0.01 0.01 的原因。

因为参数大的话, z z z 计算出来就会大, a a a 也会大,就会落在激活函数 σ ( z ) \sigma(z) σ(z) t a n h ( z ) tanh(z) tanh(z) 的平缓区域,就会降低梯度下降法的速度,甚至形成梯度消失问题。


http://www.ppmy.cn/devtools/116370.html

相关文章

甩锅笔记:好好的服务端应用突然起不来,经定位是无法访问外网了?测试又说没改网络配置,该如何定位?

在工作中、团队协作时,可能遇到的问题,如集成测试等场景。但是作为偏前端的全栈,锅从天上来,不是你想甩就能甩,尤其面对测试等比较强势的团体(bug创造者),你必须有强大的心理承受能力…

Flask-JWT-Extended登录验证, 不用自定义

"""安装:pip install Flask-JWT-Extended创建对象 初始化与app绑定jwt JWTManager(app) # 初始化JWTManager设置 Cookie 的选项:除了设置 cookie 的名称和值之外,你还可以指定其他的选项,例如:过期时间 (max_age)&#xff1…

DANN GRL

域自适应是指在目标域与源域的数据分布不同但任务相同下的迁移学习,从而将模型在源域上的良好性能迁移到目标域上,极大地缓解目标域标签缺失严重导致模型性能受损的问题。 介绍一篇经典工作 DANN : 模型结构 在训练阶段需要预测如下两个任务…

流行的微前端框架有哪些,适应场景是什么

以下是一些流行的微前端框架,各自的适用场景 1. Single-SPA 适用场景: 适用于需要将大型应用拆分为多个小型、独立应用的场景。支持多种框架的集成。 GitHub地址: Single-SPA Star数量: 约6.8k 2. qiankun 适用场景&#x…

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…

着色器ShaderMask

说明 实现一个渐变进度条,要求: 颜色渐变的过程是循序渐进的,而不是看起来像是将渐变条逐渐拉长了。 效果 源码 // 渐变进度条Stack(children: [// 背景色板Container(width: 300,height: 8,decoration: BoxDecoration(borderRadius: Bord…

Unity-物理系统-刚体加力

一 刚体自带添加力的方法 给刚体加力的目标就是 让其有一个速度 朝向某一个方向移动 1.首先应该获取刚体组件 rigidBody this.GetComponent<Rigidbody>(); 2.添加力 //相对世界坐标 //世界坐标系 Z轴正方向加了一个里 //加力过后 对象是否停止…

基于QT的C++中小项目软件开发架构源码

描述 基于QT信号槽机制实现类之间的交互调用通信&#xff0c;适用于使用不同枚举作为消息交互的类型场景&#xff0c;支持附带任意参数&#xff0c;代码使用方式参考前一篇文章 特性 仅需包含一个头文件Communicator.h&#xff0c;需要通信的业务类继承Communicator&#xf…