假如现在有个神经网络 激活函数,激活函数是ReLU,若使用线性激活函数代替ReLU,那么该神

* 这门课程新增许多笔记(应该在網站上查看):关于线性层的反向传播向量、张量的求导derivative(Justin完成的~)。有助于理解反向传播中向量和矩阵是如何进行计算的——这些嘟与lecture 4有关。

本节课关于:如何训练神经网络 激活函数

  • 回顾一下都学了什么...我们现在进度到哪了...

我们已经讨论过如何使用计算图表达一个函数,任何函数都可以用计算图表示

我们也明确地探讨过神经网络 激活函数,就是一种计算图包含若干个线性层,层与层之间通过非線性函数进行连接、实现堆叠

上节课介绍了卷积神经网络 激活函数——一种特殊的网络。

1# 使用卷积层贯穿整个神经网络 激活函数保持(输入的)空间结构。

【这里的翻译使我想起:

不知道哪个对了翻译里也是混着的。

那么卷积=滤波吗?对应关系:卷积convolve-卷积核filter,濾波-滤波器filter

3# 通常,每个卷积层有多个滤波器(filter =卷积核)每个滤波器会生成独立的激活图(activation map =激活映射)【注:这期的翻译是这样的那么接丅来的笔记也按这个吧。说不准哪种翻译更确切呢~】

从一个具有特定深度的输入得到一个激活图作为输出其中一些空间维度被保留了;洏且这一层的深度等于滤波器的个数。

我们希望实现的是学习所有这些权重或参数的值。

然后我们可以通过优化来更新网络参数这点茬早前的课上提过,对吧

我们希望在损失区域中找到一个点,使得损失较低——通过往负梯度方向逐步更新来实现

1# 对数据进行连续的批量采样,

2# 通过使用计算图或神经网络 激活函数将数据进行正向传播最终得到损失值

3# 通过整个网络的反向传播来计算梯度

4# 然后使用这个梯度来更新网络中的参数或者权重

二、介绍接下来的学习内容——训练神经网络 激活函数

  • 接下来的几节课,都将讨论一些“神经网络 激活函数训练过程中的细节”

如何建立我们的神经网络 激活函数:选择什么样的激活函数怎样做数据预处理,权重初始化正则化,梯度检查

2# 训练中的动态变化:

如何监控学习过程如何选择参数的特定更新规则,怎样做超参数优化来选取最佳的超参数

3# 模型评估和模型集成

  • 本節课的第一部分:激活函数数据预处理,权重初始化批量归一化,训练过程监控超参数优化

我们之前看到,任意特定层是如何产生輸出的输入数据,在全连接层或卷积层、将输入乘上权重值然后将结果输入一个激活函数或者非线性单元。

之前的例子中我们使用sigmoid吔见过ReLU,接下来将见到更多不同的非线性函数并在它们之间进行权衡。

- 输入到sigmoid函数后每个元素被压缩到[0,1]范围。

如果输入非常大(即一個绝对值很大的正值)则输出将接近~1。

如果输入非常小(即一个绝对值很大的负值)则输出将接近~0。

在横坐标接近于0的区域中可以看作线性区域、像线性函数。

- 曾经一度非常流行因为sigmoid函数在某种意义上可以被看作神经元的饱和放电率

而ReLU从生物学上而言更为合理。它囿一种解释~你可以去查资料(呃呃呃?)

- 更加深入地研究它——实际上存在许多问题:3 problems

①当x=-10(一个绝对值很大的负值):此时梯度=0

因為太过接近sigmoid函数的负饱和区域、基本上是平的,所以梯度会变为0我们将返回的上游梯度乘以一个约等于0的数,那么会得到一个非常小的梯度

从某种意义上来说,经过链式法则后会让梯度流消失因此零梯度便会传递到下游节点。

②当x=0:区域在0附近将得到一个合理的梯喥,并且可以很好地进行反向传播

所以当x=很大的正值或很大的负值时,它们位于sigmoid函数的平滑区域、使梯度消失从而无法得到梯度流的反馈。

考虑一下当输入神经元的数值始终为正时会发生什么

例子中,所有输入为正乘以某个权重W,然后通过激活函数来运行它

【突嘫反应过来,“输入始终为正”的意思是:

因为sigmoid的输出是0~1上一层通过激活函数的输出作为下一层的输入、所以输入就始终为正了。。】

【线性层:权值相乘也就是括号内部分(sum(i) wi*xi+b)。

激活函数f(x)x是线性层的输出,f(x)是激活函数输出】

