# 深度学习激活函数与正则化问题

[En]

Deep Learning Activation function and regularization-Pandon’s Deep Learning Notes

### 文章目录

[En]

In the gradient descent, as the algorithm is fed back to the first few layers, the gradient will become smaller and smaller, and finally, there will be no change, which may not converge to a better solution at this time, which is the problem of gradient disappearance, and deep learning suffers from unstable gradients. Different layers learn at different speeds.

## ; Relu的缺点

max ⁡ ( α ∗ z , z ) , α = 0.01 \max(\alpha * z,z), \alpha =0.01 max (α∗z ,z ),α=0 .0 1

def leaky_relu(z,name=None):
return tf.maximun(0.01*z,z,name=name)

hidden1 = fully_connected(X,n_hidden1,activitation_fn=leaky_relu)


## 其他Relu变形

• RReLU，Random，α \alpha α 是一个在给定范围内随机取值的数在训练时，固定的平均值在测试时，过拟合时可以试试
• PReLU，Parametric，α \alpha α 是一个在训练过程中需要学习的参数，它会被修改在反向传播中，适合大数据集
• ELU，exponential，计算梯度的速度会慢一些，但是整体因为没有死的神经元，整体收敛快，超参数 0.01

ELU 可以在tansorflow中直接调用

hidden1 = fully_connected(X,n_hidden1,activation_fn=tf.nn.elu)


## random initialization

[En]

Random initialization is a method often used by many people at present, but it has drawbacks. Once the random distribution is not selected properly, it will lead to network optimization in trouble.

[En]

It can be seen that the variance of the activation value decreases layer by layer the distribution of the gradient of back propagation (with respect to the gradient of the state):

[En]

With the increase of the number of layers, the gradient will get closer and closer to 0, and the gradient will disappear.

### ; 代码验证

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

