relu函数为分段线性函数,为什么会增加非线性元素

我们知道激活函数的作用就是为了为神经网络增加非线性因素,使其可以拟合任意的函数。那么relu在大于的时候就是线性函数,如果我们的输出值一直是在大于0的状态下,怎么可以拟合非线性函数呢?

relu是非线性激活函数
题主的疑问在于,为什么relu这种“看似线性”(分段线性)的激活函数所形成的网络,居然能够增加非线性的表达能力。
1、首先什么是线性的网络,如果把线性网络看成一个大的矩阵M。那么输入样本A和B,则会经过同样的线性变换MA,MB(这里A和B经历的线性变换矩阵M是一样的)。
2、的确对于单一的样本A,经过由relu激活函数所构成神经网络,其过程确实可以等价是经过了一个线性变换M1,但是对于样本B,在经过同样的网络时,由于每个神经元是否激活(0或者Wx+b)与样本A经过时情形不同了(不同样本),因此B所经历的线性变换M2并不等于M1。因此,relu构成的神经网络虽然对每个样本都是线性变换,但是不同样本之间经历的线性变换M并不一样,所以整个样本空间在经过relu构成的网络时其实是经历了非线性变换的。
3、还有一种解释就是,不同样本的同一个feature,在通过relu构成的神经网络时,流经的路径不一样(relu激活值为0,则堵塞;激活值为本身,则通过),因此最终的输出空间其实是输入空间的非线性变换得来的。
4、更极端的,不管是tanh还是sigmoid,你都可以把它们近似看成是分段线性的函数(很多段),但依然能够有非线性表达能力;relu虽然只有两段,但同样也是非线性激活函数,道理与之是一样的。
5、relu的优势在于运算简单,网络学习速度快

解释的比较好

原文地址:https://www.cnblogs.com/lzida9223/p/10972783.html

时间: 2024-10-10 22:12:13

relu函数为分段线性函数,为什么会增加非线性元素的相关文章

python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数

python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数 # -*- coding:utf-8 -*- from matplotlib import pyplot as plt import numpy as np import mpl_toolkits.axisartist as axisartist def sigmoid(x): return 1. / (1 + np.exp(-x)) def tanh(x): return (np.exp(x) - np.e

使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现

进来复习了一下C语言指针,一直没有写过太多关于函数指针的代码,而且对回调函数的理解一直都是在理论上,基本上没有太写过关于它的代码,进来得空,写了一个小程序加深下自己对回调函数和函数指针的理解. 问题描述: 编写一个sort()函数,使它能够对任何类型的数组元素进行排序. 下面是我写的代码: /* 使用函数指针的回调函数技巧,设计一个能排序int 和char 数组的sort()函数 */ #include<stdio.h> #include<stdlib.h> #include<

区间成员函数优先于与之对应的单元素成员函数

 例子:使v1的内容和v2的后半部分相同的最简单操作是什么?看下面四个答案: ①v1.assign(v2.begin()+v2.size()/2,v2.end()); ②v1.clear(); copy(v2.begin()+v2.size()/2,v2.end(),back_inserter(v1)); ③v1.insert(v1.end(),v2.begin()+v2.size()/2,v2.end()); ④vector<int>v1,v2; - v1.clear(); for(ve

task 3:编写函数实现单击change按钮,为div元素添加红色双线的边框。

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>编写函数实现单击change按钮,为div元素添加红色双线的边框.</title>    <style type="text/css">        div{            font-family: "Helvetica Neue&quo

在UNC学习DL的日子——Relu函数

以下网址介绍了Relu的前世今生 http://www.cnblogs.com/neopenx/p/4453161.html 第一个问题:为什么引入非线性激励函数? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了.正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入

ReLU函数

Rectifier(neural networks) 在人工神经网络中,rectfier(整流器,校正器)是一个激活函数,它的定义是:参数中为正的部分. , 其中,x是神经元的输入.这也被称为ramp function(斜坡函数),类似于电气工程中半波整流. 由来: 2000年由Hahnloser et al等人首次将该激活函数引入动态网络中,具有强烈的生物学动机和数学理论. 此激活函数在 convolutional networks中被广泛应用,比logistic sigmoid更有效和实用.

Matlab随笔(4)之分段线性函数化为线性规划

eg:         10x,            0<=x<=500 c(x)=1000+8x,    500<=x<=1000         3000+6x,    1000<=x<=1500   解法一: 可引入0-1变量,令z1=1,z2=1,z3=1分别表示0<=x<=500,500<=x<=1000,1000<=x<=1500,则 500z2<=x1<=500z1, 500z3<=x2<=50

JQuery动态增加删除元素

<form action="" method="post" enctype="multipart/form-data"> <label>请选择上传的图片</label> <a href="javascript:addimg()">增加图片</a> <div class="mdiv" id="mdiv"> <di

JS数组常用函数以及查找数组中是否有重复元素的三种常用方法

阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法 1. 1 var ary = new Array("111","22","33","111"); 2 var s = ary.join(",")+","; 3 for(var i=0;i<ary.length;i++) { 4 if(s.