神经网络

神经网络概述

有部分内容是转载的,如有侵权,请告知,删除便是,但由于是总结的,所以不一一列出原作者是who

和传统方法相比,深度学习对于数据挖掘好在哪里呢?
深度学习在计算机视觉以及自然语言处理两个领域取得了巨大的成功。
假设有一张图,要做分类,传统方法需要手动提取一些特征,比如纹理啊,颜色啊,或者一些更高级的特征。然后再把这些特征放到像随机森林等分类器,给到一个输出标签,告诉它是哪个类别。而深度学习是输入一张图,经过神经网络,直接输出一个标签。特征提取和分类一步到位,避免了手工提取特征或者人工规则,从原始数据中自动化地去提取特征,是一种端到端(end-to-end)的学习。相较于传统的方法,深度学习能够学习到更高效的特征与模式。

对神经网络有些了解的人可能都知道,神经网络其实就是一个输入X到输出Y的映射函数:f(X)=Y,函数的系数就是我们所要训练的网络参数W,只要函数系数确定下来,对于任何输入xi我们就能得到一个与之对应的输出yi,至于yi是否符合我们预期。
神经网络是当今最为流行的深度学习框架,基本原理就是一种梯度下降机制(一种优化模式)。从x到h到y可以近似看作动物神经,权重则可以看作是神经的粗细程度,或者说是两细胞之间联结的紧密程度。神经网络通过调整内部大量的权重来实现调整内部节点之间相互连接的关系,从而达到模拟动物神经网络来处理信息的目的。
)神经网络——神经网络是深度学习的主干之一。神经网络的目标是找到未知函数的一个近似值。它由相互联系的神经元组成。这些神经元具有权重,并且会根据出错情况,在网络训练期间更新偏置值。激活函数将非线性变换置于线性组合,之后生成输出。被激活的神经元组合再产生输出。
“神经网络由许多相互关联的概念化的人造神经元组成,这些人造神经元之间可以互相传递数据,并且具有根据网络‘经验’调整的相关权重。
神经元具有激活阈值,如果结合相关权重组合并激活传递给他们的数据,神经元的激活阈值就会被解除,激活的神经元的组合就会开始‘学习’。”

神经网络术语和概念

神经元
正如神经元是大脑的基本单位一样,在神经网络结构中,神经元也是一个小单位。大家不妨想象一下当我们接触到新的信息时,大脑是如何运作的。
首先,我们会在脑中处理这个信息,然后产生输出信息。在神经网络中也是如此,神经元接收到一个输入信息,然后对它进行加工处理,然后产生输出信息,传输到其他神经元中进行进一步信息处理。
神经元是神经网络的基本单位。它获得一定数量的输入和一个偏置值。当信号(值)到达时会乘以一个权值。如果神经元有4个输入,那么就有4个权值,权重可以在训练时调整。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

权重
权重表示单元之间连接的强度。如果从节点1到节点2的权重比较大,意味着神经元1对神经元2的影响比较大。权重降低了输入值的重要性。当权重接近零时意味着更改此输入将不会更改输出。负权重意味着增加此输入会降低输出。权重决定了输入对输出的影响程度。当输入信息到达神经元时,它就会乘上一个权重。举例来说,如果一个神经元包含两个输入信息,那么每个输入信息都被赋予它的关联权重。我们随机初始化权重,并在模型训练过程中更新这些权重。接受训练后的神经网络会赋予它认为重要的输入信息更高的权重值,而那些不重要的输入信息权重值则会相对较小。权重值为零就意味着这个特征是无关紧要的。我们不妨假设输入信息为x,其关联权重为w,通过节点后,输入信息变为y。
在这里插入图片描述

偏置
除了权重之外,输入还有另一个线性分量,被称为偏置。输入信息乘上权重后再加上偏置,用来改变权重乘输入的范围。加上偏置之后,结果就变为out,这就是输入信息变换的最终线性分量。

连接
将一个神经元连接到另一层或同一层的另一个神经元。连接伴随着与之相关联的权值。训练的目标是更新此权值以减少损失(即错误)。
在这里插入图片描述

