神经网络基础篇

1,250 阅读11分钟

人工智能(AI)包含计算机视觉、数据挖掘、自然语言处理、机器学习等,机器学习包含深度学习。

神经网络不应该称为一种算法,应该当作一种特征提取的方法,因为在机器学习和数据挖掘或其他任务中,所有人工智能任务最拼的不是算法,算法起了很大的作用,但更大的作用在数据层面上。

特征就是好食材,什么样的特征,什么样的数据,更合适模型,更适合当前问题,这种通常情况下更重要。

机器学习流程

数据获取->特征工程->建立模型->评估与应用。

特征工程是所有机器学习算法中最核心的,也是最难的部分。

那深度学习和机器学习在处理特征工程上有什么样的区别么?

机器学习做任务的时候,先获取数据,对数据进行处理,处理完之后,人为的去想这一份数据中什么样的特征和数据拿出来合适,特征怎么选择,怎么组合,特征怎么提取信息,把数据做各种各样的变换,能得到更有价值的输入,这就是机器学习任务中经常去考虑的问题。

有没有一种算法,它拿到数据之后,自己会选择一些合适的特征呢?自己去学习下哪些特征好,哪些特征不好,把好的特征哪些组合在一起更合适,哪个特征适合做分解。

答案就是人工智能之深度学习,它解决了机器学习中一个人工问题。

把人工智能分为两个部分,机器学习绝大部分都是偏人工的,因为你要人工的选择数据,人工的提取特征,人工的选择一种算法,在人工的得到一个结果。
给人的感觉就是在做任务的过程中,把数据公式实现出来了而已。而深度学习有一些智能的感觉,可以让这个网络真正的去学习一下什么样的特征是比较合适的,该怎样组合是合适的,这个是深度学习能达到的一个境界,深度学习是机器学习中的一部分,也是最核心的一部分,最大的一点是解决了特征工程的问题。

深度学习的神经网络怎么做到的?

特征工程的作用:

  • 数据特征决定了模型的上限
  • 预处理和特征提取是最核心的
  • 算法与参数选择决定了如何逼近这个上限

特征工程比算法和参数还要核心。

深度学习的神经网络是一个黑盒子,它拿到原始数据之后,会对原始数据做各种各样的变换操作,能够对输入黑盒子里面的数据自动进行特征提取,提取出各种各种的特征,让计算机去认识这些特征,计算机认识的过程就是学习的过程。

深度学习的应用

  • 无人驾驶汽车

90%的情况下是在计算机视觉和自然语言中处理的。

对于传统的数据挖掘任务,可能用到不是特别多,当然这个没有一个限制,创造任务也能用,但更多的是用计算机视觉和自然语言处理。计算机视觉的输入数据是图像数据,自然语言处理输入的数据是文本数据。

  • 人脸检测(深度学习比较核心的应用)

比如机票安检的人脸识别。

抖音给眼睛加特效,首先要识别出你的眼睛,人脸上的一些关键点,在不同点的位置加上一些视觉的变换。

image.png

如果脸移动了,眼睛特效移动的比较慢,就会显的特别卡。深度学习计算量太大了,对移动端支持不是很友好。

逻辑回归或随机深林之类的最多几十个参数,而神经网络是百万千万上亿级别的参数,几亿的参数都是很常见的,它为什么能够自动提取特征,靠的就是庞大的参数,千万级的参数每一次都要调1000万个参数,所以速度就会很慢,所以要用优化算法去优化这个神经学习的网络,使得可以把一些产品移植到移动端。

  • 应用在医学上比如细胞检测

检测一些癌细胞或基因怎么组合等

  • 变脸

对于神经网络来说,变脸操作非常容易,视屏或图片都是由像素点组成的,为什么看起来不一样,就是像素点上的值不同而已。怎么让一个像素点变成另外一个像素点?让神经网络去计算出来就可以了。

  • 3D版本电影

3D版本就是超分辨率的重构,让神经网络自动的做一些上色。

image.png

只要你能想象到的东西,神经网络80%都可以完成的。覆盖了生活的方方面面,但是核心还是在图像和文本中用的比较多。

深度学习和传统的机器学习算法效果比对

image.png

在数据量比较小的时候比如几千数据集,不会用深度学习算法,通常几万几十万几百万的数据集,用深度学习算法。

为了达到大规模数据集的效果,通常通过数据生成的方式。比如有一万的人脸数据生成100万的数据很轻松。

image.png

通过图像翻转(镜面的变换)进行平移,就能得到另外一张图了。

图像分类

图像分类任务属于计算机视觉范畴,深度学习专业用来做计算机视觉的。

假设有一些列标签:猫、狗、飞机、汽车

世界上颜值最高的猫,十大宠物猫颜值排名

怎么才能识别图片中的是猫而不是狗呢?

在计算机眼中,一张图片被表示成三维数组的形式,每个像素的值从0到255,例如300 x 100 x 3

如何识别图像边缘? - 阮一峰的网络日志

图片在计算机中就是一些像素点的矩阵,每个点就代表一个值,值越小就表示颜色越暗,0表示黑色,255表示白色。

300 x 100 x 3,其中的3表示颜色通道:红色、绿色、蓝色。

一张图就是一个三维矩阵或三维数组。

计算机视觉所面临的挑战

  • 光照射角度

  • 形状改变

    image.png

  • 部分遮蔽

    image.png

  • 背景混入

