了解神经网络:从神经元到RNN,CNN和深度学习
神经网络是目前最流行的机器学习算法之一。随着时间的推移,神经网络在准确性和速度方面优于其他算法,已经得到了明确的证明。随着CNN(卷积神经网络),RNN(循环神经网络),自动编码器,深度学习等各种变体,神经网络正逐渐成为数据科学家或机器学习从业者的统计学家的线性回归。因此,必须对神经网络是什么,如何组成以及它的影响范围和局限有基本的了解。这篇文章试图解释神经网络从其最基本的构建块神经元开始,然后深入研究其最流行的变体,如CNN,RNN等。
什么是神经元?
顾名思义,神经网络的灵感来自人类大脑的神经结构,就像在人类大脑中一样,基本构建块被称为神经元。它的功能类似于人类神经元,即它接收一些输入并触发输出。在纯粹的数学术语中,机器学习世界中的神经元是数学函数的占位符,其唯一的工作是通过在所提供的输入上应用函数来提供输出。
神经元中使用的函数通常被称为激活函数。主要的激活函数,step,sigmoid,tanh和ReLU。以下详细描述这些中的每一个。
激活函数
阶跃函数
阶梯函数定义为
如果x的值大于等于0,则输出为1;如果x的值小于零,则输出为0。可以看出阶跃函数在零时是不可微分的。目前,神经网络使用反向传播方法和梯度下降来计算不同层的权重。由于阶跃函数在零处是不可微分的,因此它不能用梯度下降方法取得进展并且在更新权重的任务中失败。
为了克服这个问题,引入了sigmoid函数而不是step函数。
Sigmoid函数
sigmoid函数或逻辑函数在数学上定义为
当z或自变量趋于负无穷大时,函数的值趋向于零,当z趋于无穷大时,函数的值趋向于1。需要记住,此函数表示因变量行为的近似值,并且是一个假设。现在出现的问题是为什么我们使用sigmoid函数作为近似函数之一。这有一些简单的原因。
1.它捕获数据中的非线性。虽然是近似的形式,但非线性的概念对于精确建模至关重要。
2. sigmoid函数在整个过程中是可微分的,因此可以用于梯度下降和反向传播方法来计算不同层的权重。
3.因变量跟随sigmoid函数的假设本质上是自变量的高斯分布这是很多随机事件的一般分布这是一个很好的通用分布。
然而,sigmoid函数也存在梯度消失的问题。从图中可以看出,sigmoid函数将其输入压缩到非常小的输出范围[0,1]并且具有非常陡峭的梯度。因此,仍然存在大的输入空间区域,即使很大的变化也会在输出中产生非常小的变化。这被称为梯度消失的问题。该问题随着层数的增加而增加,从而在一定程度上阻碍了神经网络的学习。
Tanh函数
tanh(z)函数是sigmoid的新版本,其输出范围是[ - 1,1]而不是[0,1]。
在某些地方使用Tanh函数而不是sigmoid函数的一般原因是因为数据以0为中心,因此导数更高。较高的梯度有助于提高学习率。下面附有两个函数tanh和sigmoid的绘制梯度。
对于tanh函数,对于[-1,1]之间的输入,我们有[0.42,1]之间的导数。
另一方面,对于sigmoid函数,对于[0,1]之间的输入,我们有[0.20,0.25]之间的导数
从上面的图片可以看出,Tanh函数具有比Sigmoid函数更高的导数范围,因此具有更好的学习率。然而,梯度消失的问题仍然存在于Tanh函数中。
ReLU函数
ReLU是深度学习模型中最常用的激活函数。如果它接收到任何负输入,则该函数返回0,但对于任何正值x,它返回该值。因此,它可以写成f(x)= max(0,x)。
图形上看起来像这样
Leaky ReLU是最知名的之一。对于正数,它与ReLU相同。但是对于所有负值而言,它不是0,而是具有恒定的斜率(小于1)。
该斜率是用户在构建模型时设置的参数,通常称为α。例如,如果用户设置α= 0.3,则激活函数为, f(x) = max (0.3*x, x)这具有理论上的优势,即通过受 x所有值的影响,它可以更完整地使用x中包含的信息。
还有其他选择,但是从业者和研究人员通常都发现没有足够的好处来证明使用除ReLU以外的任何其他方法。在一般实践中,ReLU发现其性能优于sigmoid或tanh函数。
神经网络
到目前为止,我们已经涵盖了神经元和激活函数,这些函数一起用于任何神经网络的基本构建块。现在,我们将深入探讨什么是神经网络及其不同类型。如果他们对此有疑问,我会强烈建议人们重新审视神经元和激活函数。
在理解神经网络之前,必须了解神经网络中的层是什么。一层只是一组神经元,它们接收输入并提供输出。通过分配给神经元的激活函数处理对这些神经元中的每一个的输入。例如,这是一个小型神经网络。
网络的最左边的层称为 输入层,最右边的层称为 输出层(在此示例中,只有一个节点)。中间层节点称为 隐藏层,因为在训练集中未观察到其值。我们还说我们的示例神经网络有3个 输入单元(不计算偏差单元),3个 隐藏单元和1个 输出单元 [4]
任何神经网络都至少有1个输入和1个输出层。例如,隐藏层的数量在不同网络之间不同,这取决于要解决的问题的复杂性。
这里要注意的另一个重点是每个隐藏层可以具有不同的激活函数,例如,隐藏层1可以使用sigmoid函数,隐藏层2可以使用ReLU,然后隐藏层3中的Tanh,全部在同一个神经元中网络。使用的激活函数的选择取决于所讨论的问题和所使用的数据类型。
现在,对于神经网络进行准确预测,这些神经元中的每一个都在每一层都学习一定的权重。他们学习权重的算法称为反向传播。
具有多于一个隐藏层的神经网络通常被称为深度神经网络。
卷积神经网络(CNN)
卷积神经网络(CNN)是在计算机视觉领域中大量使用的神经网络的变体之一。它的名称来自它所包含的隐藏层的类型。CNN的隐藏层通常由卷积层,池化层,全连接层和归一化层组成。在这里,它只是意味着不使用上面定义的正常激活函数,而是使用卷积和pooling 函数作为激活函数。
要详细了解它,需要了解卷积和池化是什么。这两个概念都来自计算机视觉领域,并在下面定义。
卷积:卷积对两个信号(1D)或两个图像(2D)进行操作:您可以将一个视为“输入”信号(或图像),将另一个(称为核)视为“过滤器”输入图像,产生输出图像(因此卷积将两个图像作为输入并产生第三个作为输出)。
在外行术语中,它接收输入信号并在其上应用滤波器,实质上将输入信号与核相乘以获得修改的信号。数学上,f和g的卷积定义为
它就是输入函数和核函数的点积。
在图像处理中,可以更容易地将内核可视化为在整个图像上滑动,从而改变进程中每个像素的值。
池化:池化是基于样本的离散化过程。目标是对输入表示(图像,隐藏层输出矩阵等)进行下采样,降低其维数并允许对包含在子区域中的特征进行池化。
池有两种主要类型,通常称为最大和最小池池化。顾名思义,最大池化是基于从所选区域中获取最大值,而最小池化是基于从所选区域中获取最小值。
因此,可以看出,卷积神经网络或CNN基本上是深度神经网络,其由除了用于引入非线性的激活函数之外具有卷积和池化函数的隐藏层组成。
循环神经网络(RNN)
简称为循环神经网络或RNN,是自然语言处理中大量使用的神经网络的一个非常重要的变体。在通用神经网络中,通过多个层处理输入并产生输出,假设两个连续输入彼此独立。
然而,在许多现实生活场景中,这种假设并不正确。例如,如果想要在给定时间预测股票的价格或者想要预测序列中的下一个词,则必须考虑对先前观察的依赖。
RNN被称为 循环,因为它们对序列的每个元素执行相同的任务,输出取决于先前的计算。考虑RNN的另一种方式是它们有一个“记忆”,它可以捕获到目前为止计算的信息。从理论上讲,RNN可以利用任意长序列中的信息,但在实践中,它们仅限于回顾几个步骤。
架构方面,RNN看起来像这样。可以将其想象为多层神经网络,其中每层代表在特定时间t的观察结果。
RNN已经证明在自然语言处理方面取得了巨大的成功,尤其是它们的变体LSTM,它们能够比RNN更长远。
在本文中,我试图从理论的角度涵盖神经网络,从最基本的结构,神经元和覆盖到最流行的神经网络版本开始。这篇文章的目的是让读者了解神经网络是如何从头开始构建的,它使用的所有领域以及最成功的变体是什么。