深度学习Note

记录一下个人看了王小草深度学习笔记之后的理解,


Overview

先来看看人工智能Artificial intelligence,数据挖掘Data Mining,机械学习Machine learning,深度学习Deep learning之间的关系

image

AI Set

image

人工智能知识图谱


1 逻辑回归

首先,将特征输入到一个一元或多元的linear函数z中,

image

Linear

然后将这个线性函数z作为一个输入,输入到sigmoid函数g(z)中,

image

Sigmoid

image

值域

根据图形,可以更清晰地看到,

  • 当z < 0,则g(z) < 0.5
  • 当z > 0,则g(z) > 0.5 因此它可以作为一个二元的分类器,大于0.5的判为正类,小于0.5的判为负类。

2 神经元感知器

之所以在这里提及逻辑回归,因为逻辑回归激活函数sigmoid可以当成神经元中的感知器。下图中,最左侧就是输入z函数的变量(或者叫特征或因子),1为常量bias,x1,x2为两个特征。从这三个变量到z有三条边,分别是权重,也就是逻辑回归z函数里的系数,将变量与对应的系数相乘并线性相加的过程就是线性函数z的求解过程,通过这一步,我们求出了z。从中间的小圆z到右边的小圆a,就是逻辑回归的第二步了,即将z作为输入变量代入g(z)中,求解出g(z)或a。

image

神经元的感知

当添加少量的隐藏层,简单的感知器就变成了一个浅层神经网了(SNN),从上一层到下一层就是一个感知器,

image

浅层神经网络SNN

如果添加更多的隐藏层,就形成了一个深层神经网了(DNN),包含了多个感知器,

image

深层神经网络DNN


3 DNN vs CNN vs RNN

DNN是一个大类,CNN是一个典型的空间上深度的神经网络,RNN是在时间上深度的神经网络。


4 CNN

卷积神经网在神经网络的基础上有所变化。下图中,每一列都表示一个层级,这些层级的类型不同,有INPUT,CONV,RELU,POOL,FC,SOFTMAX。这些层的结构与功能下面会详细说。

4.1 数据输入层 INPUT

输入层我们可以看做是对数据做的预处理,数据的预处理使得输入数据的质量增高,从而也能配合模型做最优的结果。预处理的方式有如下几种:

4.1.1 去均值

去均值就是将输入数据的各个维度都中心化到0。求出原始数据的均值,然后将每个数据减去均值,计算后的新数据均值就变成0了。下图中直观可见,就是将数据的分布平移到以0为中心(每个特征的均值都是0), x_new = x_old - avg(x_old)

image

去均值

4.1.2 归一化

归一化/标准化/正则化是将特征的幅度变换到统一范围(不一定是0-1之间)。通常有min-max标准化Z-score标准化方法。这个在图像识别中不使用,这里只是拿出来说一下,因为图像的RGB本来就是在0-255之间,幅度是一样的,故不需要做调整。由下图是归一化后的数据,

image

归一化

4.1.3 PCA

PCA是主成分分析,一种降维的方法,经常被使用,可以解决共线性(特征之间彼此相关),同时也降低了维度,简化了模型,提高了模型的性价比,

image

PCA

4.1.4 白化

白化其实是指将特征转换成正态分布,

image

白化

4.2 卷积计算层 CONV

首先假设图像上的某个像素点与和它向邻近的点是相似的,也就是对于图像上的某块小区域,区域内的点因为相近,所以相似

基于这个假设,某个神经元就可以只对这一块小区域做连线,但不是对整个小区域做一根连线,而是对整个区域中的每个点做连接。这个小区域会移动的,它从左到右移动,然后向下一行再从左到右移动,将这个图片都遍历一遍,每一次移动都只是对新的小区域内的点做连接

image

CNN1

18+51+121+35+204=429

image

CNN2

在卷积层,假设每个神经元连接数据窗口的权重是一致的的,即权重共享机制。 因为对于每个神经元它们的分工是独立相异的。比如,第一个神经元负责记录图像的颜色特征,第二个神经元负责关注图片的轮廓信息,第三个神经元负责关注图像的纹理特征…也就是说每个神经元只负责关注一个特性。

