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 听课笔记的更多相关文章

  1. cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

  2. cs231n spring 2017 lecture6 Training Neural Networks I

    1. 激活函数: 1)Sigmoid,σ(x)=1/(1+e-x).把输出压缩在(0,1)之间.几个问题:(a)x比较大或者比较小(比如10,-10),sigmoid的曲线很平缓,导数为0,在用链式法 ...

  3. cs231n spring 2017 lecture7 Training Neural Networks II

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

  4. cs231n spring 2017 lecture10 Recurrent Neural Networks 听课笔记

    (没太听明白,下次重新听一遍) 1. Recurrent Neural Networks

  5. cs231n spring 2017 lecture10 Recurrent Neural Networks

    (没太听明白,下次重新听一遍) 1. Recurrent Neural Networks

  6. cs231n spring 2017 lecture5 Convolutional Neural Networks听课笔记

    1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...

  7. cs231n spring 2017 lecture5 Convolutional Neural Networks

    1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...

  8. cs231n spring 2017 lecture3 Loss Functions and Optimization 听课笔记

    1. Loss function是用来量化评估当前预测的好坏,loss function越小表明预测越好. 几种典型的loss function: 1)Multiclass SVM loss:一般的S ...

  9. cs231n spring 2017 lecture8 Deep Learning Networks 听课笔记

    1. CPU vs. GPU: CPU核心少(几个),更擅长串行任务.GPU有很多核心(几千个),每一个核都弱,有自己的内存(几个G),很适合并行任务.GPU最典型的应用是矩阵运算. GPU编程:1) ...

随机推荐

  1. Git使用简单总结

    创建版本库git add加入到暂存区git commit -m" "加入到分支 时光机穿梭git satus查看仓库的当前状态git diff file 查看修改内容 版本回退HE ...

  2. adobe acrobat x pro破解版

    adobe acrobat x pro破解版是Adobe官方出品的PDF文档全能解决方案套件. PDF文件格式是Adobe公司设计的,用其公司开发的Adobe Acrobat X Pro来创建.编辑. ...

  3. 【ANT】java项目生成文件示例

    <?xml version="1.0" ?> <project default="dist"> <property name=&q ...

  4. 栈stack(2):栈的链表实现

    定义 从上一篇我们知道,栈(stack)是一个只允许一端进行删除插入操作的线性表.同时,我们联想到线性表的链式结构,其特点是用一组任意的存储单元存储线性表的数据元素,因此我们选择使用链表去实现栈,规定 ...

  5. API接口开发简述

    作为最流行的服务端语言PHP(PHP: Hypertext Preprocessor),在开发API方面,是很简单且极具优势的.API(Application Programming Interfac ...

  6. 【Zookeeper】源码分析之服务器(五)之ObserverZooKeeperServer

    一.前言 前面分析了FollowerZooKeeperServer,接着分析ObserverZooKeeperServer. 二.ObserverZooKeeperServer源码分析 2.1 类的继 ...

  7. CSS3关于过渡效果的问题

    首先trasition:transform只是单单表示后面只要有含有的tranform的所有属性可以参与动画,而trasition:all表示后面所有动画属性都可以参动画,当父容器有relative时 ...

  8. OpenStack运维(二):OpenStack计算节点的故障和维护

    1.计划中的维护 举例:需要升级某一个计算节点的硬件配置,需要将计算节点上的虚拟机迁移后在对其进行操作,分为两种情况. 1.1 云系统使用了共享存储 a. 获取虚拟机列表:nova list --ho ...

  9. BLE抓包是怎么回事儿?

    BLE抓包 在进行网络开发的时候,抓包是一个很重要的调试过程,通过抓包可以分析网络传输的数据是否正确,可以深入理解网络传输过程.在物联网开发中,BLE低功耗蓝牙技术是一种非常通用的网络传输方式.在学习 ...

  10. 例子:js超级玛丽小游戏

    韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键 ...