一些神经网络基础知识归纳

news2025/4/17 23:38:20

神经网络(NN)复杂度

  • NN复杂度,多用NN层数和NN参数个数表示

在这里插入图片描述

如上图示

  • 空间复杂度
    • 层数=隐藏层的层数+1个输出层
      • 上图为2层NN
    • 总参数
      • 3*4+4 +4*2+2=26
  • 时间复杂度
    • 乘加运算次数
      • 3*4+4*2=20

指数衰减学习率

可以先用较大学习率,快速得到较优解,然后逐步减小学习率,使模型在训练后期稳定
指数衰减学习率 = 初始学习率 ∗ 学习率衰减 率 当前轮数 / 多少轮衰减一次 指数衰减学习率=初始学习率*学习率衰减率^{当前轮数/多少轮衰减一次} 指数衰减学习率=初始学习率学习率衰减当前轮数/多少轮衰减一次

激活函数

  • sigmoid

    • f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1
    • 易造成梯度消失
    • 输出非0均值,收敛慢
    • 幂运算复杂,训练时间长
  • Tanh函数

    • f ( x ) = 1 − e − 2 x 1 + e − 2 x f(x)=\frac{1-e^{-2x}}{1+e^{-2x}} f(x)=1+e2x1e2x
    • 输出是0均值
    • 易造成梯度消失
    • 幂运算复杂,训练时间长
  • Relu

    • f ( x ) = m a x ( x , 0 ) f(x)=max(x,0) f(x)=max(x,0)
    • 在正区间解决了梯度消失问题
    • 计算速度快
    • 收敛速度远快于Sigmoid和TanH
    • 缺点
      • 输出非0均值,收敛慢
      • Dead Relu问题:某些神经元可能永远不会被激活,导致相应的参数永远无法更新
  • Leaky Relu

    • tf.nn.leaky_relu(x)
    • f(x)=max(ax,x)
    • 不会有Dead Relu问题,但是实际操作中,并没有完全证明Leaky Relu总是好于Relu

    在这里插入图片描述

初学者建议

  • 首选Relu激活函数
  • 学习率设置较小值
  • 输入特征标准化
  • 初始参数中心化,即让随机生成的参数满足正态分布,且 m e a n = 0 , s t d d e v = 2 当前层输入特征个数 mean=0, stddev=\sqrt{\frac{2}{当前层输入特征个数}} mean=0,stddev=当前层输入特征个数2

损失函数Loss

预测值y与已知答案y_的差距

nn优化目标:loss最小

  • 均方误差 MSE
    m s e ( y _ , y ) = ∑ i = 1 n ( y − y _ ) 2 n mse(y\_,y)=\frac{\sum^n_{i=1}(y-y\_)^2}{n} mse(y_,y)=ni=1n(yy_)2

    loss_mse=tf.reduce_mean(tf.square(y_-y))
    
  • 交叉熵损失函数CE

    • Cross Entropy:表征两个概率分布之间的距离

    H ( y , y ) = − ∑ y _ ∗ l n y H(y_,y)=- \sum y\_*lny H(y,y)=y_lny

    tf.losses.categorical_crossentropy(y_,y)
    

    示例:二分类,已知答案y_=(1,0),预测y1=(0.6,0.4),y2=(0.8,0.2),哪个更接近标准答案?
    H 1 ( ( 1 , 0 ) , ( 0.6 , 0.4 ) ) = − ( 1 ∗ l n 0.6 + 0 ∗ l n 0.4 ) ≈ 0.511 H 2 ( ( 1 , 0 ) , ( 0.8 , 0.2 ) ) = − ( 1 ∗ l n 0.8 + 0 ∗ l n 0.2 ) ≈ 0.223 H_1((1,0),(0.6,0.4))=-(1*ln0.6+0*ln0.4)\approx0.511\\ H_2((1,0),(0.8,0.2))=-(1*ln0.8+0*ln0.2)\approx0.223 H1((1,0),(0.6,0.4))=(1ln0.6+0ln0.4)0.511H2((1,0),(0.8,0.2))=(1ln0.8+0ln0.2)0.223
    因为 H 1 > H 2 H_1>H_2 H1>H2,所有y2预测更准。

欠拟合与过拟合

欠拟合的解决方法

  • 增加输入特征项
  • 增加网络参数
  • 减少正则化参数

过拟合的解决方法

  • 数据清洗
  • 增大训练集
  • 采用正则化
  • 增大正则化参数

正则化

正则化在损失函数中引入模型复杂度指标,利用给w的加权值,弱化了训练数据的噪声,一般不正则化b

l o s s = l o s s ( y , y ) + R E G U L A R I Z E R ∗ l o s s ( w ) loss=loss(y_,y)+REGULARIZER*loss(w) loss=loss(y,y)+REGULARIZERloss(w)
L1正则化
l o s s L 1 = ∑ i ∣ w i ∣ loss_{L1}=\sum_i|w_i| lossL1=iwi
L2正则化
l o s s L 2 = ∑ i ∣ w i 2 ∣ loss_{L2}=\sum_i|w^2_i| lossL2=iwi2
正则化的选择

  • L1正则化大概率会使 很多参数变为零,因此该方法可通过稀疏参数,即减少参数的数量,降低复杂度
  • L2正则化会使参数很接近零但不为零,因此该方法可以通过减少参数的值的大小降低复杂度