单个神经元用于提取某一个特征,而单个神经元内权重共享;如果需要提取更多的特征,引入更多的神经元,神经元之间权重不共享,神经元内权重共享。图CNN1和CNN2都只是展示了一个神经元的感知过程,即权重共享。

另外,因为权重共享机制,权重的维度便大大地降低了。一组固定的权重与不同窗口内的数据做内积的过程,就叫做“卷积”。

4.3 激励层

激励层的功能就是把卷基层输出的结果做一个非线性的映射。 非线性的映射就是将线性函数的输出结果作为一个输入变量放进sigmoid函数中,输出的值范围就在[0,1]之间了。 在卷计算机网的激励层,就是将卷积层的输出作为输入变量放进一个函数中,从而做一个非线性的转换。

激励层的函数有多种,

4.3.1 sigmoid

image

sigmoid

4.3.2 tanh

Tanh是与sigmoid类似的,也是呈现一个S型,但中心店为0

image

tanh

4.3.3 RELU

The Rectified Linear Unit/修正线性单元,RELU是卷计神经网络中最常用的激励函数

image

RELU

4.3.4 Leaky RELU

这也是一个由两条射线组成的函数,与RELU不同的是,当x<0时,形成的是一条斜率为a的射线。 这样保证了无论x取什么值,都会求到不等于0的斜率,在SGD反向传播时避免了”饱和”,而且计算得也很快。

image

Leaky RELU

4.3.5 ELU

指数线性单元, 当x > 0 时,仍然与前两个激励函数相同 当x < 0 时,时一条在x轴下方y轴左边的指数函数

image

ELU

4.3.6 Maxout

image

maxout

由函数可见Maxout也是由两条直线拼接起来的,计算是线性的,但是引入了更多的参数。

4.3.7 激励层经验

  • 不要用sigmoid
  • 首先试RELU,因为快
  • 如果RELU失败,使用Leaky RELU或者Maxout
  • 在某些特殊领域下,tanh较好

4.4 池化层 pooling

池化层是夹在连续的卷基层中间的(卷基层中包含了激励层)

池化层的过程非常简单,就是将数据进行压缩,类似输入层的线性输入是权重加和,而这里是只取mask的最大值/均值/最小值,

image

pooling

这个过程叫做downsampling,向下取样。有两个优点,

  • 压缩了数据和参数的量
  • 缓解了过拟合

4.5 全连接层 FC

全连接的方式其实就是深度神经网络中的连接方式。通常全连接层放在卷积神经网络的尾部。

之所以在最后还要使用全连接是为了还原信息。虽然全连接会增加非常多的参数以及计算的复杂度,但是只在最后一层进行全连接还是可以承受的,况且它可以还原更多信息量,总体而言“性价比”比较高。

4.6 输出层

CNN后面接的输出层

  • 分类问题,softmax
  • 回归问题,cross entropy交叉熵

5 循环神经网络

它是一种具有记忆的神经网络,工业界最常见的应用,如机器翻译。另外,一切与序列时间相关的问题都可以用RNN来尝试一下,比如RNN模型能写文章写代码写诗歌写乐谱等等。即上下文context的应用环境。

RNN中引入了记忆的概念。输出依赖于输入上一个时间点的记忆。记忆功能使得前文中的东西仍然对后文产生了影响。

image

RNN1

上图的右边部分:从左到右是时间发展的过程,第一个是t-1的时刻,中间是t时刻,第三个是t+1时刻。St是t时刻的记忆,x是指输入,O是指输出,W是指从上一个时刻t-1到这个时刻t的权重,U是指输入到隐层的权重。

很直观的看到,在t时刻,St被两个箭头所指向,分别是来自于t-1时刻的St-1 * W的影响,和t时刻的输入Xt * U的影响。也就是说,和传统的神经网络相比,RNN多了一份对过去的记忆。

image

RNN2

f可以是tanh等的激励函数,输入激励函数的分别是这个时刻的输入乘以权重,和前一个时刻的记忆乘以权重

5.1 双向RNN

存在这样的情况,当前的输出不仅仅依赖于之前的序列元素,还可能依赖之后的序列元素,比如完形填空题,可能需要去看看下文在讲什么,才能知道前面的空格填什么。此时就需要双向循环神经网络。

image

双向RNN

5.2 深层双向RNN

深层双向RNN和双向RNN的区别是每一步,也就是每一个时间点我们设置了多层结构。

