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

article/2025/10/8 22:25:14

神经网络(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://chatgpt.dhexx.cn/article/GsuYkZlg.shtml

相关文章

Java网络编程(一)网络的基本认知

前言 这是一个信息化的时代,在生活中,网络通信无处不在。比如发送短信,邮件,视频通话等。 以邮件为例子: ① 收件人: 相当于网络编程的ip地址端口号,定位到某一个具体的地方!只有找…

第四章 使用JAVA构建神经网络

• 构建一个神经网络 •激活函数 • Encog持久化 •在代码里使用Encog Analyst 这章将展示用Encog怎样构造前馈与简单递归神经网络,以及在最后部分怎样保存这些神经网络。创建神经网络类型使用BasicNetwork和BasicLayer这两个类,除了这两个类,还使用…

深入浅出讲解神经网络的种类及举例说明

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!个人主页:有梦想的程序星空个人介绍:小编是人工智能领域硕士,全栈工程师&a…

Java网络基础知识

目录 一,计算机网络 1,概念 2,计算机网络的主要功能 3,计算机网络分类 二,网络通信协议及接口 1,网络通信协议 2,网络通信接口 3,通信协议分层思想 4,协议分类 …

神经网络可以用来分类吗,神经网络如何实现分类

怎么用spss神经网络来分类数据 。 用spss神经网络分类数据方法如下:神经网络算法能够通过大量的历史数据,逐步建立和完善输入变量到输出结果之间的发展路径,也就是神经网络,在这个神经网络中,每条神经的建立以及神经…

BP神经网络JAVA实现详解

注:本文手动搬家自我的新浪博客点击打开链接 从2016年3月份左右,我的毕业设计开题答辩时间正好是AlphaGo大战李世石之日。还记得当时答辩PPT最末引用的图片还是这张: 李世石大战Google的AlphaGo 不过当时答辩情况并不理想,答辩组老…

Java网络编程--网络基础

文章目录 网络协议常用网络协议族(簇)(protocol)端口(port)常见知名端口动态端口 IP地址IP地址分类IPv4的分类IPv6子网掩码 网络协议 是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。为了使不同计算机厂家生产的计…

神经网络如何实现分类,神经网络基本概念

人工神经网络分类方法 从20世纪80年代末期,人工神经网络方法开始应用于遥感图像的自动分类。 目前,在遥感图像的自动分类方面,应用和研究比较多的人工神经网络方法主要有以下几种:(1)BP(BackP…

神经网络如何进行分类

1.首先搞清楚什么是感知机 如上图所示,输入为向量,经线性变换,再通过激活函数得到输出,这样一个完整的结构成为感知机。感知机是人工神经网络的最小单元,本质上由一个仿射变换接一个非线性变换组成。 上图wxb属于仿射变…

Java基础学习(17)网络编程

Java基础学习 一、 网络编程1.1 什么是网络编程1.2 常见的软件架构:1.3 网络编程的三要素1.4 IP1.4.1 InetAddress用法 1.5 端口号1.6 协议1.6.1 UDP协议1.6.1.1 UDP的三种通信方式 1.6.2 TCP协议1.6.2.1 TCP底层原理 一、 网络编程 1.1 什么是网络编程 解释&…

java简单的神经网络

运行环境:jre1.7 以下是神经网络的主体类 public class NeuralNetwork {int inputNodes;//输入层节点数int hiddenNodes;//隐藏层节点数int outputNodes;//输出层节点数double learningRate;//学习率double[][] weight_ih;//输入层与隐藏层之间的权重double[][] w…

java实现神经网络算法,java调用神经网络模型

如何用70行Java代码实现神经网络算法 。 如何用70行Java代码实现神经网络算法import.Random;publicclassBpDeep{publicdouble[][]layer;//神经网络各层节点publicdouble[][]layerErr;//神经网络各节点误差publicdouble[][][]layer_weight;//各层节点权重publicdouble[][][]la…

神经网络如何实现分类,神经网络分类特点区别

人工神经网络分类方法 从20世纪80年代末期,人工神经网络方法开始应用于遥感图像的自动分类。 目前,在遥感图像的自动分类方面,应用和研究比较多的人工神经网络方法主要有以下几种:(1)BP(Back …

Java神经网络(一)——Neuroph初次使用

Java神经网络 前言Neuroph框架Neuroph结构框架图Java API 及其类库说明(core nnet util) Neuroph简单案例实现下载必要的Neuroph jar包导入jar包找案例(在书中或者网上)运行解决方案 前言 学了好一阵子时间的神经网络,…

神经网络分类

人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统…

神经网络分类总结

1.人工智能、机器学习与深度学习 人工智能:努力将通常由人类完成的智力任务自动化。机器学习机器学习( machine learning)是人工智能的一个特殊子领域,其目标是仅靠观察训练数据来自动开发程序[即模型( mo…

神经网络分类四种模型,神经网络分类特点区别

神经网络有哪些主要分类规则并如何分类? 神经网络模型的分类人工神经网络的模型很多,可以按照不同的方法进行分类。其中,常见的两种分类方法是,按照网络连接的拓朴结构分类和按照网络内部的信息流向分类。 1按照网络拓朴结构分类…

【学习记录】神经网络三种主要类型

1.图结构 图网络是定义在图结构数据上的神经网络:①图中每个节点都由一个或一组神经元组成②节点之间连接可以有向可以无向③每个节点可接收来自相邻节点或自身的信息。 2.前馈神经网络 前馈神经网络中,把每个神经元接受信息的先后分为不同的组&#xf…

神经网络的类型分类和结构理解

一、序言 神经网络是模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。 在深度学习领域,神经网络就是我们深度学习的灵魂,如果我们想依靠算法实现一些功能,就必须依托不同的神经网络结构,所以很有必…

idea构建spark开发环境(基于maven)

目前Intellij IDEA对scala支持的比较好,本文使用idea构建spark开发环境。 1.准备工作 jdk版本,scala sdk环境(我的是jdk1.8,scala 2.1) scala官网下载地址:http://www.scala-lang.org/download/ 2.Intellij IDEA 下载地址ht…