参数优化器

整体优化流程

待优化参数w,损失函数loss,学习率lr,每次迭代一个batch,t表示当前batch迭代的总次数:

  1. 计算 t t t时刻损失函数关于当前参数的梯度 g t = Δ l o s s = ∂ l o s s ∂ ( w t ) g_t=\Delta loss=\frac{\partial loss}{\partial (w_t)} gt=Δloss=(wt)loss
  2. 计算 t t t时候一阶动量 m t m_t mt和二阶动量 V t V_t Vt
  3. 计算 t t t时刻的下降梯度 η t = l r ⋅ m t / V t \eta_t=lr·m_t/\sqrt{V_t} ηt=lrmt/Vt
  4. 计算 t + 1 t+1 t+1时刻参数: w t + 1 = w t − η t w_{t+1}=w_t-\eta_t wt+1=wtηt

注意:

一阶动量:与梯度相关的函数

二阶动量:与梯度平方相关的函数

神经网络训练时为了提高效率,每次喂入batch个数据,每个batch是 2 n 2^n 2n个数据

SGD 随机梯度下降

  • 常用的地图下降法
  • m t = g t m_t=g_t mt=gt
  • V t = 1 V_t=1 Vt=1

SGDM

  • 含momentum的SGD,在SGD基础上增加一阶动量
  • m t = β ⋅ m t − 1 + ( 1 − β ) ⋅ g t m_t=\beta·m_{t-1}+(1-\beta)·g_t mt=βmt1+(1β)gt
    • m t m_t mt表示各时刻梯度方向的指数滑动平均值
    • β \beta β的经验值为0.9
  • V t = 1 V_t=1 Vt=1

Adagrad

  • 在SGD基础上增加二阶动量
  • 可以对模型中的每个参数分配自适应学习率
  • m t = g t m_t=g_t mt=gt
  • V t = Σ τ = 1 t g τ 2 V_t=\Sigma^t_{\tau=1}g^2_\tau Vt=Στ=1tgτ2

RMSProp

  • 在SGD基础上增加二阶动量
  • m t = g t m_t=g_t mt=gt
  • V t = β ⋅ V t − 1 + ( 1 − β ) ⋅ g t 2 V_t=\beta·V_{t-1}+(1-\beta)·g_t^2 Vt=βVt1+(1β)gt2

Adam

  • 同时结合SGDM的一阶动量和RMSProp的二阶动量
  • m t = β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t m_t=\beta_1·m_{t-1}+(1-\beta_1)·g_t mt=β1mt1+(1β1)gt
    • 修正一阶动量的偏差 m t ^ = m t 1 − β 1 t \hat{m_t}=\frac{m_t}{1-\beta_1^t} mt^=1β1tmt
  • V t = β 2 ⋅ V t − 1 + ( 1 − β 2 ) ⋅ g t 2 V_t=\beta_2·V_{t-1}+(1-\beta_2)·g_t^2 Vt=β2Vt1+(1β2)gt2
    • 修正二阶动量的偏差 V t ^ = V t 1 − β 2 t \hat{V_t}=\frac{V_t}{1-\beta_2^t} Vt^=1β2tVt

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

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

相关文章

KingbaseES V8R3数据库运维案例之---不完整的启动包(incomplete startup packet)复现

案例说明: 在KingbaseES V8R3数据库的sys_log日志中,出现以下故障信息“不完整的启动包(incomplete startup packet)”日志信息。本案例复现此日志信息发生的原因。 如下图所示,日志信息: 适用版本: KingbaseES V8R3 1…

计算最大公约数和最小公倍数被Java程序员用代码写出来啦

沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言 嘿,怎么突然讲到最大公约数了? 这么想你肯定是没有好好阅读前面章节中讲到的RSA算法,对于与欧拉结果计算的互为质数的公钥e,其实就需…

树莓派系统安装,网络配置,系统配置

如何安装树莓派的系统 以及 树莓派新系统SSH连接被拒绝的解决方法 1. 烧录方式1(官方,简单) 在下面网站下载 https://www.raspberrypi.com/software/ 打开以后选64位系统 选择安装的u盘 设置ssh,WiFi,登录密码等…

MySQL高级【表级锁】

1:表级锁1.1:介绍表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、 InnoDB、BDB等存储引擎中。 对于表级锁,主要分为以下三类: 表锁元数据锁&#xff0…

PLC常见的输入设备及其接线方式列举

PLC常见的输入设备有按钮、行程开关、接近开关、转换开关、拨码器、各种传感器等,输出设备有继电器、接触器、电磁阀等。下面,我们来详细看看PLC如何与这些设备正确地连接输入和输出线路。1.PLC与主令电器类设备的连接下图是PLC与按钮、行程开关、转换开…

