数据挖掘干货总结(十)-- 神经网络和深度学习

本文共计2584字,预计阅读时长二十分钟

神经网络与深度学习

前言

1. 神经元的构成

数据挖掘干货总结(十)--神经网络和深度学习

2. 树突 神经元接收信号的部位 多个

3. 轴突 神经元输出信号的部位 一个 但是在末端可以分叉 即神经末梢

4. 突触 神经末梢与其他神经元的树突接触的区域 当然也可以与胞体直接接触

5. 神经网络 是指一种结构 指类似于神经元之间形成的一种网络状的结构 下图即为人工神经网络 (Artificial Neural Networks, 简写为 ANNs)

数据挖掘干货总结(十)--神经网络和深度学习

6. 人工智能 机器学习 神经网络 深度学习之间的关系

数据挖掘干货总结(十)--神经网络和深度学习

神经网络和深度学习都属于机器学习的一种

深度学习是神经网络的一大分支

深度学习的基本结构是深度神经网络

7. 深度学习能否取代传统机器学习

有的观点认为 深度学习会导致其他机器学习算法濒临灭绝 因为其有着非常 卓越的预测能力,尤其大规模数据集上。

有的观点认为 传统机器学习算法不会被取代 深度学习容易把简单问题复杂化 深度学习适合不可知域,若有领域知识的话,传统算法表现更好。

下面进入正文内容 》》》》》》》

什么是神经网络

1. 最简单的神经网络 —— 线性感知机

数据挖掘干货总结(十)--神经网络和深度学习

线性感知机的原理是根据输入的一维或多维信号 p, 预设 w b, 经过处理后 (S = p1*w1+p2*w2+...+pn*wn+1*b) 得到一个输出值 再由输出值与实际值计算得到误差 w b 进行更新 直到所有的样本都能被输出正确 但是 感知机仅在线性可分的情况下有效 无法处理非线性问题

2. 遇到了非线性问题

对于非线性问题,之前SVM算法里解决办法是引入了一个新的概念: 核函数 。它可以将样本从原始空间映射到一个更高维的特质空间中,使得样本在这个新的高维空间中可以被线性划分为两类,即在空间内线性划分。(文末有SVM的传送门)

而另一种解决方法便是采用多个感知机,构成 神经网络 (所以传统神经网络也被称为多层感知机)。

3. 神经网络基于感知机的扩展

1) 加入了隐藏层 隐藏层可以有多层 增强了模型的表达能力 如下图实例

数据挖掘干货总结(十)--神经网络和深度学习

2) 输出层的神经元也可以不止一个输出 可以有多个输出 这样模型可以灵活的应用于分类回归 以及其他的机器学习领域比如降维和聚类等 多个神经元输出的输出层对应的一个实例如下图 输出层现在有 4 个神经元了

数据挖掘干货总结(十)--神经网络和深度学习

3) 对激活函数做扩展 感知机的激活函数是 sign(z), 虽然简单但是处理能力有限 因此神经网络中一般使用的其他的激活函数 比如我们在逻辑回归里面使用过的 Sigmoid 函数

如何训练神经网络

1. 寻找特征

人类学习新事物的过程 是对一个物体总结出几个特征 再与以往的认知进行匹配 进一步进行识别或判断 人工神经网络也是类似 一般是综合一些细粒度的基础特征 最终得到几个可用的结构性特征 例如 一个个的像素点对于模型训练来说 意义不大 只有将粒度放大到一定程度 比如轮胎、 车把等特征 才有利于模型的训练

数据挖掘干货总结(十)--神经网络和深度学习

2. 确定神经网络的结构

数据挖掘干货总结(十)--神经网络和深度学习

上图是不同结构的神经网络 多层感知机 可以解决的问题 一般来说 双隐层神经网络能够解决任意复杂的分类问题

3.确定(隐层)的节点数量

以一个三层的神经网络为例 一般有几个经验

1) 隐层节点数量一定要小于 N-1(N 为样本数 )

2) 训练样本数应当是连接权 输入到第一隐层的权值数目 + 第一隐层到第二隐层的权值数目 +... N 隐层到输出层的权值数目 不就是边的数量么 2-10 也有讲 5-10 倍的 ), 另外 最好 将样本进行分组 对模型训练多次 也比一次性全部送入训练强很多

3) 节点数量尽可能少 简单的网络泛化能力往往更强

4) 确定隐层节点的下限和上限 依次遍历 找到收敛速度较快 且性能较高的节点数

4. 训练神经网络

• BP算法

Back Propagation, 也称为 Error Back Propagation( 误差反向传播法 ), 实现步骤见下图(多看几遍就清晰了):

数据挖掘干货总结(十)--神经网络和深度学习

信号正向传播(FP) 样本由输入层传入 经过各个隐层逐层处理后 传向输出层 若输出层的实际输出和期望的输出不符 则转入误差的反向传播阶段

