【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】神经元和人工神经网络

本文主要是介绍【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】神经元和人工神经网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

神经元

生物神经元:
在这里插入图片描述

平时处于抑制状态,当接受信息量达到一定程度后进入兴奋状态。

人工神经元:
在这里插入图片描述

一个人工神经元大致有两个步骤:
一是收集信息,如上图中 x 1 , ⋯ , x d x_1,\cdots,x_d x1,,xd表示神经元可以接受的外界信号,对这些信号进行加权汇总(不同外界信号对神经元作用的权重不同,即 w 1 , ⋯ , w d w_1,\cdots,w_d w1,,wd),最后加上用来调节阈值的偏置 b b b,得到上图中的汇总信息 z z z
二是将加权汇总的信息 z z z经过一个激活函数最后得到神经元的活性值 a a a
实质上人工神经元就是一个简单的线性模型。

激活函数

对不同类型的人工神经元,其一般只在激活函数的设计上有所不同,但是要将汇总信息映射到对应的区间内,必须要求激活函数具有以下性质:

  • 激活函数必须是连续可导(允许少数点上不可导)的非线性函数:可导的激活函数可以直接利用数值优化的方法(例如梯度下降)来学习网络参数。
  • 激活函数及其导函数要尽可能的简单:这样有利于提高网络计算效率。
  • 激活函数导数的值域要在一个合适的区间内:值域区间不能太大也不能太小,否则会影响训练的效率和稳定性。
  • 激活函数应该能够反应汇总信息的大小:也就是说如果z越小,激活函数应该尽可能更加地反映出z小所对应的状态。
  • 大多数的激活函数都是单调递增的。

常用的激活函数有以下三类:
在这里插入图片描述

S型函数

较为典型的就是之前说过的Logistic函数
σ ( x ) = 1 1 + exp ⁡ ( − x ) \sigma(x)=\frac{1}{1+\exp(-x)} σ(x)=1+exp(x)1
此外还有tanh函数,他的值域在 ( − 1 , 1 ) (-1,1) (1,1)之间
tanh ⁡ ( x ) = exp ⁡ ( x ) − exp ⁡ ( − x ) exp ⁡ ( x ) + exp ⁡ ( − x ) \tanh(x)=\frac{\exp(x)-\exp(-x)}{\exp(x)+\exp(-x)} tanh(x)=exp(x)+exp(x)exp(x)exp(x)
在这里插入图片描述

上述两个激活函数存在以下关系:
tanh ⁡ ( x ) = 2 σ ( 2 x ) − 1 \tanh(x)=2\sigma(2x)-1 tanh(x)=2σ(2x)1
通常情况下,只要不是要求神经元输出结果一定要是正的,最好选择tanh函数来代替Logistic函数,因为tanh函数在优化上更好。

S型函数的性质:

  • 是饱和函数:意思是说S型函数两端(横坐标趋向于正无穷和负无穷的两端)的梯度都是接近于0的
  • tanh函数是零中心化的,而logistic函数输出恒大于0 :非零中心化的输出会使得其后一层的神经元输入发生偏置偏移(bias shift),并进一步使得梯度下降收敛速度变慢(没搞明白)
斜坡函数

典型的斜坡函数是ReLU函数(修正的线性单元)
R e L U ( x ) = max ⁡ ( 0 , x ) \mathrm{ReLU}(x)=\max(0,x) ReLU(x)=max(0,x)
在这里插入图片描述

ReLU函数是一般神经网络的首选函数

ReLU函数的性质:

  • 计算上更加高效
  • 生物学合理性:单侧抑制(当神经元处于抑制状态时不区分抑制程度)、款兴奋边界(当神经元处于兴奋状态时区分兴奋的程度,即有多兴奋)
  • 在一定程度上缓解梯度消失问题