输入层 
神经网络中的第一层。它需要输入信号(值)并将它们传递到下一层。它不对输入信号(值)做任何操作,并且没有关联的权重和偏置值。在我们的网络中,我们有4个输入信号x1,x2,x3,x4。
Input Shape :它是我们传递给输入层的输入矩阵形状。我们网络的输入层有4个神经元,它期望1个样本的4个值。如果我们一次只提供一个样本,我们网络的期望输入形状是(1,4,1)。如果我们提供100个样品,则输入形状将为(100,4,1)。不同的库期望形状的格式是不同的
隐藏层
隐藏层具有对输入数据应用不同变换的神经元(节点)。一个隐藏层是垂直排列的神经元的集合(Representation)。在我们给出的图像中有5个隐藏层。在我们的网络中,第一隐层有4个神经元(节点),第2层有5个神经元,第3层有6个神经元,第4层有4个,第5层有3个神经元。最后一个隐藏层将值传递给输出层。隐藏层中的每个神经元都与下一层的每一个神经元有连接,因此我们有一个完全连接的隐藏层。
输出层 
是网络的最后一层,它接收来自最后一个隐藏层的输入。通过这个层,我们可以知道期望的值和期望的范围。在这个网络中,输出层有3个神经元,输出y1,y2,y3。
在这里插入图片描述

前向传播
前向传播的过程是向神经网络馈送输入值并得到我们称为预测值的输出。当我们将输入值提供给神经网络的第一层时,它没有进行任何操作。第二层从第一层获取值并进行乘法,加法和激活操作,然后将得到的值传递给下一层。在后面的层中执行相同的操作,最后我们在最后一层得到一个输出值。前向传播包含之前的卷积,Relu激活函数,池化(pool),全连接(fc),可以说,在损失函数之前操作都属于前向传播。
在这里插入图片描述

反向传播
前向传播后,我们得到一个被称为预测值的输出值。为了计算误差,我们将预测值与实际输出值进行比较。我们使用损失函数(下面会提到)来计算误差值。然后我们计算神经网络中每一个误差值的导数和每一个权重。反向传播使用微分学的链式法则。在链条法则中,首先我们计算对应最后一层权值的误差值的导数。我们称这些导数为:梯度,然后使用这些梯度值来计算倒数第二层的梯度。重复此过程,直到我们得到神经网络中每个权重的梯度。然后从权值中减去该梯度值,以减少误差值。这样,我们就更接近(下降)局部最小值(也就是说最小的损失)。
求导是肯定的,反向传播的目的就是通过更新神经网络的参数也就是每一层的权值、阈值来对损失函数进行最小化。主要方法求出损失函数对参数的梯度,只不过直接用损失函数求出参数的梯度非常困难,我们选择一层一层求损失函数对参数的梯度,更新完这一层的参数再往后传播。tensorflow中定义完损失函数,选择例如Adam,RMS等优化器来对损失函数进行minimize的优化,也就是对应神经网络的参数进行更新,其中误差反向传播的的时候的求导过程是自动的。这也是为什么选择用tensorflow来作为框架的重要原因,就是因为其省去了我们手动编写求导过程的麻烦。
在这里插入图片描述
求导过程参考该篇文章6到飞起

学习率
当我们训练神经网络时,我们通常使用梯度下降法来优化权重。在每次迭代中,我们都使用反向传播来计算每个权重的损失函数的导数,并从这个权重中减去它。学习率决定了你想要更新权重(参数)值的速度。学习率不能太低导致收敛的速度缓慢,也不能太高导致找不到局部最小值。
在这里插入图片描述

损失函数/代价函数
损失函数计算单个训练示例的误差。代价函数是整个训练集的损失函数的平均值。
mse:均方误差。
binary_crossentropy:用于二进制对数损失(logloss)。
categorical_crossentropy:用于多类的对数损失(logloss)。
以传统的均方差函数为例,其中,z是每一次迭代的预测输出,y是样本标签数据。我们使用所有样本参与计算,因此损失函数实际为,
其中的分母中有个2,实际上是想在求导数时把这个2约掉,没有什么原则上的区别。
为什么使用所有样本参与计算呢?因为单个样本或少量样本的损失并不能代表广大人民群众的利益。一条直线可能正好穿过一个点,那么对于这个点来说,它的误差为0,但对于其它样本来说,误差就可能很大。
在这里插入图片描述

收敛
收敛是指迭代进行时输出越来越接近特定值。
正则化 
用于克服过拟合问题。在正则化中,我们通过在权重向量w(它是给定算法中的学习参数的向量)中添加L1(LASSO)或L2(Ridge)范数来惩罚我们的损失项。
L(损失函数)+ λN(w) – 这里λ是你的正则项,N(w)是L1或L2范数
归一化
数据归一化是将一个或多个属性重新调整到0到1的范围的过程。当你不知道数据的分布或者当你知道分布不是高斯函数(钟形曲线)时,归一化是一种很好的解决方法。它有助于加速学习过程。

