深度学习简介
由clearyf创建,最终由clearyf 被浏览 663 用户
导语
从AlphaGo到AlphaStar,深度学习的强大逐步展现给世人。那么,什么是深度学习呢?本文将简要介绍深度学习的框架以及流程。
从单层感知器开始
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。
如何使用计算机建立人脑的神经网络呢?下面介绍的感知器算法很好的模拟了人脑神经网络中的神经元。
人通过收集触觉、味觉、嗅觉、视觉与听觉来得到对外界事物的认识。计算机将人收集到的这些信息设定为输入(在下图中体现为$x_1、x_2...x_n$),通过某个函数(在下图体现为$\Sigma$)将这些信息综合出来作为输出。 各个感觉在不同时刻人脑中的地位是不一样的。例如,小明在听演唱会,小明妈妈给他打了电话,小明没有听到电话。此时,演唱会的声音显然比电话铃声大,为了体现这个差别,我们在$x_1、x_2...x_n$前面加上对应的权重$w_1、w_2...w_n$。
凡事都有例外:如果小明的手机铃声够给力,他就能接到电话。计算机该如何模拟这个情形呢?此时,我们引入激活函数: 深度学习中感知器可以被看作是一个简单的非线性计算器,计算给定输入的加权平均值,如果该值超过预定阈值则输出结果。
目标:
光有感知器结构框架是不够的,我们需要根据具体的任务来优化感知器中的参数。继续拿小明举例子,首先明确我们的任务是要求小明能够及时接到电话
训练模型:
为了实现小明能够及时接到电话这个目的我们需要训练小明对电话铃声更敏感,通过反复的练习,我们评价小明漏接电话的次数比例,当小明很少漏接电话时我们认为小明完成了这个任务。
与机器学习类似,深度学习也需要对模型进行训练,根据任务目标来最优化模型参数。对于每次输出的结果,定义一个损失函数(用来衡量模型给出的预测与实际情况的差距),从而将模型训练问题转换为一个最优化问题——在一定约束条件下,求使得损失函数最小的模型参数。 比如上图:weight1表示$w_1$(第一个权重),weight2表示$x_2$(第二个权重),training loss表示损失函数的值。模型训练过程可以描述为找到training loss最低点的过程。首先给定一个模型输入参数(也称为模型初始化),假设在图中的★initial weights处,meta-iteration1,2,3所在的三种颜色路径分别表示三种最优化过程。这三条曲线路径表示通过不同的优化算法(也称为优化器)来调节模型参数以实现损失函数最小化的过程。
详解优化器:
一个最常用的最优化算法就是梯度下降法。顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值。
令$\alpha_{1}=(x_1,x_2..x_n)$,梯度$(\frac{\partial{f}}{\partial{x_1}},\frac{\partial{f}} {\partial{x_2}}..\frac{\partial{f}}{\partial{x_n}})$。
对于初始的$\alpha_1$做迭代:$\alpha_{i+1}=\alpha_i+\rho_is^{-k}(-k表示梯度的负方向)$(i=1,2,......)
其中步长$\rho$的选择也很关键,太小会导致收敛速度过慢,太大会导致发散。 [/details]
[details=详解激活函数]
激活函数大部分不像上面提到的sign函数这样简单。当我们需要输出的数据是连续而非离散的时候,sign函数不再适用。
为此,我们介绍一种常用的激活函数——sigmoid函数 sigmoid 函数是最早的常用激活函数,,数学公式和函数曲线如下:$f(x)=\frac{1}{1+e^{-x}} $
激活函数通常有以下五点性质:
1. 非线性:当激活函数是非线性的时候,一个两层的神经网络就可以逼近基本上所 有的函数,但是如果函数是线性的,就不满足这个性质,尤其在多层网络结构中, 使用线性函数和单层神经网络是等价的。
2. 可微性:函数的可微保证了梯度的存在性,训练模型时就可以使用梯度下降算法优化模型参数找到最优解。
3. 单调性::当激活函数是单调的时候,单层网络能够保证是凸函数进而保证优化算法的可行性。
4. f(x)≈x:可以在随机初始化参数时保证神经网络训练的高效。
5. 输出值的范围:当激活函数的输出值是有限的时候,基于梯度下降的优化方法会更加稳定;当输出值是无限的时候,往往需要更小的学习率保证训练效果。
常见神经网络模型
上述讲解了一个单层感知器的基本结构和模型训练的过程,如果将多个单层感知器连接在一起就可以构建出各种复杂的神经网络结构。
如下图所示,列举了经典的神经网络模型结构:
这些模型所用的参数、层数、层间连接方式各不相同,但训练方式通常都是从后向前逐层依次使用优化器更新层内参数以减小损失函数。
接下来我们着重介绍常用的DNN模型与CNN模型。
深度神经网络(DNN)
人脑并不限于处理简单的事情,为了描述更复杂的情况,我们需要引入相对复杂一些的模型——深度神经网络(Deep Neural Network,简称 DNN):三层以上(包括输入和输出层在内)的系统就可以称为“深度”神经网络。
从DNN按不同层的位置划分,DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层,如下图示例,一般来说第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。
层与层之间是全连接的,也就是说,第$i$层的任意一个神经元一定与第$i+1$层的任意一个神经元相连。虽然DNN看起来很复杂,但是从小的局部模型来说,还是和感知机一样,即一个线性关系$z=∑w_ix_i+b$加上一个激活函数$σ(z)$。
在深度神经网络中,梯度下降法常常会遇到梯度消失和膨胀的问题,意味着相较于浅层次神经网络结构深度学习网络需要更大的计算量和精确的计算。以常用的 sigmoid 函数为例,随着层数的增加,数据的曲线随输入变化如图: 我们可以在Bigquant平台中构建DNN模型来预测股市,详情请阅读 用DNN算法实现A股股票选股
卷积神经网络(CNN)
理论上我们可以用常规的神经网络来进行图像分析,但在实际操作中,从计算角度看,使用这种方法的成本非常高。同时,将神经网络用于“图像识别”还可能会导致另一个问题——过度拟合。
在介绍卷积神经网络(CNN)之前,我们先介绍几个概念:
什么是卷积?
从数学角度来说,在泛函分析中,卷积、旋积或摺积(英语:Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f 与g经过翻转和平移的重叠部分的面积。以下图为例:
设: $f(x), g(x)$是R1上的两个可积函数,作积分:$h(x)=\int_{-\infty}^{+\infty}f(\tau)g(x-\tau)d\tau$ $h(x)$即为$f(x), g(x)$的卷积函数(图中红色函数f与蓝色函数g的卷积为绿色线函数)
以二维矩阵为例,卷积的过程可以表现如下:
什么是池化?
一般卷积神经网络在经过卷积后,都会再做一层池化的操作。
卷积和池化从本质上来说,都是针对图像问题的高维度数据进行降维的过程,同时还能规定输出矩阵的size。目前最常用的池化为最大池化,其逻辑在于只取图像一个片块的最大值,放弃其他的信息,如图:
什么是dropout?
dropout 是一种 正则化 的方法,应用在CNN中,主要解决 CNN过拟合 的问题。
模型的参数数量是模型复杂度的一个表征,例如使用一个三次多项式拟合一个线性关系的数据集,拟合的结果就是三次多项式中二次项和三次项的系数可能很小,也就是说三次多项式模型过于复杂了。
同理,神经网络的神经元过多,参数过多,可能会导致训练集过度拟合了,这样的模型泛化能力较弱(在验证集上表现不佳),为此我们想dropout(丢掉/屏蔽)一些神经元参数,以降低模型复杂度改善模型的泛化能力。
什么是CNN?
卷积神经网络(Convolutional Neural Network,简称 CNN)通过局部扫描的过程,逐步一一制成图谱,调整这些图谱的比例,构建可扩缩且稳健的特征,目前在图像识别领域有着非常优异的表现。
与传统神经网络相比,卷积神经网络在处理层与层的连接上,有两点不同:
- 在传统神经网络中,我们将每个输入神经元连接到下一层的每个输出神经元,即全连接的连接每一层;在卷积神经网络中,是通过卷积的计算输出,取每个区域进行处理实现数据降维。
- 在传统神经网络中,通过调整权重,完成由输入到输出的过程;在卷积神经网络 中,是通过改变卷积核,得到输出。
卷积神经网络的流程图
经过卷积和池化处理的数据维数大大降低,就可以通过正常的神经网络的全连接层,到最后的输出层。完整的卷积神经网络流程图,以图像处理为例,如下: 该结构由两个卷积层,两个池化层组成,并最后通过一层全连接的隐含层,到输出层。
在Bigquant平台中可以构建CNN模型预测股票,参考 构建 CNN+LSTM 算法实现A股股票选股
\