image

深层双向RNN


6 循环神经网络之LSTM

前面RNN中提到了,RNN虽然有记忆,但是随着时间间隔不断增大,RNN会丧失学习到连接如此远的信息的能力。也就是说,记忆容量有限,一本书从头到尾一字不漏去记,肯定离得越远的东西忘得越多。这主要是因为在BPTT后向求导的时候,偏导数会越来越接近于0,从而丧失记忆

LSTM是RNN中的一种类型,大体的结构与RNN是几乎一样的。而区别在于:

  • LSTM的记忆细胞是改造过的
  • LSTM实现了一种功能,就是该记的信息会一直传递下去,不该记的信息会被门gate给截断不往下传

image

LSTM1

image

LSTM cell1

image

LSTM cell2

门类型,

  • 忘记门,决定细胞状态中需要丢弃什么信息,这些信息对之后的计算和预测都是没有用的,所以趁早舍弃掉,不要占用大脑资源也避免了对后续信息的误导
  • 输入门,将一些对后文有用的新的信息添加到细胞状态
  • 输出门,将上面两个门的结果作用合起来

7 权重初始化

神经网络的训练的有两种方式,第一种是自己从头到尾训练一遍;第二种是使用别人训练好的模型,然后根据自己的实际需求做改动与调整。后者我们叫做fine-tuning。在model zoo有大量训练好的模型。

  • 权重的初始值设置得太大或者太小都不适合
  • 于是Xavier在2010年发表论文提出了一种解决办法。z值是由于上级指向它的节点Xi乘以对应的权重的总和。也就是说,影响z值大小的有两个因素:输入层节点的个数,权重值。为了平衡这两个因素,我们认为当输入节点很多的时候,相应的初始权重应当小一点当节点比较的时候,初始权重应当相应增大
  • 但是方差仍然随着神经网络层次的深入变得越来越小,在10层处已经接近于0了,这表示,该层各个神经元的输出值非常相近,出现了梯度弥散。将之前输入节点n的开根号,还成n/2的开根号,表示每一此过激励函数都会被斩掉一半的输出,也就是下层激励函数的输入,既然节点数被斩掉了一半,那么自然权重应该相对应地增加了
  • batch normalization

8 正则化与dropout

8.1 正则化

我们的目的并不是得到一个模型去和训练数据完全拟合,而是需要这个模型能够对所有数据都有一个良好地拟合。 对训练数据过于精确地拟合反而对其他数据就不那么精确了。就像量身定制的衣服只适合于一个人,而通用的S,M,L码对大部分人都是可以适合的

  • L1正则化
  • L2正则化
  • L1+L2
  • 最大范数约束

但其实在神经网络中很少用正则化的方式去避免过拟合,原因如下: 1.神经网络中的权重w非常多,对每个权重都去加上λ|w|,会使计算变复杂。 2.在正则化中产生了一个超参数λ,是需要人为却设定的,它的大小会影响模型的训练。

8.2 dropuut

它的原理是不一次性开启所有学习单元。 如下图,左图中的是全链接的神经网络,会非常精确地去训练与预测,右图却中关闭了一些神经元。也就是说别让你的神经元去记忆所有东东,要有一些泛化能力。也可以理解为,不要让你的神经网络去听信一家之言,对不同的模型做一个融合。(因为每个batch过来关闭掉的节点是不同的)

image

dropout


9 最优化与参数更新

只要学习率很小,就能保证loss一直减小,但是收敛会非常慢

  • 动量更新Momentum update
  • Nesterov Momentum
  • 学习率衰减
    • 步伐衰减
    • 指数衰减
    • 1/t衰减

10 深度学习在IoT大数据和流分析中的应用

image

深度学习模型总结

  • 自动编码器(Autoencoders,AE)
  • 循环神经网络(Recurrent Neural Networks,RNN)
  • 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)
  • 深度信念网络(Deep Belief Network,DBN)
  • 长短时记忆(Long Short Term Memory,LSTM)
  • 卷积神经网络(Convolutional Neural Networks,CNN)
  • 变分自动编码器(Variational Autoencoders,VAE)
  • 生成对抗网络(Generative Adversarial Networks,GAN)
  • 阶梯网络(Ladder Network)

image

深度学习框架总结