umich cv-5-1 神经网络训练1
这节课中介绍了训练神经网络的第一部分,包括激活函数的选择,权重初始化,数据预处理以及正则化方法
激活函数
这部分主要讨论我们之前提到的几种激活函数的利弊:

首先我们看sigmoid函数,这种激活函数有着激活函数中常见的优点与缺点:

优点方面,它可以使数据分布在0-1之间,可以很好地表示神经元的饱和放电现象
缺点方面
我们考虑使用这个激活函数进行梯度的反向传播:

我们可以看到在x = 10或者x = -10时,传播的梯度都会接近于0,导致后面的所有梯度均变为0,这就会导致梯度消失,我们的神经网络无法学习
同时,sigmoid激活函数的输出并不是以0为中心:

我们知道w梯度的反向传播的值于x相关,所以当x一直为正时,w梯度将取决于w的正负,所以梯度很可能会在正负之间横跳,这样也不利于神经网络的学习,但是在小数据集上还是可以使用,并且小哥指出这一点其实不是特别关键
最后,就是exp()这种非线性操作从底层来说很花费时间(相对于线性操作来说)
之后我们再来看看其它激活函数:
tanh它的优缺点与sigmoid函数大致相同:

然后是最常用的relu激活函数:

relu函数有很多优异的性质,比如不会导致饱和杀死梯度,计算开销低速度快,神经网络收敛的也快
但是还有一个人们一直担心的问题就是:

小于0的数据永远不会被激活无法学习
因此人们又想出来了很多relu的变体:
leaky relu在小于0的区域加入一个线性函数,更进一步地,可以把小于0区域函数的系数作为一个可学习的参数加入神经网络,通过反向传播来更新优化

elu 相对于leaky relu添加了鲁棒性,但是计算开销增大

selu 对深度神经网络的效果很好 甚至可以不用batch normalization就可以训练深层神经网络 而其中的参数是固定的,是通过91页的数学推导得出的结果(震惊小哥一万年)

最后再放上不同激活函数数据的统计以及小哥的建议:


数据预处理
数据的预处理最常见的就是从均值与标准差入手:

当然也有少数使用PCA降维与数据白化:

它们的基本思想都是减少模型的敏感性,使其更容易优化收敛:

举个例子,Alexnet VGG ResNet都采用了不同的数据预处理方法,Alexnet减去整个图像的均值,VGG减去每个通道的均值,而Resnet减去每个通道的均值再除以每个通道的标准差

权重初始化
在训练神经网络时,我们面临的问题就是如何进行权重矩阵的初始化
首先一个基础的想法就是都初始化为0矩阵,但是这样会导致所有的输出都是0,梯度都一样,无法学习
其次我们会想全0不行,那随机生成一些随机数应该可以了吧,我们可以使用python中randn函数,利用高斯分布生成随机数,但是这样的方法只使用于小的神经网络,不适用于更深的神经网络,为什么呢?

我们把在不同层的数据分布图画出来,可以看到:


std系数小的时候,数据在深层会集中在0,std大的时候就会出现之前的过饱和现象,杀死梯度,这两种情况都会导致神经网络无法学习
针对上述问题,人们想出来了Xavier initialization,把之前的std改为除以输入维度开根号,这是针对全连接层,卷积层是卷积核的平方乘以输入维度再开根号,我们可以看到效果很好,基本维持住了数据的形状

这里的原理主要就是我们想要使输入方差等于输出方差,这一点可以利用基本的概率论知识进行推导,建立在相互独立以及均值为0的假设上:

但是上述神经网络中我们采用的是tanh激活函数,假如我们使用relu激活函数,那么均值为0的假设就不成立,这时候人们推导出针对relu的Kaiming initialization:

上面提到了全连接层还有卷积层,还没有提到残差网络,针对残差网络比较特殊,如果我们使用上述初始化,使得输入与输出的方差相等的话,由于残差块还要加上一个x,所以方差是一定会增大的,这里我们可以把第一个卷积层采用kaiming initialization初始化,第二个卷积层直接初始化为0,这样我们残差块的输入与输出的方差就相等了:

正则化
正则化方法最常用的就是我们直接衡量矩阵的L2distance等等:

也有我们之前提到的dropout方法:

这里的思想是神经网络中可能有冗余的特征,通过dropout我们可以放弃这些冗余的特征,降低特征与特征之间的关联,这样有利于我们提取到更重要更有效的特征:

这里引入正则化的一般模式,思想是在训练的时候我们加入随机性,在测试的时候我们平均这种随机性防止混乱:

dropout的实现也是如此:

注意dropout只使用于全连接层,对于放弃了全连接层的网络一般使用batch normalization:

既然提到了正则化的思想是增加随机性,我们可以在输入数据上做更多的处理,采用不同的数据增强方法:
我们可以旋转我们的图像:

