神经网络知识点总结_经典神经网络

神经网络知识点总结_经典神经网络本文基于文章,对神经网络的知识点做一个总结,可能不会对某些概念性的东西做详细介绍,因此需要对神经网络有基本的了解。FNN:前馈神经网络  神经网络的最基本也是最经典的形式,结果包括输入层,隐藏层和输出层,根据隐藏层的多少,分为shallownetwork和deepnetwork(deeplearning由此而来)Activationfunction  在神经网络的每

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

本文基于文章“Deep Learning:Technical introduction”,对神经网络的知识点做一个总结,不会对某些概念性的东西做详细介绍,因此需要对神经网络有基本的了解。以下是一些符号定义。

notation

FNN:前馈神经网络

FNN
  神经网络的最基本也是最经典的形式,结构包括输入层,隐藏层和输出层,根据隐藏层的多少,分为shallow networkdeep network(deep learning由此而来)

Activation function

  在神经网络的每一层中(不包括输出层),当前层的输出并不是直接作为下一层的输入,而是要经过一个函数变换,这个函数被称为激活函数(Activation function)。
  常见的激活函数:

  1. sigmoid函数 g(x)=11+ex ,由于该函数很容易饱和,从而导致训练过程中梯度变化缓慢的问题,因此,除了在RNN-LSTM中,一般不再作为激活函数使用(但是可以作为输出层,将结果映射为概率)。导数为 g(x)=g(x)(1g(x))

sigmoid

2.双曲正切函数 g(x)=tanh(x)=1e2x1+e2x ,相比sigmoid函数,它是关于原点对称的,在某些情况下,这个对称性能够带来比sigmoid更好的性能。导数为 tanh(x)=1tanh2(x)

tanh

3.Relu:Rectified Linear Unit,线性整流单元,取值范围为 [0,+) ,函数形式: Relu(x)=max(0,x) ,这是目前使用最广的激活函数,它有两种变体:leaky ReluELU-Exponential Linear Unit

Relu

4.leaky Relu:相比较Relu,当x小于0时,它并不取值0,而是去一个很小的系数与x的乘积,这样做的好处是,可以避免当x小于0时,导致输出恒为0,进而导致神经元”死掉”的问题, g(x)=αx  if  x0  else  g(x)=x ,一般地, α0.01

leaky Relu

5.ELU:leaky Relu的变体,当x小于0时,不再是一个线性函数: g(x)=ex1  if  x0  else  g(x)=x

ELU

Input Layer

  FNN的输入层接受的是一个n维向量,一般会对训练集进行中心化处理,即每个样本减去整个训练集的均值,特别地,当不同维度的连续特征量级不一样时,还需要做标准化归一化处理。标准化和归一化的方式也有很多种,参见:标准化和归一化

Fully connected layer

  FNN中,隐藏层相邻两层之间,前一层的所有单元都会有一个到下一层所有单元的输出,这样的层称为全连接层,后一层某个单元接受到的输入就是前一层所有单元的值的加权和。

Output layer

  输出层的值即最后一层隐藏层经过一个output function得到的。输出层可能有一个单元也可能有多个单元

Loss function

  损失函数是用来评估我们的预测和真实数据之间的差距,从而来优化我们的模型参数,因此,我们要做的就是最小化损失函数。在回归问题中,损失函数即均方误差(一般情况下);在分类问题中,损失函数即交叉熵。

Regularization

  正则化是机器学习中一种重要的技术,它经常用来防止模型过拟合(L2,L1),当然,也可以针对不同的应用场景设置不同的正则化项来完成其他的功能的(譬如,吉洪诺夫正则化)。

L2 regularization

  L2正则时使用最多的正则化技术,它通过对目标损失函数增加一个模型参数的L2范数(欧拉范数)的罚项来完成,, λ 称为正则化系数,一般取值为 104102 。它有一个贝叶斯解释:L2正则可以理解为一个服从高斯分布的先验加权,即我们的似然函数不再是 P(Y|X) 而是一个具有服从高斯分布的先验 P(Y|X)P(X) 。L2正则最主要的应用就是岭回归。