那么这个线性层~权重W的局部梯度是多少?——实际上就是X本身(dL对激活函数求偏导)

但是不对啊,这里不是在说sigmoid激活函a(x)=1/(1+e^-x)吗不是非线性的吗,怎么又是线性层了

梳理一下啊,在开头我们说过任意特定层是如何产生输出的:输入数据在全连接层或卷积层、将输入乘上权重值,然后将结果输入一个激活函数戓者非线性单元

也就是,输入→乘以权重Wx(线性层)→送入激活函数(增加非线性)这样一个个流程走。

而在线性层这里的局部梯喥是x激活函数只是把输出拉到0~1的范围,把直线扭成曲线-增加非线性这梯度没法算的吧?可以算而且是因为它好算所以专门取的、还命名为sigmoid,da/dx好像=a(x)(1-a(x))

哦,是要让损失函数loss(w)要取最小最终要找到的是loss最小时w的值

→找到dl/dw梯度方向,沿着梯度方向函数值增大那么沿着负梯度方向函数值减小——就一直小到=0吧。

→做法是:“沿负梯度方向更新”就是一点点地移动自变量w'=w-|▽w|,每次移动w就会使loss(w)减小然后当前位置的梯度应该也会减小、逐渐减小为0时,就是loss最小的位置啦(或者落入局部最小)

“梯度”包括梯度向量的①正方向-空间中无数个方姠你是哪一个方向呀?②长度大小-绝对值函数自变量稍微增加一丢丢dw时、dloss(w)增加多少呀?感觉有点一个单位长度的意思

!!!在这里loss(w)可鉯用二维坐标系表示,梯度方向投影到w坐标轴上、其实只有两个方向:w增大方向 +|▽w|、w减小方向 -|▽w|

而大小呢?每次移动多少长度k*|▽w|,有個k~ 大小扑朔迷离!!还要再想想。

再回来,当梯度都是一个正值(或负值)的时候w只往一个方向移动(w一维)。当w二维w只往某两個方向移动。

如果所有x都是正的那么会造成问题:结果要么全正、要么全负。(这就是为什么我们希望zero-mean data)

【很乱啊。f到底是什么,不是激活函数吗那怎么df/dw=x??】

上游梯度dL/df传回来值为正数(或负数)。

我们任意传回一些梯度再用它乘以得到的局部梯度df/dw=x,如果x徝总为正那么df/dw*dL/df 相当于把上游梯度的符号传回来(因为df/dw=x而x正,符号=符号*正号)

——意味着所有关于w的梯度、因为它们全是正数(或者铨是负数)那么它们总是朝着同一方向移动。(其实也只有两个方向梯度正方向、梯度负方向)

【可是上游梯度的符号可能变化啊?為什么总是同一方向

大概是每一层都是同一种情况,符号不变~那么一层层传递回来最终的符号就是不变的??是嘛】

【还有个一矗模模糊糊刚想明白的地方:

每次都是往负梯度方向移动~ 我知道梯度方向是某一个方向(坐标系中唯一的一个方向),而平时计算时用的昰梯度向量的长度是个数值,所以只有正负的区别(正-梯度正方向负-梯度反方向),

w'=w-▽w这里的"-"是表示负梯度方向,那么▽w必然表示嘚是个绝对值数也就是正数

当然也可以写成w'=w+▽w,然后▽w是个负数;或者写成w'=w-|▽w|可能更清晰。

当你在做参数更新时可以用同一个正數去增加所有w的值,或者用不同的正数或者用相似的想法去减小w的值。但是这里会出现的问题是这种方法对于梯度更新非常低效。

(矗接沿着梯度方向更新才是最直接最快的

可是看下图例子,这种方法为什么找不到梯度方向?)

eg. 假设w是二维,则可以用平面坐标轴表示w如果用全为正(或全为负)的数去迭代,得到两个象限(即如图坐标轴上两块区域-一象限全部正、三象限全部负)——这些是根据梯度更新得到的两个方向【应该是假设的两个方向吧?】

假设最佳w是图中蓝色向量我们从已知的某些点开始、或从红色箭头的起始端嘚顶部开始,并不能从w的方向直接求梯度-因为这并不是允许的两个梯度方向中的一个所以我们只能在允许的方向进行一系列的梯度更新,例如沿着图中红色箭头方向、它们是允许进行梯度更新(w=w-▽w)的方向,目标是最终得到最佳的w

【。。?啥啊??

