Understanding Neural Networks. From neuron to RNN, CNN, and Deep Learning
作者 | vibhor nigam
翻译 | gezp123、Dylan的琴

校正 | 邓普斯•杰弗 审核 | 酱番梨 整理 | 立鱼王
原文链接:
https://towardsdatascience.com/understanding-neural-networks-from-neuron-to-rnn-cnn-and-deep-learning-cd88e90e0a90
神经网络是目前最盛行的机器学习算法之一。随着韶光的推移,证明了神经网络在精度和速率方面,比其他的算法性能更好。并且形成了很多种类,像CNN(卷积神经网络),RNN,自编码,深度学习等等。神经网络对付数据科学和或者机器学习从业者,就像线性回归对付统计学家一样。因此,对神经网络是什么有一个基本的理解是有必要的,比如,它是怎么构成的,它能处理问题的范围以及它的局限性是什么。这篇文章考试测验去先容神经网络,从一个最根本的构件,即一个神经元,深入到它的各种盛行的种类,像CNN,RNN等。
神经元是什么?
正如其名字所表明,神经网络的灵感来源于人类大脑的神经构造,像在一个人类大脑中,最基本的构件就叫做神经元。它的功能和人的神经元很相似,换句话说,它有一些输入,然后给一个输出。在数学上,在机器学习中的神经元便是一个数学函数的占位符,它仅有的事情便是对输入利用一个函数,然后给一个输出。
这种神经元中利用的函数,在术语上常日叫做激活函数。紧张的激活函数有5种,date,step,sigmoid,tanh和ReLU。这些都将在接下来进行详细地描述。
激活函数
阶跃函数
阶跃函数定义为
个中,如果x的值大于即是零,则输出为1;如果x的值小于零,则输出为0。我们可以看到阶跃函数在零点是不可微的。目前,神经网络采取反向传播法和梯度低落法来打算不同层的权重。由于阶跃函数在零处是不可微的,因此它并不适用于梯度低落法,并且也不能运用在更新权重的任务上。
为了战胜这个问题,我们引入了sigmoid函数。
Sigmoid函数
一个Sigmoid函数或者logistic函数的数学定义如下:
当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函数,当输入在[-1,1]之间时,得到导数值在[0.20,0.25]之间。
正如我们从上图看到的,Tanh函数比Sigmoid函数具有更大范围的导数,因此具有一个更好的学习速率。然而在Tanh函数中,依然会涌现梯度消逝的问题。
ReLU函数
在深度学习模型中,改动线性单元(ReLU)是最常用的激活函数。当函数输入负数时,函数输出0,对付任意正数x,函数输出本身。因此它可以写成f(x)=max(0,x)
其图像看起来如下:
Leaky ReLU是一个个中最出名的一种变形,对付正数输入,其输出和ReLU一样,但是对付所有负数输出,不再是0,而是具有一个常数斜率(小于1).
这个斜率是在构建模型时,须要利用者设置的参数。它常日被叫做alpha,例如,利用者设置alpha=0.3.这个激活函数则表示为f(x)=max(0.3x,x)。这具有一个理论优点,通过x在所有值处都能有一个影响,使得在x中包含的信息被充分利用。
激活函数还有有其他可以替代的选择,但是对付从业者和研究职员,创造一样平常情形通过改变利用其他激活函数代替ReLU,并不能带来足够的收益。在平常实践中,ReLU比Sigmoid或者tanh函数表现的更好。
神经网络
到目前为止,我们已经先容完了神经元和激活函数,它们一起是构建任意神经网络的基本构件。现在,我们更深入的理解什么是神经网络,以及它们不同的种类。我强烈的建议你,如果对付神经元和激活函数有任何的迷惑,回过分去复习一下它们。
在理解一个神经网络之前,有必要去理解神经网络中的Layer(层),一层Layer是一组有输入输出的神经元。每一个神经元的输入通过其所属的激活函数处理,例如,这是一个小型神经网络。
网络的最左边的layer叫做输入层,最右边的layer叫做输出层(在这个例子中,只有一个节点)。中间的layer叫做隐蔽层,由于其值不能在演习集中不雅观察到。我们也可以说,我们的神经网络例子,具有3个输入单元(不包括偏置单元),3个隐蔽单元,1个输出单元。
任何神经网络都至少包含1个输入层和1个输出层。隐蔽层的数量在不同的网络中不同,取决于待办理问题的繁芜度。
另一个须要做条记的重点是每一个隐蔽层可以有一个不同的激活函数,例如,在同一个神经网络中,隐蔽层layer1可能利用sigmoid函数,隐蔽层layer2可能利用ReLU,后续的隐蔽层layer3利用Tanh。激活函数的选择取决于待办理的问题以及利用的数据的类型。
现在对付一个可以做精确预测的神经网络,在个中每一层的每一个神经元都学习到了确定的权值。学习权值的算法叫做反向传播,个中的细节超过了本文的范围。
具有超过一个隐蔽层的神经网络常日被叫做深度神经网络。
卷积神经网络(CNN)
卷积神经网络(CNN)是神经网络的一种,在打算机视觉领域运用非常广泛。它的名字来源于组成其隐蔽层的种类。CNN的隐蔽层常日包含卷积层,池化层,全连接层,以及归一化层。这些层的名字简洁的表明了,利用了卷积和池化函数等作为激活函数,而不是利用之前定义的普通激活函数。
想要详细的理解CNN,须要先理解什么是卷积和池化。这些观点都来源于打算机视觉领域,定义如下:
卷积:卷积浸染在两个旗子暗记(1维)或者两张图片(2维)上:你可以认为个中一个作为\公众输入\公众旗子暗记(或图片),另一个作为一个\"大众滤波器\"大众(也叫作kernel,核),然后天生第三个旗子暗记作为输出。
用非专业的表述,便是在输入旗子暗记上利用一个滤波器。实质上,利用一个kernel(核)乘以输入旗子暗记,得到调度后的输出旗子暗记。数学上,两个函数f和g的卷积定义如下:
这便是输出函数和kernel(核)函数的点乘运算。
在图像处理案例中,可视化一个卷积核在全体图片上滑动是非常大略的,每个像素的值都是在这个过程中改变的。
池化(pooling):池化是一个基于采样的离散化处理。它的目标是对输入(图片,隐蔽层,输出矩阵等)进行下采样,来减小输入的维度,并且包含局部区域的特色。
有两个紧张的池化种类,max和min pooling。正如其名字表明的,max pooling是在选择区域选择中最大值,min pooling是在选择区域中选择最小值。
因此,正如我们所看到的,卷积神经网络CNN是一个基本的深度神经网络,它包含多个隐蔽层,除之前先容的非线性激活函数之外,这些层还利用了卷积和池化函数。
更多详情可以在以下网站找到:
http://colah.github.io/posts/2014-07-Conv-Nets-Modular/
循环神经网络(RNN)
循环神经网络RNN,正如其名,是一个非常主要的神经网络种类,在自然措辞处理领域运用非常广泛。在一个普通的神经网络中,一个输入通过很多层的处理后,得到一个输出,假设了两个连续的输入是相互独立不干系的。
然而这个假设在许多生活中的情节并不成立。例如,如果一个人相应预测一个给定时间的股票的价格,或者相应预测一个句子中的下一个单词,考虑与之前不雅观测信息的依赖是有必要的。
RNNs被叫做循环,由于它们对付一个序列中的每一个元素实行相同的任务,它们的输出依赖于之前的打算。另一个理解RNN的角度是,认为它们有\"大众影象\"大众,能够捕捉到到目前为止的打算信息。理论上,RNN能够充分利用任意长序列中的信息,但是实践上,它们被限定在可以回顾仅仅一些步骤。
构造展示,一个RNN如下图所示。它可以想象成一个多层神经网络,每一层代表每一个确定时候t的不雅观测。
RNN在自然措辞处理上展现了非常巨大的成功,尤其是它们的变种LSTM,它可以比RNN回顾得更多的。如果你对LSTM感兴趣,我建议你参考一下文章:
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
在这篇文章中,我考试测验去全面的先容神经网络,从最基本的构造,一个神经元,到最有效的神经网络类型。这篇文章的目标是使更多的的读者理解神经网络如何从0开始构建,它被运用在哪一些领域,以及它的一些最成功的种类有哪些。
我明白有还有很多其他盛行的神经网络种类,将打算不才一篇文章中涉及,如果你想要早一点覆盖到某些主题,请向我建议。雷锋网雷锋网雷锋网
参考:
http://ufldl.stanford.edu/wiki/index.php/Neural_Networks
https://stats.stackexchange.com/questions/101560/tanh-activation-function-vs-sigmoid-activation-function
https://www.kaggle.com/dansbecker/rectified-linear-units-relu-in-deep-learning
http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/
https://www.cs.cornell.edu/courses/cs1114/2013sp/sections/S06_convolution.pdf
http://machinelearninguru.com/computer_vision/basics/convolution/image_convolution_1.html
http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
想要连续查看该篇文章干系链接和参考文献?
点击【理解神经网络:从神经元到RNN、CNN、深度学习】即可访问:
https://ai.yanxishe.com/page/TextTranslation/1580
AI入门、大数据、机器学习免费教程
35本天下顶级原来教程限时开放,这类书单由有名数据科学网站 KDnuggets 的副主编,同时也是资深的数据科学家、深度学习技能爱好者的Matthew Mayo推举,他在机器学习和数据科学领域具有丰富的科研和从业履历。
点击链接即可获取:https://ai.yanxishe.com/page/resourceDetail/417