专栏首页ATYUN订阅号【学术】如何在神经网络中选择正确的激活函数

【学术】如何在神经网络中选择正确的激活函数

在神经网络中,激活函数是必须选择的众多参数之一,以通过神经网络获得最优的成果和性能。

在这篇文章中,我将假设你已经理解了神经网络工作的基本原理,并将详细介绍涉及激活的过程。在前馈过程中,每个神经元取上一层取神经元的总和(乘以它们的连接权值)。例如:

n5 = (n1 * w1) + (n2 * w2) + (n3 * w3) + (n4 * w4)

n6 = (n1 * w5) + (n2 * w6) + (n3 * w7) + (n4 * w8)

n7 = (n1 * w9) + (n2 * w10) + (n3 * w11) + (n4 * w12)

每个神经元的值都需要被最小化,因为原始的输入数据可能是非常多样化的,而且可能是不成比例的。在进一步前馈前,必须激活n5,n6,n7。简单地说,你可以使用一系列函数来作为到达神经元的值的线性或非线性阈值(比如n5、n6和n7)。

A()是激活函数,通常用来将它的输入压缩为更符合的比例值(取决于你选择的函数)。它通常是0到1之间的小数值。但是,如何才能做到压缩输入,并且应该使用什么样的函数来完成这个任务呢?

步骤函数是最简单的。它指出静态阈值通常为0.5(但也可能为0),并根据输入值大于或小于阈值来决定输出1或0。要记住,输入值几乎总是在0到1之间(或者可能是-1,1),因为权值总是像第一层的神经元一样。

def step(input): return 1 if (input > 0.5) else 0

这本质上是一种二进制的方法,当输入数据为二进制分类问题时,可以使用这种方法,在训练模型或者函数的例子中:

0,1 = 11,0 = 10,0 = 01,1 = 0

该模型将有两个输入神经元,隐藏层层大约四个神经元,输出层有一个神经元。在每一层上,由于问题是二进制的,步骤函数都是激活所需的全部。

最常用的激活函数是sigmoid函数(蓝色),与步骤函数(橙色)相比,它在图上是这样的:

无论输入值高或低,它都将被压缩成0到1之间的比例值。它被认为是一种将值转化为概率的方法,它反映了神经元的权值或置信度。这就解释了模型的非线性特征,使它能够更深入地学习观察结果。默认情况下,你可以使用这个sigmoid函数来解决任何问题,并可以得到一些结果。

输出永远不可能是1,因为1是上水平渐近线。同样地,对于0,输出也总是趋向于它而不到达它。当然,在程序中,将会有一个点,输出是四舍五入的。

这里有一些示例的输入和输出,你可以准确地看到正在发生的事情:

显然,S()是sigmoid函数。当反向传播时,需要在单个权值中找到误差范围,并且需要通过它的推导来返回Sigmoid函数:

Tanh函数与sigmoid函数非常相似。然而,它的范围更大。它不返回0和1之间的值,而是给出-1和1的范围。这强调了观察结果,更加具体。因此,它适用于分类不同且门槛较低的更复杂的问题。如果你的数据相对简单,这会导致过度学习。正如你所看到的,TanH的方程与Sigmoid非常相似。

TanH函数的推导是:

ReLU激活函数是深度学习中最常用且最成功的函数。乍一看,这似乎有些令人惊讶,因为迄今为止,非线性函数似乎更有效。ReLU的好处在反向传播中得以体现。有一种常见的经验法则是,神经网络上的层越多,就会更容易成功,然而这产生了一个著名的问题:消失梯度下降(vanishing gradient descent),许多非线性激活技术,如Sigmoid和Tanh。它单独地破坏了深度学习(有许多层)提供的巨大机会。

如果我们看一下一个小的神经网络的水平切片,也许只有一个隐藏层,消失梯度下降不会是太大的问题:

正如你所看到的,在每个神经元上,S()被再次调用。也就是S(S(x)),你一次又一次地压缩这个值。请记住,为了简单,我忽略了与其他神经元权值相乘的过程。层次越多,结果就越糟糕。现在,从0.68997到0.665961可能没问题,但请想象一下:

S(S(S(S(S(S(S(S(S(S(S(x)))))))))))

…你会得到一个意义与完整性已经消失了的值,此时igmoid函数推导过程为:

ReLU的优点是它不会压缩数值,因为它使用一种非常简单的静态方法:

R(x)= max(0,x)

它只是将任何负值映射为零,同时保留所有的正值。这就是为什么ReLU被用于更复杂的神经网络,如深度卷积网络。ReLU没有层限制。然而,ReLU失去了压缩数值的优势,但是避免了超限或放大问题。换句话说,它不能处理非常大的值,因为它不能压缩它们。ReLU的另一个问题是,在一些更极端的情况下,它可以消灭一个神经元。想象一下,在多次反向传播之后,一个特定的权值会随着时间的推移而调整为一个非常大的负值。反过来,这个值会乘以之前的神经元,并不断地产生一个负数作为下一个神经元的输入。因此,R(x)每次都会输出0,这是一个即将消失的神经元(注意,从技术上讲,它还有恢复的机会,它不是一个消失的神经元)。因此,有更有见解的ReLU版本,如参数化和漏型的直线单元(Leaky Rectified Linear Unit),(或PReLU和LReLU),它们都不只是将任何负值映射到0,而是(绿色):

本文分享自微信公众号 - ATYUN订阅号(atyun_com)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 新手,你需要了解的关于神经网络的所有知识

    这篇文章将带你了解什么是人工智能,机器学习和深度学习。 ? 神经元(Node)  – 它是神经网络的基本单位。它获得一定数量的输入和一个偏置值。当信号(值)到...

    AiTechYun
  • 受人脑功能启发的新型人工智能

    近年来,人工智能(AI)推动了高性能自动学习技术的发展。但是,这些技术通常是逐个任务应用的,这意味着为一个任务训练的智能代理在其他任务(甚至非常相似的任务)上的...

    AiTechYun
  • 惊喜!神经元比我们想象的复杂的多

    ? 深度学习或人工神经网络(ANN)能够模拟生物神经元的观点,是个很大的误解。ANN充其量能模仿一个1957年的单个神经元模型的卡通版本。任何声称深度学习的人...

    AiTechYun
  • 点击块,让小块动起来 - 函数封装

    上一期我们主要讲解JS逻辑和DOM的结合 - JS设置标签的内容和样式,它是实现页面交互效果的重要基础知识。如果想具体了解JS设置标签的内容和样式,可以回复“标...

    HTML5学堂
  • 快速学习-Scala函数式编程

    在scala中,函数式编程和面向对象编程融合在一起,学习函数式编程式需要oop的知识,同样学习oop需要函数式编程的基础。[矛盾] 关系如下图:

    cwl_java
  • 斯坦福CS231n - CNN for Visual Recognition(5)-lecture5激活函数、神经网络结构

      在线性分类中,我们使用s=Wxs=Wx计算类别的评分函数,其中WW为一个矩阵,xx为一个列向量,输出表示类别的评分向量。而在神经网络中,最常用的是s=W2m...

    李智
  • 让业务感知不到服务器的存在——基于弹性计算的无服务器化实践

    导读:了解Serverless架构,必须与深入理解其中的弹性计算以及资源分配逻辑。本文摘自2018年的ArchSummit全球架构师峰会。根据来自腾讯技术工程事...

    腾讯云serverless团队
  • SpringBoot文件上传下载

    项目中经常会有上传和下载的需求,这篇文章简述一下springboot项目中实现简单的上传和下载。 新建springboot项目,前台页面使用的thymeleaf...

    dalaoyang
  • 深度学习之Logistic Regression

    YG
  • 腾讯、阿里、滴滴后台面试题汇总总结 — (含答案)

    年底了,近期还是收到很多小伙伴发来的面试题,因为有很多大小厂的面试题,所以我这也大概整理总结了一下,把那些比较典型有特色且面试内容比较广泛对大家都有用处的面试题...

    烂猪皮

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动