假设w是个②维向量(w1,w2)→梯度有两个方向(w1方向和w2方向)→然后大概意思就是在这两个区域分别有一个方向依次进行,。?所以为什么要依次进荇啊

所以慢......所以慢。

如果不这样呢数据有正有负,梯度有正有负问题就是如果不这样呢??

其实我最纳闷的是,梯度还能被限淛嘛。先不想了。。

这也是为什么一般我们要使用均值为0的数据——我们想要输入x的均值为0这样就能得到正、负的数值,不会陷叺前面这个梯度更新会出现的问题中-问题就是它们将沿着同一个方向移动

【没懂!!!大家居然都懂了 TAT

总结:如果输入的正数太大或負数太小,饱和神经元会造成梯度消失问题

它们不是以0为中心,这种情况下梯度更新的效率非常低

不过在网络整体架构中,这个问题通常不是主要问题——因为卷积和点乘的计算代价更大

和sigmoid非常相似,不同在于:

仍然存在sigmoid的第一个问题:当它饱和时会出现梯度消失嘚问题

比sigmoid好一些,但仍存在问题

上节课用到的激活函数,在卷积神经网络 激活函数里、卷积层之间插入了非线性的ReLU函数

对输入按元素进行操作,输入为负=0输入为正=x(等于输入的数)。

回顾之前sigmoid和tanh的问题可以知道,

- ReLU不会在正的区域产生饱和现象(在输入空间的一半嘟不会存在饱和)这是个很大的优势。

- 计算成本也不高比其他的低,只是进行简单的max操作计算速度非常快。

- 实际中我们使用是因為它sigmoid和tanh收敛得快(大约快6倍)。

- 同时也有证据表明它比sigmoid更具备生物学上的合理性

看一个神经元,它的输入、输出长什么样你试图通過神经科学的实验来度量,你将会看到ReLU比sigmoid对结果有更精确的估计

2012年左右AlexNet出现之后,ReLU开始被大量使用(Alex是第一个在ImageNet和大规模数据上表现絀色的重要的卷积神经网络 激活函数,他们在实验中使用了ReLU)

* 然而ReLu仍然存在一个问题:

②除此之外还有个讨厌的地方:输入在正半轴没有產生饱和很ok但在负半轴——梯度消失问题。

当x=0梯度不确定。但在实践中可以取为0

观察数据云data cloud(上图)——是我们全部的训练数据。

這些dead ReLU基本不在数据云里在这种情况下,它从来不会被激活和更新~

而activate ReLU一些数据可以是正的,那么就可以传递下去;一些则不会

【老实說,这个图我是不懂的。

意思是这样吗输入(上图灰色部分)→线性层→ReLU的输入(这里是正的才可以~)→ReLU激活函数→ReLU输出 】

①当有一個不好的初始化,如果你的权重设置非常的差它们恰巧不在数据云里,就会出现dead ReLU的情况——这将导致我们不能得到一个能激活神经元嘚数据输入,也不会有一个合适的梯度传回它既不会更新也不会激活了。

②当学习率很高时在这种情况下从一个ReLU函数开始,因为你在進行大量更新权值不断波动,ReLU单元会被数据的多样性淘汰——这些会在训练时发生,刚开始很正常但在某个时间点后变差最后died。

所鉯在实际中如果你冻结一个已经训练好的网络,然后传入数据你可以看到实际上网络中多达10%-20%的部分是这些dead ReLUs。这是个问题大多数使用ReLU嘚网络都有这类问题,它们中的部分会挂掉在实际使用中人们会深入检查它~这是个研究型问题,但它还是能用作训练网络

Q1:(数据云呮是你的训练数据)通过数据云如何判断一个ReLU是否会dead挂掉?

A1:图上是个简单的二维情况的例子

我们将输入(就是基础的w1x1+w2x2...)传给ReLU,然后应鼡它来定义这里的分割超平面(就是上图的红线绿线)然后我们从中取出一半-这些将为正、抛弃另一半。所以无论权重变为多少这些數据的所在就是超平面所处的位置。因此经过训练后与数据云相比,有些ReLU会处在不同位置

【听不懂。。是不管了嘛就认为一半会掛一半不会挂,抽一半出来继续用、丢掉另一半?】

Q2:Sigmoid的两个缺点之一:神经元饱和,当所有输入均为正时似乎不会出现饱和问题(是这个意思吗问题?)

A2:所有输入均为正时如果正数很大时,sigmoid斜率很平也将得到零梯度。

【= = 这个问题无视吧】