全连接层 
当一层中的所有节点的激活进入下一层中的每个节点时。当第L层中的所有节点连接到第(L + 1)层中的所有节点时,我们将这些层称为完全连接的层。全连接层之前的作用是提取特征,全理解层的作用是分类。卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。因为用到了所有的局部特征,所以叫全连接。
例子:我们现在的任务是去区别一图片是不是猫,假设这个神经网络模型已经训练完了,全连接层已经知道下图
在这里插入图片描述
当我们得到以上特征,我就可以判断这个东东是猫了。因为全连接层的作用主要就是实现分类(Classification),从下图,我们可以看出:红色的神经元表示这个特征被找到了(激活了)
同一层的其他神经元,要么猫的特征不明显,要么没找到
当我们把这些找到的特征组合在一起,发现最符合要求的是猫
ok,我认为这是猫了在这里插入图片描述
那我们现在往前走一层:那们现在要对子特征分类,也就是对猫头,猫尾巴,猫腿等进行分类。比如我们现在要把猫头找出来:
里插入图片描述
在这猫头有这么些个特征,于是我们下一步的任务,就是把猫头的这么些子特征找到,比如眼睛啊,耳朵啊
在这里插入图片描述
道理和区别猫一样当我们找到这些特征,神经元就被激活了(上图红色圆圈)
这细节特征又是怎么来的?就是从前面的卷积层,下采样层来的
至此,关于全连接层的信息就简单介绍完了

神经网络中优化器的作用
神经网络的学习的目的就是寻找合适的参数,使得损失函数的值尽可能小。解决这个问题的过程为称为最优化。解决这个问题使用的算法叫做优化器。一句话,用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数E(x)这种算法使用各参数的梯度值来最小化或最大化损失函数E(x)。最常用的一阶优化算法是梯度下降。
优化器分类

  1. SGD
    在前面我们实现的神经网络中所使用的优化方法是随机梯度下降法(Stachastic gradient desent 简称 SGD)。SGD 的想法就是沿着梯度的方向前进一定距离。用数学的语言来描述的话可以写成下式
    在这里插入图片描述
  2. Momentum 这种方法主要是为了解决第一种情况,当函数呈延伸状的情况下,梯度指向了谷底,而不是直接指向了最低点,函数值在学习过程中会来回震荡,但是向最低点移动的却很小。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200326202351394.png?x-oss-process=imagwatermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1bnhpdTk4ODYyMg==,size_16,color_FFFFFF,t_70)3. AdaGrad
  3. AdaGrad这种方法主要是为了解决 SGD 遇到鞍点或者极小值点后学习变慢的问题
  4. Adam Adam 直观的来讲就是融合了 Momentum 和 AdaGrad 方法

该文章有优化器的分类及其实现原理的详细介绍以及代码实现https://www.jianshu.com/p/b88105bb404a

卷积神经网络在自然语言处理的应用

如何应用
当我们听到卷积神经网络(CNNs)时,往往会联想到计算机视觉。CNNs在图像分类领域做出了巨大贡献,也是当今绝大多数计算机视觉系统的核心技术,从Facebook的图像自动标签到自动驾驶汽车都在使用。最近我们开始在自然语言处理(NLP)领域应用CNNs,并取得了一些引人注目的成果。
NLP任务的输入不再是像素点了,大多数情况下是以矩阵表示的句子或者文档。矩阵的每一行对应于一个分词元素,一般是一个单词,也可以是一个字符。也就是说每一行是表示一个单词的向量。通常,这些向量都是word embeddings(一种底维度表示)的形式,如word2vec和GloVe,但是也可以用one-hot向量的形式,也即根据词在词表中的索引。若是用100维的词向量表示一句10个单词的句子,我们将得到一个10x100维的矩阵作为输入。这个矩阵相当于是一幅“图像”。
在计算机视觉的例子里,我们的滤波器每次只对图像的一小块区域运算,但在处理自然语言时滤波器通常覆盖上下几行(几个词)。因此,滤波器的宽度也就和输入矩阵的宽度相等了。尽管高度,或者区域大小可以随意调整,但一般滑动窗口的覆盖范围是2~5行。综上所述,处理自然语言的卷积神经网络结构是这样的, 用于句子分类器的卷积神经网络(CNN)结构示意图。这里我们对滤波器设置了三种尺寸:2、3和4行,每种尺寸各有两种滤波器。每个滤波器对句子矩阵做卷积运算,得到(不同程度的)特征字典。然后对每个特征字典做最大值池化,也就是只记录每个特征字典的最大值。这样,就由六个字典生成了一串单变量特征向量(univariate feature vector),然后这六个特征拼接形成一个特征向量,传给网络的倒数第二层。最后的softmax层以这个特征向量作为输入,用其来对句子做分类;我们假设这里是二分类问题,因此得到两个可能的输出状态。
应用实例 最适合CNNs的莫过于分类任务,如语义分析、垃圾邮件检测和话题分类
在不同的分类数据集上评估CNN模型,主要是基于语义分析和话题分类任务。

