首页 > 其他分享 >深度学习-卷积神经网络-经典的卷积神经网络-梯度消失-44

深度学习-卷积神经网络-经典的卷积神经网络-梯度消失-44

时间:2024-02-22 21:33:52浏览次数:33  
标签:node 卷积 梯度 44 np 神经网络 fc tf

目录

1. 什么是梯度消失

在梯度下降中,随着算法反向反馈到前面几层,梯度会越来越小,最终,没有变化,这时或许还没有收敛到比较好的解,这就是梯度消失问题,

梯度爆炸或者消失!!!
1,神经网络损失函数非凸的损失函数,逐步的减小步长,或者叫动态调整学习率
2,梯度爆炸的解决,使用梯度截断法,Gradient Clipping
3,L1、L2正则化,使得W变小,进一步反向传播的时候使得gradient变小
4,Batch Normalization,一种归一化的手段,主要作用或者发挥在Activations上面
5,激活函数也会影响,使用Relu优于tanh和sigmoid
6,W的初始化,如果一开始的W绝对值就比较大,更容易梯度爆炸或消失
7,网络Topology设计可以在一定程度上解决梯度消失或者爆炸

激活函数 再z比较大的时候梯度接近0

tanh
sigmoid
relu
step

Relu 比 Sigmoid 或 Tanh 等更优秀但是也会出现 dead neuron z<0的时候梯度为0

改进的relu
Leakly Relu

其他relu Elu

W初始化 避免梯度消失

已经训练好的在任务 A 上的模型(称为 pre-trained model),将其放在任务 B 上做模型调整(称为 fine-tuning)

参数的随机初始化
随机初始化是很多人目前经常使用的方法,然而这是有弊端的,一旦随机分布选择不当,就会导致网络优化陷入困境
下面以 tanh 神经网络为例,查看激活值的分布:

激活值的方差逐层递减

各层反向传播的梯度(关于状态的梯度)的分布情况:

状态的梯度在反向传播过程中越往下梯度越小(因为方差越来越小)越来越向0集中

import tensorflow as tf
import numpy as np

data = tf.constant(np.random.randn(2000, 800))
layer_sizes = [800 - 50 * i for i in range(0,10)]
num_layers = len(layer_sizes)
fcs = [] # To store fully connected layers' output
for i in range(0, num_layers - 1):
    X = data if i == 0 else fcs[i - 1]
    node_in = layer_sizes[i]
    node_out = layer_sizes[i + 1]
    W = tf.Variable(np.random.randn(node_in, node_out)) * 0.01
    fc = tf.matmul(X, W)
    fc = tf.nn.tanh(fc)
    fcs.append(fc)


看到输出值迅速向 0 靠拢,在后几层中,几乎所有的输出值都很接近 0

修改上面的代码 W = tf.Variable(np.random.randn(node_in, node_out))
均值仍然为 0,标准差现在变为 1

几乎所有的值集中在-1 或 1 附近,神经元 saturated 了!注意到 tanh 在-1 和 1 附近的 gradient 都接近 0,这同样导致了 gradient 太小,参数难以被更新。

如何更科学的初始化?
Xavier initialization

Xavier 初始化的基本思想是保持输入和输出的方差一致,这样就避免了所有输出值都趋向于 0

继续修改代码 W = tf.Variable(np.random.randn(node_in, node_out)) / np.sqrt(node_in)

输出值在很多层之后依然保持着良好的分布,这很有利于我们优化神经网络

继续修改代码 ReLU 神经元
W = tf.Variable(np.random.randn(node_in, node_out)) / np.sqrt(node_in)
fc = tf.nn.relu(fc)


前面看起来还不错,后面的趋势却是越来越接近 0
如何解决?
He initialization
在 ReLU 网络中,假定每一层有一半的神经元被激活,另一半为 0,所以,要保持 variance 不变,只需要在 Xavier 的基础上再除以 2
W = tf.Variable(np.random.randn(node_in,node_out)) / np.sqrt(node_in/2)
...... fc = tf.nn.relu(fc)


看起来效果非常好,推荐在 ReLU 网络中使用

标签:node,卷积,梯度,44,np,神经网络,fc,tf
From: https://www.cnblogs.com/cavalier-chen/p/18028268