在实际运用中,人們喜欢用较小的偏置来初始化ReLU以增加它在初始化时被激活的可能性,并获得一些更新——这基本上只是让更多的ReLU在一开始就能firing的偏置項,实践中一些人认为有用、一些人认为没用通常人们并不用,多数时候人们只是将偏置项初始化为0

接下来看看后来基于ReLU的改进:

看起来和原始的ReLU很相似。

- 唯一的区别是:ReLU在负区间保持平直而这里则在负区间给出一个微小的负斜率

- 这解决了很多我们之前提过的问题:

和Leaky ReLU很相似在负区间有个倾斜的区域。

- 区别是:负区间的斜率通过alpha参数确定所以不需要指定,而是当作一个可以反向传播和学习的参數这给了它更多灵活性。

①具有ReLU的所有优点

相比于Leaky ReLUELU没有在负区间倾斜——实际在建立一个负饱和机制。

这里有一些具有争议的观點认为这样使模型对噪声具有鲁棒性,然后你得到这些更健壮的反激活状态可以看看这篇论文-有很多为什么这样做的理由。

从某种意義上说这是一种介于ReLUs和Leaky ReLUs之间,具有Leaky ReLU所具有的曲线形状使输出均值更接近0,但它也有一些(缺点还是什么?)——比ReLUs更饱和的行为

Q3:是否足够参数alpha会具体到每个神经元?

A3:我相信这确实是的但我并不很确定。你可以通过深入阅读这篇论文找到这个是如何定义的

我楿信这个函数被非常仔细地设计以获得不错的理想属性。

这些基本上是所有的ReLU变种你可以发现在实际运用中,每个都有特定的优点和缺點人们在实验中运行它们、然后依据结果判断哪个效果更好,尝试不断修正它并提出新想法。它们都在被检验中

- 有些特别,因为和其他的具有不同的形式——没有先做点积运算然后把这个元素及的非线性特征放在它前面。相反它看起来像这样——W*x+b,然后在前后两個函数里取最大值

- 作用是:泛化ReLU和Leaky ReLU。因为只提取两个线性函数的最大值

这是另一个线性机制的操作,这种方式不会饱和、也不会die

- 问題在于:你会把每个神经元的参数数量翻倍。eg.原来神经元的权重集是W现在有W1和W2,相当于原来的两倍

- 在实际操作中,当我们考察所有这些激活函数时一般最好的经验法则是使用ReLU。这是最为标准的、通常能工作得好的一种

并且在通常情况下,你会非常谨慎地调整学习速率在这节课稍后部分会谈及更多关于调整学习速率的内容。

- 但你也可以试验一些较为奇特的激活函数像Leaky ReLU、Maxout、ELU,但这些方法大体上还是哽为实验性一些(实用性较弱)所以你可以看看上述方法是如何解决你的问题的。

- 也可以试验一下tanh但还是ReLU和ReLU的变体更好。

- 一般不会用sigmoid这是最为原始的激活函数之一。ReLU和其他变体在那之后表现得更好一些

  • 现在开始介绍关于数据预处理的问题

激活函数是我们设计的网络Φ的一部分。

现在我们想要训练这个网络——我们有用于训练的输入数据~一般来说我们总是想要预处理数据。

如果上过机器学习或类似課程一些预处理的标准类型是:

我们为什么想要这么干呢?

1# 零中心化——早前讲到若所有输入数据都是正的,则得到的权重上所有梯喥也是正的得到的就是次最优的优化。并且一般来说即使不是全零或全负任何偏差都会导致这类问题。

2# 归一化——为了使所有特征都茬相同值域内并且这些特征贡献相同。

实际上本课程中处理的图像大部分都会做零中心化,而不会过多地归一化像素值因为一般对於图像来说,在每个位置已经得到了相对可比较的范围和分布所以我们不必过多地归一化。

对比一般的机器学习问题——不同特征之间差别很大、范围差别也很大所以需要做归一化。机器学习中可能会看到更为复杂的东西:PCA、whitening 白化.

回到图像应用领域我们向来坚持做零均值化,而不做归一化也不做这些更为复杂的预处理。

——原因之一是我们并不希望将图像的像素值映射到更低维的空间(这个空间囿我们正在处理的各种特征),我们并不希望!我们只是想在空间上应用卷积网络保有原图像的空间结构。

Q4:在训练阶段做的预处理茬测试阶段还会做同样的吗?

A4:Yes在训练阶段我们会决定均值,然后将同样的均值应用到测试数据中即用从训练过程中得到的相同的经驗均值来归一化测试数据。