误差反向传播(BP) 将输出以某种形式通过隐层向输入层逐层反传 并将误差分摊给各层的所有单元 从而获得各层单元的误差信号 此误差型号即为修正各个单元权值的依据

BP算法的缺点:

1) 5 层以内的神经网络 可以选择用 BP 算法训练 否则效果不理想 因为深层结构涉及多个非线性处理单元层 属于非凸目标函数 普遍存在局部最小 使得训练困难

2) 梯度越来越稀疏 从顶向下 误差矫正信号越来越小

3) 只能用带标签的数据进行训练,而大部分数据是没有标签的,但是我们大脑是可以从没有标签的数据中学习

引入深度学习

2006 深度神经网络 (DNN) 深度学习 (deep learning) 概念被提出来 神经网络又开始焕发一轮新的生命 事实上 ,Hinton 研究组提出的这个深度网络从结构上讲 与传统的多层 感知机 没有什么不同 并且在做有 监督学习 时算法也是一样的 唯一的不同是 这个网络在做有监督学习前要先做非监督学习 然后将非监督学习学到的 权值 当作有监督学习的初值进行训练

1. 为了解决非监督学习的过程 自动编码器

①自动编码器(Auto Encoder

无标签 用非监督学习方法学习特征

给定一个神经网络 假定输入输出是相同的 然后训练调整其参数 得到每一层的权重

数据挖掘干货总结(十)--神经网络和深度学习

通过编码器产生特征 然后训练下一层 逐层下去

一旦监督训练完成 该网络就可用来做分类

数据挖掘干货总结(十)--神经网络和深度学习

神经网络顶层可以作为一个线性分类器 我们 可以用一个更好性能的分类器替代它

②稀疏自动编码器(Sparse Auto Encoder

目的 限制每次得到的表 code 尽量稀疏 因为稀疏的表达往往比其他表达要有效

做法 AutoEncoder 基础上加了 L1 正则

数据挖掘干货总结(十)--神经网络和深度学习

③降噪自动编码器( Denoising Auto Encoder

训练数据中加入噪声 所以自动编码器会自动学习如何去除噪声 从而获得没有被噪声污染过的输入 泛化能力更好

数据挖掘干货总结(十)--神经网络和深度学习

2. 为了解决 DNN 的全连接 卷积神经网络 CNN

卷积层 (Convolution)

DNN 在处理图片的时候 如果继续沿用全连接的话 数据量会异常的大 例如

对于一个1000 * 1000像素点的图像,用1000 * 1000个神经元去记录数据,采用全连接的话,1000 * 1000 * 1000 * 1000 = 10^12个连接,即要训练 10^12 个参数

如果采用 局部感受野 ,令一个神经元记录10*10的区域,训练的参数可以降到 10^8 个。

数据挖掘干货总结(十)--神经网络和深度学习

进一步采用 权值共享 ,让所有神经元共享一套权重值(滤波器Filters),用这个滤波器在原图上滑动扫描后便会得到一个feature map(图像的一种特征),根据自编码模型,只有一个特征对模型来说,过于简单了,学不出什么规律,因此换用不同的滤波器,便可以得到不同的 feature map(特征),如选用100个滤波器,得到100个feature map,每个map是10*10,最终的参数为100*10*10 = 10^4

数据挖掘干货总结(十)--神经网络和深度学习

滤波器得到feature map的动态图如下:

数据挖掘干货总结(十)--神经网络和深度学习

因为在用滤波器一个步长一个步长往后面扫描的时候,涉及到了一个时序的问题,即 卷积 的过程

数据挖掘干货总结(十)--神经网络和深度学习

因此滤波器在扫描的之前 要先翻转 180°, 这个时候我们称这个滤波器为卷积核 翻转 180° 的具体论证过程见链接

https://blog.csdn.net/zy3381/article/details/44409535

池化层 (Pooling)

作用是在不变性的情况下减少参数 例如平移 旋转 缩放等

数据挖掘干货总结(十)--神经网络和深度学习

数据挖掘干货总结(十)--神经网络和深度学习

典型结构

CNN 一般采用卷积层和池化层交替设置 即一层卷积接一层池化层 池化层后接一层卷积层 最后几层可以采用全连接或高斯连接

数据挖掘干货总结(十)--神经网络和深度学习

训练过程

卷积层

– Map 个数取决于卷积核个数 常用的 6 或者 12

j map 的输出计算 上一层所有 map 跟自己对应的卷积核做卷积然后求和 再加上偏置 sigmoid 函数

数据挖掘干货总结(十)--神经网络和深度学习

采样层

对上一层 map 的相邻小区域进行聚合统计 最值或者均值

数据挖掘干货总结(十)--神经网络和深度学习

任何疑问建议,欢迎留言评论~