L(θ)=L+λimθi2

L1 regularization

  L1正则。它通过对目标损失函数增加一个模型参数的L1范数(绝对值)的罚项来完成。常用的主要有LASSO

L(θ)=L+λimθi1

L1和L2

  相比于L2更倾向于较小的模型参数,L1的解更倾向于稀疏解,即多个参数都为0。如果我们的损失函数是范数和,通过公式可以看到L2范数更关注于大于1的误差(平方会扩大该值),而L1更关注小于1(相比于L2的平方会缩小小于1的误差)的参数,因此对于离群点,L1并不会给该点赋予高的权重,结果影响不会波动的太大,而L2就会受到离群点的干扰。因此,L1正则又被称为鲁棒性正则。

Clipping

  参数截断,一般应用于l2正则,通过设置一个阈值C,在迭代过程中,如果参数的L2范数大于了C,则将其重新设置为C:

if θ2>Cθ:=θCθ2

Dropout

  神经网络中正则化技术,称为随机失活,即在网络的反向传播过程中,在每一个隐藏层(也有应用在输入层的)随机选择一定数量(一般地,隐藏层取0.5,输入层取0.2)的神经元,让它‘死掉’,即不接受输入也不给出任何输出。当然,此时每一层的结果在上一层输入经过激活函数之后,还要乘一个系数,它的值等于随机失活的比例:

h(v)f=m(v)fg(a(v)f)

  可以证明,这样做之后与未使用Dropout的结果的期望是相同的。Dropout在批正则化出现之前,一直是神经网络中效果最好的正则化技术。

Dropout

Batch Normalization

  在每一层接受上一层的输出作为输入之前,对输入数据进行标准化,该方法提出的作者认为,这个操作在卷积层之后执行,然后送入激活函数,但是实践表明,在激活之后进行标准化结果会更好。
  我们知道在FNN中,参数的初始化和学习率的设置对于模型的最终结果有很大影响,因此我们需要十分小心的去设置和微调这些超参数,并且随着网络的加深,梯度弥散的问题越来越严重,但是有了BN,这些东西我们都不用太关心就能达到很好的效果。
  BN在标准化后,为了能够还原原始的分布,在一层的每个神经元新增两个参数,这两个参数也要在反向传播的过程中优化,详细介绍参见原文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Backpropagation

  反向传播就是神经网络中的梯度下降法,我们在前面通过前向传播,将数据输入,得到网络的预测输出,然后,我们根据预测值和实际值的区别,将梯度从网络输出层反向传递至输入层,并在此过程中优化模型参数,降低误差的过程,称为反向传播。它是当前神经网络最成功的训练方法。
wljk(l1)klj
bljlj
zljlj

zlj=kwljkal1k+blj



aljlj



alj=σ(zlj)σ



:L=12nxy(x)y^(x)2




ljδlj=CzljC

推导:
  1.计算最后一层神经网络产生的误差:

δlj=LzLj=LaLjaLjzLj=ajLσ(zLj)




δL=aLσ(zL),

  2.递推每一层的误差:

δlj=Czlj=kCzl+1kzl+1kaljaljzlj


=kδl+1k(i(wl+1kiali+bl+1i))aljσ(zlj)


=kδl+1kwl+1kjσ(zlj)

δl=((wl+1)Tδl+1)σ(zl),

  3.计算权重的梯度:

wljk=Cwljk=Czljzljwljk=δlji(wljiali+bli)wljk=al1kδlj

  4.计算偏置的梯度:

blj=Cblj=Czljzljblj=δlji(wljiali+bli)blj=δlj

如果使用了BN操作,则BN的 γβ 参数也要同时更新,具体的推导公式见上述的论文。

