Deep Learning学习笔记(一)——基本介绍

开始学习Deep Learning了,为了使自己学习的过程至于什么都没有留下,决定写一写博客,理一理思路,这样回头复习起来还好复习一点是不是?
入门DL是从李宏毅老师的《一天搞懂深度学习》这个PPT开始的,这一部分的简介也是以这个内容为主,主要内容包括。
- 神经元与神经网络的基本结构
- 误差函数与梯度下降法
- 一些小技巧
    - Mini-batch
    - New Activation Function
    - Adaptive Learning Rate
    - Momentum
- 过拟合的解决
    - Early Stop
    - Weight Decay
    - Dropout

神经元与神经网络的基本结构

神经网络是由一个一个神经元联结而成的,每一个神经元都是由一系列的输入通过一定的处理得到一个输出。
神经元的结构里有线性成分与非线性成分,线性成分即是由输入各项的一个加权组合生成,而最终的非线性成分则将线性输出代入所谓的**激励函数**产生。常用的激励函数是sigmoid函数,如果是输出层可能使用softmax以使理解输出的含义,我个人理解是表示的是一种概率。
神经网络多是由若干层神经元组成,每一层接收一个确定维数的输入,并输出一个向量传到下一层。神经网络分为输入层、输出层和隐藏层。

误差函数与梯度下降法

当我们建立了一个神经网络的模型时,我们就需要一个标准来刻画这个模型离我们期望的模型差多少,这便引入了误差函数。而在这个给定模型下,如何选择权重参数也是一个要考虑的问题。
常用的误差函数是平方误差函数,他是对于每个输入的理想输出与实际输出的差的模的平方。另一种称为*cross entropy*,网上翻译是交叉熵代价函数,一般是在softmax输出层使用。
至于选取合适的参数,常用的是梯度下降法。假设我们现在考虑误差随着一个参数的变化规律(偏导),如果是正的,那是不是说明我们应该减小这个参数?并且这个减小的幅度是和偏导的大小有关,这也就是梯度下降法的主体思路。

一些小的技巧

其实这部分我很不会起标题,因为这部分技巧解决的问题都不太一样,有解决计算量太大的,有解决精度问题的,所以我也不打算总结这个部分了。

Mini-batch

在训练集的数据量很大的时候,如果每次计算误差函数都需要把每个输入的输出都算出来实际上很耗费计算量,而Mini-batch的思想就是认为我们没有必要每次都输出全局误差,而将输入数据分成若干组,每次计算和更新参数时,只计算这一组的误差函数,这样虽然不能保证每次更新都向着最优解方向,但计算量能有相当大的减少。

New Activation Function

sigmoid有一个问题,就是当输入的加权线性组合较大时,就会进入sigmoid的平坦区,从而使偏导数变小,有人称之为**消失的梯度**问题。
[link text](http://www.tuicool.com/articles/rQNZZnm)
这也说明了另一个问题,就是神经网络不是越深越好。
据说以前有一种方法叫做RBM pre-training,这个坑我回头再填。
现在有一种解决方法,是用一个新的Cost Function叫Rectified Linear Unit (ReLU),这是一个分段线性的函数,当输入为负时输出0,否则原样输出。因为它不存在低变化率的点,所以能解决之前我们提到的问题。后来这个函数又有了很多的变种,如Leaky ReLU,此处不过多阐述。
这里留一个坑给Maxout。

Adaptive Learning Rate

据说,在实际操作的过程中,如果让Learning Rate也保持变化,可以有奇效。
Learning Rate是一个难伺候的东西,如果太大的话不能保证随着梯度下降法Cost Function会变小,但太小的话可能会发费很长时间才达到想要的精度。
于是人们就有了两种想法:首先,因为一开始参数离最优值较远,故可以选取较大的Learning Rate,而随着越来越接近最优值,我们可以减小之。
另一种想法是认为Learning Rate对于不同的权重应该取不同的值。Adagrad即为一种方法。通过它可以做到
1. 每次更新都会使Learning Rate变小
2. Learning Rate变化与偏导相关。偏导越大,Learning Rate变化越小,反之亦然。
然后还有一些其他的方法,详见PPT。

Momentum

这个坑先留着,是用来避开局部最小值从而达到全局最小值。有点利用了物理中的概念。

过拟合的方法

训练过程中有一个严重的问题就是过拟合。因为太贴近于训练集导致在实际使用时没有好的效果。除了增加更多训练数据、创造更多数据(比如把一张图片转个15度),还有一些专门的方法来解决。

Early Stop

虽然说随着更新次数的增多,在训练集上的误差会不断地减少,但是如果训练太多次的话会导致过拟合,如果我们把训练集里的一部分单独划分出来当测试集。在训练集上训练的同时在测试集上验证,若在测试集上的误差开始上升则停止训练,取此时的权重。
划分比例。。。2:1?可能吧。

Weight Decay

权值衰减主要是因为过大的权值往往会导致过拟合,所以Cost Function会增加一项,是所有权重的平方乘上一个常数。所以也可以认为是更新之前先把权值按比例缩小。

Dropout

为了防止过拟合,在训练时随机地使某些连接无效化,也就是一个有n个参数的神经网络其实有2^n个子网络。而每次随机地训练其中一个,既缩减了计算量,又避免了过拟合。
当然也有说一般是对某一层进行Dropout。
这个,坑留着吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值