data = tf.constant(np.random.randn(2000, 800))
layer_sizes = [800 - 50 * i for i in range(0,11)]
num_layers = len(layer_sizes)
fcs = []
fig, axs = plt.subplots(2, 5, figsize=(15, 6), sharey=True)
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)
axs[i//5,i%5].hist(fc.numpy()[:,1])

fig.show()


[En]

Let’s increase the initial value: the mean is 0 and the standard deviation is 1.

## Xavier initialization

Xavier 初始化的基本思想是保持输入和输出的方差一致，这样就避免了所有输出值都趋向于 0。注意，为了问题的简便，Xavier 初始化的推导过程是基于线性函数的，但是它在一些非线性神经元中也很有效

r = 6 n i n p u t s + n o u t p u t s r=\sqrt{\frac{6}{n_{inputs}+n_{outputs}}}r =n i n p u t s ​+n o u t p u t s ​6 ​​σ = 2 n i n p u t s + n o u t p u t s \sigma=\sqrt{\frac{2}{n_{inputs}+n_{outputs}}}σ=n i n p u t s ​+n o u t p u t s ​2 ​​

tanh
r = 4 6 n i n p u t s + n o u t p u t s r=4\sqrt{\frac{6}{n_{inputs}+n_{outputs}}}r =4 n i n p u t s ​+n o u t p u t s ​6 ​​σ = 4 2 n i n p u t s + n o u t p u t s \sigma=4\sqrt{\frac{2}{n_{inputs}+n_{outputs}}}σ=4 n i n p u t s ​+n o u t p u t s ​2 ​​

Relu
r = 2 6 n i n p u t s + n o u t p u t s r=\sqrt{2}\sqrt{\frac{6}{n_{inputs}+n_{outputs}}}r =2 ​n i n p u t s ​+n o u t p u t s ​6 ​​σ = 2 2 n i n p u t s + n o u t p u t s \sigma=\sqrt{2}\sqrt{\frac{2}{n_{inputs}+n_{outputs}}}σ=2 ​n i n p u t s ​+n o u t p u t s ​2 ​​

### 代码验证

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

data = tf.constant(np.random.randn(2000, 800))
layer_sizes = [800 - 50 * i for i in range(0,11)]
num_layers = len(layer_sizes)
fcs = []
fig, axs = plt.subplots(2, 5, figsize=(15, 6), sharey=True)
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)) * np.sqrt(2/(node_in+node_out))
fc = tf.matmul(X, W)
fc = tf.nn.tanh(fc)
fcs.append(fc)
axs[i//5,i%5].hist(fc.numpy()[:,1])
axs[i//5,i%5].set_xlim([-1,1])

fig.show()


W = tf.Variable(np.random.randn(node_in, node_out)) * np.sqrt(4/(node_in+node_out))

fc = tf.nn.relu(fc)


[En]

The front looks good, but the latter trend is getting closer and closer to 0.

## 对参数初始化问题的总结

[En]

Generally speaking, both the initialization of parameters and the selection of activation function can only alleviate the symptom of disappearance of gradient, but can not solve the problem of disappearance of gradient.

[En]

In the process of back propagation, many gradients are greater than 1. Under the chain derivation rule, the result of multiplication tends to infinity. According to the method of gradient descent, it will take a big step under the gradient explosion, so as to get out of the optimal solution domain.

## 解决方案

• Batch Normalization,一种归一化手段，主要作用在Activations上面
• 激活函数也会影响，使用Relu优于tanh和sigmoid
• w的初始化，如果一开始w的绝对值比较大，更容易偷渡爆炸或者消失
• 网络Topolopy设计可以在一定程度上解决梯度消失或者爆炸

Normalization

1. BN 是在 batch 上，对 N、H、W 做归一化，而保留通道 C 的维度。BN 对较小的
batch size 效果不好。BN 适用于固定深度的前向神经网络，如 CNN，不适用于 RNN；
2. LN 在通道方向上，对 C、H、W 归一化，主要对 RNN 效果明显
3. IN 在图像像素上，对 H、W 做归一化，用在风格化迁移
4. GN 将 channel 分组，然后再做归一化

## ; Batch Normalization

BN的操作是这样的: 取一个特定的Batch，把这一个Batch中的每个图片的某个通道，作为一个归一化的对象，举例来说[ 10 , 3 , 28 , 28 ] [10,3,28,28][1 0 ,3 ,2 8 ,2 8 ]的图片，当取第一个通道作为归一化的对象的时候，会将10幅图片的第一个通道都拿出来，将102828的数据做归一化…

Batch Normalization 是一种巧妙而粗暴的方法来削弱 bad initialization 的影响,我们想要的是在非线性 activation 之前，输出值应该有比较好的分布（例如高斯分布），

### 为什么要进行BN

1. 在深度神经网络训练的过程中，通常以输入网络的每一个 mini-batch 进行训练，这样每个 batch 具有不同的分布，使模型训练起来特别困难。
2. Internal Covariate Shift (ICS) 问题：在训练的过程中，激活函数会改变各层数据的
分配，随着网络的深入，这种变化(差异)会越来越大，使得模型特别难训练，收敛速度也会很快。
[En]

Distribution, with the deepening of the network, this change (difference) will become larger and larger, making the model particularly difficult to train and converging fast.

度数很慢，就会出现梯度消失的问题。(也可以理解为病态矩阵问题，只要有一个小的扰动，就会引起很大的变化。)

[En]

The degree is very slow, there will be the problem of gradient disappearance. (it can also be understood as a morbid matrix problem, as long as there is a small disturbance, it will cause a great change.)

### BN的使用位置

[En]

After the fully connected layer or convolution operation, before activating the function

### BN算法过程

Batch Normalization 将输出值强行做一次 Gaussian Normalization 和线性变换

Input:Values of x over a mini-batch: B = { x 1 , … , m } \mathcal{B} = {x_{1,\ldots,m}}B ={x 1 ,…,m ​}Parameters to be learned: γ , β \gamma,\beta γ,β

Output:{ y i = N B γ , β ( x i ) } {y_i=NB_{\gamma,\beta}(x_i)}{y i ​=N B γ,β​(x i ​)}
μ B ← 1 m ∑ i = 1 m x i σ B 2 ← 1 m ∑ i = 1 m ( x i − μ B ) 2 x ^ i ← x i − μ B σ B 2 + ϵ y i ← γ x ^ i + β ≡ B N γ , β ( x i ) \mu_{\mathcal{B}} \leftarrow \frac{1}{m}\sum_{i=1}^mx_i \ \sigma_{\mathcal{B}}^2 \leftarrow \frac{1}{m}\sum_{i=1}^m(x_i-\mu_{\mathcal{B}})^2 \ \hat{x}i \leftarrow \frac{x_i-\mu{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^2 + \epsilon}}\ y_i \leftarrow \gamma\hat{x}i + \beta \equiv BN{\gamma,\beta}(x_i)μB ​←m 1 ​i =1 ∑m ​x i ​σB 2 ​←m 1 ​i =1 ∑m ​(x i ​−μB ​)2 x ^i ​←σB 2 ​+ϵ​x i ​−μB ​​y i ​←γx ^i ​+β≡B N γ,β​(x i ​)

Batch Normalization 中所有的操作都是平滑可导，这使得 back propagation 可以有效运行并学到相应的参数γ , β \gamma,\beta γ,β。需要注意的一点是 Batch Normalization 在 training 和testing 时行为有所差别。Training 时μ B \mu_{\mathcal{B}}μB ​ 和σ B \sigma_{\mathcal{B}}σB ​ 由当前 batch 计算得出；在 Testing 时μ B \mu_{\mathcal{B}}μB ​ 和σ B \sigma_{\mathcal{B}}σB ​ 应使用 Training 时保存的均值或类似的经过处理的值，而不是由当前 batch 计算。

### BN的作用

1. 允许较大的学习率
2. 减弱对初始化的强依赖性
3. 保持隐藏层中数值的均值、方差不变，让数值更稳定，为后面网络提供坚实的基础
4. 有轻微的正则化作用（相当于给隐藏层加入噪声，类似 Dropout）

### BN的问题

1. 每次是在一个 batch 上计算均值、方差，如果 batch size 太小，则计算的均值、方差不足以代表整个数据分布。
2. batch size 太大：会超过内存容量；需要跑更多的 epoch，导致总训练时间变长；会直接固定梯度下降的方向，导致很难更新

## Group Normlization

Original: https://blog.csdn.net/weixin_52185313/article/details/123336080
Author: PD我是你的真爱粉
Title: 深度学习激活函数与正则化问题

(0)

### 大家都在看

• #### 2021NIPS | 即插即用,标准化注意力机制NAM

NAM: Normalization-based Attention Module paper:https://arxiv.org/pdf/2111.12419.pdf code:…

人工智能 2023年7月13日
0150
• #### 一些关于Image Caption和Visual Storytelling的想法

这几天在看一篇关于Visual Storytelling的论文，题目为《Knowledge-Enriched Visual Storytelling》。这篇论文主要是介绍他们提出的…

人工智能 2023年6月1日
0190
• #### YOLOv5的Tricks | 【Trick7】指数移动平均（Exponential Moving Average，EMA）

如有错误，恳请指出。 文章目录 1. 移动平均法 2. 指数移动平均 3. TensorFlow中的EMA使用 4. Yolov5中的EMA使用 这篇博客主要用于整理网上对EMA（…

人工智能 2023年6月19日
0169
• #### NLP & 推荐算法 论文+博客整理

描述论文deep learning for nlp的早期框架 主题模型：LDA 条件随机场： word2vec glove elmo nlp中的cnn RNN-based seq2…

人工智能 2023年5月28日
0176
• #### 神经网络语音分离必读论文、代码、教程、公开数据集整理分享

语音分离的目标是把目标语音从背景干扰中分离出来。在信号处理中，语音分离属于很基本的任务类型，应用范围很广泛，包括听力假体、移动通信、鲁棒的自动语音以及说话人识别。人类听觉系统能轻易…

人工智能 2023年5月27日
0235
• #### 你与顶级架构师的差距，可能就在这个数据中台解决方案

最近 数据中台很火，接触的很多企业都在提这个东西。然而，很多连数据基础都没有、仍然处在数据孤岛阶段的企业，上来就说我今年要做数据中台项目，这实际上是因为大家都在追热点，而没有真正搞…

人工智能 2023年7月18日
0140
• #### UR10 ROS（noetic）驱动安装过程及操控实际机械臂过程

UR10驱动包安装过程: workspace mkdir -p ur_ws/src && cd ur_ws package https://github.com/U…

人工智能 2023年6月10日
0186
• #### 【OpenCV图像处理14】图像分割与修复

文章目录 十四、图像分割与修复 * 1、图像分割 – 1.1 分水岭法 1.2 GrabCut法 1.3 MeanShift法 2、视频前后景分离(视频背景抠图) &#…

人工智能 2023年6月20日
0204
• #### 目标检测中预测框回归优化IOU、GIOU、DIOU、CIOU、EIOU（二）

目录 IOU GIOU DIOU CIOU IOU、GIOU、DIOU、CIOU 损失函数对比 EIOU计算和损失函数 总结 目标检测分为：目标分类 + 目标定位两个任务。 目标分…

人工智能 2023年7月12日
0221
• #### python-OpenCV图像图形检测（四）

实例下载：图形检测，检测图形轮廓，边缘检测，轮廓拟合 一、简介 图形检测是计算机视觉的一项重要功能，通过图形检测可以分析图像中可能存在的形状，然后对这些形状进行描绘，例如：搜索并绘…

人工智能 2023年5月28日
0146
• #### 修改pip默认安装位置

修改pip默认安装位置 默认安装位置是C:\Users\用户名\AppData\Roaming\Python\Python38\Scripts。浅浅建议不把这些东西放到系统盘，而是…

人工智能 2023年7月6日
0169
• #### 数据挖掘笔试题（一）

【公众号：深度学习视觉】 ⼀. 单项选择题1.想要了解上海市⼩学⽣的⾝⾼,需要抽取500个样本,这项调查中的样本是? A.从中抽取的500名学⽣的⾝⾼B.上海市全部⼩学⽣的⾝⾼C….

人工智能 2023年7月17日
0143
• #### OCR文字识别技术总结（二）

抵扣说明： 1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。 Original: https://blo…

人工智能 2023年7月20日
0147
• #### AI智能语音识别算法原理 二

AI智能语音识别算法的信号处理有以下几种方式 一、声源定位 1、电扫阵列 当系统扫描到输出信号功率最大时所对应的波束方向就是认为是声源的DOA方向，从而可以声源定位。电扫阵列的方式…

人工智能 2023年5月25日
0148
• #### 公交语音播报调试第三天

任务书 公交报站器由控制模块STC89C52单片机作为控制核心，硬件电路分为12864液晶屏、ISD1730语音芯片、温湿度传感器和红外传感器等模块。该系统的功能是：首先可以通过八…

人工智能 2023年5月27日
0146
• #### 车道线检测论文Ultra-Fast-Lane-Detection-master代码复现过程

Ultra-Fast-Lane-Detection-master 摘要： 现代的车道检测方法主要将车道检测视为像素分割问题， 难以解决具有挑战性的场景和速度问题。受人类感知的启发，…

人工智能 2023年7月13日
0184