CS231n 2016 通关 第五章 Training NN Part1
在上一次总结中,总结了NN的基本结构。
接下来的几次课,对一些具体细节进行讲解。
比如激活函数、参数初始化、参数更新等等。
=========================================================================================
首先,课程做 一个小插曲:

经常使用已经训练好的模型》》Finetune network
具体例子:


使用现成模型,修改部分层,使用现成的参数做初始参数。
以caffe为例,其提供了很多现成的模型:
https://github.com/BVLC/caffe/wiki/Model-Zoo
使用Finetune 主要是计算资源有限。

其次是上节课主要内容的简单回顾:

概括了NN的主要流程: 得到数据 ---》前向传播 ---》反向传播 ---》更新参数
另外便是链式法则:


实例:


NN的结构特点:
加入非线性:

与神经系统比较:

多层NN结构:

注意: 有些资料把输入层也算在NN的层数里。
=========================================================================================
本章的内容如下:
一些历史回顾
简单的字母识别系统:

当时就使用了伪梯度下降。其实不是严格可导。
之后形成了网络结构,并使用电路实现:

进一步形成了多层网络:

反向传播算法开始流行起来。
Deep Learning :

使用了非监督学习进行预处理,然后将得到的结果放到back propagation中。如今不需要这样做了。
技术革新:

2012年的图像分类结果最优。从此DL火起来了。
技术内容总览:

=========================================================================================
1、激活函数
激活函数的作用:

常用激活函数:

Sigmoid:特点以及缺陷

比较左侧s输入值与经过f后的输出值,会导致梯度消失、数值溢出。

当输入为正时,偏导均为正或均为负。

tanh:

仍然会有梯度消失的后果。
ReLU (Rectified Linear Unit):

其不会有溢出,计算更快。当x<0时,梯度为0.
缺点:出现死亡状态。


为负值输入时,不能更新参数。一般是学习率过高导致。另外使用合适的初始化,比如加入小的bias。
Leaky ReLU :解决负值不能更新参数。

ELU:

Maxout:

总结:

=========================================================================================
2、数据预处理
减均值与规则化:

减去均值,使得数据以0点为中心。规则化使得数据范围变成-1到1之间。
PCA 与 Whitening

PCA能将数据降为表示。白化降低数据的相关性。
具体的细节可以参考课程配套笔记。
效果比较:

实践经验:在图像处理中减均值用的较多,归一化也比会使用。

=========================================================================================
3、权重参数初始化
问题:

方案一:

可能导致的结果:

可能由于scale太小造成,使得后面隐藏层的输入变为了0。改进:

方案二:

方案三:

一些参考:具体的细节需要分析论文。

=========================================================================================
4、Batch Normalization
结构:

在全连接或者卷积层后、在非线性激活函数之前使用。
可以参考此博文进行了解。
计算细节:


BN的优点: 可使用高的学习率更快收敛。dropout与正则化需求降低。
训练阶段与测试阶段不同的处理:

主要均值与方差的计算。测试阶段不再对数据计算均值与方差,而是使用train阶段得到的值。
=========================================================================================
5、实现流程
(1) 对数据预处理

(2) 选择合适的网络结构。

(3) 验证loss 是否合理。


(4) 开始训练

选择不同的正则强度系数和学习率,观察loss是否在下降:

不同的选择:

=========================================================================================
6、超参数选取
选择策略:

实例:正则化强度系数与学习率选取

调整:

原因是学习率太高了。
选取参数的策略:


大神的经验:将不同的选取方式做总结并代码实现,方便调试不同的模型。快速有效:

一些例子:


右图的初始化存在问题,在很长时间里,loss并没有下降。
一些loss 图:

关于accuracy以及参数更新:


对更新参数进行评估。
=========================================================================================
总结:

本章是相对而言比较难,并且及其重要的一章。需要多参考对应的note对细节进行学习。
附:通关CS231n企鹅群:578975100 validation:DL-CS231n
CS231n 2016 通关 第五章 Training NN Part1的更多相关文章
- CS231n 2016 通关 第六章 Training NN Part2
本章节讲解 参数更新 dropout ================================================================================= ...
- CS231n 2016 通关 第五、六章 Fully-Connected Neural Nets 作业
要求:实现任意层数的NN. 每一层结构包含: 1.前向传播和反向传播函数:2.每一层计算的相关数值 cell 1 依旧是显示的初始设置 # As usual, a bit of setup impor ...
- CS231n 2016 通关 第四章-NN 作业
cell 1 显示设置初始化 # A bit of setup import numpy as np import matplotlib.pyplot as plt from cs231n.class ...
- CS231n 2016 通关 第五、六章 Dropout 作业
Dropout的作用: cell 1 - cell 2 依旧 cell 3 Dropout层的前向传播 核心代码: train 时: if mode == 'train': ############ ...
- CS231n 2016 通关 第五、六章 Batch Normalization 作业
BN层在实际中应用广泛. 上一次总结了使得训练变得简单的方法,比如SGD+momentum RMSProp Adam,BN是另外的方法. cell 1 依旧是初始化设置 cell 2 读取cifar- ...
- CS231n 2016 通关 第四章-反向传播与神经网络(第一部分)
在上次的分享中,介绍了模型建立与使用梯度下降法优化参数.梯度校验,以及一些超参数的经验. 本节课的主要内容: 1==链式法则 2==深度学习框架中链式法则 3==全连接神经网络 =========== ...
- CS231n 2016 通关 第三章-Softmax 作业
在完成SVM作业的基础上,Softmax的作业相对比较轻松. 完成本作业需要熟悉与掌握的知识: cell 1 设置绘图默认参数 mport random import numpy as np from ...
- CS231n 2016 通关 第三章-SVM 作业分析
作业内容,完成作业便可熟悉如下内容: cell 1 设置绘图默认参数 # Run some setup code for this notebook. import random import nu ...
- CS231n 2016 通关 第三章-SVM与Softmax
1===本节课对应视频内容的第三讲,对应PPT是Lecture3 2===本节课的收获 ===熟悉SVM及其多分类问题 ===熟悉softmax分类问题 ===了解优化思想 由上节课即KNN的分析步骤 ...
随机推荐
- 深入struts2.0(七)--ActionInvocation接口以及3DefaultActionInvocation类
1.1.1 ActionInvocation类 ActionInvocation定义为一个接口.主要作用是表现action的运行状态.它拥有拦截器和action的实例.通过重复的运行inv ...
- 《UNIX-Shell编程24学时教程》读书笔记Chap3,4 文件,目录操作
Chap3 文件操作 P28 在这章中,要着重记住一些常用的选项,要有使用正则表达式的思维,能更快达到目的.----@im天行 3.1 列文件名 .profile sh的初始化脚本: .kshr ...
- 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model
利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model 使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...
- http 错误代码一览表
http协议一些常见的状态码为: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分 ...
- 《Python核心编程》数字类型
1.数字类型简单介绍 Python中数字类型包含:整型.长整型.布尔型.双精度浮点型.十进制浮点型.复数.这些数字类型都是不可变类型.也就是说,改变了数字的值会生成新的对象. 在Python中删除数字 ...
- hibernate5(10)注解映射[2]一对多单向关联
在上一篇文章里.我们从端方向一端建立关联关系,完毕了从文章到作者的关联关系建立.但在实际的博客站点中,用户肯定还须要获取自己所写的文章,这时能够建立用户(一)对文章(多)的单向关联映射. 先来看我们的 ...
- C语言函数的递归和调用
函数记住两点: (1)每个函数运行完才会返回调用它的函数:每个函数运行完才会返回调用它的函数,因此,你可以先看看这个函数不自我调用的条件,也就是fun()中if条件不成立的时候,对吧,不成立的时候就是 ...
- LeetCode(155)题解--Min Stack
https://leetcode.com/problems/min-stack/ 题目: Design a stack that supports push, pop, top, and retrie ...
- js比较3个数字的大小
<script> var a = [1, 5, 2, 123, 34, 43, 7]; var i = j = t = 0; //sort方法, 推荐使用 a.sort(function( ...
- OTL中文乱码 OTL UTF8
在用unixODBC连接MySQL的时候字符编码是由odbc支持的,不须要C++编译OTL的时候加上什么编译条件. 假设你的数据库使用的编码是UTF-8,你要从这个数据库读数据.并且还要将结果放到这个 ...