机器学习框架
机器学习框架意味着一个能够整合包括机器学习算法在内的所有机器学习的系统或方法,使用户最有效的使用它们。具体来讲,这包括数据表示与处理的方法表示和建立预测模型的方法、评价和使用建模结果的方法
在所有可用的机器学习框架中,着重于迭代算法和交互处理的框架被公认为是最好的,因为这些特性可以促进复杂预测模型估计和研究人员与数据间的良好交互。当下,优秀的机器学习框架依旧需要包含大数据功能、大量快速处理能力,以及容错能力。优秀的机器学习框架通常包括大量的机器学习算法和可用的统计检验。TensorFlow就是为了快而设计的,所以它针对你实际使用的硬件和平台做了优化。其中在机器学习框架方面,TensorFlow的真正独特之处在于,能够在5行或者10行代码中构建模型。然后应用这个模型,进行扩展做出产品。
TensorFlow能够在大型神经网络中表现地如此高效的原因是,它能把你写的代码转换成操作图。而真正运行的正是这种图。顺便提一下,在这些操作之间运行的数据叫做张量(Tensor)。这也是名字的来源。因为你的模型以图的形式展现出来,你可以推迟或者删除不必要的操作。甚至重用部分结果。你还可以很轻松地实现的一个过程叫做反向传播。如果你还记得的话,当我们基于所见的样本以及计算的误差,来更新模型中的连接强度。这整个过程就是反向传播。
因为模型表现为操作图而不是代码,因此你不需要为此写额外的代码。只需直接自动地计算以及应用这些迭代更新。模型表现为图的另一个好处就是,在你的代码中,你可以用一行声明就表明:“我想这部分图在这里运行,我想另一部分图分布式运行在不同的机器群上”。
在这里插入图片描述

TensorFlow是什么
本质上,TensorFlow是一个用于处理复杂数学问题的低级工具包,TensorFlow能够让你直接解决各种机器学习任务。目标就是在一般情况下,无论你遇到什么问题,TensorFlow都可以在一定程度上提供API的支持 。它可以被认为是一个编程系统,在这个系统中,你将计算表示为图形。图中的节点表示数学运算,边缘表示它们之间通信的多维数据数组(张量)。TensorFlow** 是一个用于数值计算的Python 库, 可以描述一幅数据计算的数据流图(data flow graph)。TensorFlow 程序分为计算图构建和执行两个步骤;
计算图构建:除了起始和终止层外,每个操作的输入都是其它操作输出,操作的输出也是其它操作的输入。计算图构建就是将数据计算内容和过程用一个数据流图表示出来。
计算图执行:计算图构建之后,需要创建一个会话,然后才能启动图;当会话没有参数时,会 启动默认图。
谷歌大神带你十分钟看懂TensorFlow

关于张量 张量是一种高维数组,用于计算机编程,以数字的形式表示大量的数据。在互联网上还有其他n - d数组库,就像Numpy一样,但TensorFlow是独立的,因为它提供了创建张量函数并自动计算导数的方法。
关于tensor和tensorflow是什么

深度学习和机器学习的区别
深度/机器学习: 深度学习只是机器学习的分支,是以神经网络基础的表示学习方法,其思路就是机器学习的传统思路。现在,深度学习活跃于计算机视觉、语音识别、自然语言处理等领域而传统的机器学习算法如svm之类的更多使用在数据挖掘等领域。
深度/机器学习框架: 机器学习框架一般指传统机器学习算法的封装框架如scikit-learn,而深度学习框架最大的区别是支持自动求导和GPU加速的位神经网络构建服务的框架如TensorFlow和pytorch。
两者应用区别
1、机器学习处理小数据更有优势:为了实现高性能,深层网络需要非常大的数据集。
2、机器学习的投入成本和计算很便宜:深度网络需要高端GPU在大量数据的合理时间内进行训练。这些GPU非常昂贵,但是如果没有他们训练深层网络来实现高性能,这在实际上并不可行
3、机器学习原理更好理解:由于传统ML(机器学习)中涉及直接特征工程,这些算法很容易解释和理解。此外,调整超参数并更改模型设计更加简单,因为我们对数据和底层算法都有了更全面的了解。另一方面,深层网络是“黑匣子”型,即使现在研究人员也不能完全了解深层网络的“内部”。由于缺乏理论基础、超参数和网络设计也是一个相当大的挑战

特征工程
其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用
在这里插入图片描述
引用自https://www.jianshu.com/p/7066558bd386

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值