将图像划分为不同的区域:

甚至改变颜色:

总之我们可以做任何疯狂的事情来帮助我们的神经网络学习不同复杂的情况:

除了数据增加,我们还有dropconnect,随机放弃神经元之间的连接:

选择随机的池化区域:

随机跳过一些残差块:

随机将图像的一部分像素设为0(cutout):

将不同的图像混合训练:

最后是小哥的建议!

umich cv-5-1 神经网络训练1的更多相关文章
- 深度学习与CV教程(6) | 神经网络训练技巧 (上)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- 深度学习与CV教程(4) | 神经网络与反向传播
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- 神经网络训练中的Tricks之高效BP(反向传播算法)
神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 ...
- tesorflow - create neural network+结果可视化+加速神经网络训练+Optimizer+TensorFlow
以下仅为了自己方便查看,绝大部分参考来源:莫烦Python,建议去看原博客 一.添加层 def add_layer() 定义 add_layer()函数 在 Tensorflow 里定义一个添加层的函 ...
- 模式识别之ocr项目---(模板匹配&BP神经网络训练)
摘 要 在MATLAB环境下利用USB摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出 ...
- 字符识别OCR研究一(模板匹配&BP神经网络训练)
摘 要 在MATLAB环境下利用USB摄像头採集字符图像.读取一帧保存为图像.然后对读取保存的字符图像,灰度化.二值化,在此基础上做倾斜矫正.对矫正的图像进行滤波平滑处理,然后对字符区域进行提取切割出 ...
- 从有约束条件下的凸优化角度思考神经网络训练过程中的L2正则化
从有约束条件下的凸优化角度思考神经网络训练过程中的L2正则化 神经网络在训练过程中,为应对过拟合问题,可以采用正则化方法(regularization),一种常用的正则化方法是L2正则化. 神经网络中 ...
- TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤
一.TensorFlow实战Google深度学习框架学习 1.步骤: 1.定义神经网络的结构和前向传播的输出结果. 2.定义损失函数以及选择反向传播优化的算法. 3.生成会话(session)并且在训 ...
- TensorFlow实战第三课(可视化、加速神经网络训练)
matplotlib可视化 构件图形 用散点图描述真实数据之间的关系(plt.ion()用于连续显示) # plot the real data fig = plt.figure() ax = fig ...
- 从MAP角度理解神经网络训练过程中的正则化
在前面的文章中,已经介绍了从有约束条件下的凸优化角度思考神经网络训练过程中的L2正则化,本次我们从最大后验概率点估计(MAP,maximum a posteriori point estimate)的 ...
随机推荐
- 【游戏开发笔记】编程篇_C#面向对象 {下}
@ 目录 7.定义类 7.1 C#中的类定义 7.1.1 接口的定义 7.1.2 修饰符 7.2 System.Object 7.3 构造函数和析构函数 7.4 结构类型 7.5 浅度和深度复制 8. ...
- sql-lab通关
page1-less1-22 联合查询 第一关 发现是有回显的,且传入的参数是通过'1'包裹的,所以我们的payload,如下 测试列数 ?id=1' order by 3 --+ //超过第一条语句 ...
- 注意!JAVA中的值传递
前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况. LeetCode 113 问题:给你二叉树的根节点root和一个整数目标和target ...
- cesium 绑定dom弹窗(跟随模型)
https://blog.csdn.net/qq_36266612/article/details/109648367?utm_term=cesium%E6%80%8E%E4%B9%88%E6%B7% ...
- Oracle表的导出、导入
有些情况下,需要单独导出某些表,用或者分析数据. 下面记录Oracle表的导出导入方法 1. 表的导出 ./exp $username/$passwd@$ORACLE_SID file=/$file_ ...
- 零代码,使用 Dify 和 Laf 两分钟接入企业微信 AI 机器人
Dify 允许创建 AI 应用,并提供二次开发的能力.这里我将演示创建一个法律问答助手的 AI 应用,称作"知法".在本篇教程中,我将指导你为"知法"接入企业微 ...
- VR国标
<软件基本要求与测试方法>
- 【krpano】 ASP点赞插件
简述 这是一个Asp版krpano点赞案例,运用asp+xml读写.存储数据,结合krpano代码实现的功能:现将案例上传网站供大家学习研究,希望对大家有所帮助. 功能 用户在网页可点赞后显示已点赞数 ...
- Solution -「洛谷 P4688」「YunoOI 2016」掉进兔子洞
Description (Link)[https://www.luogu.com.cn/problem/P4688]. 每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的 ...
- lvm格式化挂载分区
1.从物理磁盘创建lvm分区 物理磁盘 /dev/sdb 20G 2.使用fdisk工具创建lvm分区 3.修改默认的分区类型 4.查看新建的分区 5.创建物理卷pv 6.创建逻辑卷组vg,并查看详情 ...