机器学习-从神经元到深度学习

简介: 机器学习-从神经元到深度学习

image.png

image.png

神经网络是目前最流行的机器学习算法之一。随着时间的推移,证明了神经网络在精度和速度方面,比其他的算法性能更好。并且形成了很多种类,像CNN(卷积神经网络),RNN,自编码,深度学习等等。神经网络对于数据科学和或者机器学习从业者,就像线性回归对于统计学家一样。因此,对神经网络是什么有一个基本的理解是有必要的,比如,它是怎么构成的,它能处理问题的范围以及它的局限性是什么。这篇文章尝试去介绍神经网络,从一个最基础的构件,即一个神经元,深入到它的各种流行的种类,像CNN,RNN等。

神经元是什么?


正如其名字所表明,神经网络的灵感来源于人类大脑的神经结构,像在一个人类大脑中,最基本的构件就叫做神经元。它的功能和人的神经元很相似,换句话说,它有一些输入,然后给一个输出。在数学上,在机器学习中的神经元就是一个数学函数的占位符,它仅有的工作就是对输入使用一个函数,然后给一个输出。

image.png

这种神经元中使用的函数,在术语上通常叫做激活函数。主要的激活函数有5种,date,step,sigmoid,tanh和ReLU。这些都将在接下来进行详细地描述。

激活函数


阶跃函数


阶跃函数定义为

image.png

其中,如果x的值大于等于零,则输出为1;如果x的值小于零,则输出为0。我们可以看到阶跃函数在零点是不可微的。目前,神经网络采用反向传播法和梯度下降法来计算不同层的权重。由于阶跃函数在零处是不可微的,因此它并不适用于梯度下降法,并且也不能应用在更新权重的任务上。

为了克服这个问题,我们引入了sigmoid函数。

Sigmoid函数


一个Sigmoid函数或者logistic函数的数学定义如下:

image.png

当z或自变量趋于负无穷大时,函数的值趋于零;当z趋于正无穷大时,函数的值趋于1。需要记住的是,该函数表示因变量行为的近似值,并且是一个假设。现在问题来了,为什么我们要用Sigmoid函数作为近似函数之一。这有一些简单的原因。

1. 它在可以捕获数据的非线性。虽然是一个近似的形式,但非线性的概念是模型精确的重要本质。

2. sigmoid函数在整个过程中是可微的,因此可以与梯度下降和反向传播方法一起使用,以计算不同层的权重。

3. 假设一个因变量服从一个sigmoid函数的固有假设的高斯分布的自变量,这是一个一般分布,我们可以获得许多随机发生的事件,这是一个好的的一般分布开始。

然而,sigmoid函数也面临着梯度消失的问题。从图中可以看出,一个sigmoid函数将其输入压缩到一个非常小的输出范围[0,1],并具有非常陡峭的渐变。因此,输入空间中仍然有很大的区域,即使是很大的变化也会在输出中产生很小的变化。这被称为梯度消失问题。这个问题随着层数的增加而增加,从而使神经网络的学习停留在一定的水平上。

Tanh函数


Tanh(z)函数是sigmoid函数的缩放版本,它的输出范围变成了[-1,1],而不是[0,1].

image.png

在某些地方使用Tanh函数代替sigmoid函数的原因,通常是因为当数据分布在0周围时,其导数值更高。一个更高的梯度对于更好的学习速率更有帮助。下图展示了两个函数Tanh和sigmoid的梯度值图像。

对于Tanh函数,当输入在[-1,1]之间时,得到导数值在[0.42,1]之间。

image.png

另一方面,对于sigmoid函数,当输入在[-1,1]之间时,得到导数值在[0.20,0.25]之间。

image.png

正如我们从上图看到的,Tanh函数比Sigmoid函数具有更大范围的导数,因此具有一个更好的学习速率。然而在Tanh函数中,依然会出现梯度消失的问题。

ReLU函数


深度学习模型中,修正线性单元(ReLU)是最常用的激活函数。当函数输入负数时,函数输出0,对于任意正数x,函数输出本身。因此它可以写成f(x)=max(0,x)

其图像看起来如下:

image.png

Leaky ReLU是一个其中最出名的一种变形,对于正数输入,其输出和ReLU一样,但是对于所有负数输出,不再是0,而是具有一个常数斜率(小于1).

这个斜率是在构建模型时,需要使用者设置的参数。它通常被叫做alpha,例如,使用者设置alpha=0.3.这个激活函数则表示为f(x)=max(0.3x,x)。这具有一个理论优点,通过x在所有值处都能有一个影响,使得在x中包含的信息被充分利用。

激活函数还有有其他可以替代的选择,但是对于从业者和研究人员,发现一般情况通过改变使用其他激活函数代替ReLU,并不能带来足够的收益。在平常实践中,ReLU比Sigmoid或者tanh函数表现的更好。

神经网络


到目前为止,我们已经介绍完了神经元和激活函数,它们一起是构建任意神经网络的基本构件。现在,我们更深入的了解什么是神经网络,以及它们不同的种类。我强烈的建议你,如果对于神经元和激活函数有任何的疑惑,回过头去复习一下它们。