image.png

  • 流动的人群
    电脑上的摄像头拍摄和夜市里流动的人群的拍摄,流动的人群更难识别。

k近邻算法计算流程

  • 计算已知类别数据集中的点和当前点的距离
  • 按照距离依次排序
  • 选取与当前点距离最小的K个点
  • 确定前K个点所在类别的出现频率
  • 返回前K个点出现频率最高的类别作为当前点预测分类

用k近邻做图像分类任务行不行?

数据库样例:CIFAR-10

10个标签、5万个训练数据、1万个测试数据,大小均为32x32

一张图片的像素点是32x32x3=3073个。

图像距离计算公式

image.png

image.png

2张图片,每张图片都是一个像素点矩阵,一张4x4的图片有16个像素点,相同位置上的2个像素点的差值相加。

5万张训练图片,计算测试图片和5万个训练图片的距离,看这个测试图片跟哪个训练图片距离最近,然后从这5万个距离中拿出10个距离最小的训练图片。

image.png

可以发现,有的类别做的好,但大多数类别都做的不好,原因在于k近邻算法不知道图片中哪块是主体哪块是背景,它没有一个学习的过程。

那怎么样让机器学习到一张图片中哪部分是主体哪部分是背景呢?

图片分为前景和后景,前景是主体,后景是需要过滤掉的内容。

image.png

输入数据是一张32x32x3个像素点的图片数据,经过f(x,W)函数,转换成一个类别的得分值。f(x,W) x是图片数据,W是权重参数。

经过该函数就可以得到这张图片属于猫的得分,属于飞机的得分,属于狗的得分...

图片是由3072个像素点(或特征)组成的,图片中的猫上的像素点对结果是促进作用,猫的背景上的像素点对结果是抑制作用。每个像素点(特征)都有一个权重参数,表示对结果的重要程度。有多少个像素点就对应多少个权重参数。

image.png

一张图片的输入数据有3072个像素点(特征),每个像素点有1个权重参数,对应3072个权重参数

image.png

经过f(x,W)计算得到一个分值。

把5个类别都考虑进去,10个类别也类似

image.png

就可以得到每个类别的一个得分值,最终得到一个10x1的结果

b表示偏置项,y=kx+b,b的作用是微调,上下进行浮动。

w权重参数对结果起到决定性的影响

image.png

这里为了简单起见,将一张三维像素点的图片理解为4个像素点

image.png

分别是56,231,24,2,三个分类:猫、狗、船,分别计算3个分类的得分值。

每个类别对应一组权重参数,每组权重有4个值,分别对应4个像素点,上图的权重参数是一个3x4的矩阵。

第一组权重参数0.2,-0.5,0.1,2.0

计算得分值:0.2x56+(-0.5)x231+0.1x24+2.0x2+1.1=-96.8

当前这个权重参数矩阵中有些值比较大,有些值比较小。

比如狗这一类别的权重参数矩阵数值:1.5,1.3,2.1,0.0 其中2.1比较大,对结果的影响比较大,表示第三个像素点比较重要,第四个权重参数0,表示第四个像素点不重要。权重参数正值表示促进作用,负值表示抑制作用。

上图中的权重参数矩阵中的值是随机产生的,得到的结果是把图片上的猫误判成了狗。

输入数据x即像素点(特征值)是经过数据预处理之后的数据,输入到神经网络中之后是不变的,变化的数据是权重参数w。神经网络其实做的事情就是寻找什么样的权重参数更合适当前的数据来做这个任务。在迭代的过程中使用一些优化方法不断的去改进w参数,使得w矩阵越调整越好,这是神经网络整个周期要做的事情。

损失函数

光知道不好,但是有多不好,需要一个数值来衡量。神经网络的损失函数既可以做分类又可以做回归,唯一的区别就是损失函数是怎么定义的,网络结构是不会变的,做不同的任务其实就是不同的损失函数而已

image.png

Sj表示错误类别得分,Syi表示正确的类别得分,错误类别-正确类别就得到了损失,损失值越小越好,越大表示错的越离谱。

1表示正确类别至少比错误类别高1以上才是没有损失的

image.png

第一个类别猫 cat分类值为3.2 是正确的值

第二个分类car是错误的分类值是5.1,5.1-3.2即为损失值

将数据带入损失函数公式,当前这组权重参数计算完之后的结果:

image.png

如果损失函数的值相同,就意味着两个模型一样么?

image.png

两个模型的损失函数是一样的,但观察下权重参数,模型A数据样本中的第一个点,没有关注后面的点。模型B会关注每一个点,每个点的权重都是0.25。模型A只考虑其中一个局部,一定会产生过拟合,模型B考虑全局。

对于数据需要关注的点是权重参数会不会产生变异,会不会产生过拟合。

  • 模型A

image.png

突然有一个点变异了

  • 模型B

image.png

整体比较平稳

正则化惩罚项

image.png

R(W)表示当前这组模型由于权重参数所带来的损失,和数据没有关系,它只考虑权重参数。

R(W)表示W1^2+W2^2+W3^2....

λ表示惩罚系数,值越大表示越不希望过拟合

正则化惩罚项就会变异的抹掉

image.png

神经网络能解决的问题很多,缺点就是过于强大了,过拟合风险越大,希望神经网络再弱一点,别太强了,模型过拟合了就没法用了。