由于ReLU函数单侧抑制的性质,假如输入数据信息全部处于小于0一侧,那么ReLU函数的输出将变成0,对应的导数(梯度)也是0,从而无法更新参数,导致该神经元一直处于非激活状态,一直输出0,这就是所谓的死亡ReLU问题(Dying ReLU Problem)
为了解决这个问题,提出了Leaky ReLU函数:
L e a k y R e L U ( x ) = { x i f x > 0 γ x i f x ≤ 0 = max ⁡ ( 0 , x ) + γ min ⁡ ( 0 , x ) \mathrm{LeakyReLU}(x)=\left\{\begin{aligned} &x &if\ \ x>0\\ &\gamma x &if\ \ x\leq0 \end{aligned}\right.=\max(0,x)+\gamma\min(0,x) LeakyReLU(x)={xγxif  x>0if  x0=max(0,x)+γmin(0,x)
在这里插入图片描述

同样ReLU函数也是非零中心化的函数,基于此又提出了近似的零中心化的非线性函数
E L U ( x ) = { x i f x > 0 γ ( exp ⁡ ( x ) − 1 ) i f x ≤ 0 = max ⁡ ( 0 , x ) + min ⁡ ( 0 , γ ( exp ⁡ ( x ) − 1 ) ) \mathrm{ELU}(x)=\left\{\begin{aligned} &x&if\ \ x>0\\ &\gamma(\exp(x)-1)&if\ \ x\leq0 \end{aligned}\right.=\max(0,x)+\min(0,\gamma(\exp(x)-1)) ELU(x)={xγ(exp(x)1)if  x>0if  x0=max(0,x)+min(0,γ(exp(x)1))
在这里插入图片描述

除了这些之外,还有一个对ELU函数进行处理,使其尽可能接近ReLU函数的版本,也可以说是ReLU函数的平滑版本,叫做Softplus函数
S o f t p l u s ( x ) = log ⁡ ( 1 + exp ⁡ ( x ) ) \mathrm{Softplus}(x)=\log(1+\exp(x)) Softplus(x)=log(1+exp(x))
在这里插入图片描述

复合函数

复合激活函数都比较复杂,下面介绍几种

Swish函数

一种自门控(Self-Gated) 激活函数
s w i s h ( x ) = x σ ( β x ) \mathrm{swish}(x)=x\sigma(\beta x) swish(x)=xσ(βx)
在这里插入图片描述

其中 σ \sigma σ函数就是上面提到的Logistic函数,由于 σ \sigma σ函数取值在 ( 0 , 1 ) (0,1) (0,1)之间,近似门控(gate,有0或1两种状态),而 σ \sigma σ函数的取值不只有这两种状态,而是在区间中取值,假如说对于式子 x σ ( x ) , σ ( x ) = 0.5 x\sigma(x),\sigma(x)=0.5 xσ(x),σ(x)=0.5,代表的意思就是只允许一半的信息通过,这种就是所谓的软门控(soft-gate),而所谓自门控(self-gate),只是为了强调信息是由传入的信息 x x x本身来控制的。
对于上式中的 β \beta β用来控制门控允许通过信息的多少,可以参照上图进行理解,在 β \beta β的不同取值下,图像在上图红色实线( β = 100 \beta=100 β=100)到黄绿色点线( β = 0 \beta=0 β=0)之间变换。

高斯误差线性单元(Gaussian Error Linear Unit,GELU)

G E L U ( x ) = x P ( X ≤ x ) \mathrm{GELU}(x)=xP(X\leq x) GELU(x)=xP(Xx)
其中 P ( X ≤ x ) P(X\leq x) P(Xx)是高斯分布 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)的累积分布函数,也是一个S型函数。 μ , σ \mu,\sigma μ,σ为超参数,一般令 μ = 0 , σ = 1 \mu=0,\sigma=1 μ=0,σ=1
由于高斯分布的累积分布函数为S型函数,因此GELU可以通过下面的公式用Tanh函数或者Logistic函数来近似替代:
G E L U ( x ) ≈ 0.5 x ( 1 + t a n h ( 2 N ( x + 0.044715 x 3 ) ) ) G E L U ( x ) ≈ x σ ( 1.702 x ) \begin{aligned} &\mathrm{GELU}(x)\approx0.5x(1+\mathrm{tanh}(\sqrt{\frac{2}{N}}(x+0.044715x^3)))\\ &\mathrm{GELU}(x)\approx x\sigma(1.702x) \end{aligned} GELU(x)0.5x(1+tanh(N2 (x+0.044715x3)))GELU(x)xσ(1.702x)

人工神经网络

人工神经网络由大量神经元和人工神经网络以及它们之间的有向连接构成。构建人工神经网络需要考虑三个方面:

  • 神经元的激活规则:神经元输入到输出间的映射关系,一般为非线性函数(激活函数)
  • 网络的拓扑结构:不同神经元直接的连接关系
  • 学习算法:通过训练数据来学习网络的参数。这里特别注意,不是所有神经网络都是通过梯度下降方法来学习的。

网络拓扑结构主要有三种:

  • 前馈网络:下图a,信息由前向后单向传递
  • 记忆网络:下图b,内部存在循环边,需要记录神经元在某个时刻的状态(记忆)
  • 图网络:下图c,把神经元分为多个组,每组神经元之间的连接关系是由图定义的。
    在这里插入图片描述

通常情况下大多数神经网络都是三种结构的复合体。

这篇关于【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】神经元和人工神经网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057103

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析