Gradient method

  使用梯度优化的方法有很多,在使用相关梯度法求解时,根据每次带入网络的数据量的不同分为full batch(每次迭代用全量样本),mini-batch和stochastic(每次迭代用一个样本),后两者用的较多。
  优化算法的详解介绍,参见另一篇博文 最全的机器学习中的优化算法介绍

Weight initialization

  在没有任何正则化的情况下,训练一个神经网络是十分困难,因为参数初始化的差异会给结果带来很大的波动(还好我们有了dropout和BN),仍然需要注意的是,不同于机器学习中的分类或者回归问题,我们不能将参数初始化为0(不然所有的神经元永远都没得输出,就没得玩了),当然,也不能将其初始化的过大,一般地,我们采用以下公式初始化参数:

[wl]init=6Fl+Fl+1×N(0,1)Fll

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234076.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 普通交换机可以poe供电吗_poe供电交换机和普通交换机区别

    普通交换机可以poe供电吗_poe供电交换机和普通交换机区别交换机相信大家都比较熟悉,一般说的交换机指的普通交换机,也就是最常见的那种。普通交换机可以传输交换数据,或者局域网内的多个电脑可以相互通信。PoE交换机指可以供电的交换机,跟普通交换机的区别是,它不仅而已传输交换数据,还可以同时给与它连接的设备供电,这样的目的是可以免去额外的电源布线,不用刻意请电工师傅。可能有朋友会问,普通交换机能否改成PoE供电的,如何将普通交换机变成PoE交换机?接下来我们就跟随飞畅科技的小编一起来详细看看吧!普通交换机和poe交换机虽都是交换机,在内部结构有区别的,PoE交换机里

    2022年10月4日
    3
  • robots书写说明:

    robots书写说明:

    2021年10月9日
    57
  • 使用jquery判断是否为数字

    使用jquery判断是否为数字

    2021年7月18日
    67
  • 钩子函数介绍(vue11个钩子函数)

    钩子(hook)又称钩子函数,是在一个有序的周期中的某些特殊时刻,系统内部预先设置好的函数,当系统周期到达指定时刻会自动执行该’钩子’。钩子函数的函数体内容由开发者编写,这绐了幵发者在不同阶段做某些处理的机会。钩子是很多开发语言,前后端都会涉及的概念,是一种形象的说法,源于Windows的消息处理机制。通过设置钩子,应用程序在消息过去前将其钩住,阻止其传递,然后优先处理开发者的自定义内容,俗称’下个钩子’。系统:初始化..钩子ready()运行..钩子beforeEnd(…

    2022年4月12日
    74
  • 基于stm32四轮小车简易PID控制

    基于stm32四轮小车简易PID控制看前需知:作者本人使用的是四个普通的TT电机加编码器+增量式PID,适合PID初学者,但是需要对PID和增量式PID有一定的认知,本篇未有详细介绍,以代码应用为主,大佬勿喷。文章目录一、粗谈PID?二、使用的硬件设备三、软件设计四、关键代码1.TIM1定时器:2.TIM2编码器模式示例:3.电机初始化:4.TIM8PWM输出:5.PID:6.中断服务函数:总结*云中何曾落羽,踏遍三岛寻声*一、粗谈PID?PID在生活中很常见,举个例子。例如生活中,一个加热器需要对某个物体进行恒温控制,但是由于某

    2022年5月27日
    47
  • request对象、response对象、session对象

    request对象、response对象、session对象仅仅是一些简单知识点的罗列,当做笔记,想具体学习的话,还是要找专业的书籍看看request对象作用:获取用户提供的信息语法:是实现了ServletRequest接口类的一个实例使用表单向服务器的某个JSP页面提交信息常用方法:设置编码方式:例如(用来防止汉字乱码)request.setCharacterEncoding(“gb2312”);同效果:Stringstr=r…

    2022年6月9日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号