当前位置: 首页 > news >正文

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

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

事先规定:

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) 的平缓区域,就会降低梯度下降法的速度,甚至形成梯度消失问题。

相关文章:

  • 基于微信小程序的旧衣回收系统
  • Vue.js组件开发
  • 如何将精益思维应用于智能音箱的产品设计?
  • 如何在算家云搭建MVSEP-MDX23(音频分离)
  • 【C++】set详解
  • 如何选择合适的跨境网络专线?
  • #git 问题failed to resolve head as a valid ref
  • RabbitMQ 实验入门
  • 【Ubuntu】DNS设置不生效/重启被重置
  • TypeSctipt学习第二篇
  • uni-app之旅-day01-home页
  • 第18周 3-过滤器
  • 关于公司小程序项目在登录流程获取token并全局使用的梳理(学习篇)
  • 【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】
  • 25 基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • co模块的前端实现
  • js写一个简单的选项卡
  • mysql 5.6 原生Online DDL解析
  • passportjs 源码分析
  • Spark RDD学习: aggregate函数
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Terraform入门 - 3. 变更基础设施
  • vue--为什么data属性必须是一个函数
  • XForms - 更强大的Form
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 基于webpack 的 vue 多页架构
  • 设计模式走一遍---观察者模式
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 栈实现走出迷宫(C++)
  • 【干货分享】dos命令大全
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)llvm ir转换过程
  • (7) cmake 编译C++程序(二)
  • (function(){})()的分步解析
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (纯JS)图片裁剪
  • (分布式缓存)Redis持久化
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot教学评价 毕业设计 641310
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)汇编语言——简单程序
  • (转)3D模板阴影原理
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .Net中ListT 泛型转成DataTable、DataSet