一:深度学习的概念
深度学习是归属与机器学习的范畴之内,属于表征学习,是借助于深层神经网络的启发的机器学习方式,
神经网络运行机制原理:一个神经网络由非常多个神经元构成,每个神经元只会处理一些简单的运算,并将运算的结果传递至下一个神经元,下一个神经元处理不同的另一个运算,再传递给下一个,最终输出一个结果。神经网络最重要的作用是分类。
二:深度学习的基本模型
卷积神经网络(CNN)和递归神经网络(RNN)。前者主要用于计算机视觉(CV),后者主要用于自然语言处理(NLP)。
1. 卷积神经网络(CNN)convolutionalneural network
CNN的模型通常建立在前馈神经网络模型之上,它的结构你也应该不陌生。不同是的,“隐藏层”将被以下这些层取代:
卷积层(ConvolutionalLayers)
激活函数
池化层(Pooling Layers)
全连接层(稠密层,Dense Layers)
1)卷积层的作用和原理
卷积层的作用是通过一个卷积核提取局部特征,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;
针对一个100*100像素在使用一个滑动窗口(或称过滤器10*10)平滑处理(步幅也是参数之一),将信号的特征值提取出来,并且一般会使用多个不同的窗口进行卷积,输出多个通道(一个窗口对应一个通道)的处理结果,
卷积层还有一个特性就是“权值共享”原则。如下图:
如没有这个原则,则特征图由10个32*32*1的特征图组成,即每个特征图上有1024个神经元,每个神经元对应输入图像上一块5*5*3的区域,即一个神经元和输入图像的这块区域有75个连接,即75个权值参数,则共有75*1024*10=768000个权值参数,这是非常复杂的,因此卷积神经网络引入“权值”共享原则,即一个特征图上每个神经元对应的75个权值参数被每个神经元共享,这样则只需75*10=750个权值参数,而每个特征图的阈值也共享,即需要10个阈值,则总共需要750+10=760个参数。
所谓的权值共享就是说,给一张输入图片,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置就是被同样的filter扫的,所以权重是一样的,也就是共享。
2)池化层的作用和原理
池化层在卷积层之后,是取出每个滑动窗口的最大值/最小值/平均值,把很多数据用最大值或者平均值代替。对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征,还可以增加灵活度,避免过拟合。
例子:举个例子,一个班学生成绩的池化,假如看教室的俯视图,若教室里学生座位是9*9的,那么可以这样池化,从左上角,每3*3区域的学生,选出一个最高分代表整个区域,以此类推,整个教室池化完剩下9个区域的最大值成绩,这就是所谓的“最大值池化”,当然,还有平均值池化,最小值池化。(卷积层每次作用在一个窗口,它对位置很敏感。池化层可以缓解这个问题,池化层会找出窗口中的最大值,至于最大值在窗口中的什么位置,它不管)
同样地采用一个2*2的filter,max pooling是在每一个区域中寻找最大值,这里的stride=2,最终在原特征图中提取主要特征得到右图。
(Avy pooling现在不怎么用了,方法是对每一个2*2的区域元素求和,再除以4,得到主要特征),而一般的filter取2*2,最大取3*3,stride取2,压缩为原来的1/4.
注意:这里的pooling操作是特征图缩小,有可能影响网络的准确度,因此可以通过增加特征图的深度来弥补(这里的深度变为原来的2倍)。
3)全连接层的作用和原理
全连接运算:输入信号经过多次卷积核池化运算后,输出为多组信号,经过全连接运算,将多组信号依次组合为一组信号,将输出值送给分类器(如softmax分类器)。
4)激活函数的作用和原理
convolution layer(卷积层)需要激活函数 pooling layer(池化层)需要激活函数 normalizationlayer(归一化层)不需要激活函数 fully-connected layer(全连接层)需要激活函数 cost layer不需要激活函数
首先,激活函数不是真的要去激活什么。在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。
比如在下面的这个问题中:
如上图(图片来源),在最简单的情况下,数据是线性可分的,只需要一条直线就已经能够对样本进行很好地分类。
但如果情况变得复杂了一点呢?在上图中(图片来源),数据就变成了线性不可分的情况。在这种情况下,简单的一条直线就已经不能够对样本进行很好地分类了。
于是我们尝试引入非线性的因素,对样本进行分类。
在神经网络中也类似,我们需要引入一些非线性的因素,来更好地解决复杂的问题。而激活函数恰好能够帮助我们引入非线性因素,它使得我们的神经网络能够更好地解决较为复杂的问题。
2. 递归神经网络(RNN)
RNN神经网络为什么广泛应用于自然语言处理?因为它是依靠时间序列具有记忆功能的——这一刻的输出,除了考虑这一刻的输入外,还有一部分是来自上一刻的输出记忆。同时这一刻的输出也会有一部分做为“记忆”传给下一刻。LSTM用来解决梯度消失梯度爆炸问题,对于长距离的句子的学习效果不好的问题,里面加了一些参数,加了门单元来选择忘记和记住一些信息。
RNN的原理
上图是RNN神经网络的结构示意图。上左图是简化过程,介绍从上右图说起:
上右图包含t-1、t、t+1三个时刻的输入与输出;
t时刻的输入Xt经权值U、t-1时刻的状态记忆经权值W共同作用构成t时刻的状态St;
t时刻的状态St作为一部分记忆经权值W传入下一时刻,也作为t时刻的输出经权值V作用后输出Ot。
形象的比喻——横向的传播就是游戏的主线,游戏过程中不断有纵向的分线任务X传入,每一个分线任务都对主线任务构成影响且都能生成一个预测结果O,最后一个输出O就是游戏的最终结果;通俗的说就是:这样就成了一个循环神经网络RNN。除了简单的接收一张图片返回一个活动标记之外,RNN会通过给信息分配不同的权重,从而在内部保留了对世界的记忆,以便更好的执行分类任务。
LSTM网络:长短期记忆网络。一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。
LSTM网络在RNN基础上有以下几点优化;
增加遗忘机制。例如当一个场景结束是,模型应该重置场景的相关信息,例如位置、时间等。而一个角色死亡,模型也应该记住这一点。所以,我们希望模型学会一个独立的忘记/记忆机制,当有新的输入时,模型应该知道哪些信息应该丢掉。
增加保存机制。当模型看到一副新图的时候,需要学会其中是否有值得使用和保存的信息。
所以当有一个新的输入时,模型首先忘掉哪些用不上的长期记忆信息,然后学习新输入有什么值得使用的信息,然后存入长期记忆中。
把长期记忆聚焦到工作记忆中。最后,模型需要学会长期记忆的哪些部分立即能派上用场。不要一直使用完整的长期记忆,而要知道哪些部分是重点。
这样就成了一个长短期记忆网络(LSTM)。
RNN会以相当不受控制的方式在每个时间步长内重写自己的记忆。而LSTM则会以非常精确的方式改变记忆,应用专门的学习机制来记住、更新、聚焦于信息。这有助于在更长的时期内跟踪信息。
本文较多来源于量子位公众号文章,仅做学习笔记用。