cs231n spring 2017 lecture6 Training Neural Networks I 听课笔记
1. 激活函数:
1)Sigmoid,σ(x)=1/(1+e-x)。把输出压缩在(0,1)之间。几个问题:(a)x比较大或者比较小(比如10,-10),sigmoid的曲线很平缓,导数为0,在用链式法则的时候,后一层传回来的导数乘以sigmoid的导数也是0了,换句话说,对于sigmoid饱和的区域后一层的导数传不到前面去了。(b)输出永远为正,即下一层的输入永远为正,我们希望输入的均值为0。(c)exp还是稍微有点难计算。
2)tanh(x),输出压缩在[-1,+1]之间,比sigmoid的进步在于输出有正有负以0为中心。
3)ReLU(Rectified Linear Unit),f(x)=max(0,x)。优点:(a)在正方向不会饱和。(b)计算简单。(c)实际中比sigmoid和tanh都收敛的快的多。(d)更像生物学神经元。缺点:(a)not zero-centered output。(b)负方向全部是0.
实际使用中,会给ReLU神经元一个正向的bias,比如0.01。
4)Leaky ReLU,f(x)=max(0.01x, x)。优点:有ReLU的所有优点,另外它在负方向也不会饱和,所以总是不会失效。
类似的有Parametric Rectifier (PReLU),f(x)=max(αx, x)。
5)Exponential Linear Units (ELU)。x>0时,f(x)=x, x<=0时,f(x)=α(exp(x)-1)。优点:有ReLU的所有优点,相比于Leaky ReLU,它更鲁邦。但计算过程需要exp(),计算稍微复杂一点。
6)Maxout “Neuron”,f(x)=max(wT1x+b1, wT2x+b2),是对ReLU和Leaky ReLU的推广,正负方向都是线性,不会饱和。缺点是花了两倍的参数。
总结:(a)用ReLU,注意学习率。(b)尝试Leaky ReLU/Maxout/ElU。(c)尝试tanh,但不要期望太好。(d)不要用sigmoid。
2. 数据预处理:中心化,所有样本的均值设为0,标准差设为1。中心化的目的是把每个样本都放到同一个尺度下去考虑,对于图像来说,由于像素的值已经被归一化到0~255之间,所以中心化的诉求会轻一些。 有时候还会用PCA去掉相关性,让协方差矩阵成为对角矩阵。也会Whiten操作,把协方差矩阵变换为单位矩阵。
3. 权重W的初始化:这是很重要的研究课题,有很多paper。
1)小随机数,W = 0.01*np.random.randn(D, H)。这种方式对浅网络有效,对深层网络不好,每层的输出会很快衰减到0。
2)大随机数,W = np.random.randn(D, H),很容易饱和。
3)Xavier initialization,W = np.random.randn(node_in, node_out) / np.sqrt(node_in),Glorot et al., 2010,论文的数学推导是基于线性激活函数,对于非线性激活函数就无效了。
4)He initialization,W = np.random.randn(node_in, node_out) / np.sqrt(node_in / 2),He et al., 2015,直观的解释是:在ReLU网络中,假定每一层有一半的神经元被激活,另一半为0,所以,要保持variance不变,只需要在Xavier的基础上再除以2。
4. Batch Normalization:在线性变换(全连接层、卷积层)之后对输出进行归一化,然后再非线性化激活,Loffe and Szegedy,2015。直观的解释是:我们想要的是在非线性activation之前,输出值应该有比较好的分布(例如高斯分布),以便于back propagation时计算gradient,更新weight。Batch Normalization将输出值强行做一次Gaussian Normalization和线性变换。
归一化成均值为0,方差为1之后,我们也不能保证说这种归一化就一定好,于是往往又会给它自由度调整自己的均值和方差。
Batch Normalization降低了对初始化好坏的依赖。
注意在训练阶段,mean/std是基于batch计算出来的,而在测试阶段,mean/std则是用训练阶段得到的某个固定值(比如取平均),而不是基于bach计算。
5. 深度学习的一般流程:
1)归一化输入,减去均值,除以方差。
2)检查Loss是否合理,先不要考虑正则化项,得到一个loss值,看这个值合理么;然后考虑正则化项,这时候的loss值应该比之前大了一些。
3)先用小的训练集,关掉正则化项,这时候算法要能过拟合,得到很小的loss,接近0。
4)用全部的训练集,设一个小的正则化项,找learning rate使得loss可以下降。Loss不下降或者下降很慢,说明learning rate设小了,需要增大。Loss变成无穷大NaN,说明learning rate设太大了,需要减小。Learning rate一般在[1e-3, 1e-5]。
6. 超参数的选取:用cross-validation从粗糙到精细地搜索。开始,只需要迭代几次,就可以很直观的看超参数如何影响,最好是把超参数在它的空间随机选取,如果一定要有规律,那就按10的n次方选取,线性的搜索太慢了。然后,迭代多一点,更精细的找。如果loss超过最开始值的三倍,就可以放弃这组参数了。另外一个经验是:更新的量和原来的值的比值update/value在0.001、0.01周围比较好,太大太好都不好。
超参数包括:网络的结构,学习率,正则化项等。这些参数里,学习率是最影响结果的,要优先调,正则化什么的相对次要一些。
cs231n spring 2017 lecture6 Training Neural Networks I 听课笔记的更多相关文章
- cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记
1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...
- cs231n spring 2017 lecture6 Training Neural Networks I
1. 激活函数: 1)Sigmoid,σ(x)=1/(1+e-x).把输出压缩在(0,1)之间.几个问题:(a)x比较大或者比较小(比如10,-10),sigmoid的曲线很平缓,导数为0,在用链式法 ...
- cs231n spring 2017 lecture7 Training Neural Networks II
1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...
- cs231n spring 2017 lecture10 Recurrent Neural Networks 听课笔记
(没太听明白,下次重新听一遍) 1. Recurrent Neural Networks
- cs231n spring 2017 lecture10 Recurrent Neural Networks
(没太听明白,下次重新听一遍) 1. Recurrent Neural Networks
- cs231n spring 2017 lecture5 Convolutional Neural Networks听课笔记
1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...
- cs231n spring 2017 lecture5 Convolutional Neural Networks
1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...
- cs231n spring 2017 lecture3 Loss Functions and Optimization 听课笔记
1. Loss function是用来量化评估当前预测的好坏,loss function越小表明预测越好. 几种典型的loss function: 1)Multiclass SVM loss:一般的S ...
- cs231n spring 2017 lecture8 Deep Learning Networks 听课笔记
1. CPU vs. GPU: CPU核心少(几个),更擅长串行任务.GPU有很多核心(几千个),每一个核都弱,有自己的内存(几个G),很适合并行任务.GPU最典型的应用是矩阵运算. GPU编程:1) ...
随机推荐
- Git使用简单总结
创建版本库git add加入到暂存区git commit -m" "加入到分支 时光机穿梭git satus查看仓库的当前状态git diff file 查看修改内容 版本回退HE ...
- adobe acrobat x pro破解版
adobe acrobat x pro破解版是Adobe官方出品的PDF文档全能解决方案套件. PDF文件格式是Adobe公司设计的,用其公司开发的Adobe Acrobat X Pro来创建.编辑. ...
- 【ANT】java项目生成文件示例
<?xml version="1.0" ?> <project default="dist"> <property name=&q ...
- 栈stack(2):栈的链表实现
定义 从上一篇我们知道,栈(stack)是一个只允许一端进行删除插入操作的线性表.同时,我们联想到线性表的链式结构,其特点是用一组任意的存储单元存储线性表的数据元素,因此我们选择使用链表去实现栈,规定 ...
- API接口开发简述
作为最流行的服务端语言PHP(PHP: Hypertext Preprocessor),在开发API方面,是很简单且极具优势的.API(Application Programming Interfac ...
- 【Zookeeper】源码分析之服务器(五)之ObserverZooKeeperServer
一.前言 前面分析了FollowerZooKeeperServer,接着分析ObserverZooKeeperServer. 二.ObserverZooKeeperServer源码分析 2.1 类的继 ...
- CSS3关于过渡效果的问题
首先trasition:transform只是单单表示后面只要有含有的tranform的所有属性可以参与动画,而trasition:all表示后面所有动画属性都可以参动画,当父容器有relative时 ...
- OpenStack运维(二):OpenStack计算节点的故障和维护
1.计划中的维护 举例:需要升级某一个计算节点的硬件配置,需要将计算节点上的虚拟机迁移后在对其进行操作,分为两种情况. 1.1 云系统使用了共享存储 a. 获取虚拟机列表:nova list --ho ...
- BLE抓包是怎么回事儿?
BLE抓包 在进行网络开发的时候,抓包是一个很重要的调试过程,通过抓包可以分析网络传输的数据是否正确,可以深入理解网络传输过程.在物联网开发中,BLE低功耗蓝牙技术是一种非常通用的网络传输方式.在学习 ...
- 例子:js超级玛丽小游戏
韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键 ...