在理解一个神经网络之前,有必要去理解神经网络中的Layer(层),一层Layer是一组有输入输出的神经元。每一个神经元的输入通过其所属的激活函数处理,例如,这是一个小型神经网络。

image.png

网络的最左边的layer叫做输入层,最右边的layer叫做输出层(在这个例子中,只有一个节点)。中间的layer叫做隐藏层,因为其值不能在训练集中观察到。我们也可以说,我们的神经网络例子,具有3个输入单元(不包括偏置单元),3个隐藏单元,1个输出单元。

任何神经网络都至少包含1个输入层和1个输出层。隐藏层的数量在不同的网络中不同,取决于待解决问题的复杂度。

另一个需要做笔记的重点是每一个隐藏层可以有一个不同的激活函数,例如,在同一个神经网络中,隐藏层layer1可能使用sigmoid函数,隐藏层layer2可能使用ReLU,后续的隐藏层layer3使用Tanh。激活函数的选择取决于待解决的问题以及使用的数据的类型。

现在对于一个可以做精确预测的神经网络,在其中每一层的每一个神经元都学习到了确定的权值。学习权值的算法叫做反向传播,其中的细节超过了本文的范围。

具有超过一个隐藏层的神经网络通常被叫做深度神经网络。


卷积神经网络(CNN)


卷积神经网络(CNN)是神经网络的一种,在计算机视觉领域应用非常广泛。它的名字来源于组成其隐藏层的种类。CNN的隐藏层通常包含卷积层,池化层,全连接层,以及归一化层。这些层的名字简洁的表明了,使用了卷积和池化函数等作为激活函数,而不是使用之前定义的普通激活函数。

image.png

想要详细的了解CNN,需要先理解什么是卷积和池化。这些概念都来源于计算机视觉领域,定义如下:

  • 卷积:卷积作用在两个信号(1维)或者两张图片(2维)上:你可以认为其中一个作为"输入"信号(或图片),另一个作为一个"滤波器"(也叫作kernel,核),然后生成第三个信号作为输出。
  • 用非专业的表述,就是在输入信号上使用一个滤波器。本质上,使用一个kernel(核)乘以输入信号,得到调整后的输出信号。数学上,两个函数f和g的卷积定义如下:

image.png

这就是输出函数和kernel(核)函数的点乘运算。

在图像处理案例中,可视化一个卷积核在整个图片上滑动是非常简单的,每个像素的值都是在这个过程中改变的。

image.png

池化(pooling):池化是一个基于采样的离散化处理。它的目标是对输入(图片,隐藏层,输出矩阵等)进行下采样,来减小输入的维度,并且包含局部区域的特征。

有两个主要的池化种类,max和min pooling。正如其名字表明的,max pooling是在选择区域选择中最大值,min pooling是在选择区域中选择最小值。

image.png

因此,正如我们所看到的,卷积神经网络CNN是一个基本的深度神经网络,它包含多个隐藏层,除之前介绍的非线性激活函数之外,这些层还使用了卷积和池化函数。

更多详情可以在以下网站找到:

http://colah.github.io/posts/2014-07-Conv-Nets-Modular/

循环神经网络(RNN)


循环神经网络RNN,正如其名,是一个非常重要的神经网络种类,在自然语言处理领域应用非常广泛。在一个普通的神经网络中,一个输入通过很多层的处理后,得到一个输出,假设了两个连续的输入是互相独立不相关的。

然而这个假设在许多生活中的情节并不成立。例如,如果一个人相应预测一个给定时间的股票的价格,或者相应预测一个句子中的下一个单词,考虑与之前观测信息的依赖是有必要的。

RNNs被叫做循环,因为它们对于一个序列中的每一个元素执行相同的任务,它们的输出依赖于之前的计算。另一个理解RNN的角度是,认为它们有"记忆",能够捕捉到到目前为止的计算信息。理论上,RNN能够充分利用任意长序列中的信息,但是实践上,它们被限制在可以回顾仅仅一些步骤。

结构展示,一个RNN如下图所示。它可以想象成一个多层神经网络,每一层代表每一个确定时刻t的观测。

image.png

RNN在自然语言处理上展现了非常巨大的成功,尤其是它们的变种LSTM,它可以比RNN回顾得更多的。如果你对LSTM感兴趣,我建议你参考一下文章:

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

目录
相关文章
|
13天前
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
47 3
|
3天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
15 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
63 2
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
53 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
27天前
|
机器学习/深度学习 自然语言处理 算法
机器学习和深度学习之间的区别
机器学习和深度学习在实际应用中各有优势和局限性。机器学习适用于一些数据量较小、问题相对简单、对模型解释性要求较高的场景;而深度学习则在处理大规模、复杂的数据和任务时表现出色,但需要更多的计算资源和数据,并且模型的解释性较差。在实际应用中,需要根据具体的问题和需求,结合两者的优势,选择合适的方法来解决问题。
53 0
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
浅谈机器学习与深度学习的区别
浅谈机器学习与深度学习的区别
46 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能的未来:从机器学习到深度学习的演进
【10月更文挑战第8天】人工智能的未来:从机器学习到深度学习的演进
57 0
|
6月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
239 14
|
6月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)