现代C++并行与并发笔记 附C++17线程池实现项目实战

文章目录让程序在特定时间休眠启动和停止线程互斥量(mutex)进行延迟初始化——std::call_once将执行的程序推到后台——std::async信号量(condition_variable)C11 线程池前置知识返回值类型推导 result_of 和 invoke_resultpackag…

天翼物联获中国信通院2022 AIoT先锋企业

近日,由中国信息通信研究院组织开展的2022 AIoT先锋企业评选活动成果发布,中国电信天翼物联凭借为AIoT发展作出的积极贡献获“2022 AIoT先锋企业”,是唯一获得该奖项的通信企业。 2022 AIoT先锋企业评选活动由中国信息通信研究院组织开展&…

IDEA 下载依赖包源码报错Sources not found for: org.springframework.cloud:XXX

IDEA 在使用某些类方法想看下源码时,由于只有 class 反编译的类文件,没有原始 Java 文件,想要将源码下载下来,右下角一直报一个错误 Cannot download sources Sources not found for:XXX,很是烦恼,怎么解决…

数据结构---线性表课后习题详解(朱昌杰编著)

刘佳瑜*,王越 *, 黄扬* , 张钊* (淮北师范大学计算机科学与技术学院,安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. 🌞欢迎来到数据结构的世界 🌈博客主页&#xff1…

【Docker】docker部署前后端分离项目( 前:nginx + vue 后:springboot+ redis + mysql)

目录一.安装docker二.docker安装和配置nginx1.拉取nginx2.创建临时nginx容器3.从nginx容器复制 nginx.conf 文件到宿主机4.删除临时nginx容器5.启动真正的nginx容器6.查看是否挂载成功7.配置nginx.conf 和 vue的包放到指定位置三 docker安装部署redis1.安装redis2.部署redis四 …

如何计算结构体的大小?结构体内存对齐【C语言】

今天我们来讲讲结构体的大小如何来计算 其中涉及到一个结构体中的热门考点:结构体内存对齐 话不多说,开始学习! 要想计算结构体的大小,首先要了解结构体的对齐规则。 目录 结构体内存对齐规则 举例 为什么存在内存对齐? 如…

测试用例该怎么设计?—— 日常加更篇(上)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

火山引擎 DataTester 升级:降低产品上线风险,助力产品敏捷迭代

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 在企业竞争加剧的今天,精益开发和敏捷迭代已成为产品重要的竞争力。如何保障每一次 Feature 高效迭代与安全,如何快速实现面对不同用户的精细化运营…

Java设计模式——单例模式

目录 一、设计模式介绍 二、设计模式类型 三、单例设计模式介绍 单例设计模式八种方式 (一)饿汉式(静态常量) (二)饿汉式(静态代码块) (三) 懒汉式(线程…

【Flink系列】部署篇(二):独立部署高可用Flink集群实战

服务器操作系统:centos7本机操作系统:MacFlink version: 1.15JDK version: java11HA service: ZookeeperFile System: NFS 资源分配: iphostnamerole10.250.0.1main0JM10.250.0.2main1JM10.250.0.3main2JM10.250.0.4worker1TM10.250.0.5wor…

Spring Cloud Eureka的使用

Spring Cloud Eureka 🐻 一个服务注册与发现的组件 🐻🐻🐻🐻🐻🐻ZT😄🐻🐻🐻🐻🐻🐻🐻🐻…

SAP S/4HANA 采购订单处理操作详解

SAP S 4HANA Cloud 被 IDC 评为全球 SaaS 和云 ERP 系统领导者。SAP S4HANA Cloud是一套接近于零配置的系统,基于最佳业务实践的配置已经内嵌在标准版本中,可以让购买企业在第一时间内获得最全面的解决方案。本文就以其中最为常见的采购订单创建及处理流…

一页PPT自动生成短视频的研究

希望通过一些技术,将以前自己讲过的PPT转换成有解说的短视频,从而进行一些分发 旁白到语音 从文字转换成语音我们首先想到的就是TTS,这其中我也是用了各式各样的TTS,发现发音电子音非常强,听听起来很不舒服。后来发现…

Spring 事务和事务的传播机制

1.Spring 中事务的实现方式Spring 中的操作主要分为两类: 编程式事务 (了解)声明式事务编程式事务就是手写代码操作事务, 而声明式事务是利用注解来自动开启和提交事务. 并且编程式事务用几乎不怎么用. 这就好比汽车的手动挡和自动挡, 如果有足够的的钱, 大部分人应该都会选择自…

NPDP认证|如何实现产品的组合管理?

随着企业中研发项目类型和数量的增多,涉及的范围越来越宽广,内容越来越复杂,时效性也越来越强,传统的分散式的项目管理思想已经很难满足企业的需求。 为了使技术和资源能够得到有限的配置和利用,企业就需要把各种类型的研发项日进行有机的结合。 组合管理很重要吗? 答案是勿庸…