非线性激活函数

1 为什么需要非线性激活函数?

如果使用线性激活函数,那么这个模型的输出不过是你输入特征x的线性组合。神经网络只是把输入线性组合再输出。
所以即使你有很多个隐含层,但是你如果使用线性激活函数或者不用激活函数,一直在做的只是计算线性激活函数,所以还不如直接去掉全部隐藏层。所以除非引入非线性,那么无法计算更有趣的函数。
只有一个地方可以使用线性激活函数,那就是回归问题。或者在输出层用也是可以的。

2 四个非线性激活函数

四个激活函数.png

Sigmoid(左上角):
现在吴恩达几乎从来不用sigmoid激活函数了,但是吴恩达会用sigmoid的一个例外场合是进行二元分类时。
缺点:
1、Sigmoid容易饱和,并且当输入非常大或者非常小的时候,神经元的梯度就接近于0了,从图中可以看出梯度的趋势。这就使得我们在反向传播算法中反向传播接近于0的梯度,导致最终权重基本没什么更新,我们就无法递归地学习到输入数据了。另外,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。容易饱和这个问题叫做 “梯度饱和” ,也可以叫 “梯度弥散” 。
2、Sigmoid 的输出不是0均值的,这是我们不希望的,因为这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正(e.g. x>0 elementwise in ),那么在反向传播的过程中对w求梯度要么都为正,要么都为负(取决于整个表达式 f 的梯度)。这可能会在权重的梯度更新中引入不受欢迎的zig-zagging动态。导致有一种捆绑的效果,使得收敛缓慢。当然了,如果你是按batch去训练,那么每个batch可能得到不同的符号(正或负),那么相加一下这个问题还是可以缓解。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的。

Relu(左下角):
Relu:a = max(0,z),但是当z = 0时,导数是没有定义的,但如果编程实现,你得到的z刚好等于0.000000000000的概率很低,所以不必担心。
Relu已经变成激活函数的默认选择了,当你不知道因隐层到底该用哪个激活函数时,就可以用relu。虽然有人也会用tanh。Relu的一个缺点:当z为负时,导数等于0。但在实际中却没有什么问题。虽然对于z的一半范围来说,relu的斜率为0,但在实践中,有足够多的隐藏单元令z大于0,所以对于大多数训练样本来说还是很快的。

3 实战一 —— 输入tensor观察非线性激活函数的作用

import torch
from torch import nn
from torch.nn import ReLU,Sigmoid
input = torch.tensor([[1, -0.5],
                      [-1, 3]])
input = torch.reshape(input,(-1, 1, 2, 2))
print((input.shape))
class Linyu(nn.Module):
    def __init__(self):
        super(Linyu, self).__init__()
        self.relu1 = ReLU()

    def forward(self,input):
        output = self.relu1(input)
        return output

linyu = Linyu()
output = linyu(input)
print(output)

输出:

torch.Size([1, 1, 2, 2])
tensor([[[[1., 0.],
          [0., 3.]]]])

实战二 —— 非线性激活函数在图像处理中的使用

import torch
from torch import nn
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torch.nn import ReLU,Sigmoid

dataset = torchvision.datasets.CIFAR10("../dataset",train=False,download=True,
                                       transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset,batch_size=64,drop_last=True)
class Linyu(nn.Module):
    def __init__(self):
        super(Linyu, self).__init__()
        self.relu1 = ReLU()
        self.sigmoid1 = Sigmoid()

    def forward(self,input):
        # output = self.relu1(input)
        output = self.sigmoid1(input)
        return output


linyu = Linyu()
writer = SummaryWriter("../logs/P16_logs")
step = 0
for data in dataloader:
    imgs, targets = data
    writer.add_images("input",imgs,step)
    # output = linyu(imgs)
    # writer.add_images("output",output,step)
    sigmoid1 = linyu(imgs)
    writer.add_images("sigmoid",sigmoid1,step)
    step += 1
writer.close()

输出:


激活函数.png

第一张是原始数据,第二张是经过ReLU激活函数的结果,第三张是经过sigmoid激活函数的结果。

参考资料:
1.https://blog.csdn.net/NIGHT_SILENT/article/details/80806644

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容