【这里是不是口误啊这是零中心化吧,怎么变归一化了前面还说不做归一化呢。。】

一般对于图像,峩们只做零均值化的预处理——可以减去整张均值图像的值也可以只减去单通道均值。

①减去均值图像——从训练数据计算均值图像(其尺寸和你的每张图像都是相同的比如32*32*32的图像→会得到一组数)。

然后对要传到网络中的每张图(就是所有输入嘛~)都减去均值图像這组数的值——训练中、测试中都要这么做,测试时也是减去同一组数

②减去单通道均值——实际中,对一些网络也通过减去单通道的均值来代替用一整张均值图像来将图像零中心化。只取每个通道的均值这么做是因为发现整张图足够相似,减去均值图像和减去单通噵均值差别并不大而且更容易传送和处理。所以会在比如VGGNet中见到这种操作——VGGNet在AlexNet之后出现待会谈论它。

Q5:减去单通道均值“通道”昰什么?

A5:就是RGB一些数组。我们的图像是32*32*3即高32、宽32、深度3(三通道RGB)。所以分别会有红色、绿色、蓝色通道的均值

Q6:均值怎么得到?会分批处理吗

A6:从所有训练图像中得到,计算它们的均值

在开始训练之前,我们计算整个训练集而不会分批处理。因为我们只是想要获得一个好的样本和经验均值——所以在开始就一次性完成这样更有效也更容易。

甚至不需要用到所有的训练数据也可以仅在足夠的训练图像中取样以获得均值的一个良好的估计。

Q7:数据预处理是否解决了sigmoid的问题好问题啊!我都忘了为啥要预处理了。然后又想起来sigmoid的输出是0~1所以不能解决的~】

A7:数据预处理做的是零均值化我们想让sigmoid得到零均值。

确实能在第一层解决这个问题——第一层的输入的確是零均值但当我们用的是深度网络时,之后这个问题以更恶化和严重的形式出现了在后续会遇到很多非零均值的问题。

所以在这种凊形下这样的处理并不足够。这仅仅解决了第一层网络的问题

【我真的不懂我在这抄啥字呢。。。啊~】

【在2018年6月18日傍晚,终于紦后面补上了基本是Q5开始~ 】

【现在继续补。因为发现没写下来根本就不会记得了啊。。】

现在我们有一个标准的双层神经网络 激活函数我们想要学习所有的权值,但首先需要给它们初始值然后用梯度更新它们。

使用0作为W的初始值会发生什么把所有参数设为0有什麼问题?

A:所有神经元将做同样的事情取决于输入值,神经元可能处于任何状态-可能没有dead但问题是它们将做同样的事情。因为权重都昰0给定一个输入,神经元将在输入数据上做相同的操作接着输出相同的数值、得到相同的梯度,所以它们用同样的方式更新你将得箌完全相同的神经元。这并不是我们想要的!——我们希望得到不同的神经元可以学习到不同知识。

问题的关键是当用相同的值去初始化所有参数时,没有打破“参数对称”问题

【第一次wx=0*x=0,w'=w-|▽w|=0-|▽w|所以w'不一定是0,然后继续梯度更新——对输入数据做同样操作、输出同樣数值、得到同样梯度以同样方式更新——得到完全相同的神经元。

Q8:梯度也依赖于损失函数其中一个的反向传播不会与其他的不哃么?

A8:在最后一层梯度会针对不同神经元得到不同的损失函数,依赖于它所连接的类别(这里说的是分类问题比如输出对应10个类)。但如果遍历整个网络观察所有神经元,会发现很多神经元用相同的方式连接在一起、有相同的更新——这将是个问题

【啊,因为损夨函数不同损失函数什么样来着,我记得不同类只有偏置不同吧?诶?没懂】

第一个想法——将所有权重设置为一个小的随机数,可以从一个概率分布中抽样

例子中从标准高斯分布中抽样,但我们要对它进行尺度变换(scale)使得标准差=1e-20.01。

这样就给定了很多小的随机参數——这样的参数适用于小型网络打破了参数对称问题;

但在结构深一点的网络中可能存在问题——来看看为什么。

这里有一个试验峩们来使用一个结构深一些的网络,初始化一个十层神经网络 激活函数、每层500个神经元使用tanh非线性激活函数,用小的随机数来初始化

隨机数据作为输入,经过网络在每一层观察产生的激活函数的数据的统计结果——均值和标准差:有意思的是,每一层的均值都固定在0附近这是有意义的:

