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

AI学习记录 - 模型训练中怎么反向传播以及学习率的影响

画图不易,有用点赞

解释反向传播中具体的运行

假设我们有个简易的神经元连接,如下

在这里插入图片描述

目的是求解 绿色w = 5 权重对结果 60的影响程度,因为我们得知道 绿色w = 5 对结果的影响程度和影响方向,才好将 绿色w = 5 是增大还是缩小,增大多少或者减少多少。
我们知道神经元其实y = w * x + b,多层之后,如图所示

在这里插入图片描述

根据模型直接得出的结果是 60,但是假设真实值是 90,那么60太小了,我们需要增大 绿色w=5 的权重,让 60慢慢接近90,怎么做呢?

我们知道了求影响程度,也是一级一级的求,求的是当前公式对下一级的影响程度也就是导数,最后相乘叠加起来,上图知道 w = 5 对 60 的影响程度是 500,当 绿色w = 5 增加 1 , 60 变成 560, 在实际训练过程中,500太大了,也就是直接求出来的导数太大,我们会先使用学习率进行缩小计算:

500 * 0.01(学习率) = 5
5(原权重) + 5 (变化程度) = 10 (新权重)

这里有个概念比较费解,w对60的影响程度是500,那500*学习率就等于当前权重的变化?这其实有点费解,我的意思是记住就行,原权重的变化=导数*学习率

我们将 10 覆盖绿色框的 5 ,这不就更新权重了吗,更新权重之后,又将 红色框 2 输入,得出 1060, 哇。。。。。。,学习率太大了,可以变成0.0001试试。

在这里插入图片描述

在实际的场景中,计算公式种类铁定不会这么单一,会融合了超级多的复杂的数学公式,这就涉及到复合多元函数求导数了,我们要依据现行的导数公式进行拆分,拆分成n个小公式,分别对n个小公式求导,然后将所有的导数相乘,就可以得出任意一个权重和偏置对结果的影响程度,然后调整它。

分割线——————————

重磅结论:大模型本质是个巨大的复合的多元的数学公式,数学公式是由无数个简单的《单元函数》组成,我将单元函数定义为有独立导数公式的函数,单元函数通过树形结构组成巨大公式,最顶部的节点就是所有单元函数的汇合,通过将某个叶子结点的常量变成变量,从而求出这个常量所在的位置对于结果的影响,也就是所在位置每增加1或者减少1,对顶部节点的影响程度。

什么是《单元函数》?
拥有独立求导公式,不可继续拆分的函数,也就是非复合函数就是《单元函数》。

1.y=c(c为常数) y'=02.y=x^n,y'=nx^(n-1)3.y=a^x,y'=a^xlna;
y=e^x,y'=e^x;
4.y=logax,y'=logae/x;
y=lnx,y'=1/x;
5.y=sinx,y'=cosx;
6.y=cosx,y'=-sinx;
7.y=tanx,y'=1/cos^2x;
8.y=cotx,y'=-1/sin^2x;
9.y=arcsinx,y'=1/1-x^210.y=arccosx,y'=-1/1-x^211.y=arctanx,y'=1/1+x^2

具体怎么求解其中一个变量对结果的影响程度?

再庞大的数学公式,也是由一个个单元公式组成,单元公式由《计算方式》和《单个或多个值》两部分组成,计算方式是固定的,值有个特性就是可以变,把值当成是一个可以变的东西,就是变量例如1+1=y 变成x+1=y,把它变成可变的x,那y就可以对x求导,求导就是求x对y的影响程度。
假设对其中一个单元公式求导,每一个单元公式都有其对应的导数公式,x输入进单元公式,输出y,那么将x输入进单元公式对应的导数公式,就得到了一个导数,也就是得到了当前公式对下一级的影响程度。一般一个公式会有很多的变量但是不需要拆分的情况,我们就直接把当前公式的上一级的输出当成是当前的公式的常量值即可。下面是一小段代码:
        sum_h1 = self.w1 * x[0] + self.w2 * x[1] + self.b1h1 = sigmoid(sum_h1)sum_h2 = self.w3 * x[0] + self.w4 * x[1] + self.b2h2 = sigmoid(sum_h2)sum_o1 = self.w5 * h1 + self.w6 * h2 + self.b3o1 = sigmoid(sum_o1)y_pred = o1# --- Calculate partial derivatives.# --- Naming: d_L_d_w1 represents "partial L / partial w1"d_L_d_ypred = -2 * (y_true - y_pred)# Neuron o1d_ypred_d_w5 = h1 * deriv_sigmoid(sum_o1)d_ypred_d_w6 = h2 * deriv_sigmoid(sum_o1)d_ypred_d_b3 = deriv_sigmoid(sum_o1)d_ypred_d_h1 = self.w5 * deriv_sigmoid(sum_o1)d_ypred_d_h2 = self.w6 * deriv_sigmoid(sum_o1)# Neuron h1d_h1_d_w1 = x[0] * deriv_sigmoid(sum_h1)d_h1_d_w2 = x[1] * deriv_sigmoid(sum_h1)d_h1_d_b1 = deriv_sigmoid(sum_h1)

画图不易,有用点赞

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《黑神话悟空》幽魂无脑攻略分享
  • Axure设计之Web端交互元件库
  • 设计模式之工厂模式和策略模式的区别
  • 深入垃圾回收:理解GC的核心算法与实现
  • 移位操作存储多个布尔值或标志位
  • 自闭症儿童上普校,会面临霸凌吗?
  • Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2.2
  • 【经验分享】CANOPEN协议驱动移植(基于CANfestival源码架构)
  • Unity3D DOTS中ECS核心架构详解
  • 华为OD机试 - 数大雁(Java 2024 E卷 100分)
  • 指针的一些细节补充———C语言
  • Python 如何操作 Excel 文件(openpyxl, xlrd)
  • 基于STM32开发的智能农业监测与控制系统
  • 【深度学习】迭代次数 vs bs? 迭代次数 vs epoch
  • Vue.js 样式绑定
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 4. 路由到控制器 - Laravel从零开始教程
  • bootstrap创建登录注册页面
  • CentOS 7 修改主机名
  • IndexedDB
  • JDK 6和JDK 7中的substring()方法
  • js
  • Linux快速复制或删除大量小文件
  • MD5加密原理解析及OC版原理实现
  • mysql innodb 索引使用指南
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • node和express搭建代理服务器(源码)
  • Sass 快速入门教程
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 后端_MYSQL
  • 力扣(LeetCode)357
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 免费小说阅读小程序
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端面试之CSS3新特性
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​用户画像从0到100的构建思路
  • # Redis 入门到精通(一)数据类型(4)
  • #Linux(权限管理)
  • (06)Hive——正则表达式
  • (2)MFC+openGL单文档框架glFrame
  • (30)数组元素和与数字和的绝对差
  • (39)STM32——FLASH闪存
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (八)Flink Join 连接
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (六)Hibernate的二级缓存
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (自用)交互协议设计——protobuf序列化
  • ***详解账号泄露:全球约1亿用户已泄露
  • *2 echo、printf、mkdir命令的应用
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .chm格式文件如何阅读
  • .h头文件 .lib动态链接库文件 .dll 动态链接库