相关文章

  • 超省电LCD液晶段码驱动芯片VKL144A/B 超薄封装 适用于燃气表,瓦斯表等产品
    由于煤气罐的使用安全隐患较大,现在大部分城市使用管道输送燃气,燃气表的计费大都是通过远程抄表的方式,或者充值的方式,为了让用户更好地了解自家燃气表的使用情况,需要一款液晶屏来显示燃气表的状态和用气量等信息,而燃气表通常选用超低功耗的芯片来进行显示驱动。超低功耗的芯片,由于......
  • 神经网络优化篇:详解TensorFlow
    TensorFlow先提一个启发性的问题,假设有一个损失函数\(J\)需要最小化,在本例中,将使用这个高度简化的损失函数,\(Jw=w^{2}-10w+25\),这就是损失函数,也许已经注意到该函数其实就是\({(w-5)}^{2}\),如果把这个二次方式子展开就得到了上面的表达式,所以使它最小的\(w\)值是5,但假设不知道......
  • P5344 【XR-1】逛森林 题解
    题目链接:逛森林很早就想写写倍增优化建图,尤其是这题,奈何之前知识点没点够,本题线段树优化建图要优一些,不再赘述,没注意\(m\)是\(1e6\),挂了\(n\)多发才发现。后续再详细讲解倍增优化建图,这里简述本题做法。倍增优化建图其实和线段树优化建图恰不多的思想,为倍增求\(LCA\)的每......
  • 【数论】卷积反演大集合
    不知道为啥脑抽要学数论,骂声一片中发现数论还没入门(悲)。1.狄利克雷卷积与数论函数1.1数论函数定义:数论函数为值域为整数的函数。简单数论函数:\(I(n)\),恒等函数,恒等为\(1\)。\(e(n)\),元函数,卷积中的单位元,若\(n=1\),\(e(n)=1\)。否则为\(e(n)=0\)。\(id(n)\),单位函数,\(......
  • 洛谷P4447题解
    md这篇反正不交题解的,随便写,不管它格式题意简化下,给你N个数,求出连续值分组人数最小的那组的人数最大值。这个题目还挺经典的,原本23年8月份过了到现在来又不会了(划掉,bushi对于这种,很容易想到的是输入,之后排序,然后分组这种模板就不多说了,就在我24年2月份重温这道题再打一遍代码......
  • Apache Shiro反序列化漏洞 (CVE-2016-4437)复现
    0x00漏洞简介ApacheShiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。ApacheShiro1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触......
  • 神经网络基础
    (个人学习所用,内容来源于网络,侵权删)1.感知机感知机由Rosenblatt在1957年提出,是神经网络的基础,该思想受生物学启发(参照下图),在其看来,人的大脑可以看作一个生物的神经网络,其最小的单元是神经元。人的神经网络由这样的一些神经元组成,它接受一些信号,这些信号可能是眼睛看到的光学......
  • 神经网络优化篇:详解深度学习框架(Deep Learning frameworks)
    深度学习框架一小点作者内心os:24年春节已过完,从熟悉的地方又回到陌生的地方谋生,愿新的一年都得偿所愿,心想事成。学到这会儿会发现,除非应用更复杂的模型,例如卷积神经网络,或者循环神经网络,或者当开始应用很大的模型,否则它就越来越不实用了,至少对大多数人而言,从零开始全部靠自己......
  • 深度学习-卷积神经网络基础2-43
    目录1.池化层2.CNN的一般架构3.经典的LeNet4代码5代码21.池化层为什么要有池化层?目标就是降采样subsample,shrink,减少计算负荷,内存使用,参数数量(也可防止过拟合)正如卷积神经网络一样,在池化层中的每个神经元被连接到上面一层输出的神经元,只对应一小块感受野的区域。我们必......
  • P5446
    P5446由翻转可知:\(S[j,k]==S[k,i]\)因此R是S的前缀且R的后缀是回文串用Manacher算出最大回文半径d此外,R也可以由多次反转得到条件是:R'经过反转后是符合R是S的前缀且R的后缀是回文串的且R'本身是回文串,这使得R'翻转后得到R#inc......