H=np.dot(X,W) 线性函数 → +tanh激活函数 → 然后保存值。由于tanh是以0为中心这很有意义,标准差会缩小、快速逼近0第二行图显示的是烸层的均值和标准差,底部一系列的图展示每一层激活值的概率分布

可以看到,第一层有个合理的高斯分布漂亮的分布类型。问题是烸层乘以一个W这些小随机数,随着一次次乘法迅速缩小所有数值消失了,最后得到一堆0——这并不是我们期望的All activations become zero!


假设这是正向传播,我们计算梯度首先,这些参数的梯度是什么样子
考虑:每层有很小的输入X-近似于0,上层梯度往下传为了得到针对权重的梯度=上层梯度*本层局部梯度(局部梯度即W*X),X是输入由于X很小、权重得到一个非常小的梯度、基本上没有更新。梯度的流动~

这是一个方法你可鉯尝试理解梯度流动在网络中的影响,考虑正在进行什么样的正向传播考虑梯度流的下降会对发生什么,考虑不同类型的输入实际上对權重有什么影响以及它们的梯度是什么。

如果考虑当我们把所有梯度连接在一起那么每层回传的梯度是什么?反向传播梯度=上层梯度*夲层梯度(W*x)反向传播所有层,则是在做上层梯度和权值的乘法来得到下层梯度因此,我们不断乘以W基本是相同情况。。。

1.权偅太小→激活值~0下层梯度=上层梯度*局部梯度d(W*X)/dW=X,数据越来越小~0【感觉助教这里说错了 不是*W是X】 


2.权重太大→激活值~1或-1,W*X→tanh会饱和权重得鈈到更新
权重太小,网络崩溃;权重太大网络饱和。如何取呢
那么需要从标准高斯分布中取样,根据输入数量进行缩放【课堂笔记、论文 了解原理。】
做法基本上是:要求输入的方差=输出的方差如果推导出权重是多少,就会得到这个公式

如果有少量输入数据,将除以较小的数得到较大的权重。需要较大的权重是因为有少量输入用每一个输入值*权重,那么就需要一个较大的权重来得到一个相同嘚输出方差 如果有很多输入,将除以较大的数得到较小的权重,以便让它在输出中得到相同的传播【看讲义细节】

如果我们想要一個单位高斯的权值作为每一层的输入,为了能够在训练期间初始化可以使用Xavier,使每一层的权值都有一个单位高斯

假设这里有个线性激活函数模块,假设它处于激活状态-tanh的活性区域

【再次强调可以通过笔记来真正理解它的推演过程】 但问题是:若使用ReLU之类的激活函数ReLU会消除一半神经元,每次有大约一半的神经元被设为0它实际上是把方差减半。如果你现在的推导和之前一样那么就不会得到正确的方差,而是一个特别小的值所以将会再次看到单位高斯分布开始收缩,越来越多的峰值趋近于0、越来越多的神经元会失活


一些论文中已经提出方法来解决这个问题:试着/2来调整,因为有一半神经元被置0(

和之前未用ReLU激活函数相比)等效的输入,实际上只有一半的输入所鉯只需要/2,就可以很好地解决这个问题并且单位高斯分布在深度网络的每个层都很好。

在实践中重视你的权值对于训练这些小的东西非常重要。比如在一些论文中深度网络之间的实际不同就在于此,即使是训练也能表现得很好

6.1 激活函数、数据预处理、权重初始化 结束。接下来是:6.2 批量归一化Batch Normalization。

加载中请稍候......

}

基本的relu函数式:y=max(0,x)所以当输出为負数时,经过relu之后直接为0一般来说误差=当前值×梯度,那么其梯度也降为0。

如果输出为非负数那么直接求导可得1,所以误差传递到此處就是当前值x

你对这个回答的评价是?

}

增加网络的非线性能力从而拟匼更多的非线性过程。ReLU在一定程度上能够防止梯度消失但防止梯度消失不是用它的主要原因,主要原因是求导数简单一定程度是指,祐端的不会趋近于饱和求导数时,导数不为零从而梯度不消失,但左端问题依然存在一样掉进去梯度也会消失。所以出现很多改进嘚ReLU

你对这个回答的评价是?

使用sigmod函数会导致将近一半的神经元被激活不太符合人类脑活动工程学。

而relu函数在这方面神似自动引入稀疏性,相当于无监督预练习

你对这个回答的评价是?

}

我要回帖

更多关于 神经网络 激活函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信